Internewscast Journal
  • Home
  • US News
  • Local News
  • Health
  • People
  • Guest Post
  • Support Our Cause
Internewscast Journal
  • Home
  • US News
  • Local News
  • Health
  • People
  • Guest Post
  • Support Our Cause
Home Business Why Apple Is Redesigning Every Mac—and What It Means for You
  • Business

Why Apple Is Redesigning Every Mac—and What It Means for You

  • No comments
  • 6 minute read
Total
0
Shares
Share 0
Tweet 0
Pin it 0
Why Apple Is Redesigning Every Mac It Sells

Up next

Court Filings Reveal Djimon Hounsou’s Recent Film Salaries After Underpaid Comments - Internewscast Journal

Court Filings Reveal Djimon Hounsou’s Recent Film Salaries After Underpaid Comments

Published on 24 July 2026

Author

Internewscast

Share article

The post has been shared by 0 people.
Facebook 0
X (Twitter) 0
Pinterest 0
Mail 0




Why Apple Is Redesigning Every Mac It Sells























Skip to main content

You’re viewing the US website. Looking for the Site edition?

Apple is preparing a sweeping Mac refresh as demand for AI-capable computers strains supply across parts of its lineup.

By

Jonathan Small


|


edited by
Dan Bova


|


Jul 24, 2026

Apple is struggling to keep pace with buyers seeking Macs powerful enough for artificial intelligence work, prompting the company to redesign nearly its entire computer lineup, according to Bloomberg. A significant share of the demand is coming from developers and enthusiasts who are using Mac minis and Mac Studios to run AI agents locally rather than relying on cloud-based computing. Some orders for those machines are now facing wait times of at least three months.

The biggest update on the horizon is expected to be a premium MacBook Pro in 14-inch and 16-inch sizes featuring both a touch screen and an OLED display — two firsts for the Mac. Those models are slated to arrive sometime between late this year and early next year. Apple is also expected to introduce a refreshed entry-level MacBook Pro and its first new iMacs in two years this fall.

The redesign push comes during an unusually active period for Apple’s Mac business. In June, the company raised Mac prices across the board, pointing to the same memory chip shortage now contributing to shipment delays. Apple is also set to launch a Klarna-backed device leasing program on July 28, a move aimed at making its increasingly costly hardware lineup more accessible to customers.

Apple can’t keep up with demand from AI users snapping up its computers, so it’s redesigning nearly all of them, Bloomberg reports. Much of that demand comes from hobbyists and developers running AI agents locally on Mac minis and Mac Studios instead of in the cloud. Some Mac mini and Mac Studio orders won’t ship for at least three months.

The headline release is a high-end 14-inch and 16-inch MacBook Pro with a touch screen and OLED display, both firsts for the Mac, arriving between late this year and early next year. A refreshed entry-level MacBook Pro and the first new iMacs in two years are expected this fall.

It’s the latest chapter in a busy year for Apple’s hardware business. The company already raised Mac prices across the board in June, citing the same memory chip shortage now delaying shipments, and it’s launching a Klarna-backed device leasing program on July 28 to make its increasingly expensive lineup easier to afford.

Jonathan Small is a bestselling author, journalist, producer, and podcast host. For 25 years, he… Read more

${reply?.comment_author}${reply?.eln_tier_label ? `${reply.eln_tier_label}` : ”}

•
${reply?.comment_relative_time}

${reply?.comment_content?.trim()}

`;
}

function createComment(comment, replies, isLastComment) {
const commentListDiv = document.getElementById(PublicCommentSelectors.LIST);

if (!commentListDiv) {
return;
}

const borderClasses = isLastComment ? ” : ‘tw:border-b tw:border-slate-200’;

const currentUser = window?.tp?.pianoId?.getUser() ?? null;
const currentUserInitials = currentUser
? getInitials(`${currentUser?.firstName ?? ”} ${currentUser?.lastName ?? ”}`)
: ”;

const repliesHTML = replies.length ? `

${replies.map(buildReplyHTML).join(”)}

` : ”;

const replyButtonHTML = allowsComments ? `

` : ”;

const replyFormHTML = allowsComments ? `

` : ”;

const commentDiv = `

${comment?.comment_author}${comment?.eln_tier_label ? “ : ”}

•
${comment?.comment_relative_time}

${comment?.comment_content?.trim()}

${replyButtonHTML}

${repliesHTML}
${replyFormHTML}

`;

commentListDiv.innerHTML += commentDiv;
}

function displayComments() {
// Empty out the comment list container before refreshing comments.
const commentListDiv = document.getElementById(PublicCommentSelectors.LIST);
commentListDiv.innerHTML = ”;

const comments = state?.comments ?? [];

if (!comments.length) {
return;
}

// Build a threaded structure: separate top-level from replies.
const repliesByParent = {};
const topLevelComments = [];

comments.forEach(comment => {
if (comment.comment_parent === 0) {
topLevelComments.push(comment);
} else {
const parentId = comment.comment_parent;
if (!repliesByParent[parentId]) {
repliesByParent[parentId] = [];
}
repliesByParent[parentId].push(comment);
}
});

// Apply top-level sort order. Server returns DESC; reverse for oldest-first.
if (state.sortOrder === ‘oldest’) {
topLevelComments.reverse();
}

// Replies always show oldest first within a thread (server returns DESC, so reverse).
Object.keys(repliesByParent).forEach(parentId => {
repliesByParent[parentId].reverse();
});

topLevelComments.forEach((comment, index) => {
const isLastComment = index === topLevelComments.length – 1;
const replies = repliesByParent[comment.comment_ID] ?? [];
createComment(comment, replies, isLastComment);
});

createCommentAvatars();
}

function updateCommentCount() {
const countDiv = document.getElementById(PublicCommentSelectors.COMMENT_COUNT);
const sortControls = document.getElementById(PublicCommentSelectors.SORT_CONTROLS);

if (!countDiv) {
return;
}

const count = state?.comments?.length ?? 0;

// Do not display if there are no comments.
if (count === 0) {
return;
}

countDiv.innerHTML = `${count} Comment${count > 1 ? ‘s’ : ”}`;

if (sortControls) {
sortControls.classList.remove(‘tw:hidden’);
sortControls.classList.add(‘tw:flex’);
}
}

function displayLoader(show) {
const loader = document.getElementById(PublicCommentSelectors.BUTTON_LOADER);
const text = document.getElementById(PublicCommentSelectors.BUTTON_TEXT);

if (!loader || !text) {
return;
}

// Show or hide the loader.
if (show) {
loader.classList.remove(‘tw:hidden’);
text.classList.add(‘tw:hidden’);
} else {
loader.classList.add(‘tw:hidden’);
text.classList.remove(‘tw:hidden’);
}
}

function displayError(error) {
const errorDiv = document.getElementById(PublicCommentSelectors.ERROR);

if (!errorDiv) {
return;
}

if (error) {
errorDiv.classList.add(‘tw:block’);
errorDiv.classList.remove(‘tw:hidden’);
errorDiv.textContent = `Comment submission error: ${error}`;
} else {
errorDiv.classList.remove(‘tw:block’);
errorDiv.classList.add(‘tw:hidden’);
errorDiv.textContent=””;
}
}

function clearCommentInput() {
const commentField = document.getElementById(PublicCommentSelectors.INPUT);

if (!commentField) {
return;
}

commentField.value=””;
}

function updateComments(comments = []) {
state.comments = comments;
displayComments();
updateCommentCount();
}

function runCommentProcess(type) {
if (type === ‘postComment’) {
const comment = document.getElementById(PublicCommentSelectors.INPUT);

if (!comment || !comment?.value) {
return;
}

// Hide errors, show loader.
displayError();
displayLoader(true);
}

const data = {
type,
postId: 443038,
};

// Get a fresh nonce and either fetch comments or post comment.
fetch(`${adminAjaxUrl}?action=ep_get_public_comment_nonce`, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
body: JSON.stringify(data),
})
.then((r) => r.json())
.then((response) => {
// Handle errors.
if (!response.success) {
displayLoader(false);
console.error(‘Error getting nonce: ‘, response?.data?.message);
return;
}

const nonce = response?.data?.nonce;

// Get comments.
if (type === ‘getComments’) {
getComments(nonce);
return;
}

// Post comment.
if (type === ‘postComment’) {
postComment(nonce);
}
})
.catch((e) => {
displayLoader(false);
console.error(`Error running comment process ${type}: `, e);
});
}

function getComments(nonce) {
const data = {
nonce,
postId: 443038,
};

// Fetch comments.
fetch(`${adminAjaxUrl}?action=ep_get_public_comments`, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
body: JSON.stringify(data),
})
.then((r) => r.json())
.then((response) => {
// Handle errors.
if (!response.success) {
displayLoader(false);
console.error(‘Error getting comments: ‘, response?.data?.message);
return;
}

updateComments(response?.data?.comments);
displayLoader(false);
})
.catch((e) => {
displayLoader(false);
console.error(‘Error getting comments: ‘, e);
});
}

function postComment(nonce) {
const user = window?.tp?.pianoId?.getUser() ?? null;

if (!user || !user?.uid) {
console.error(‘Error posting comment: Unauthorized. Submission aborted.’);
return;
}

const comment = document.getElementById(PublicCommentSelectors.INPUT);

if (!comment || !comment?.value) {
return;
}

const data = {
nonce,
comment: comment.value,
commentParent: 0,
postId: 443038,
uid: user?.uid,
};

// Post the comment.
fetch(`${adminAjaxUrl}?action=ep_create_public_comment`, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
credentials: ‘include’,
body: JSON.stringify(data),
})
.then((r) => r.json())
.then((response) => {
// Handle errors.
if (!response.success) {
displayLoader(false);
displayError(response?.data?.message, true);
console.error(‘Error posting comment: ‘, response?.data?.message);
return;
}

// Handle success.
clearCommentInput();
runCommentProcess(‘getComments’);
})
.catch((e) => {
displayLoader(false);
displayError(e);
console.error(‘Error posting comment: ‘, e);
});
}

function toggleReplyForm(commentId) {
// Close any other open reply forms.
document.querySelectorAll(‘.ep-reply-form’).forEach(function(form) {
if (form.dataset.parentId !== String(commentId)) {
form.classList.add(‘tw:hidden’);
}
});

// Toggle the targeted reply form.
const targetForm = document.querySelector(‘.ep-reply-form[data-parent-id=”‘ + commentId + ‘”]’);

if (targetForm) {
targetForm.classList.toggle(‘tw:hidden’);

if (!targetForm.classList.contains(‘tw:hidden’)) {
targetForm.querySelector(‘.ep-reply-input’)?.focus();
}
}
}

function setReplyLoading(formEl, isLoading) {
const btn = formEl.querySelector(‘.ep-reply-submit’);
const btnText = formEl.querySelector(‘.ep-reply-button-text’);

if (!btn || !btnText) {
return;
}

if (isLoading) {
btnText.textContent=”Posting…”;
btn.disabled = true;
} else {
btnText.textContent=”Post Reply”;
btn.disabled = false;
}
}

function displayReplyError(formEl, error) {
const errorDiv = formEl.querySelector(‘.ep-reply-error’);

if (!errorDiv || !error) {
return;
}

errorDiv.textContent=”Reply error: ” + error;
errorDiv.classList.remove(‘tw:hidden’);
errorDiv.classList.add(‘tw:block’);
}

function clearReplyError(formEl) {
const errorDiv = formEl.querySelector(‘.ep-reply-error’);

if (!errorDiv) {
return;
}

errorDiv.textContent=””;
errorDiv.classList.add(‘tw:hidden’);
errorDiv.classList.remove(‘tw:block’);
}

function postReply(nonce, parentId, replyText, formEl) {
const user = window?.tp?.pianoId?.getUser() ?? null;

if (!user || !user?.uid) {
setReplyLoading(formEl, false);
return;
}

const data = {
nonce,
comment: replyText,
commentParent: parentId,
postId: 443038,
uid: user?.uid,
};

fetch(`${adminAjaxUrl}?action=ep_create_public_comment`, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
credentials: ‘include’,
body: JSON.stringify(data),
})
.then((r) => r.json())
.then((response) => {
setReplyLoading(formEl, false);

if (!response.success) {
displayReplyError(formEl, response?.data?.message);
console.error(‘Error posting reply: ‘, response?.data?.message);
return;
}

formEl.querySelector(‘.ep-reply-input’).value=””;
formEl.classList.add(‘tw:hidden’);
runCommentProcess(‘getComments’);
})
.catch((e) => {
setReplyLoading(formEl, false);
displayReplyError(formEl, ‘Network error. Please try again.’);
console.error(‘Error posting reply: ‘, e);
});
}

function submitReply(parentId, formEl) {
const input = formEl.querySelector(‘.ep-reply-input’);

if (!input || !input.value.trim()) {
return;
}

const user = window?.tp?.pianoId?.getUser() ?? null;

if (!user || !user?.uid) {
openLoginModal();
return;
}

setReplyLoading(formEl, true);
clearReplyError(formEl);

const data = {
type: ‘postComment’,
postId: 443038,
};

fetch(`${adminAjaxUrl}?action=ep_get_public_comment_nonce`, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
body: JSON.stringify(data),
})
.then((r) => r.json())
.then((response) => {
if (!response.success) {
setReplyLoading(formEl, false);
displayReplyError(formEl, response?.data?.message);
return;
}

postReply(response?.data?.nonce, parseInt(parentId, 10), input.value.trim(), formEl);
})
.catch((e) => {
setReplyLoading(formEl, false);
displayReplyError(formEl, ‘Network error. Please try again.’);
console.error(‘Error getting nonce for reply: ‘, e);
});
}

function setupCommentListDelegation() {
const commentListDiv = document.getElementById(PublicCommentSelectors.LIST);

if (!commentListDiv) {
return;
}

commentListDiv.addEventListener(‘click’, function(e) {
// Reply button: toggle the inline reply form.
const replyButton = e.target.closest(‘.’ + PublicCommentSelectors.REPLY_BUTTON);
if (replyButton) {
const commentId = replyButton.dataset.commentId;
const user = window?.tp?.pianoId?.getUser() ?? null;

if (!user) {
openLoginModal();
return;
}

toggleReplyForm(commentId);
return;
}

// Reply cancel: hide the reply form.
const replyCancel = e.target.closest(‘.ep-reply-cancel’);
if (replyCancel) {
const parentId = replyCancel.dataset.parentId;
const form = document.querySelector(‘.ep-reply-form[data-parent-id=”‘ + parentId + ‘”]’);
if (form) {
form.classList.add(‘tw:hidden’);
}
return;
}

// Reply submit: post the reply.
const replySubmit = e.target.closest(‘.ep-reply-submit’);
if (replySubmit) {
const parentId = replySubmit.dataset.parentId;
const form = document.querySelector(‘.ep-reply-form[data-parent-id=”‘ + parentId + ‘”]’);
if (form) {
submitReply(parentId, form);
}
}
});
}

function setupUserAvatar() {
const usernameDiv = document.getElementById(PublicCommentSelectors.USERNAME);
const userAvatar = document.getElementById(PublicCommentSelectors.USER_AVATAR);

if (!usernameDiv || !userAvatar) {
return;
}

const user = window?.tp?.pianoId?.getUser() ?? null;

if (!user) {
return;
}

const fullName = `${user?.firstName ?? ”} ${user?.lastName ?? ”}`;

usernameDiv.innerHTML = fullName;
userAvatar.innerHTML = getInitials(fullName);
}

function openLoginModal() {
window?.tp?.pianoId?.show({ displayMode: ‘modal’, screen: ‘login’ });
}

function setupCommentSubmitButton() {
const submitButton = document.getElementById(PublicCommentSelectors.SUBMIT);

if (!submitButton || state.submitCommentButtonRegistered) {
return;
}

// Register a single click handler that checks auth state at click time.
submitButton.addEventListener(‘click’, function() {
const user = window?.tp?.pianoId?.getUser() ?? null;

if (!user) {
openLoginModal();
return;
}

runCommentProcess(‘postComment’);
});

state.submitCommentButtonRegistered = true;
}

function setSortOrder(order) {
state.sortOrder = order;

const newestBtn = document.getElementById(PublicCommentSelectors.SORT_NEWEST);
const oldestBtn = document.getElementById(PublicCommentSelectors.SORT_OLDEST);

if (newestBtn && oldestBtn) {
const activeClasses = [‘tw:font-bold’, ‘tw:text-blue-800’];
const inactiveClasses = [‘tw:font-normal’, ‘tw:text-slate-500’];

if (order === ‘newest’) {
newestBtn.classList.add(…activeClasses);
newestBtn.classList.remove(…inactiveClasses);
oldestBtn.classList.add(…inactiveClasses);
oldestBtn.classList.remove(…activeClasses);
} else {
oldestBtn.classList.add(…activeClasses);
oldestBtn.classList.remove(…inactiveClasses);
newestBtn.classList.add(…inactiveClasses);
newestBtn.classList.remove(…activeClasses);
}
}

displayComments();
}

function setupSortControls() {
const newestBtn = document.getElementById(PublicCommentSelectors.SORT_NEWEST);
const oldestBtn = document.getElementById(PublicCommentSelectors.SORT_OLDEST);

if (newestBtn) {
newestBtn.addEventListener(‘click’, function() {
setSortOrder(‘newest’);
});
}

if (oldestBtn) {
oldestBtn.addEventListener(‘click’, function() {
setSortOrder(‘oldest’);
});
}
}

runCommentProcess(‘getComments’);
listenForPianoLogin();
setupCommentSubmitButton();
setupCommentListDelegation();
setupSortControls();
});

23-Year-Old AI Billionaire Says Gen Z Should Avoid This Popular Career Tactic

One $40 AI Tool for Pitch Decks, Marketing Plans, and Client Presentations

Here’s Robert Irvine’s Two-Word Answer for When Someone Tells Him Something Can’t Be Done

Why 80% of Your Product Features Are Dead Weight (and How to Trim the Fat)

Cinnamon Is Suddenly the Hot New Ingredient on Restaurant Menus and Cinnabon Is Cashing In

OpenAI Lost Control Of Its AI During a Security Test — And It Hacked Another Company: ‘Deeply Concerning’

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You May Also Like

Chancellor John Healey Vows to End Business Gloom After Reeves - Internewscast Journal
  • Business

Chancellor John Healey Vows to End Business Gloom After Reeves

New Chancellor John Healey has aimed a pointed broadside at his predecessor…
  • Internewscast
  • July 24, 2026
Why Selling to One Country Is Riskier Than Single Sourcing - Internewscast Journal
  • Business

Why Selling to One Country Is Riskier Than Single Sourcing

National flags waving on poles beneath a clear blue sky, symbolizing global…
  • Internewscast
  • July 24, 2026
New Taxonomy Reveals The Five Different Faces Of AI In The Public Sector
  • Business

New AI Taxonomy Reveals 5 Ways Artificial Intelligence Is Reshaping the Public Sector

Public-sector AI research needs a sharper taxonomy if it is going to…
  • Internewscast
  • July 24, 2026
The 4-Part Framework Every Leader Needs Before Delivering Bad News
  • Business

A 4-Part Framework for Leaders to Deliver Bad News Effectively

Opinions expressed by Entrepreneur contributors are their own. Key Takeaways In 2008,…
  • Internewscast
  • July 24, 2026
Anthony Joshua Vs. Kristian Prenga Full Card, Location, Viewing Info
  • Business

Anthony Joshua vs. Kristian Prenga: Full Card, Location and How to Watch

LONDON, ENGLAND – JUNE 1: Anthony Joshua, left, appears alongside Kristian Prenga…
  • Internewscast
  • July 24, 2026
Family Remembers Corey Durell Ruiz as Exceptional After Fatal Madison Police Shooting - Internewscast Journal
  • US

Family Remembers Corey Durell Ruiz as Exceptional After Fatal Madison Police Shooting

MADISON, Wis. — The mother of Corey Ruiz, a man fatally shot…
  • Internewscast
  • July 24, 2026
Why Selling to One Country Is Riskier Than Single Sourcing - Internewscast Journal
  • Business

Why Selling to One Country Is Riskier Than Single Sourcing

National flags waving on poles beneath a clear blue sky, symbolizing global…
  • Internewscast
  • July 24, 2026
French Squatter Occupies Poker Champion’s $1.9M Los Angeles Mansion in Claimed Act of Defiance - Internewscast Journal
  • US

French Squatter Occupies Poker Champion’s $1.9M Los Angeles Mansion in Claimed Act of Defiance

A World Series of Poker player says a short-term Airbnb stay at…
  • Internewscast
  • July 24, 2026
Trump Threatens Lettuce Tariffs Over ‘Explosive’ Parasite - Internewscast Journal
  • News

Trump Threatens Lettuce Tariffs Over ‘Explosive’ Parasite

Donald Trump has warned that Mexico could face steep new tariffs amid…
  • Internewscast
  • July 24, 2026

Internewscast Journal

  • Home
  • Privacy Policy
  • DMCA Notice
  • Terms and Conditions
  • Guest Post
  • Support Our Cause
Copyright 2026. All Right Reserverd.