+
+ {#if hoveredProduct.productDescription}
+
+ {hoveredProduct.productDescription}
+
+ {/if}
+ {#if hoveredProduct.forecastDescription && hoveredProduct.forecastDescription !== hoveredProduct.productDescription}
+
+ Forecast
+ {hoveredProduct.forecastDescription}
+
+ {/if}
+ {#if hoveredProduct.forecastType}
+
+ Type
+ {hoveredProduct.forecastType}
+
+ {/if}
+ {#if hoveredProduct.productClass}
+
+ Class
+ {hoveredProduct.productClass}
+
+ {/if}
+
+
+ Qty
+ {hoveredProduct.quantity ?? "—"}
+
+
+ Revenue
+ {formatCurrency(hoveredProduct.revenue)}
+
+
+ Cost
+ {formatCurrency(hoveredProduct.cost)}
+
+
+ Margin
+ {formatCurrency(hoveredProduct.margin)}
+
+
+ Margin %
+ {productMarginPct(hoveredProduct)}
+
+
+ {#if hoveredProduct.cancellationType}
+
+ {hoveredProduct.cancellationType === "partial"
+ ? "Partially Cancelled"
+ : "Cancelled"}
+ {#if hoveredProduct.quantityCancelled}
+ — {hoveredProduct.quantityCancelled} unit{hoveredProduct.quantityCancelled !==
+ 1
+ ? "s"
+ : ""}
+ {/if}
+
+ {/if}
+ {#if hoveredProduct.recurringFlag}
+
Recurring
+ {/if}
+
+ {/if}
+
{#if activeProducts.length > 15}
+{activeProducts.length - 15} more item{activeProducts.length -
diff --git a/src/routes/sales/opportunity/[id]/components/ProductsTab.svelte b/src/routes/sales/opportunity/[id]/components/ProductsTab.svelte
index 0b3a84f..13f93aa 100644
--- a/src/routes/sales/opportunity/[id]/components/ProductsTab.svelte
+++ b/src/routes/sales/opportunity/[id]/components/ProductsTab.svelte
@@ -1,5 +1,7 @@