{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "store-pickup-curbside",
  "title": "Store Pickup Curbside",
  "type": "registry:block",
  "files": [
    {
      "path": "packages/registry-react/blocks/store-pickup-curbside/StorePickupCurbside.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport {\n  Bell,\n  Car,\n  Check,\n  CheckCircle2,\n  Clock,\n  Eye,\n  Layers,\n  MapPin,\n  MessageSquare,\n  MoreHorizontal,\n  Navigation,\n  Package,\n  PackageCheck,\n  Phone,\n  Plus,\n  RefreshCw,\n  Search,\n  Send,\n  Store,\n  X,\n} from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Input } from '@/components/ui/input'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'\nimport { OrderDetailDialog } from './OrderDetailDialog'\nimport { StorePickupModals } from './StorePickupModals'\nimport type { OrderItem, OrderStatus, PickupMode, PickupOrder, StorePickupCurbsideProps } from './store-pickup-types'\nimport { INITIAL_ORDERS } from './store-pickup-data'\n\nexport type { OrderItem, OrderStatus, PickupMode, PickupOrder, StorePickupCurbsideProps }\n\nexport function StorePickupCurbside({\n  storeName = 'Pasadena Flagship Store #02',\n  storeCode = 'STORE-CA-02',\n  initialModeFilter = 'all',\n  className,\n}: StorePickupCurbsideProps) {\n  const [orders, setOrders] = React.useState<PickupOrder[]>(INITIAL_ORDERS)\n  const [searchQuery, setSearchQuery] = React.useState('')\n  const [selectedModeFilter, setSelectedModeFilter] = React.useState<'all' | 'curbside' | 'in_store'>(initialModeFilter)\n  const [selectedStatusFilter, setSelectedStatusFilter] = React.useState<\n    'all' | 'arrived' | 'en_route' | 'ready_staging' | 'completed'\n  >('all')\n\n  // Modals\n  const [checkInModalOpen, setCheckInModalOpen] = React.useState(false)\n  const [inspectModalOpen, setInspectModalOpen] = React.useState(false)\n  const [notifyModalOpen, setNotifyModalOpen] = React.useState(false)\n  const [newOrderModalOpen, setNewOrderModalOpen] = React.useState(false)\n  const [selectedOrder, setSelectedOrder] = React.useState<PickupOrder | null>(null)\n  const [actionFeedbackToast, setActionFeedbackToast] = React.useState<string | null>(null)\n\n  // Toast feedback helper\n  const triggerToast = React.useCallback((msg: string) => {\n    setActionFeedbackToast(msg)\n    setTimeout(() => {\n      setActionFeedbackToast((current) => (current === msg ? null : current))\n    }, 3500)\n  }, [])\n\n  // KPI calculations\n  const readyInStagingCount = React.useMemo(() => orders.filter((o) => o.status !== 'completed').length, [orders])\n  const arrivedCustomersCount = React.useMemo(() => orders.filter((o) => o.status === 'arrived').length, [orders])\n  const enRouteCount = React.useMemo(() => orders.filter((o) => o.status === 'en_route').length, [orders])\n  const completedCount = React.useMemo(() => orders.filter((o) => o.status === 'completed').length + 32, [orders])\n\n  // Filtered orders list\n  const filteredOrders = React.useMemo(() => {\n    return orders.filter((order) => {\n      const query = searchQuery.trim().toLowerCase()\n      const matchesSearch =\n        query === '' ||\n        order.customerName.toLowerCase().includes(query) ||\n        order.orderNumber.toLowerCase().includes(query) ||\n        order.customerPhone.includes(query) ||\n        order.stagingLocation.bin.toLowerCase().includes(query) ||\n        (order.vehicleDetails?.makeModel.toLowerCase().includes(query) ?? false) ||\n        (order.vehicleDetails?.plate.toLowerCase().includes(query) ?? false) ||\n        order.items.some((i) => i.name.toLowerCase().includes(query))\n\n      const matchesMode = selectedModeFilter === 'all' || order.pickupMode === selectedModeFilter\n      const matchesStatus = selectedStatusFilter === 'all' || order.status === selectedStatusFilter\n\n      return matchesSearch && matchesMode && matchesStatus\n    })\n  }, [orders, searchQuery, selectedModeFilter, selectedStatusFilter])\n\n  const handleInspect = (order: PickupOrder) => {\n    setSelectedOrder(order)\n    setInspectModalOpen(true)\n  }\n\n  const handleNotify = (order: PickupOrder) => {\n    setSelectedOrder(order)\n    setNotifyModalOpen(true)\n  }\n\n  const handleSendNotification = (channel: 'sms' | 'push') => {\n    if (!selectedOrder) return\n    setNotifyModalOpen(false)\n    triggerToast(`Sent arrival notification to ${selectedOrder.customerName} via ${channel.toUpperCase()}`)\n  }\n\n  const handleMarkDelivered = (orderId: string) => {\n    setOrders((prev) =>\n      prev.map((o) =>\n        o.id === orderId\n          ? {\n              ...o,\n              status: 'completed',\n              statusLabel: 'Delivered & Handed Over',\n            }\n          : o,\n      ),\n    )\n    const target = orders.find((o) => o.id === orderId)\n    if (target) {\n      triggerToast(`Order #${target.orderNumber} successfully delivered to ${target.customerName}!`)\n    }\n    setInspectModalOpen(false)\n  }\n\n  const handleConfirmArrival = (payload: {\n    orderId: string\n    spot: string\n    vehicleModel: string\n    plate: string\n    hazards: boolean\n    notes: string\n  }) => {\n    const target = orders.find((o) => o.id === payload.orderId)\n    if (target) {\n      setOrders((prev) =>\n        prev.map((o) =>\n          o.id === payload.orderId\n            ? {\n                ...o,\n                status: 'arrived',\n                pickupMode: 'curbside',\n                spotNumber: parseInt(payload.spot, 10) || 4,\n                waitMinutes: 1,\n                statusLabel: 'Customer Arrived · Waiting 1m',\n                vehicleDetails: {\n                  makeModel: payload.vehicleModel || 'Vehicle Unspecified',\n                  plate: payload.plate || 'N/A',\n                  hazardsFlashing: payload.hazards,\n                },\n                arrivedAt: 'Just now',\n              }\n            : o,\n        ),\n      )\n      setCheckInModalOpen(false)\n      triggerToast(`Customer ${target.customerName} checked into Spot #${payload.spot}! Runner alerted.`)\n    }\n  }\n\n  const handleCreateNewOrder = (payload: {\n    customerName: string\n    customerPhone: string\n    pickupMode: PickupMode\n    spotNumber: string\n    stagingAisle: string\n    stagingBin: string\n    itemSummary: string\n    orderTotal: string\n  }) => {\n    const idNum = Math.floor(10000 + Math.random() * 90000)\n    const newOrder: PickupOrder = {\n      id: `order-${Date.now()}`,\n      orderNumber: `BOPIS-${idNum}`,\n      customerName: payload.customerName,\n      customerPhone: payload.customerPhone || '(415) 555-0100',\n      customerInitials: payload.customerName\n        .split(' ')\n        .map((n) => n[0])\n        .join('')\n        .toUpperCase()\n        .slice(0, 2),\n      pickupMode: payload.pickupMode,\n      spotNumber: payload.pickupMode === 'curbside' ? parseInt(payload.spotNumber, 10) || 3 : undefined,\n      pickupDeskBay: payload.pickupMode === 'in_store' ? 'Pickup Desk Bay 02' : undefined,\n      vehicleDetails:\n        payload.pickupMode === 'curbside'\n          ? {\n              makeModel: 'Customer Vehicle',\n              plate: 'PENDING',\n              hazardsFlashing: false,\n            }\n          : undefined,\n      status: 'ready_staging',\n      statusLabel: `Ready in ${payload.stagingAisle}`,\n      stagingLocation: {\n        zone: payload.stagingAisle,\n        bin: payload.stagingBin,\n        type: payload.pickupMode === 'in_store' ? 'locker' : 'shelf',\n      },\n      items: [\n        {\n          id: `item-${Date.now()}`,\n          name: payload.itemSummary || 'Selected Retail Merchandise',\n          sku: `SKU-${Math.floor(100 + Math.random() * 900)}`,\n          quantity: 1,\n          price: parseFloat(payload.orderTotal) || 99.0,\n          staged: true,\n          category: 'General',\n        },\n      ],\n      orderTotal: parseFloat(payload.orderTotal) || 99.0,\n      placedAt: '11:45 AM',\n      readyAt: 'Just now',\n      verificationCode: `${Math.floor(1000 + Math.random() * 9000)}`,\n      assignedRunner: 'Pending Handoff',\n    }\n\n    setOrders((prev) => [newOrder, ...prev])\n    setNewOrderModalOpen(false)\n    triggerToast(`New Order #${newOrder.orderNumber} staged in ${newOrder.stagingLocation.bin}!`)\n  }\n\n  const handleRefresh = () => {\n    triggerToast('Refreshed pickup staging queue & curbside telemetry')\n  }\n\n  return (\n    <div className={cn('text-foreground w-full space-y-6', className)}>\n      {/* Live Toast Notification Banner */}\n      {actionFeedbackToast && (\n        <div className=\"border-success/30 bg-success/10 text-success flex items-center justify-between rounded-md border px-4 py-2.5 text-xs font-medium shadow-xs transition-colors duration-200\">\n          <div className=\"flex items-center gap-2\">\n            <CheckCircle2 className=\"text-success size-4 shrink-0\" />\n            <span>{actionFeedbackToast}</span>\n          </div>\n          <button\n            aria-label=\"Dismiss notification\"\n            type=\"button\"\n            className=\"text-muted-foreground hover:text-foreground inline-flex size-4 items-center justify-center\"\n            onClick={() => setActionFeedbackToast(null)}\n          >\n            <X className=\"size-3.5\" />\n          </button>\n        </div>\n      )}\n\n      {/* Header Section */}\n      <div className=\"flex flex-col gap-4 md:flex-row md:items-center md:justify-between\">\n        <div>\n          <div className=\"flex flex-wrap items-center gap-2.5\">\n            <div className=\"bg-primary/10 text-primary border-primary/20 flex size-8 items-center justify-center rounded-lg border\">\n              <Car className=\"size-4\" />\n            </div>\n            <h1 className=\"text-xl font-bold tracking-tight md:text-2xl\">Store Pickup & Curbside Coordination</h1>\n            <Badge wrap variant=\"outline\" className=\"gap-1.5 font-medium\">\n              <span className=\"bg-success size-1.5 animate-pulse rounded-full\" />\n              <span className=\"text-xs\">Live Staging Radar</span>\n            </Badge>\n          </div>\n          <div className=\"text-muted-foreground mt-1.5 flex flex-wrap items-center gap-2 text-xs\">\n            <span className=\"text-foreground flex items-center gap-1 font-medium\">\n              <MapPin className=\"text-muted-foreground size-3.5\" />\n              {storeName}\n            </span>\n            <span className=\"font-mono text-xs\">{storeCode}</span>\n            <span className=\"text-foreground font-medium tabular-nums\">\n              {readyInStagingCount} Ready · {enRouteCount} En Route · {completedCount} Completed\n            </span>\n          </div>\n        </div>\n\n        <div className=\"flex flex-wrap items-center gap-2\">\n          <Button\n            variant=\"outline\"\n            size=\"sm\"\n            className=\"h-9 gap-1.5 text-xs shadow-xs\"\n            onClick={() => setCheckInModalOpen(true)}\n          >\n            <Car className=\"text-warning size-3.5\" />\n            <span>Customer \"I'm Here\" Check-In</span>\n          </Button>\n\n          <Button size=\"sm\" className=\"h-9 gap-1.5 text-xs shadow-xs\" onClick={() => setNewOrderModalOpen(true)}>\n            <Plus className=\"size-3.5\" />\n            <span>New Pickup Order</span>\n          </Button>\n        </div>\n      </div>\n\n      {/* 4 Fulfillment Health Cards */}\n      <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n        {/* Card 1: Ready in Staging */}\n        <Card className=\"border-border shadow-xs\">\n          <CardHeader className=\"flex flex-row flex-wrap items-center justify-between gap-2 pb-2\">\n            <CardTitle className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n              Ready for Customer\n            </CardTitle>\n            <div className=\"bg-muted text-muted-foreground flex size-7 items-center justify-center rounded-md\">\n              <PackageCheck className=\"text-foreground size-4\" />\n            </div>\n          </CardHeader>\n          <CardContent className=\"space-y-1.5\">\n            <div className=\"text-2xl font-bold tracking-tight tabular-nums\">8 Orders in Staging</div>\n            <div className=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 gap-y-1 text-xs\">\n              <span>6 Bins · 2 Secured Lockers</span>\n              <Badge wrap variant=\"success\" className=\"h-5 px-1.5 text-xs font-medium\">\n                100% Pick Accuracy\n              </Badge>\n            </div>\n          </CardContent>\n        </Card>\n\n        {/* Card 2: Arrived in Curbside Bay (Amber Alert) */}\n        <Card className=\"border-warning/30 bg-warning/5 shadow-xs\">\n          <CardHeader className=\"flex flex-row flex-wrap items-center justify-between gap-2 pb-2\">\n            <CardTitle className=\"text-warning text-warning min-w-0 text-xs font-semibold tracking-wider break-words uppercase\">\n              Customers in Parking Bays\n            </CardTitle>\n            <div className=\"bg-warning/15 text-warning flex size-7 items-center justify-center rounded-md\">\n              <Car className=\"text-warning size-4\" />\n            </div>\n          </CardHeader>\n          <CardContent className=\"space-y-1.5\">\n            <div className=\"text-foreground dark:text-foreground text-2xl font-bold tracking-tight tabular-nums\">\n              {arrivedCustomersCount} Customers Arrived\n            </div>\n            <div className=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 gap-y-1 text-xs\">\n              <span className=\"text-warning/80 text-warning/80\">Bay #4 (2m) · Bay #2 (4m)</span>\n              <Badge wrap variant=\"warning\" className=\"h-5 gap-1 px-1.5 text-xs font-medium\">\n                <span className=\"bg-warning bg-warning size-1.5 rounded-full\" />\n                Action Required\n              </Badge>\n            </div>\n          </CardContent>\n        </Card>\n\n        {/* Card 3: Avg Fulfillment Time */}\n        <Card className=\"border-border shadow-xs\">\n          <CardHeader className=\"flex flex-row flex-wrap items-center justify-between gap-2 pb-2\">\n            <CardTitle className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n              Avg Fulfillment Time\n            </CardTitle>\n            <div className=\"bg-muted text-muted-foreground flex size-7 items-center justify-center rounded-md\">\n              <Clock className=\"text-foreground size-4\" />\n            </div>\n          </CardHeader>\n          <CardContent className=\"space-y-1.5\">\n            <div className=\"text-2xl font-bold tracking-tight tabular-nums\">1m 45s</div>\n            <div className=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 gap-y-1 text-xs\">\n              <span>Goal &lt; 3m 00s (-18s vs target)</span>\n              <Badge wrap variant=\"info\" className=\"h-5 px-1.5 text-xs font-medium\">\n                Fastest: 52s\n              </Badge>\n            </div>\n          </CardContent>\n        </Card>\n\n        {/* Card 4: Today's Completed Pickups */}\n        <Card className=\"border-border shadow-xs\">\n          <CardHeader className=\"flex flex-row flex-wrap items-center justify-between gap-2 pb-2\">\n            <CardTitle className=\"text-muted-foreground text-xs font-semibold tracking-wider uppercase\">\n              Today's Pickups\n            </CardTitle>\n            <div className=\"bg-muted text-muted-foreground flex size-7 items-center justify-center rounded-md\">\n              <CheckCircle2 className=\"text-foreground size-4\" />\n            </div>\n          </CardHeader>\n          <CardContent className=\"space-y-1.5\">\n            <div className=\"text-2xl font-bold tracking-tight tabular-nums\">{completedCount} Orders</div>\n            <div className=\"text-muted-foreground flex flex-wrap items-center justify-between gap-x-2 gap-y-1 text-xs\">\n              <span>$5,240 Fulfilled Volume</span>\n              <Badge wrap variant=\"success\" className=\"h-5 px-1.5 text-xs font-medium\">\n                97.2% On-Time SLA\n              </Badge>\n            </div>\n          </CardContent>\n        </Card>\n      </div>\n\n      {/* Active Pickup Orders Board / Table Card */}\n      <Card className=\"border-border shadow-xs\">\n        <CardHeader className=\"space-y-4 pb-4\">\n          <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n            <div>\n              <CardTitle className=\"text-base font-semibold\">Active Pickup Orders Board</CardTitle>\n              <CardDescription className=\"text-xs\">\n                Live queue of customers arriving curbside and checking in at in-store fulfillment stations.\n              </CardDescription>\n            </div>\n            <div className=\"flex items-center gap-2\">\n              <Button variant=\"outline\" size=\"sm\" className=\"h-8 gap-1.5 text-xs shadow-xs\" onClick={handleRefresh}>\n                <RefreshCw className=\"text-muted-foreground size-3\" />\n                <span>Refresh</span>\n              </Button>\n            </div>\n          </div>\n\n          {/* Filter & Search Controls */}\n          <div className=\"flex flex-col gap-2.5 sm:flex-row sm:items-center sm:justify-between\">\n            <div className=\"relative max-w-sm flex-1\">\n              <Search className=\"text-muted-foreground absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2\" />\n              <Input\n                value={searchQuery}\n                onChange={(e) => setSearchQuery(e.target.value)}\n                placeholder=\"Search customer, order #, spot, or items...\"\n                className=\"h-8 pl-8 text-xs\"\n              />\n              {searchQuery && (\n                <button\n                  type=\"button\"\n                  className=\"text-muted-foreground hover:text-foreground absolute top-1/2 right-2.5 -translate-y-1/2\"\n                  aria-label=\"Clear search\"\n                  onClick={() => setSearchQuery('')}\n                >\n                  <X className=\"size-3\" />\n                </button>\n              )}\n            </div>\n\n            <div className=\"flex flex-wrap items-center gap-2\">\n              <div className=\"flex items-center gap-1.5\">\n                <span className=\"text-muted-foreground text-xs\">Mode:</span>\n                <Select\n                  value={selectedModeFilter}\n                  onValueChange={(val: 'all' | 'curbside' | 'in_store') => setSelectedModeFilter(val)}\n                >\n                  <SelectTrigger className=\"h-8 w-32 text-xs\">\n                    <SelectValue placeholder=\"Pickup Mode\" />\n                  </SelectTrigger>\n                  <SelectContent>\n                    <SelectItem value=\"all\">All Modes</SelectItem>\n                    <SelectItem value=\"curbside\">Curbside Bay</SelectItem>\n                    <SelectItem value=\"in_store\">In-Store Desk</SelectItem>\n                  </SelectContent>\n                </Select>\n              </div>\n\n              <div className=\"flex items-center gap-1.5\">\n                <span className=\"text-muted-foreground text-xs\">Status:</span>\n                <Select\n                  value={selectedStatusFilter}\n                  onValueChange={(val: 'all' | 'arrived' | 'en_route' | 'ready_staging' | 'completed') =>\n                    setSelectedStatusFilter(val)\n                  }\n                >\n                  <SelectTrigger className=\"h-8 w-36 text-xs\">\n                    <SelectValue placeholder=\"Status\" />\n                  </SelectTrigger>\n                  <SelectContent>\n                    <SelectItem value=\"all\">All Statuses</SelectItem>\n                    <SelectItem value=\"arrived\">Customer Arrived</SelectItem>\n                    <SelectItem value=\"en_route\">En Route</SelectItem>\n                    <SelectItem value=\"ready_staging\">Ready in Staging</SelectItem>\n                    <SelectItem value=\"completed\">Completed</SelectItem>\n                  </SelectContent>\n                </Select>\n              </div>\n            </div>\n          </div>\n        </CardHeader>\n\n        <CardContent className=\"p-0\">\n          <div className=\"overflow-x-auto\">\n            <Table>\n              <TableHeader className=\"bg-muted/40\">\n                <TableRow>\n                  <TableHead className=\"w-[200px] text-xs font-semibold\">Customer & Contact</TableHead>\n                  <TableHead className=\"w-[180px] text-xs font-semibold\">Order & Items</TableHead>\n                  <TableHead className=\"w-[220px] text-xs font-semibold\">Pickup Mode & Bay</TableHead>\n                  <TableHead className=\"w-[200px] text-xs font-semibold\">Customer Status</TableHead>\n                  <TableHead className=\"w-[160px] text-xs font-semibold\">Staging Location</TableHead>\n                  <TableHead className=\"w-[180px] text-right text-xs font-semibold\">Fulfillment Actions</TableHead>\n                </TableRow>\n              </TableHeader>\n              <TableBody>\n                {filteredOrders.map((order) => (\n                  <TableRow\n                    key={order.id}\n                    className={cn(\n                      'transition-colors duration-150',\n                      order.status === 'arrived' && 'bg-warning/[0.04] bg-warning/[0.08]',\n                    )}\n                  >\n                    {/* Customer Name & Phone */}\n                    <TableCell className=\"py-3\">\n                      <div className=\"flex items-center gap-2.5\">\n                        <Avatar className=\"border-border size-8 rounded-full border\">\n                          <AvatarFallback className=\"bg-muted text-xs font-medium\">\n                            {order.customerInitials}\n                          </AvatarFallback>\n                        </Avatar>\n                        <div className=\"space-y-0.5\">\n                          <div className=\"text-foreground text-xs leading-tight font-semibold\">\n                            {order.customerName}\n                          </div>\n                          <div className=\"text-muted-foreground flex items-center gap-1 font-mono text-xs tabular-nums\">\n                            <Phone className=\"text-muted-foreground/70 size-3\" />\n                            {order.customerPhone}\n                          </div>\n                        </div>\n                      </div>\n                    </TableCell>\n\n                    {/* Order Number & Items Summary */}\n                    <TableCell className=\"py-3\">\n                      <div className=\"space-y-1\">\n                        <div className=\"flex items-center gap-1.5\">\n                          <span className=\"text-foreground font-mono text-xs font-bold\">#{order.orderNumber}</span>\n                          <span className=\"text-muted-foreground text-xs tabular-nums\">\n                            (${order.orderTotal.toFixed(2)})\n                          </span>\n                        </div>\n                        <div\n                          className=\"text-muted-foreground max-w-[170px] min-w-0 truncate text-xs\"\n                          title={order.items.map((i) => `${i.quantity}x ${i.name}`).join(', ')}\n                        >\n                          {order.items.length} {order.items.length === 1 ? 'item' : 'items'}:{' '}\n                          {order.items.map((i) => i.name).join(', ')}\n                        </div>\n                      </div>\n                    </TableCell>\n\n                    {/* Pickup Mode Badge */}\n                    <TableCell className=\"py-3\">\n                      <div className=\"space-y-1\">\n                        {order.pickupMode === 'curbside' ? (\n                          <>\n                            <Badge\n                              wrap\n                              variant=\"outline\"\n                              className=\"border-success/30 bg-success/10 text-success gap-1 font-medium\"\n                            >\n                              <Car className=\"text-success size-3 shrink-0\" />\n                              <span>Curbside Spot #{order.spotNumber}</span>\n                            </Badge>\n                            {order.vehicleDetails && (\n                              <div className=\"text-muted-foreground flex items-center gap-1 text-xs\">\n                                <span className=\"max-w-[180px] truncate\">{order.vehicleDetails.makeModel}</span>\n                                <span className=\"text-foreground font-mono font-medium\">\n                                  · {order.vehicleDetails.plate}\n                                </span>\n                              </div>\n                            )}\n                          </>\n                        ) : (\n                          <>\n                            <Badge\n                              wrap\n                              variant=\"outline\"\n                              className=\"border-info/30 bg-info/10 text-info gap-1 font-medium\"\n                            >\n                              <Store className=\"text-info size-3 shrink-0\" />\n                              <span>In-Store Desk</span>\n                            </Badge>\n                            <div className=\"text-muted-foreground text-xs\">\n                              {order.pickupDeskBay || 'Front Pickup Counter'}\n                            </div>\n                          </>\n                        )}\n                      </div>\n                    </TableCell>\n\n                    {/* Customer Status */}\n                    <TableCell className=\"py-3\">\n                      <div className=\"space-y-1\">\n                        {order.status === 'arrived' ? (\n                          <>\n                            <Badge wrap variant=\"warning\" className=\"gap-1.5 px-2 py-0.5 font-medium\">\n                              <span className=\"bg-warning size-1.5 rounded-full\" />\n                              <Clock className=\"size-3\" />\n                              <span className=\"tabular-nums\">Customer Arrived · Waiting {order.waitMinutes || 2}m</span>\n                            </Badge>\n                            <div className=\"text-muted-foreground flex items-center gap-1 text-xs\">\n                              <span>Check-in: {order.arrivedAt || '11:40 AM'}</span>\n                              {order.vehicleDetails?.hazardsFlashing && (\n                                <span className=\"text-warning font-medium\">· Hazards On</span>\n                              )}\n                            </div>\n                          </>\n                        ) : order.status === 'en_route' ? (\n                          <>\n                            <Badge wrap variant=\"info\" className=\"gap-1.5 px-2 py-0.5 font-medium\">\n                              <Navigation className=\"text-info size-3\" />\n                              <span className=\"tabular-nums\">En Route · {order.etaMinutes} min ETA</span>\n                            </Badge>\n                            <div className=\"text-muted-foreground text-xs\">\n                              <span className=\"tabular-nums\">{order.distanceMiles} miles away</span>\n                            </div>\n                          </>\n                        ) : order.status === 'ready_staging' ? (\n                          <>\n                            <Badge wrap variant=\"secondary\" className=\"gap-1.5 px-2 py-0.5 font-medium\">\n                              <Package className=\"size-3\" />\n                              <span>Ready in Staging</span>\n                            </Badge>\n                            <div className=\"text-muted-foreground text-xs\">Staged at {order.readyAt}</div>\n                          </>\n                        ) : (\n                          <>\n                            <Badge wrap variant=\"success\" className=\"gap-1.5 px-2 py-0.5 font-medium\">\n                              <CheckCircle2 className=\"size-3\" />\n                              <span>Delivered</span>\n                            </Badge>\n                            <div className=\"text-muted-foreground text-xs\">Completed Handoff</div>\n                          </>\n                        )}\n                      </div>\n                    </TableCell>\n\n                    {/* Staging Location */}\n                    <TableCell className=\"py-3\">\n                      <div className=\"space-y-0.5\">\n                        <div className=\"text-foreground flex items-center gap-1.5 text-xs font-semibold\">\n                          <Layers className=\"text-muted-foreground size-3.5\" />\n                          <span>{order.stagingLocation.zone}</span>\n                          <span className=\"text-primary font-mono font-bold\">{order.stagingLocation.bin}</span>\n                        </div>\n                        {order.stagingLocation.lockerPin ? (\n                          <div className=\"text-muted-foreground font-mono text-xs\">\n                            PIN Code:{' '}\n                            <span className=\"text-foreground font-bold\">{order.stagingLocation.lockerPin}</span>\n                          </div>\n                        ) : (\n                          <div className=\"text-muted-foreground text-xs capitalize\">\n                            Type: {order.stagingLocation.type} staging\n                          </div>\n                        )}\n                      </div>\n                    </TableCell>\n\n                    {/* Fulfillment Actions */}\n                    <TableCell className=\"py-3 text-right\">\n                      <div className=\"flex items-center justify-end gap-1.5\">\n                        {order.status === 'arrived' ? (\n                          <Button\n                            size=\"sm\"\n                            className=\"bg-success hover:bg-success/90 bg-success dark:hover:bg-success/90 h-8 gap-1 px-2.5 text-xs font-medium text-white shadow-xs\"\n                            onClick={() => handleMarkDelivered(order.id)}\n                          >\n                            <Check className=\"size-3.5\" />\n                            <span>Mark Delivered</span>\n                          </Button>\n                        ) : order.status !== 'completed' ? (\n                          <Button\n                            variant=\"outline\"\n                            size=\"sm\"\n                            className=\"h-8 gap-1 px-2.5 text-xs shadow-xs\"\n                            onClick={() => handleNotify(order)}\n                          >\n                            <Bell className=\"text-muted-foreground size-3\" />\n                            <span>Notify</span>\n                          </Button>\n                        ) : (\n                          <Button variant=\"outline\" size=\"sm\" disabled className=\"h-8 text-xs opacity-60\">\n                            <CheckCircle2 className=\"text-success size-3\" />\n                            <span>Fulfilled</span>\n                          </Button>\n                        )}\n\n                        <DropdownMenu>\n                          <DropdownMenuTrigger asChild>\n                            <Button\n                              variant=\"ghost\"\n                              size=\"icon\"\n                              className=\"text-muted-foreground hover:text-foreground size-8\"\n                            >\n                              <MoreHorizontal className=\"size-4\" />\n                              <span className=\"sr-only\">Actions</span>\n                            </Button>\n                          </DropdownMenuTrigger>\n                          <DropdownMenuContent align=\"end\" className=\"w-48 text-xs\">\n                            <DropdownMenuLabel>Order #{order.orderNumber}</DropdownMenuLabel>\n                            <DropdownMenuSeparator />\n                            <DropdownMenuItem className=\"cursor-pointer gap-2\" onClick={() => handleInspect(order)}>\n                              <Eye className=\"text-muted-foreground size-3.5\" />\n                              <span>Inspect Order Details</span>\n                            </DropdownMenuItem>\n                            <DropdownMenuItem className=\"cursor-pointer gap-2\" onClick={() => handleNotify(order)}>\n                              <MessageSquare className=\"text-muted-foreground size-3.5\" />\n                              <span>Send SMS / Push Alert</span>\n                            </DropdownMenuItem>\n                            <DropdownMenuSeparator />\n                            {order.status !== 'completed' && (\n                              <DropdownMenuItem\n                                className=\"text-success cursor-pointer gap-2 font-medium\"\n                                onClick={() => handleMarkDelivered(order.id)}\n                              >\n                                <CheckCircle2 className=\"size-3.5\" />\n                                <span>Complete Handoff</span>\n                              </DropdownMenuItem>\n                            )}\n                          </DropdownMenuContent>\n                        </DropdownMenu>\n                      </div>\n                    </TableCell>\n                  </TableRow>\n                ))}\n\n                {filteredOrders.length === 0 && (\n                  <TableRow>\n                    <TableCell colSpan={6} className=\"text-muted-foreground h-32 text-center text-xs\">\n                      No pickup orders match your search or filter criteria.\n                    </TableCell>\n                  </TableRow>\n                )}\n              </TableBody>\n            </Table>\n          </div>\n        </CardContent>\n        <CardFooter className=\"border-border text-muted-foreground flex items-center justify-between border-t px-6 py-3 text-xs\">\n          <div>\n            Showing <span className=\"text-foreground font-medium tabular-nums\">{filteredOrders.length}</span> of{' '}\n            <span className=\"text-foreground font-medium tabular-nums\">{orders.length}</span> active pickup orders\n          </div>\n          <div className=\"flex items-center gap-3\">\n            <div className=\"flex items-center gap-1.5\">\n              <span className=\"bg-success size-2 rounded-full\" />\n              <span>Curbside Bays (Spots 1-6)</span>\n            </div>\n            <div className=\"flex items-center gap-1.5\">\n              <span className=\"bg-info size-2 rounded-full\" />\n              <span>In-Store Pickup Desk</span>\n            </div>\n          </div>\n        </CardFooter>\n      </Card>\n\n      {/* Modal 1: Inspect Order Details Dialog */}\n      <OrderDetailDialog\n        open={inspectModalOpen}\n        onOpenChange={setInspectModalOpen}\n        selectedOrder={selectedOrder}\n        onMarkDelivered={handleMarkDelivered}\n      />\n\n      {/* Action Modals (Check-In, Notify, New Order) */}\n      <StorePickupModals\n        checkInModalOpen={checkInModalOpen}\n        onCheckInModalOpenChange={setCheckInModalOpen}\n        notifyModalOpen={notifyModalOpen}\n        onNotifyModalOpenChange={setNotifyModalOpen}\n        newOrderModalOpen={newOrderModalOpen}\n        onNewOrderModalOpenChange={setNewOrderModalOpen}\n        orders={orders}\n        selectedOrder={selectedOrder}\n        storeName={storeName}\n        onConfirmArrival={handleConfirmArrival}\n        onSendNotification={handleSendNotification}\n        onCreateOrder={handleCreateNewOrder}\n      />\n    </div>\n  )\n}\n\nexport default StorePickupCurbside\n",
      "type": "registry:block",
      "target": "~/components/blocks/StorePickupCurbside.tsx"
    },
    {
      "path": "packages/registry-react/blocks/store-pickup-curbside/OrderDetailDialog.tsx",
      "content": "'use client'\n\nimport { Car, Check, CheckCircle2, Layers } from 'lucide-react'\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n  Dialog,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from '@/components/ui/dialog'\nimport type { PickupOrder } from './store-pickup-types'\n\nexport interface OrderDetailDialogProps {\n  open: boolean\n  onOpenChange: (open: boolean) => void\n  selectedOrder: PickupOrder | null\n  onMarkDelivered: (orderId: string) => void\n}\n\nexport function OrderDetailDialog({ open, onOpenChange, selectedOrder, onMarkDelivered }: OrderDetailDialogProps) {\n  return (\n    <Dialog open={open} onOpenChange={onOpenChange}>\n      <DialogContent className=\"sm:max-w-lg\">\n        {selectedOrder && (\n          <>\n            <DialogHeader>\n              <div className=\"flex items-start justify-between\">\n                <div>\n                  <div className=\"flex items-center gap-2\">\n                    <DialogTitle className=\"text-base font-bold\">Order #{selectedOrder.orderNumber}</DialogTitle>\n                    <Badge\n                      wrap\n                      variant={selectedOrder.pickupMode === 'curbside' ? 'success' : 'info'}\n                      className=\"text-xs font-medium\"\n                    >\n                      {selectedOrder.pickupMode === 'curbside'\n                        ? `Curbside Bay #${selectedOrder.spotNumber}`\n                        : 'In-Store Desk'}\n                    </Badge>\n                  </div>\n                  <DialogDescription className=\"mt-1 text-xs\">\n                    Placed at {selectedOrder.placedAt} · Staged at {selectedOrder.readyAt}\n                  </DialogDescription>\n                </div>\n              </div>\n            </DialogHeader>\n\n            <div className=\"space-y-4 py-2 text-xs\">\n              {/* Customer & Contact Strip */}\n              <div className=\"border-border bg-muted/30 flex items-center justify-between rounded-lg border p-3\">\n                <div className=\"flex items-center gap-2.5\">\n                  <Avatar className=\"border-border size-9 border\">\n                    <AvatarFallback className=\"text-xs font-bold\">{selectedOrder.customerInitials}</AvatarFallback>\n                  </Avatar>\n                  <div>\n                    <div className=\"text-foreground text-xs font-semibold\">{selectedOrder.customerName}</div>\n                    <div className=\"text-muted-foreground font-mono text-xs\">{selectedOrder.customerPhone}</div>\n                  </div>\n                </div>\n                <div className=\"text-right\">\n                  <div className=\"text-muted-foreground text-xs\">Pickup Verification PIN</div>\n                  <div className=\"text-primary font-mono text-sm font-bold tracking-widest\">\n                    {selectedOrder.verificationCode}\n                  </div>\n                </div>\n              </div>\n\n              {/* Staging & Bay Location Details */}\n              <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n                <div className=\"border-border space-y-1 rounded-md border p-2.5\">\n                  <div className=\"text-muted-foreground flex items-center gap-1 text-xs font-medium\">\n                    <Layers className=\"size-3.5\" />\n                    <span>Staging Bin Location</span>\n                  </div>\n                  <div className=\"text-foreground text-xs font-bold\">\n                    {selectedOrder.stagingLocation.zone} ·{' '}\n                    <span className=\"text-primary font-mono\">{selectedOrder.stagingLocation.bin}</span>\n                  </div>\n                  <div className=\"text-muted-foreground text-xs capitalize\">\n                    {selectedOrder.stagingLocation.type} unit storage\n                  </div>\n                </div>\n\n                <div className=\"border-border space-y-1 rounded-md border p-2.5\">\n                  <div className=\"text-muted-foreground flex items-center gap-1 text-xs font-medium\">\n                    <Car className=\"size-3.5\" />\n                    <span>Vehicle & Bay</span>\n                  </div>\n                  {selectedOrder.pickupMode === 'curbside' && selectedOrder.vehicleDetails ? (\n                    <>\n                      <div className=\"text-foreground truncate text-xs font-bold\">\n                        Spot #{selectedOrder.spotNumber} · {selectedOrder.vehicleDetails.makeModel}\n                      </div>\n                      <div className=\"text-muted-foreground font-mono text-xs\">\n                        Plate: {selectedOrder.vehicleDetails.plate}\n                      </div>\n                    </>\n                  ) : (\n                    <>\n                      <div className=\"text-foreground text-xs font-bold\">\n                        {selectedOrder.pickupDeskBay || 'Pickup Counter'}\n                      </div>\n                      <div className=\"text-muted-foreground text-xs\">\n                        Locker PIN: {selectedOrder.stagingLocation.lockerPin || 'N/A'}\n                      </div>\n                    </>\n                  )}\n                </div>\n              </div>\n\n              {/* Staged Items Checklist */}\n              <div className=\"space-y-2\">\n                <div className=\"text-foreground flex items-center justify-between text-xs font-medium\">\n                  <span>Order Items Checklist ({selectedOrder.items.length} items)</span>\n                  <span className=\"text-muted-foreground\">Total: ${selectedOrder.orderTotal.toFixed(2)}</span>\n                </div>\n                <div className=\"border-border max-h-40 space-y-1.5 overflow-y-auto rounded-md border p-2\">\n                  {selectedOrder.items.map((item) => (\n                    <div key={item.id} className=\"bg-muted/40 flex items-center justify-between rounded p-2 text-xs\">\n                      <div className=\"flex items-center gap-2\">\n                        <CheckCircle2 className=\"text-success size-3.5 shrink-0\" />\n                        <div>\n                          <div className=\"text-foreground font-medium\">{item.name}</div>\n                          <div className=\"text-muted-foreground font-mono text-xs\">\n                            SKU: {item.sku} · Qty: {item.quantity}\n                          </div>\n                        </div>\n                      </div>\n                      <div className=\"text-foreground font-mono text-xs font-medium\">\n                        ${(item.price * item.quantity).toFixed(2)}\n                      </div>\n                    </div>\n                  ))}\n                </div>\n              </div>\n            </div>\n\n            <DialogFooter className=\"gap-2 sm:gap-0\">\n              <Button variant=\"outline\" size=\"sm\" className=\"text-xs\" onClick={() => onOpenChange(false)}>\n                Close\n              </Button>\n              {selectedOrder.status !== 'completed' && (\n                <Button\n                  size=\"sm\"\n                  className=\"bg-success hover:bg-success/90 gap-1.5 text-xs text-white\"\n                  onClick={() => onMarkDelivered(selectedOrder.id)}\n                >\n                  <Check className=\"size-3.5\" />\n                  <span>Mark Delivered & Close</span>\n                </Button>\n              )}\n            </DialogFooter>\n          </>\n        )}\n      </DialogContent>\n    </Dialog>\n  )\n}\n",
      "type": "registry:block",
      "target": "~/components/blocks/OrderDetailDialog.tsx"
    },
    {
      "path": "packages/registry-react/blocks/store-pickup-curbside/StorePickupModals.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport { Bell, Car, CheckCircle2, MessageSquare, Send } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport { Button } from '@/components/ui/button'\nimport {\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogFooter,\n  DialogHeader,\n  DialogTitle,\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport type { PickupMode, PickupOrder } from './store-pickup-types'\n\ninterface StorePickupModalsProps {\n  checkInModalOpen: boolean\n  onCheckInModalOpenChange: (open: boolean) => void\n  notifyModalOpen: boolean\n  onNotifyModalOpenChange: (open: boolean) => void\n  newOrderModalOpen: boolean\n  onNewOrderModalOpenChange: (open: boolean) => void\n  orders: PickupOrder[]\n  selectedOrder: PickupOrder | null\n  storeName: string\n  onConfirmArrival: (payload: {\n    orderId: string\n    spot: string\n    vehicleModel: string\n    plate: string\n    hazards: boolean\n    notes: string\n  }) => void\n  onSendNotification: (channel: 'sms' | 'push') => void\n  onCreateOrder: (payload: {\n    customerName: string\n    customerPhone: string\n    pickupMode: PickupMode\n    spotNumber: string\n    stagingAisle: string\n    stagingBin: string\n    itemSummary: string\n    orderTotal: string\n  }) => void\n}\n\nexport function StorePickupModals({\n  checkInModalOpen,\n  onCheckInModalOpenChange,\n  notifyModalOpen,\n  onNotifyModalOpenChange,\n  newOrderModalOpen,\n  onNewOrderModalOpenChange,\n  orders,\n  selectedOrder,\n  storeName,\n  onConfirmArrival,\n  onSendNotification,\n  onCreateOrder,\n}: StorePickupModalsProps) {\n  // Check-in state\n  const [checkInOrderId, setCheckInOrderId] = React.useState('order-3')\n  const [checkInSpot, setCheckInSpot] = React.useState('4')\n  const [checkInVehicleModel, setCheckInVehicleModel] = React.useState('Silver Tesla Model 3')\n  const [checkInPlate, setCheckInPlate] = React.useState('7XYZ892')\n  const [checkInHazards, setCheckInHazards] = React.useState(true)\n  const [checkInNotes, setCheckInNotes] = React.useState('Parked in bay 4, trunk unlocked for contactless placement.')\n\n  // Notify state\n  const [notifyChannel, setNotifyChannel] = React.useState<'sms' | 'push'>('sms')\n  const [notifyMessageSent, setNotifyMessageSent] = React.useState(false)\n\n  // New Order state\n  const [newCustomerName, setNewCustomerName] = React.useState('')\n  const [newCustomerPhone, setNewCustomerPhone] = React.useState('')\n  const [newPickupMode, setNewPickupMode] = React.useState<PickupMode>('curbside')\n  const [newSpotNumber, setNewSpotNumber] = React.useState('3')\n  const [newStagingAisle, setNewStagingAisle] = React.useState('Aisle 01')\n  const [newStagingBin, setNewStagingBin] = React.useState('Bin A-12')\n  const [newItemSummary, setNewItemSummary] = React.useState('')\n  const [newOrderTotal, setNewOrderTotal] = React.useState('120.00')\n\n  const handleCheckInSubmit = () => {\n    onConfirmArrival({\n      orderId: checkInOrderId,\n      spot: checkInSpot,\n      vehicleModel: checkInVehicleModel,\n      plate: checkInPlate,\n      hazards: checkInHazards,\n      notes: checkInNotes,\n    })\n  }\n\n  const handleSendNotification = () => {\n    if (!selectedOrder) return\n    setNotifyMessageSent(true)\n    setTimeout(() => {\n      onSendNotification(notifyChannel)\n      setNotifyMessageSent(false)\n    }, 1000)\n  }\n\n  const handleCreateOrder = () => {\n    if (!newCustomerName) return\n    onCreateOrder({\n      customerName: newCustomerName,\n      customerPhone: newCustomerPhone,\n      pickupMode: newPickupMode,\n      spotNumber: newSpotNumber,\n      stagingAisle: newStagingAisle,\n      stagingBin: newStagingBin,\n      itemSummary: newItemSummary,\n      orderTotal: newOrderTotal,\n    })\n    setNewCustomerName('')\n    setNewCustomerPhone('')\n    setNewItemSummary('')\n  }\n\n  return (\n    <>\n      {/* Modal 1: Customer \"I'm Here\" Parking Spot Check-in Dialog */}\n      <Dialog open={checkInModalOpen} onOpenChange={onCheckInModalOpenChange}>\n        <DialogContent className=\"sm:max-w-md\">\n          <DialogHeader>\n            <div className=\"flex items-center gap-2\">\n              <div className=\"border-warning/20 bg-warning/10 text-warning flex size-8 items-center justify-center rounded-lg border\">\n                <Car className=\"size-4\" />\n              </div>\n              <div>\n                <DialogTitle className=\"text-base font-bold\">Customer Parking Arrival Check-In</DialogTitle>\n                <DialogDescription className=\"text-xs\">\n                  Check in customer arriving at the curbside pickup bay or simulate customer mobile app check-in.\n                </DialogDescription>\n              </div>\n            </div>\n          </DialogHeader>\n\n          <div className=\"space-y-4 py-2 text-xs\">\n            {/* Select Order to Check In */}\n            <div className=\"space-y-1.5\">\n              <label className=\"text-foreground font-medium\">Select Customer Order</label>\n              <Select value={checkInOrderId} onValueChange={setCheckInOrderId}>\n                <SelectTrigger className=\"h-9 text-xs\">\n                  <SelectValue placeholder=\"Select active order\" />\n                </SelectTrigger>\n                <SelectContent>\n                  {orders\n                    .filter((x) => x.status !== 'completed')\n                    .map((o) => (\n                      <SelectItem key={o.id} value={o.id}>\n                        {o.customerName} · #{o.orderNumber} ({o.items.length} items)\n                      </SelectItem>\n                    ))}\n                </SelectContent>\n              </Select>\n            </div>\n\n            {/* Select Parking Spot */}\n            <div className=\"space-y-1.5\">\n              <label className=\"text-foreground font-medium\">Curbside Parking Bay</label>\n              <div className=\"grid grid-cols-6 gap-1.5\">\n                {['1', '2', '3', '4', '5', '6'].map((spot) => (\n                  <button\n                    key={spot}\n                    type=\"button\"\n                    className={cn(\n                      'flex flex-col items-center justify-center rounded-md border py-2 text-xs font-semibold transition-colors duration-150',\n                      checkInSpot === spot\n                        ? 'border-success bg-success/10 text-success ring-success/30 text-success ring-2'\n                        : 'border-border bg-card text-muted-foreground hover:border-foreground/20 hover:text-foreground',\n                    )}\n                    onClick={() => setCheckInSpot(spot)}\n                  >\n                    <span>Bay</span>\n                    <span className=\"text-sm font-bold\">#{spot}</span>\n                  </button>\n                ))}\n              </div>\n            </div>\n\n            {/* Vehicle Information */}\n            <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">Vehicle Make & Model</label>\n                <Input\n                  value={checkInVehicleModel}\n                  onChange={(e) => setCheckInVehicleModel(e.target.value)}\n                  placeholder=\"e.g. Silver Tesla Model 3\"\n                  className=\"h-8 text-xs\"\n                />\n              </div>\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">License Plate</label>\n                <Input\n                  value={checkInPlate}\n                  onChange={(e) => setCheckInPlate(e.target.value)}\n                  placeholder=\"e.g. 7XYZ892\"\n                  className=\"h-8 font-mono text-xs uppercase\"\n                />\n              </div>\n            </div>\n\n            {/* Arrival Notes */}\n            <div className=\"space-y-1.5\">\n              <label className=\"text-foreground font-medium\">Arrival Instructions & Bay Notes</label>\n              <Input\n                value={checkInNotes}\n                onChange={(e) => setCheckInNotes(e.target.value)}\n                placeholder=\"e.g. Trunk unlocked, hazard lights on\"\n                className=\"h-8 text-xs\"\n              />\n            </div>\n\n            {/* Hazard Lights Checkbox Simulation */}\n            <div className=\"border-border bg-muted/40 flex items-center gap-2 rounded-md border p-2.5\">\n              <input\n                id=\"hazards-checkbox\"\n                checked={checkInHazards}\n                onChange={(e) => setCheckInHazards(e.target.checked)}\n                type=\"checkbox\"\n                className=\"border-border text-primary focus:ring-primary size-4 rounded\"\n              />\n              <label htmlFor=\"hazards-checkbox\" className=\"text-foreground cursor-pointer text-xs\">\n                Vehicle hazard lights are actively flashing for runner identification\n              </label>\n            </div>\n          </div>\n\n          <DialogFooter className=\"gap-2 sm:gap-0\">\n            <DialogClose asChild>\n              <Button variant=\"outline\" size=\"sm\" className=\"text-xs\">\n                Cancel\n              </Button>\n            </DialogClose>\n            <Button\n              size=\"sm\"\n              className=\"bg-success hover:bg-success/90 gap-1.5 text-xs text-white\"\n              onClick={handleCheckInSubmit}\n            >\n              <CheckCircle2 className=\"size-3.5\" />\n              <span>Confirm Arrival & Alert Runner</span>\n            </Button>\n          </DialogFooter>\n        </DialogContent>\n      </Dialog>\n\n      {/* Modal 2: Notify Customer Dialog */}\n      <Dialog open={notifyModalOpen} onOpenChange={onNotifyModalOpenChange}>\n        <DialogContent className=\"sm:max-w-md\">\n          {selectedOrder && (\n            <DialogHeader>\n              <DialogTitle className=\"text-base font-bold\">Notify Customer</DialogTitle>\n              <DialogDescription className=\"text-xs\">\n                Send real-time pickup status alert to {selectedOrder.customerName} ({selectedOrder.customerPhone}).\n              </DialogDescription>\n            </DialogHeader>\n          )}\n\n          {selectedOrder && (\n            <div className=\"space-y-4 py-2 text-xs\">\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">Notification Channel</label>\n                <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n                  <button\n                    type=\"button\"\n                    className={cn(\n                      'flex items-center justify-center gap-1.5 rounded-md border py-2 text-xs font-semibold transition-colors',\n                      notifyChannel === 'sms'\n                        ? 'border-primary bg-primary/10 text-primary'\n                        : 'border-border bg-card text-muted-foreground',\n                    )}\n                    onClick={() => setNotifyChannel('sms')}\n                  >\n                    <MessageSquare className=\"size-3.5\" />\n                    <span>SMS Text Message</span>\n                  </button>\n                  <button\n                    type=\"button\"\n                    className={cn(\n                      'flex items-center justify-center gap-1.5 rounded-md border py-2 text-xs font-semibold transition-colors',\n                      notifyChannel === 'push'\n                        ? 'border-primary bg-primary/10 text-primary'\n                        : 'border-border bg-card text-muted-foreground',\n                    )}\n                    onClick={() => setNotifyChannel('push')}\n                  >\n                    <Bell className=\"size-3.5\" />\n                    <span>Mobile App Push</span>\n                  </button>\n                </div>\n              </div>\n\n              <div className=\"border-border bg-muted/40 space-y-1.5 rounded-md border p-3 text-xs\">\n                <div className=\"text-foreground flex items-center justify-between font-medium\">\n                  <span>Message Preview</span>\n                  <span className=\"text-muted-foreground font-mono\">160 chars</span>\n                </div>\n                <p className=\"text-muted-foreground text-xs leading-relaxed\">\n                  \"Hi {selectedOrder.customerName}, your Order #{selectedOrder.orderNumber} is ready at {storeName}!\n                  Pull into Curbside Spot #{selectedOrder.spotNumber || '1-6'} and tap 'I'm Here' for runner delivery.\"\n                </p>\n              </div>\n            </div>\n          )}\n\n          <DialogFooter className=\"gap-2 sm:gap-0\">\n            <DialogClose asChild>\n              <Button variant=\"outline\" size=\"sm\" className=\"text-xs\">\n                Cancel\n              </Button>\n            </DialogClose>\n            <Button size=\"sm\" className=\"gap-1.5 text-xs\" disabled={notifyMessageSent} onClick={handleSendNotification}>\n              <Send className=\"size-3.5\" />\n              <span>{notifyMessageSent ? 'Notification Sent!' : 'Send Alert'}</span>\n            </Button>\n          </DialogFooter>\n        </DialogContent>\n      </Dialog>\n\n      {/* Modal 3: New Pickup Order Staging Dialog */}\n      <Dialog open={newOrderModalOpen} onOpenChange={onNewOrderModalOpenChange}>\n        <DialogContent className=\"sm:max-w-md\">\n          <DialogHeader>\n            <DialogTitle className=\"text-base font-bold\">Stage New Pickup Order</DialogTitle>\n            <DialogDescription className=\"text-xs\">\n              Register an incoming online BOPIS order into retail staging shelves or lockers.\n            </DialogDescription>\n          </DialogHeader>\n\n          <div className=\"space-y-3.5 py-2 text-xs\">\n            <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">Customer Name</label>\n                <Input\n                  value={newCustomerName}\n                  onChange={(e) => setNewCustomerName(e.target.value)}\n                  placeholder=\"e.g. Alex Morgan\"\n                  className=\"h-8 text-xs\"\n                />\n              </div>\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">Customer Phone</label>\n                <Input\n                  value={newCustomerPhone}\n                  onChange={(e) => setNewCustomerPhone(e.target.value)}\n                  placeholder=\"e.g. (415) 555-0199\"\n                  className=\"h-8 font-mono text-xs\"\n                />\n              </div>\n            </div>\n\n            <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">Pickup Mode</label>\n                <Select value={newPickupMode} onValueChange={(val) => setNewPickupMode(val as PickupMode)}>\n                  <SelectTrigger className=\"h-8 text-xs\">\n                    <SelectValue />\n                  </SelectTrigger>\n                  <SelectContent>\n                    <SelectItem value=\"curbside\">Curbside Bay</SelectItem>\n                    <SelectItem value=\"in_store\">In-Store Desk</SelectItem>\n                  </SelectContent>\n                </Select>\n              </div>\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">Preferred Bay / Desk</label>\n                <Select value={newSpotNumber} onValueChange={setNewSpotNumber}>\n                  <SelectTrigger className=\"h-8 text-xs\">\n                    <SelectValue />\n                  </SelectTrigger>\n                  <SelectContent>\n                    <SelectItem value=\"1\">Bay #1</SelectItem>\n                    <SelectItem value=\"2\">Bay #2</SelectItem>\n                    <SelectItem value=\"3\">Bay #3</SelectItem>\n                    <SelectItem value=\"4\">Bay #4</SelectItem>\n                    <SelectItem value=\"5\">Bay #5</SelectItem>\n                    <SelectItem value=\"6\">Bay #6</SelectItem>\n                  </SelectContent>\n                </Select>\n              </div>\n            </div>\n\n            <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">Staging Aisle</label>\n                <Input\n                  value={newStagingAisle}\n                  onChange={(e) => setNewStagingAisle(e.target.value)}\n                  placeholder=\"e.g. Aisle 01\"\n                  className=\"h-8 text-xs\"\n                />\n              </div>\n              <div className=\"space-y-1.5\">\n                <label className=\"text-foreground font-medium\">Staging Bin</label>\n                <Input\n                  value={newStagingBin}\n                  onChange={(e) => setNewStagingBin(e.target.value)}\n                  placeholder=\"e.g. Bin B-05\"\n                  className=\"h-8 text-xs\"\n                />\n              </div>\n            </div>\n\n            <div className=\"space-y-1.5\">\n              <label className=\"text-foreground font-medium\">Items Summary</label>\n              <Input\n                value={newItemSummary}\n                onChange={(e) => setNewItemSummary(e.target.value)}\n                placeholder=\"e.g. Noise Cancelling Earbuds, Travel Case\"\n                className=\"h-8 text-xs\"\n              />\n            </div>\n\n            <div className=\"space-y-1.5\">\n              <label className=\"text-foreground font-medium\">Order Total ($)</label>\n              <Input\n                value={newOrderTotal}\n                onChange={(e) => setNewOrderTotal(e.target.value)}\n                placeholder=\"120.00\"\n                className=\"h-8 font-mono text-xs\"\n              />\n            </div>\n          </div>\n\n          <DialogFooter className=\"gap-2 sm:gap-0\">\n            <DialogClose asChild>\n              <Button variant=\"outline\" size=\"sm\" className=\"text-xs\">\n                Cancel\n              </Button>\n            </DialogClose>\n            <Button size=\"sm\" className=\"text-xs\" disabled={!newCustomerName} onClick={handleCreateOrder}>\n              <span>Stage & Assign Bin</span>\n            </Button>\n          </DialogFooter>\n        </DialogContent>\n      </Dialog>\n    </>\n  )\n}\n",
      "type": "registry:block",
      "target": "~/components/blocks/StorePickupModals.tsx"
    },
    {
      "path": "packages/registry-react/blocks/store-pickup-curbside/store-pickup-types.ts",
      "content": "export type PickupMode = 'curbside' | 'in_store'\nexport type OrderStatus = 'arrived' | 'en_route' | 'ready_staging' | 'completed'\n\nexport interface OrderItem {\n  id: string\n  name: string\n  sku: string\n  quantity: number\n  price: number\n  staged: boolean\n  category: string\n}\n\nexport interface PickupOrder {\n  id: string\n  orderNumber: string\n  customerName: string\n  customerPhone: string\n  customerInitials: string\n  avatar?: string\n  pickupMode: PickupMode\n  spotNumber?: number\n  vehicleDetails?: {\n    makeModel: string\n    plate: string\n    hazardsFlashing?: boolean\n  }\n  pickupDeskBay?: string\n  status: OrderStatus\n  statusLabel: string\n  etaMinutes?: number\n  distanceMiles?: number\n  waitMinutes?: number\n  stagingLocation: {\n    zone: string\n    bin: string\n    lockerPin?: string\n    type: 'shelf' | 'locker' | 'bulky'\n  }\n  items: OrderItem[]\n  orderTotal: number\n  placedAt: string\n  readyAt: string\n  arrivedAt?: string\n  verificationCode: string\n  assignedRunner?: string\n}\n\nexport interface StorePickupCurbsideProps {\n  storeName?: string\n  storeCode?: string\n  initialModeFilter?: 'all' | 'curbside' | 'in_store'\n  className?: string\n}\n",
      "type": "registry:block",
      "target": "~/components/blocks/store-pickup-types.ts"
    },
    {
      "path": "packages/registry-react/blocks/store-pickup-curbside/store-pickup-data.ts",
      "content": "import type { PickupOrder } from './store-pickup-types'\n\nexport const INITIAL_ORDERS: PickupOrder[] = [\n  {\n    id: 'order-1',\n    orderNumber: 'BOPIS-84920',\n    customerName: 'Elena Rostova',\n    customerPhone: '(415) 555-0192',\n    customerInitials: 'ER',\n    pickupMode: 'curbside',\n    spotNumber: 4,\n    vehicleDetails: {\n      makeModel: 'Silver Tesla Model 3',\n      plate: '7XYZ892',\n      hazardsFlashing: true,\n    },\n    status: 'arrived',\n    statusLabel: 'Customer Arrived · Waiting 2m',\n    waitMinutes: 2,\n    stagingLocation: {\n      zone: 'Aisle 02',\n      bin: 'Bin B-14',\n      type: 'shelf',\n    },\n    items: [\n      {\n        id: 'item-1',\n        name: 'Studio Pro Wireless Headphones',\n        sku: 'AUD-902-BLK',\n        quantity: 1,\n        price: 249.0,\n        staged: true,\n        category: 'Audio',\n      },\n      {\n        id: 'item-2',\n        name: 'Carbon Runner Wind Jacket',\n        sku: 'APP-410-MED',\n        quantity: 1,\n        price: 100.0,\n        staged: true,\n        category: 'Apparel',\n      },\n    ],\n    orderTotal: 349.0,\n    placedAt: '11:20 AM',\n    readyAt: '11:35 AM',\n    arrivedAt: '11:42 AM',\n    verificationCode: '4920',\n    assignedRunner: 'Jordan Miller',\n  },\n  {\n    id: 'order-2',\n    orderNumber: 'BOPIS-84919',\n    customerName: 'David Chen',\n    customerPhone: '(415) 555-0841',\n    customerInitials: 'DC',\n    pickupMode: 'curbside',\n    spotNumber: 2,\n    vehicleDetails: {\n      makeModel: 'Midnight Blue Rivian R1T',\n      plate: '8ABC104',\n      hazardsFlashing: true,\n    },\n    status: 'arrived',\n    statusLabel: 'Customer Arrived · Waiting 4m',\n    waitMinutes: 4,\n    stagingLocation: {\n      zone: 'Aisle 01',\n      bin: 'Bin A-08',\n      type: 'bulky',\n    },\n    items: [\n      {\n        id: 'item-3',\n        name: '4K Ultra HD Smart Monitor 27\"',\n        sku: 'DIS-270-4K',\n        quantity: 1,\n        price: 380.0,\n        staged: true,\n        category: 'Displays',\n      },\n      {\n        id: 'item-4',\n        name: 'Ergonomic Desk Stand',\n        sku: 'ACC-110-SLV',\n        quantity: 1,\n        price: 110.0,\n        staged: true,\n        category: 'Accessories',\n      },\n      {\n        id: 'item-5',\n        name: '100W USB-C Thunderbolt Dock',\n        sku: 'DOK-090-BLK',\n        quantity: 1,\n        price: 90.0,\n        staged: true,\n        category: 'Power',\n      },\n    ],\n    orderTotal: 580.0,\n    placedAt: '10:45 AM',\n    readyAt: '11:10 AM',\n    arrivedAt: '11:40 AM',\n    verificationCode: '8419',\n    assignedRunner: 'Marcus Lee',\n  },\n  {\n    id: 'order-3',\n    orderNumber: 'BOPIS-84918',\n    customerName: 'Marcus Vance',\n    customerPhone: '(415) 555-0329',\n    customerInitials: 'MV',\n    pickupMode: 'in_store',\n    pickupDeskBay: 'Pickup Desk Bay 01',\n    status: 'en_route',\n    statusLabel: 'En Route · 6 min ETA',\n    etaMinutes: 6,\n    distanceMiles: 1.4,\n    stagingLocation: {\n      zone: 'Locker #12',\n      bin: 'Bin L-12',\n      lockerPin: '8491',\n      type: 'locker',\n    },\n    items: [\n      {\n        id: 'item-6',\n        name: 'Pro Max Mirrorless Camera Kit',\n        sku: 'CAM-800-PRO',\n        quantity: 1,\n        price: 1299.0,\n        staged: true,\n        category: 'Photography',\n      },\n    ],\n    orderTotal: 1299.0,\n    placedAt: '11:05 AM',\n    readyAt: '11:28 AM',\n    verificationCode: '9182',\n    assignedRunner: 'Staging Auto-Lock',\n  },\n  {\n    id: 'order-4',\n    orderNumber: 'BOPIS-84917',\n    customerName: 'Aisha Patel',\n    customerPhone: '(415) 555-0782',\n    customerInitials: 'AP',\n    pickupMode: 'in_store',\n    pickupDeskBay: 'Pickup Desk Bay 03',\n    status: 'ready_staging',\n    statusLabel: 'Ready in Staging Locker #04',\n    stagingLocation: {\n      zone: 'Aisle 03',\n      bin: 'Bin C-02',\n      lockerPin: '3719',\n      type: 'locker',\n    },\n    items: [\n      {\n        id: 'item-7',\n        name: 'Organic Single-Origin Espresso Blend',\n        sku: 'COF-012-ESP',\n        quantity: 2,\n        price: 38.0,\n        staged: true,\n        category: 'Beverage',\n      },\n      {\n        id: 'item-8',\n        name: 'Precision Gooseneck Pour-Over Kettle',\n        sku: 'KET-044-SS',\n        quantity: 1,\n        price: 74.5,\n        staged: true,\n        category: 'Kitchen',\n      },\n      {\n        id: 'item-9',\n        name: 'Digital Barista Gram Scale',\n        sku: 'SCL-019-DIG',\n        quantity: 1,\n        price: 30.0,\n        staged: true,\n        category: 'Kitchen',\n      },\n    ],\n    orderTotal: 142.5,\n    placedAt: '10:15 AM',\n    readyAt: '10:50 AM',\n    verificationCode: '1742',\n    assignedRunner: 'Desk Associate',\n  },\n  {\n    id: 'order-5',\n    orderNumber: 'BOPIS-84916',\n    customerName: 'Sarah Jenkins',\n    customerPhone: '(415) 555-0453',\n    customerInitials: 'SJ',\n    pickupMode: 'curbside',\n    spotNumber: 1,\n    vehicleDetails: {\n      makeModel: 'White Toyota RAV4',\n      plate: '6MNO451',\n      hazardsFlashing: false,\n    },\n    status: 'en_route',\n    statusLabel: 'En Route · 12 min ETA',\n    etaMinutes: 12,\n    distanceMiles: 3.8,\n    stagingLocation: {\n      zone: 'Aisle 02',\n      bin: 'Bin B-03',\n      type: 'shelf',\n    },\n    items: [\n      {\n        id: 'item-10',\n        name: 'Ultra Hydration 20L Trail Backpack',\n        sku: 'OUT-220-BLU',\n        quantity: 1,\n        price: 130.0,\n        staged: true,\n        category: 'Outdoors',\n      },\n      {\n        id: 'item-11',\n        name: 'Carbon Composite Trekking Poles (Pair)',\n        sku: 'OUT-771-CAR',\n        quantity: 1,\n        price: 80.0,\n        staged: true,\n        category: 'Outdoors',\n      },\n    ],\n    orderTotal: 210.0,\n    placedAt: '11:15 AM',\n    readyAt: '11:38 AM',\n    verificationCode: '9160',\n    assignedRunner: 'Unassigned',\n  },\n]\n",
      "type": "registry:block",
      "target": "~/components/blocks/store-pickup-data.ts"
    }
  ],
  "dependencies": [
    "lucide-react"
  ],
  "devDependencies": [],
  "registryDependencies": [
    "https://uipkge.dev/r/react/avatar.json",
    "https://uipkge.dev/r/react/badge.json",
    "https://uipkge.dev/r/react/button.json",
    "https://uipkge.dev/r/react/card.json",
    "https://uipkge.dev/r/react/dialog.json",
    "https://uipkge.dev/r/react/dropdown-menu.json",
    "https://uipkge.dev/r/react/input.json",
    "https://uipkge.dev/r/react/select.json",
    "https://uipkge.dev/r/react/table.json"
  ],
  "description": "Buy Online Pick Up in Store (BOPIS) & curbside pickup coordination board with customer arrival parking check-in, real-time staging bin tracking, runner fulfillment dispatch, and SLA monitoring.",
  "categories": [
    "commerce",
    "app",
    "ecommerce",
    "logistics"
  ]
}