@if (!$showCart) @if($restaurant)
@livewire('components.ad-slider', ['position' => 'menu_browse', 'restaurantId' => $restaurant->id])
@endif
@if($headerType === 'text')

{{ $headerText }}

@elseif($headerType === 'image' && count($headerImages) > 0) @else

@lang('messages.frontHeroHeading')

@endif
@if($order && $hasCurrentOrder)

Your Previous Order

{{ $order->show_formatted_order_number }} • {{ $order->items->count() }} items

@foreach($order->items as $item)
{{ $item->menuItem->item_name }}

{{ $item->menuItem->item_name }}

×{{ $item->quantity }} @if(isset($item->menuItemVariation) && $item->menuItemVariation->variation) {{ $item->menuItemVariation->variation }} @endif
@if($item->modifierOptions->isNotEmpty())
@foreach($item->modifierOptions as $modifier) {{ $modifier->name }} @endforeach
@endif
{{ currency_format($item->price + $item->modifierOptions->sum('price'), $restaurant->currency_id) }}
@endforeach
Order Total {{ currency_format($order->total, $restaurant->currency_id) }}
@endif @endif @if (!$showCart) @if($restaurant)
@livewire('components.ad-popup', ['position' => 'menu_browse', 'restaurantId' => $restaurant->id, 'delay' => 10000])
@endif @endif @if (!$showCart)
@if (count($menuList) > 8)
@endif
@lang('app.filters')
@if ($restaurant?->show_veg || $restaurant?->show_halal)
@if ($restaurant?->show_veg) @endif @if ($restaurant?->show_halal) @endif
@endif
@endif @if ($showMenu) @if($restaurant)
@livewire('components.ad-popup', ['position' => 'menu_browse', 'restaurantId' => $restaurant->id, 'delay' => 10000])
@endif
Refreshing...
@for ($i = 0; $i < 3; $i++)
@for ($j = 0; $j < 6; $j++)
@endfor
@endfor
@forelse ($menuItems as $key => $itemCat) @php // Get category ID from first item in the category $categoryId = $itemCat->first()?->item_category_id ?? null; // Create a safe ID attribute - use category ID if available, otherwise create slug from category name if ($categoryId) { $categoryIdAttr = $categoryId; } else { // Create slug from category name for uncategorized items $categoryIdAttr = 'category-' . \Illuminate\Support\Str::slug($key); } @endphp

{{ $key }} {{ $itemCat->count() }} @lang('modules.menu.item')

@foreach ($itemCat as $item) @php // First 9 items (3x3 grid above fold) get high priority, rest lazy load $isAboveFold = $loop->first && $loop->index < 9; $fetchPriority = $isAboveFold ? 'high' : 'auto'; $loading = $isAboveFold ? 'eager' : 'lazy'; @endphp
!$item->in_stock, 'hover:shadow-xl hover:border-skin-base/30 hover:-translate-y-1' => $item->in_stock, ]) wire:key='menu-item-{{ $item->id . microtime() }}' x-data="{ openDetail() { $wire.showItemDetail({{ $item->id }}); } }" @click="openDetail()"> @if ($item->in_stock)
@endif
@if ($restaurant && !$restaurant->hide_menu_item_image_on_customer_site)
{{ $item->item_name }} @php $promotion = $item->getActivePromotion($shopBranch->id ?? null); @endphp @if($promotion)
@if($promotion->discount_type === 'percent') {{ number_format($promotion->discount_value, 0) }}% OFF @else {{ currency_format($promotion->discount_value, $restaurant->currency_id) }} OFF @endif
@endif
@endif

{{ $item->getTranslatedValue('item_name', session('locale')) }}

@if ($item->description)

{{ $item->getTranslatedValue('description', session('locale')) }}

@endif @if ($item->preparation_time)
{{ $item->preparation_time }} @lang('modules.menu.minutes')
@endif
@if ($item->variations_count == 0) @php $promotionalPrice = isset($item->promotional_price) ? $item->promotional_price : null; $originalPrice = $item->price; @endphp @if($promotionalPrice)
{{ currency_format($promotionalPrice, $restaurant->currency_id) }} {{ currency_format($originalPrice, $restaurant->currency_id) }}
@else {{ currency_format($originalPrice, $restaurant->currency_id) }} @endif @else Multiple options @endif
@if ($canCreateOrder) @if (!$item->in_stock) Out of stock @elseif ($restaurant->allow_customer_orders) @if (isset($cartItemQty[$item->id]) && $cartItemQty[$item->id] > 0)
@else
@lang('app.add')
@endif @elseif ($item->variations_count > 0 && $restaurant->allow_customer_orders)
@lang('modules.menu.showVariations') ({{ $item->variations_count }})
@endif @endif
@endforeach
@empty
@lang('messages.noItemAdded')
@endforelse @if($hasMoreItems && !$showCart)
@endif
@if($restaurant)
@livewire('components.ad-banner', ['position' => 'menu_browse', 'restaurantId' => $restaurant->id])
@endif
@if (is_null(customer()) && $restaurant->customer_login_required) @lang('app.login') @endif
@if ($cartQty > 0)
@lang('modules.order.totalItem'):
{{ currency_format($subTotal, $restaurant->currency_id) }} + @lang('modules.order.taxes')
@endif @endif @if ($showCart) @if($restaurant)
@livewire('components.ad-slider', ['position' => 'cart', 'restaurantId' => $restaurant->id])
@endif @if ($restaurant->allow_customer_orders)

@lang('modules.order.orderType')

@if ($restaurant->allow_dine_in_orders) @endif @if ($restaurant->allow_customer_delivery_orders) @endif @if ($restaurant->allow_customer_pickup_orders) @endif
@endif

@lang('modules.order.yourOrder')

@foreach ($orderItemList as $key => $item) @php $currentQty = $orderItemQty[$key] ?? 0; @endphp
@if ($restaurant && !$restaurant->hide_menu_item_image_on_customer_site) {{ $item->item_name }} @endif
{{ $item->item_name }}
@if (isset($orderItemVariation[$key])) {{ $orderItemVariation[$key]->variation }} @endif {{-- @if ($item->preparation_time) @lang('modules.menu.preparationTime'): {{ $item->preparation_time }} @lang('modules.menu.minutes') @endif --}}
{{ $currentQty }}
@php // Use display price (base price without tax for inclusive items) $displayPrice = $this->getItemDisplayPrice($key); // Total amount per line (what customer pays) $totalAmount = $orderItemAmount[$key]; @endphp
@if ($taxMode === 'item' && $restaurant?->tax_inclusive)
{{ currency_format($displayPrice, $restaurant->currency_id) }} × {{ $orderItemQty[$key] }}
@endif {{ currency_format($totalAmount, $restaurant->currency_id) }}
@if (!empty($itemModifiersSelected[$key]))
@foreach ($itemModifiersSelected[$key] as $modifierOptionId) {{ $this->modifierOptions[$modifierOptionId]->name }} {{ currency_format($this->modifierOptions[$modifierOptionId]->price, $this->modifierOptions[$modifierOptionId]->modifierGroup->branch->restaurant->currency_id) }} @endforeach
@endif
@if (isset($this->itemNotes[$key]) && !empty($this->itemNotes[$key]))
{{ $this->itemNotes[$key] }}
@else
@endif
@endforeach @if ($cartQty > 0)
@lang('modules.order.addNote')

@lang('modules.order.addNote')

{{ $orderNote }}

@lang('modules.order.orderSummary')

@lang('modules.order.totalItem')
{{ array_sum(array_filter($orderItemQty ?? [])) }}
@lang('modules.order.subTotal')
{{ currency_format($subTotal, $restaurant->currency_id) }}
@if (count($orderItemList) > 0 && $extraCharges) @foreach ($extraCharges as $charge)
{{ $charge->charge_name }} @if ($charge->charge_type == 'percent') ({{ $charge->charge_value }}%) @endif
{{ currency_format($charge->getAmount($subTotal), $restaurant->currency_id) }}
@endforeach @endif @if ($taxMode == 'order') @foreach ($taxes as $item)
{{ $item->tax_name }} ({{ $item->tax_percent }}%)
{{ currency_format(($item->tax_percent / 100) * $subTotal, $restaurant->currency_id) }}
@endforeach @else @if (!empty($orderItemTaxDetails) && count($orderItemTaxDetails)) @php $taxTotals = []; $totalTax = 0; foreach ($orderItemTaxDetails as $item) { $qty = $item['qty'] ?? 1; foreach ($item['tax_breakup'] as $taxName => $taxInfo) { if (!isset($taxTotals[$taxName])) { $taxTotals[$taxName] = [ 'percent' => $taxInfo['percent'], 'amount' => $taxInfo['amount'] * $qty, ]; } else { $taxTotals[$taxName]['amount'] += $taxInfo['amount'] * $qty; } } $totalTax += collect($item['tax_amount'])->sum(); } @endphp @foreach ($taxTotals as $taxName => $taxInfo)
{{ $taxName }} ({{ $taxInfo['percent'] }}%)
{{ currency_format($taxInfo['amount'], $restaurant->currency_id) }}
@endforeach
@lang('modules.order.totalTax') @lang($restaurant?->tax_inclusive ? 'modules.settings.taxInclusive' : 'modules.settings.taxExclusive')
{{ currency_format($totalTax, $restaurant->currency_id) }}
@endif @endif @if ($orderType === 'delivery' && !is_null($deliveryFee))
@lang('modules.delivery.deliveryFee')
@if ($deliveryFee > 0) {{ currency_format($deliveryFee, $restaurant->currency_id) }} @else @lang('modules.delivery.freeDelivery') @endif
@endif
@lang('modules.order.total')
{{ currency_format($total, $restaurant->currency_id) }}
@if ($orderType === 'delivery' && !empty($deliveryAddress))

@lang('modules.delivery.deliveryAddress')

@if (!empty($deliveryAddress)) @lang('modules.delivery.changeDeliveryAddress') @endif
@if (!empty($deliveryAddress))

{{ $deliveryAddress }}

@endif
@endif
@if (is_null($customer) && ( ($orderType == 'delivery' && $restaurant->require_login_for_delivery_orders) || ($orderType == 'pickup' && $restaurant->require_login_for_pickup_orders) || ($orderType == 'dine_in' && $restaurant->customer_login_required) )) @lang('app.next') (Login Required) @elseif (is_null($customer) && $orderType == 'pickup' && !$restaurant->require_login_for_pickup_orders) @lang('app.next') @elseif ($orderType == 'pickup') @lang('app.next') @elseif ($orderType == 'delivery') @if (empty($deliveryAddress)) @lang('app.next') @else
@php $isPaymentEnabled = in_array($orderType, ['dine_in', 'delivery', 'pickup']) && (($orderType == 'dine_in' && $paymentGateway->is_dine_in_payment_enabled) || ($orderType == 'delivery' && $paymentGateway->is_delivery_payment_enabled) || ($orderType == 'pickup' && $paymentGateway->is_pickup_payment_enabled)); $showPayNow = $paymentGateway->is_qr_payment_enabled || $paymentGateway->stripe_status || $paymentGateway->razorpay_status || $paymentGateway->flutterwave_status || $paymentGateway->paypal_status || $paymentGateway->payfast_status || $paymentGateway->xendit_status || $paymentGateway->is_offline_payment_enabled; $loadingSpinner = ' '; @endphp @if (!$order) @if ($showPayNow) {!! $loadingSpinner !!} @lang('modules.order.payNow') @if (!$isPaymentEnabled) {!! $loadingSpinner !!} @lang('modules.order.payLater') @endif @else {!! $loadingSpinner !!} @lang('modules.order.placeOrder') @endif @else {{-- When adding items to existing order, always show Place Order --}} {{-- Request Bill should only appear on order success/detail page --}} @if ($order->status === 'billed' && !$isPaymentEnabled) {{-- Order is billed, show payment options --}} {!! $loadingSpinner !!} @lang('modules.order.payNow') @else {!! $loadingSpinner !!} @lang('modules.order.placeOrder') @endif @endif
@endif @else
@php $isPaymentEnabled = in_array($orderType, ['dine_in', 'delivery', 'pickup']) && (($orderType == 'dine_in' && $paymentGateway->is_dine_in_payment_enabled) || ($orderType == 'delivery' && $paymentGateway->is_delivery_payment_enabled) || ($orderType == 'pickup' && $paymentGateway->is_pickup_payment_enabled)); $showPayNow = $paymentGateway->is_qr_payment_enabled || $paymentGateway->stripe_status || $paymentGateway->razorpay_status || $paymentGateway->flutterwave_status || $paymentGateway->paypal_status || $paymentGateway->payfast_status || $paymentGateway->xendit_status || $paymentGateway->is_offline_payment_enabled; $loadingSpinner = '
'; @endphp @if (!$order) @if ($showPayNow) {!! $loadingSpinner !!} @lang('modules.order.payNow') @if (!$isPaymentEnabled) {!! $loadingSpinner !!} @lang('modules.order.payLater') @endif @else {!! $loadingSpinner !!} @lang('modules.order.placeOrder') @endif @else {{-- When adding items to existing order, always show Place Order --}} {{-- Request Bill should only appear on order success/detail page --}} @if ($order->status === 'billed' && !$isPaymentEnabled) {{-- Order is billed, show payment options --}} {!! $loadingSpinner !!} @lang('modules.order.payNow') @else {!! $loadingSpinner !!} @lang('modules.order.placeOrder') @endif @endif
@endif
@else

@lang('messages.cartEmpty')

@lang('modules.order.placeOrder')
@endif @if($restaurant)
@livewire('components.ad-banner', ['position' => 'cart', 'restaurantId' => $restaurant->id])
@endif
@endif @if (!is_null($customer))
@csrf
@if ($orderType == 'delivery')
@endif
@lang('app.continue') @lang('app.processing')... @lang('app.cancel')
@endif
@lang('modules.order.pickUpDateTime')
{{-- --}}
@lang('app.continue') @lang('app.processing')... @lang('app.cancel')
@lang('modules.table.selectTable') @if ($showTableModal && $getTable) @endif @lang('modules.menu.itemVariations') @if ($menuItem) @livewire('pos.itemVariations', ['menuItem' => $menuItem], key(str()->random(50))) @endif @lang('modules.menu.itemVariations') @if ($menuItem) @livewire('shop.cartItemVariations', ['menuItem' => $menuItem, 'orderItemQty' => $orderItemQty], key(str()->random(50))) @endif @lang('modules.menu.itemDescription') @if ($selectedItem)
@if ($restaurant && !$restaurant->hide_menu_item_image_on_customer_site)
{{ $selectedItem->item_name }}
@endif

{{ $selectedItem->item_name }}

@if ($selectedItem->description) @if (strlen($selectedItem->description) > 100)

{{ Str::limit($selectedItem->description, 100) }} {{ $selectedItem->description }}

@else

{{ $selectedItem->description }}

@endif @endif @if ($selectedItem->preparation_time)
@lang('modules.menu.preparationTime') {{ $selectedItem->preparation_time }} @lang('modules.menu.minutes')
@endif
@endif
@if ($paymentOrder) @lang('modules.order.chooseGateway')
{{ $paymentOrder->show_formatted_order_number }}
{{ currency_format($paymentOrder->total, $restaurant->currency_id) }}
@if ($showQrCode || $showPaymentDetail) @lang('modules.billing.showOtherPaymentOption')
@if ($showQrCode) QR Code Preview @else @lang('modules.billing.accountDetails') {{ $paymentGateway->offline_payment_detail }} @endif
@else
@if ($paymentGateway->stripe_status) @endif @if ($paymentGateway->razorpay_status) @endif @if ($paymentGateway->flutterwave_status) @endif @if ($paymentGateway->paypal_status) Pay Pal @endif @if ($paymentGateway->payfast_status) @lang('modules.billing.payfast') @endif @if ($paymentGateway->paystack_status) @lang('modules.billing.paystack') @endif @if ($paymentGateway->xendit_status) Xendit Streamline Icon: https://streamlinehq.com Xendit @lang('modules.billing.xendit') @endif @if ($paymentGateway && $paymentGateway->amwalpay_status) @lang('modules.billing.amwalpay') @endif @if ($paymentGateway->is_qr_payment_enabled && $paymentGateway->qr_code_image_url) @lang('modules.billing.paybyQr') @endif @if ($paymentGateway->is_offline_payment_enabled && $paymentGateway->offline_payment_detail) @lang('modules.billing.bankTransfer') @endif @if ($paymentGateway->is_cash_payment_enabled) @lang('modules.order.payViaCash') @endif
@endif
@if ($showQrCode) @lang('modules.billing.paymentDone') @elseif ($showPaymentDetail) @lang('modules.billing.paymentDone') @endif
@endif @lang('modules.modifier.itemModifiers') @if ($selectedModifierItem) @livewire('pos.itemModifiers', ['menuItemId' => $selectedModifierItem], key(str()->random(50))) @endif @lang('modules.menu.itemVariations') @if ($menuItem)
@if ($restaurant && !$restaurant->hide_menu_item_image_on_customer_site) {{ $menuItem->item_name }} @endif
{{ $menuItem->item_name }}
{{ $menuItem->description }}
@foreach ($menuItem->variations as $item) @endforeach
@lang('modules.menu.itemName') @lang('modules.menu.setPrice')
{{ $item->variation }}
{{ $item->price ? currency_format($item->price, $restaurant->currency_id) : '--' }}
@endif
@lang('modules.delivery.deliveryAddress') @if ($shopBranch?->deliverySetting && $shopBranch->deliverySetting->is_enabled) @livewire('customer.location-selector', ['shopBranch' => $shopBranch, 'customer' => $customer, 'orderGrandTotal' => $total, 'maxPreparationTime' => $maxPreparationTime, 'currencyId' => $restaurant->currency_id], key('location-selector-' . $shopBranch->id)) @else
@endif
@if (!$shopBranch?->deliverySetting || !$shopBranch->deliverySetting->is_enabled) @lang('app.next') @lang('app.processing')... @endif
@script @endscript @if(config('chatbot.enabled', true) && hasOfatouraIntelligenceModule() && $restaurant && $shopBranch) @php $branchId = $shopBranch->id ?? null; $settings = $restaurant->getOfatouraIntelligenceSettings($branchId); $chatbotEnabled = $settings->enable_menu_chatbot ?? false; @endphp @if($chatbotEnabled) @livewire('shop.menu-chatbot', [ 'restaurant' => $restaurant, 'shopBranch' => $shopBranch, 'customer' => $customer ?? null ]) @endif @endif