MONALEESA-2: Ribociclib Extends Survival by 12.5 Months
Theme
MONALEESA-2 Phase 3 Results
Source
Source: Hortobagyi GN, Stemmer SM, Burris HA, et al. Overall Survival with Ribociclib plus Letrozole in Advanced Breast Cancer. N Engl J Med. 2022;386:942-50. This document reports the final overall survival analysis of the MONALEESA-2 trial.
First-Line Ribociclib + Letrozole in HR+/HER2- Advanced Breast Cancer Hortobagyi et al., NEJM (2022) • Median Follow-up: 6.6 Years
Median OS Gain
+12.5 Months
Ribociclib arm: 63.9 mo vs. 51.4 mo (Placebo).
Relative Risk Reduction
24%
HR: 0.76 (95% CI, 0.63–0.93; P=0.008)
N=668 Patients
Postmenopausal, HR+/HER2-
Intervention
Ribociclib (600mg) + Letrozole
Longest Follow-up
Median 80 Months (6.6 Yrs)
Median Overall Survival
First time median OS > 5 years reported in this setting.
6-Year Survival Rate
Group
Survival %
Ribociclib + Let.
44.2%
Placebo + Let.
32.0%
Safety Profile
No new safety signals observed despite longer treatment exposure (20.2 vs 14.1 months).
Clinical Recommendation
Adopt Ribociclib plus Letrozole as a preferred first-line standard of care. The data demonstrates a statistically significant OS benefit of >1 year, validating this combination to maximize longevity before disease progression.
AbbreviationsQuick
CDK4/6, cyclin-dependent kinases 4 and 6; CI, confidence interval; ECOG, Eastern Cooperative Oncology Group; ER, estrogen receptor; HER2, human epidermal growth factor receptor 2; HR, hormone receptor; NE, could not be estimated; PgR, progesterone receptor.
Bibliography8
Hortobagyi GN, Stemmer SM, Burris HA, et al. Overall Survival with Ribociclib plus Letrozole in Advanced Breast Cancer. N Engl J Med. 2022;386:942-50. (DOI: 10.1056/NEJMoa2114663)
Hortobagyi GN, Stemmer SM, Burris HA, et al. Ribociclib as first-line therapy for HR-positive, advanced breast cancer. N Engl J Med 2016;375:1738-48.
Im S-A, Lu Y-S, Bardia A, et al. Overall survival with ribociclib plus endocrine therapy in breast cancer. N Engl J Med 2019; 381: 307-16.
Slamon DJ, Neven P, Chia S, et al. Overall survival with ribociclib plus fulvestrant in advanced breast cancer. N Engl J Med 2020; 382: 514-24.
Turner NC, Slamon DJ, Ro J, et al. Overall survival with palbociclib and fulvestrant in advanced breast cancer. N Engl J Med 2018; 379:1926-36.
Goetz MP, Toi M, Campone M, et al. MONARCH 3: abemaciclib as initial therapy for advanced breast cancer. J Clin Oncol 2017;35:3638-46.
Cristofanilli M, Turner NC, Bondarenko I, et al. Fulvestrant plus palbociclib versus fulvestrant plus placebo for treatment of hormone-receptor-positive, HER2-negative metastatic breast cancer that progressed on previous endocrine therapy (PALOMA-3): final analysis of the multicentre, double-blind, phase 3 randomised controlled trial. Lancet Oncol 2016; 17:425-39.
Başaran GA, Twelves C, Diéras V, Cortés J, Awada A. Ongoing unmet needs in treating estrogen receptor-positive/HER2-negative metastatic breast cancer. Cancer Treat Rev 2018; 63:144-55.
- Any id attributes you add MUST be unique on the page. Prefix all ids with "${prefix}".
- Never add class "mdwrt-item" to nested elements inside the root (root may already have it).`;
const instruction = elementRules + "
User instruction:
" + normalizeAIInstruction(instructionRaw);
// ✅ wrapper-first + capped context
const current_data = getAIContextForUpdate(600 * 1024);
return {
target_id: stableTargetId, // ✅ NOT "context_edit"
file_path: FILE_NAME,
current_data,
element_html: getSanitizedOuterHTML(targetEl),
instruction,
image: imageData || null
};
}
function applyAIUpdateToElement(targetEl, aiHtml, targetId, aiKey){
const newNode = parseSingleRootForTarget(String(aiHtml || "").trim(), targetEl);
if (!newNode || !newNode.tagName) throw new Error("AI returned invalid HTML.");
const oldTag = (targetEl.tagName || "").toLowerCase();
const newTag = (newNode.tagName || "").toLowerCase();
if (oldTag && newTag && oldTag !== newTag) {
throw new Error(`AI returned <${newTag}> instead of <${oldTag}>.`);
}
// sanitize + enforce ids
sanitizeAIElement(newNode);
ensureIdsPrefixedAndUnique(newNode, `${targetId}__`);
// preserve identity
if (targetEl.dataset?.itemId) newNode.dataset.itemId = targetEl.dataset.itemId;
if (targetEl.dataset?.zoneId) newNode.dataset.zoneId = targetEl.dataset.zoneId;
if (aiKey) newNode.dataset.aiKey = aiKey;
targetEl.replaceWith(newNode);
return newNode;
}
function shrinkPayloadIfNeeded(payload, maxBytes = 950 * 1024){
// Try to keep JSON under ~1MB to avoid nginx/proxy limits
let body = JSON.stringify(payload);
let bytes = utf8Bytes(body);
if (bytes <= maxBytes) return payload;
// 1) reduce context first
payload.current_data = truncateUtf8(payload.current_data, 250 * 1024);
body = JSON.stringify(payload);
bytes = utf8Bytes(body);
if (bytes <= maxBytes) return payload;
// 2) reduce instruction
payload.instruction = truncateUtf8(payload.instruction, 220 * 1024);
body = JSON.stringify(payload);
bytes = utf8Bytes(body);
if (bytes <= maxBytes) return payload;
// 3) last resort: drop context completely (still works for many edits)
payload.current_data = "";
return payload;
}
function waitFor(checkFn, timeoutMs = 10000, stepMs = 25) {
return new Promise((resolve, reject) => {
const t0 = Date.now();
(function tick(){
try { if (checkFn()) return resolve(true); } catch(e) {}
if (Date.now() - t0 > timeoutMs) return reject(new Error('timeout'));
setTimeout(tick, stepMs);
})();
});
}
// -----------------------------
// Export PDF / Print (CONTAINER ONLY)
// -----------------------------
function cloneContainerForExport(){
const src = document.getElementById("infographic-container") || document.querySelector(".container");
if(!src) return null;
const clone = src.cloneNode(true);
clone.querySelectorAll(".editor-controls, .resize-handle, .resize-handle-tl, .container-bar, .container-resize-handle").forEach(n => n.remove());
clone.querySelectorAll(".editor-block").forEach(n => {
n.classList.remove("editor-hover","editor-selected");
n.classList.remove("ai-working");
});
clone.querySelectorAll(".drop-spacer").forEach(n => n.remove());
return clone;
}
function setMenuButtonsForMode(mode){
// editor-only
const idsEditorOnly = ["m-edit","m-edit-chart","m-block","m-reset","m-undo","m-redo"];
// always ok
const idsAlways = ["m-copy","m-parent"];
if(mode === "view"){
idsEditorOnly.forEach(id => { const b = menu.querySelector("#"+id); if(b) b.style.display = "none"; });
idsAlways.forEach(id => { const b = menu.querySelector("#"+id); if(b) b.style.display = "block"; });
// title hint
const t = menu.querySelector("#menu-title");
if(t) t.style.background = "#f8f9fa";
return;
}
// mode === "editor"
idsEditorOnly.forEach(id => { const b = menu.querySelector("#"+id); if(b) b.style.display = "block"; });
idsAlways.forEach(id => { const b = menu.querySelector("#"+id); if(b) b.style.display = "block"; });
}
async function exportContainerAsPDF(){
const container = document.getElementById("infographic-container") || document.querySelector(".container");
if(!container) throw new Error("Container not found");
const hover = document.getElementById("hover-box");
const menu = document.getElementById("smart-menu");
const modal = document.getElementById("ai-edit-modal");
if(hover) hover.style.display = "none";
if(menu) menu.style.display = "none";
if(modal) modal.style.display = "none";
const clone = cloneContainerForExport();
if(!clone) throw new Error("Clone failed");
const wrap = document.createElement("div");
wrap.style.cssText = "position:fixed; left:-10000px; top:0; width:1000px;";
wrap.appendChild(clone);
document.body.appendChild(wrap);
try{
const bg = getComputedStyle(document.documentElement).getPropertyValue("--bg-color").trim() || "#ffffff";
const canvas = await html2canvas(clone, {
scale: 2,
useCORS: true,
backgroundColor: bg,
logging: false,
windowWidth: clone.scrollWidth,
windowHeight: clone.scrollHeight
});
const { jsPDF } = (window.jspdf || {});
if(!jsPDF) throw new Error("jsPDF not loaded");
const pdf = new jsPDF("p","pt","a4");
const pageW = pdf.internal.pageSize.getWidth();
const pageH = pdf.internal.pageSize.getHeight();
const imgW = canvas.width;
const imgH = canvas.height;
const scale = Math.min(pageW / imgW, pageH / imgH);
const renderW = imgW * scale;
let y = 0;
const sliceH = Math.floor(pageH / scale);
while (y < imgH) {
const sliceCanvas = document.createElement("canvas");
sliceCanvas.width = imgW;
sliceCanvas.height = Math.min(sliceH, imgH - y);
const ctx = sliceCanvas.getContext("2d");
ctx.drawImage(canvas, 0, y, imgW, sliceCanvas.height, 0, 0, imgW, sliceCanvas.height);
const sliceData = sliceCanvas.toDataURL("image/png");
const sliceRenderH = sliceCanvas.height * scale;
if (y > 0) pdf.addPage();
pdf.addImage(sliceData, "PNG", 0, 0, renderW, sliceRenderH);
y += sliceH;
}
const safeName = (BASE_TITLE || "infographic").toString().replace(/[^a-z0-9\-_]+/gi, "_").slice(0,60);
pdf.save(safeName + ".pdf");
} finally {
wrap.remove();
}
}
function printContainerOnly(){
const clone = cloneContainerForExport();
if(!clone) return alert("Print failed: container not found");
const w = window.open("", "_blank");
if(!w) return alert("Popup blocked. Allow popups to print.");
const styleTags = Array.from(document.querySelectorAll("style")).map(s => s.outerHTML).join(` `);
const linkTags = Array.from(document.querySelectorAll("link[rel='stylesheet'],link[href*='fonts']")).map(l => l.outerHTML).join(` `);
const CLOSE_SCRIPT = "";
w.document.open();
w.document.write(`
${(BASE_TITLE||"Infographic").toString().replace(/
${linkTags}
${styleTags}
${clone.outerHTML}