Arc
ComponentsBlocksScreensDocsPricingTry the demo
Get Pro
Saved

Docs

IntroductionInstallationThemingMotionAI and MCPChangelog

Components136

ButtonAction buttonSplit buttonButton groupFloating button groupExpanding button groupCopy buttonAction swapIcon morphConfirm morphTheme switcher

Hold to confirmSwipe actionsReactions

Dropdown menuContext menuUser menu

InputTextareaPassword fieldPassword strengthSearch fieldExpanding searchInline edit

Number fieldMoney inputPhone inputScrub inputTag inputMention inputShortcut recorder

SelectComboboxMulti-selectMorph selectChip group

Radio cardsBilling toggleCheckboxRadio groupSwitchSegmented controlRatingToggle group

SliderElastic sliderRange histogram sliderRuler sliderWindow rangeNewProLens rangeNewPro

CalendarDate pickerDate range pickerTime pickerColor pickerEmoji pickerPro

Rich text editorSignature padFile dropzoneAvatar uploadPro

TabsBreadcrumbPaginationMega menu morphProTable of contents progressPro

Scroll areaAccordionExpandable cardResizable panelsExpandable text

DialogDrawerBottom sheetPopoverHover cardTooltipShare accessProConfirm popoverPro

AlertToastToast stackAnnouncement barCookie consentUndo toastPro

ProgressSkeletonStepperCountdownUsage meterOnboarding checklist

AvatarAvatar groupBadgePresence stackPro

CardMetric cardEmpty stateMetric tickerPro

Line chartBar chartDonut chartStreamgraphBrush chartWaffle chartSlope chartSparklineGaugeActivity heatmapAnimated counterRidgelineTreemapSplit barPro

SunburstProSankey flowProFunnel chartProRadar chartProRealtime streamProRace bar chartProData gridPro

Sortable data tableTree tableTree viewReorderable listFilter toolbarCode blockJSON viewer

TimelineComment threadChat thread

Image compareCarouselCard stack

Text revealIn-view titleText morphText shimmer

Blocks122

KPI drilldownProMetric explorerProRevenue explorerProMRR waterfallProCohort retentionProUsage forecastProJourney flowProUptime statusProPivot builderProChoropleth explorerProConnected scatterProHorizon chartProAccount healthPro

Budget variancePro

Small multiplesProLine replayPro

AI chatProAI composerProAI answerProModel pickerProModel arenaProPrompt studioProDocument extractionProAgent memoryProAI side panelProAI inline editProResearch runProAI insight cardProCatch upProAI feature launchProAI search barProAI setup wizardProCall insightsProLead scoringPro

Agent runProAgent tasksProAgent approvalsProAgent routinesProAgent orchestratorProMCP serversProKnowledge baseProEval suiteProAgent builderProAgent galleryPro

SidebarPro4Page headerCommand paletteNotification centerSelection toolbarProEmpty statesSearch resultsPro

Login and sign up5, free and Pro variantsOnboarding illustrationProOTP inputMulti-step formProTwo-factor setupProMagic linkPro

Settings pageProSettings commandProSecurity settingsProBilling overviewProUsage billingProCancel flowProOnboarding surveyProSpend alertPro

Team membersProInvite peopleProRoles and permissionsProProfile pagePro

API keysProWebhooksProIntegrationsProImport wizardNewProEnvironment variablesProDomain verifyProWebhook testerPro

Plan comparisonPricing calculatorProUsage pricingProCart drawerProCheckout summaryProLive checkoutProSeat managerProCredit top-upPro

Wallet cardProDelivery trackerProSeat mapPro

Activity feedProSupport widgetProFeature votingPro

File uploadMedia playerPro

Availability pickerProRelease readinessProFeedback boardProSmart schedulerProTask breakdownProGoal trackerPro

Hero sectionHero signupPro

Scroll storyProSpotlight gridProFeature bentoProComparison table

Logo marqueeStudio perspectivesProStats band

Changelog feedFAQ sectionContact sectionTeam showcaseProBlog grid

Site headerSite footerCTA sectionNewsletter signup

Activity terrainProRevenue globeProCustomer galaxyProSemantic zoomProLayout morphProExploded viewPro

Screens14

Metrics dashboardProMarket terminalPro

Kanban boardProProject boardProGantt timelinePro

Week calendarProMonth calendarNewPro

Team directoryPro

Inbox triageProSupport conversationProHelp centerPro

Product listingProProduct detailProInvoice studioPro

Special components106

Share sheetProAction morphProMorph navProDockProLiquid tab barProOrbit menuPro

Glass menuProGlass segmentedProGlass cardProGlass tab barPro

Sheet stackProWallet stackProControl centerProHolo cardProCard to articleProLink unfurlPro

Product galleryProLightbox galleryProPhoto gridProCover flowPro

Voice orbProNow playingProVoice recorderPro

Booking pillProActivity ringsProTime dialProDate reelPro

Keycap keyboardProSlot textSand textProTypewriter terminalPro

Stretch refreshProMorph loaderProSkeleton morphProBlack holeProCharge sessionPro

Sticker peelProTicket tearProPage curlProOrbit logosProPrize wheelPro

Dot gridProImage trailProGravity wellProInk fluidProCursor trail drawPro

Agent statusProTool callProAgent planProAgent timelineProContext windowProReasoning blockProSource cardsProModel cardProAI workflowProCode suggestionProGhost textProImage generationProDictation buttonProSpeech playerProMeeting summaryProReply draftProAgent handoffProPII redactionProResponse feedbackProLLM cost calculatorProProvider keysProGeneration statsProAI translateProTL;DR toggleProConnector setupProSmart form fillProEnrich columnProTicket routerProAsk your dataProAgent cursorProProvider statusProTraining runProAI commandProStarter promptsProAI mascotProImage revealProAI sparkProPixel mascotProGhost mascotProCube mascotProTone tunerProUpgrade promptProReferral cardProTrial bannerProTeam switcherProLive visitorsProSocial proof toastProInstall snippetPro

Data flowProPayment flowProDNS resolutionProModel trainingProMulti-region failoverProVector searchProBranch graphProAgent loopProMixture of expertsProSpeculative decodingProPrompt cacheProReasoning treePro
What’s new4 new
BlocksBlog grid

Blog grid

A blog index with a featured post, category filter, post cards, pagination and an in-place reader.

$pnpm dlx shadcn@latest add @uiarc/blog-grid
Live block · sample data

When to use

  • A marketing site blog or journal index.
  • Resource hubs with a few categories and a featured story.

When not to use

  • Use changelog-page for release notes with versions.
  • Use a data table for large archives that need sorting and search.

Installation

Add Blog grid with the shadcn CLI, or copy the source by hand.

$pnpm dlx shadcn@latest add @uiarc/blog-gridpnpm dlx shadcn@latest add @uiarc/blog-grid

Adds the block and its local dependencies, and installs motion, lucide-react. First time? Add the @uiarc registry to components.json, or use the full URL:

Usage

Use this as the index of a blog, journal or news page. Load posts from your CMS into blog-grid-data.ts or the posts prop, pass getHref to link each card to its article route, and keep category and page in your URL through the controlled props.

example.tsx
1import { BlogGrid } from "@/components/arc/blocks/blog-grid/blog-grid";2 3export function BlogIndex({ posts }: { posts: BlogPost[] }) {4  return (5    <BlogGrid6      posts={posts}7      categories={["Product", "Design", "Engineering", "Company"]}8      getHref={post => `/blog/${post.id}`}9    />10  );11}
Built fromAvatarPagination

API reference

2 parts. The first is the root.

BlogGrid

A blog index: title, category filter with a gliding highlight, a large featured post, a responsive card grid and pagination. Without getHref, cards open an in-place reader whose image morphs out of the card.

PropTypeDefaultDescription
postsBlogPost[]sample postsPosts to list. Sorted newest first by date.
categoriesstring[]–Filter labels in order. "All" is added in front.
titlestring"Journal"Section heading.
descriptionstring–Line under the heading. Pass an empty string to hide it.
categorystring–Active category, or "All" (controlled).
defaultCategorystring"All"Initial category when uncontrolled.
onCategoryChange(category: string) => void–Called when a filter is picked. The page resets to 1.
pagenumber–One based page (controlled).
defaultPagenumber1Initial page when uncontrolled.
onPageChange(page: number) => void–Called from the page numbers and the previous and next buttons.
pageSizenumber6Cards per page below the featured post.
showFeaturedbooleantrueShows the post marked featured (or the newest) of the current filter as a large card on page one.
getHref(post: BlogPost) => string–Link for each post. When set, cards are plain links and the in-place reader is off.
onPostOpen(post: BlogPost) => void–Called when a post opens, for analytics or routing.
classNamestring–Extra class on the section.

BlogPost

One post.

PropTypeDefaultDescription
idRequiredstring–Stable id, also the fallback hash link.
titleRequiredstring–Card and reader title.
excerptRequiredstring–Two line summary on cards, the lead paragraph in the reader.
categoryRequiredstring–Must match one of categories to be filterable.
dateRequiredstring–ISO date (YYYY-MM-DD).
readTimeRequirednumber–Minutes to read.
authorRequired{ name: string; avatar?: string; role?: string }–Byline.
image{ src: string; alt: string }–Cover image. Cards crop it to 3:2.
bodystring[]–Paragraphs for the in-place reader.
featuredboolean–Prefer this post for the featured slot.

Keyboard interactions

Tab
Moves through filters, cards, and pagination.
Enter
Opens the focused post, or picks the focused filter or page.
Space
Picks the focused filter or page.

Accessibility

  • Filters are buttons with aria-pressed; pagination is a nav with aria-current on the active page.
  • Each card is one link with the title, excerpt and byline as its content, so screen readers announce it once.
  • The reader moves focus to its back button, and closing returns focus to the card you opened.
  • Images carry real alt text; author avatars are decorative.

Motion

  • The filter and page highlights glide on the morph spring.
  • Filtering crossfades the grid with a short rise; paging slides it in the direction of travel.
  • Opening a post morphs the card image into the reader hero, and back on close.
  • Card images zoom 3% on hover (fine pointers only).
  • Reduced motion swaps travel and morphs for plain fades.

Responsive behavior

  • Three columns above 900px, two to 540px, then one.
  • The featured post stacks its image above the text below 680px.
  • Filters scroll sideways on phones; Previous and Next collapse to arrows.

Performance

  • Only one page of cards renders at a time; images below the fold load lazily.
  • Transitions animate transform and opacity only.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Choose this for a blog, journal, news or resources index.
  • Pass getHref for real article routes; leave it out for a self-contained demo or a small site that reads posts in place.
  • Drive category and page from the URL with the controlled props so the index is linkable.
/components/blocks/blog-grid/markdown

The full library index for assistants is at /llms.txt.

Related

Changelog feedBlockRelease notes you can filter, open in place, and scroll through month by month.Hero sectionBlockThree full screen SaaS heroes: a live dashboard rising from the bottom edge over a drifting mesh, a workflow graph that routes sample events node by node, and editorial type over a mesh gradient.PaginationComponentMove through a long collection with clear bounds.

More like this in Pro

Explore Pro
Team showcaseProBlockAn image led team introduction with profiles that open in place.Wallet cardProBlockA compact account view with balance, recent activity, and focused money actions.Team directoryProBlockA complete people directory for a company. Filter by office, each shown with its local time, then browse team-grouped cards or a sortable table. It also has an org chart you rearrange by dragging, time off approvals, and a profile panel showing the hours each person shares with you.
PreviousKPI drilldownNextComparison table
Arc · 122 block pagesllms.txt

On this page

  • Preview
  • When to use
  • When not to use
  • Installation
  • Usage
  • API reference
  • Keyboard
  • Accessibility
  • Motion
  • Responsive behavior
  • Performance
  • Notes for AI
  • Related
View as Markdown

Journal

Product news, design notes and engineering deep dives from the team.

A bright living room with timber beams, arched windows, and cream sofas

Design·Sep 18, 2026

The case for quiet software

Why we removed half the colors from our interface and people started finishing work faster.

Jasmine Brooks7 min read
A white tiled building facade with curved balconies

Engineering·Sep 12, 2026

How offline sync actually works

Conflict free replicated data, explained with the bugs we hit on the way to shipping it.

Daniel Kim9 min read
Terracotta rooftops of Lisbon running down to the river

Company·Sep 4, 2026

What we learned from a week in Lisbon

Forty people, one shared roadmap, and no slides allowed. Notes from our autumn offsite.

Sofia Ramirez4 min read
A home office with a wooden desk and deep green walls

Product·Aug 28, 2026

Shared views are here

Save a filter, name it, and share it with your team. Everyone sees the same thing, always current.

Emma Collins3 min read
Curved stainless steel panels of the Walt Disney Concert Hall against a blue sky

Design·Aug 21, 2026

Choosing a type scale you will not regret

Seven sizes, two weights, and the rules we use to keep them that way as the product grows.

Jasmine Brooks6 min read
Layered mountain ridges under a warm evening sky

Engineering·Aug 14, 2026

Making search ten times faster

A new query planner, a smarter index, and one very embarrassing N plus one we found along the way.

Marcus Johnson11 min read
A sunroom with a round dining table, plants, and windows on three sides

Company·Aug 6, 2026

The rituals that keep a remote team close

Written standups, demo Fridays and the one meeting we will never cancel.

Nathan Cole5 min read