Material Next
On this page

Each element's page has a live demo and usage notes; this page collects the generated API of all of them. A property marked Property only has no attribute: set it from JavaScript (objects, arrays and callbacks are always property only). Boolean attributes are on when present.

The JavaScript API of the marketing hub (controllers, ScreenHost, types) is listed on Marketing API.

Components

<mnw-app-showcase>

import 'material-next-web-components/app-showcase.js'; · class MaterialNextAppShowcase · App showcase guide and demo

A Material app showcase that fetches and renders promoted Android apps.

<mnw-app-showcase> properties
PropertyAttributeTypeDefaultDescription
appsEndpointapps-endpointstring'https://android-apps-metadata-backend.mihaicristiancondrea.workers.dev/api/v1/apps'API endpoint returning Android app metadata.
storeHrefstore-hrefstring'https://play.google.com/store/apps/dev?id=5390214922640123642'Link used by the section-level “View all apps” action.
headlineheadlinestring'More apps from Mihai-Cristian'Section heading.
limitlimitnumber6Maximum number of apps to render.

<mnw-code-block>

import 'material-next-web-components/code-block.js'; · class MaterialNextCodeBlock · Code block guide and demo

A Material code block with Google Sans Code typography, lightweight syntax colours and an optional copy action.

<mnw-code-block> properties
PropertyAttributeTypeDefaultDescription
languagelanguagestring'text'The programming language label displayed in the block header.
codecodestring''The code snippet to render. Slotted content is used when omitted.
copycopybooleanfalseShows the Material copy-to-clipboard action.
<mnw-code-block> events
EventDescription
mnw-code-copy-error{code, error} when the Clipboard API is missing or refuses; the block shows "Copy failed".
mnw-code-copy{code} after the code is written to the clipboard.
<mnw-code-block> slots
SlotDescription
DefaultCode as text, used when code is empty. Wrap markup in a <template> so the browser does not render it.
<mnw-code-block> CSS custom properties
Custom propertyDescription
--md-sys-color-code-backgroundCode surface.
--md-sys-color-code-on-backgroundCode text.
--md-sys-color-code-commentComment tokens.
--md-sys-color-code-punctuationPunctuation tokens.
--md-sys-color-code-tagMarkup tag tokens.
--md-sys-color-code-stringString tokens.
--md-sys-color-code-keywordKeyword tokens.
--md-sys-color-code-functionFunction name tokens.
--md-sys-color-code-variableVariable and number tokens.

<mnw-expressive-tab-bar>

import 'material-next-web-components/expressive-tab-bar.js'; · class MaterialNextExpressiveTabBar · Expressive tab bar guide and demo

A Material 3 expressive top app tab bar styled with rounded app-navigation chrome and Material Web tabs.

<mnw-expressive-tab-bar> properties
PropertyAttributeTypeDefaultDescription
ariaLabelaria-labelstring'Article tabs'Accessible label for the navigation landmark.
activeIndexactive-indexnumber0Index of the active tab.
iconPositionicon-positionExpressiveTabIconPosition'start'Places tab icons before, after, above, or below tab labels.
tabsProperty onlyExpressiveTabItem[]exampleNavigationItemsThe tabs, as {label, href, icon?} objects. JavaScript property only. The default is three placeholder tabs linking to # anchors; always set it.
<mnw-expressive-tab-bar> events
EventDescription
change{activeIndex, item} after the selected tab changes.
navigate{index, item} before following a tab's href. Cancelable: preventDefault() keeps the browser from following the link, for routing in JavaScript.
<mnw-expressive-tab-bar> CSS custom properties
Custom propertyDescription
--mnw-expressive-tab-bar-container-colorBar background.
--mnw-expressive-tab-bar-on-containerInactive label and icon colour.
--mnw-expressive-tab-bar-active-containerActive tab background.
--mnw-expressive-tab-bar-on-active-containerActive label and icon colour.
--mnw-expressive-tab-bar-shapeCorner radius. Default 999px.
--mnw-expressive-tab-bar-heightTab height. Default 80px.
--mnw-expressive-tab-min-widthMinimum tab width.
--mnw-expressive-tab-padding-inlineTab inline padding.
<mnw-expressive-tab-bar> CSS parts
PartDescription
tabsThe underlying Material Web tabs element.
tabEach Material Web primary tab.

<mnw-home>

import 'material-next-web-components/material-next-home.js'; · class MaterialNextHome · Home view guide and demo

Home and examples app shell for material-next-web-components. It switches between a home view and an examples view from location.hash (#home, #examples or an example's anchor), so use one per page.

<mnw-home> properties
PropertyAttributeTypeDefaultDescription
docsHrefdocs-hrefstring'./install/'The URL opened by the install call-to-action button.
headlineheadlinestring'material-next-web-components'Main hero headline.
<mnw-home> slots
SlotDescription
DefaultOptional supporting content displayed below the home content.
<mnw-home> CSS custom properties
Custom propertyDescription
--mnw-home-min-heightMinimum height of the view. Default 100vh.
<mnw-home> CSS parts
PartDescription
actionThe "Get started" button, linking to docs-href.

import 'material-next-web-components/site-footer.js'; · class MaterialNextSiteFooter · Site footer guide and demo

A rounded copyright bar with optional social links.

<mnw-site-footer> properties
PropertyAttributeTypeDefaultDescription
ownerownerstring'Mihai-Cristian Condrea'Copyright holder.
startYearstart-yearnumber2020First copyright year.
endYearend-yearLast copyright year. Defaults to the current year.
linksLabellinks-labelstring'Social profiles'Accessible label for the links.
<mnw-site-footer> slots
SlotDescription
DefaultLinks or Material icon buttons, each with an accessible name.
<mnw-site-footer> CSS custom properties
Custom propertyDescription
--mnw-site-footer-max-widthWidest the bar gets, centered. Default 900px.
--mnw-site-footer-container-colorThe bar's color. Default --md-sys-color-surface-container.
<mnw-site-footer> CSS parts
PartDescription
surfaceThe footer bar.

<mnw-app-shell>

import 'material-next-web-components/app-shell.js'; · class MaterialNextAppShell · App shell guide and demo

An application's frame: a navigation drawer, a top app bar with the screen's title and actions, and the screen. Below permanent-from (900px of the shell's own width by default) the drawer is a modal sheet opened from the menu button; from it, a permanent column beside a connected app bar and content pane. The navigation is one DOM tree in both layouts, so its state and listeners survive every resize. The shell never changes the URL. A tap on a destination fires a cancelable navigation-request: a router calls preventDefault() and navigates itself (or asks about unsaved changes first); without one, the link is followed as usual. The app tells the shell where it is with active-path, heading and leading.

<mnw-app-shell> properties
PropertyAttributeTypeDefaultDescription
headingheadingstring''The current screen's title, in the top app bar.
headingLevelheading-levelnumber1The heading level of the title.
leadingleadingAppShellLeading'menu'menu opens the modal drawer (hidden beside the permanent drawer), back fires back-request, none shows nothing.
activePathactive-pathstring''The current path; defaults to location.pathname. Marks the current destination.
navigationModenavigation-mode'auto' | 'none' | AppShellNavigationMode'auto'auto follows the layout policy; modal and permanent force a layout; none has no drawer and no menu button, for single-screen pages.
permanentFrompermanent-fromDEFAULT_PERMANENT_DRAWER_FROMThe width, in CSS pixels of the shell, from which the drawer is permanent.
layoutPolicyProperty onlyAppShellLayoutPolicy | undefinedReplaces permanent-from with a full policy, for layouts with more rules.
drawerOpendrawer-openbooleanfalseThe modal drawer is open. Always false beside a permanent drawer.
layoutlayoutAppShellNavigationMode'modal'The layout in use, modal or permanent. Set by the shell; read it, or style on it.
scrolledscrolledbooleanfalseContent has scrolled under the top app bar. Set by the shell.
navigationLabelnavigation-labelstring'Navigation'Accessible name of the navigation landmark.
appearanceappearanceAppShellAppearance'tonal'tonal (default): the bar takes a tone once content scrolls under it, and the permanent drawer frames a rounded content pane. outlined: flat surfaces divided by outline-variant lines, under the bar and the drawer header and along the drawer's edge.
drawerHeadingdrawer-headingstring''A plain title at the top of the drawer, for example Menu, with a close button in the modal layout. For sites without a product brand; the brand slot still shows below it when filled.
navigationSizenavigation-sizeAppShellNavigationSize'standard'standard 48px destinations; large 56px ones with 16px labels, as Material Components draws them.
<mnw-app-shell> events
EventDescription
navigation-mode-change{mode}: the layout switched between modal and permanent.
drawer-toggle{open}: the modal drawer opened or closed.
back-requestThe back button was pressed (leading="back").
navigation-requestCancelable. {href, url, item}: a destination was activated. preventDefault() keeps the browser from following the link.
<mnw-app-shell> slots
SlotDescription
DefaultThe screen.
brandThe top of the drawer: a logo and the app's name.
navigation<mnw-navigation-item> elements, links, or groups of them with your own headings.
footerA page footer, below the main content.
navigation-footerThe bottom of the drawer: a theme picker, legal links.
actionsThe top app bar's trailing actions, for example <mnw-product-launcher>.
<mnw-app-shell> CSS custom properties
Custom propertyDescription
--mnw-app-shell-drawer-widthWidth of the permanent drawer. Default 264px.
--mnw-app-shell-modal-drawer-widthWidth of the modal drawer. Default 320px, at most the window less 56px.
--mnw-app-shell-top-app-bar-heightHeight of the top app bar. Default 72px, 64px when the shell is narrower than 600px.
--mnw-app-shell-pane-radiusThe content pane's top-start corner beside the permanent drawer. Default 28px.
<mnw-app-shell> CSS parts
PartDescription
drawerThe navigation drawer.
drawer-headerThe row with drawer-heading and the close button.
top-app-barThe top app bar.
headlineThe screen's title.
contentThe <main> element around the screen.

<mnw-navigation-group>

import 'material-next-web-components/app-shell.js'; · class MaterialNextNavigationGroup · Navigation group guide and demo

An expandable category in an app shell drawer. Destinations stay mounted while collapsed. A newly active destination opens its category.

<mnw-navigation-group> properties
PropertyAttributeTypeDefaultDescription
labellabelstring''Category name.
iconiconstring''Material Symbols name.
openopenbooleanfalseWhether destinations are expanded.
<mnw-navigation-group> events
EventDescription
navigation-group-toggle{open} after the visitor toggles the category.
<mnw-navigation-group> slots
SlotDescription
DefaultNavigation items, or nested navigation groups.
iconA custom category icon, overriding icon.
<mnw-navigation-group> CSS parts
PartDescription
toggleThe category button.

<mnw-navigation-item>

import 'material-next-web-components/app-shell.js'; · class MaterialNextNavigationItem · App shell guide and demo

One destination in an app shell's navigation drawer: an icon, a label and an optional badge, as a link. <mnw-app-shell> marks the current one (active) from its active-path, and asks before following it.

<mnw-navigation-item> properties
PropertyAttributeTypeDefaultDescription
hrefhrefstring''Where the item goes.
labellabelstring''The label, when the default slot is empty.
iconiconstring''A Material Symbols name, when the icon slot is empty.
trailingIcontrailing-iconstring''A Material Symbols name shown at the end, when the trailing slot is empty: open_in_new for a link that leaves the site.
targettargetstring''_blank opens a new tab; the shell then lets the link go without asking.
matchmatchDestinationMatch'prefix'exact is current only on its own path; prefix also on paths under it.
activeactivebooleanfalseThe current destination. Set by <mnw-app-shell>.
<mnw-navigation-item> slots
SlotDescription
DefaultThe label. Overrides label.
iconA custom icon, for example an image or an SVG. Overrides icon.
badgeTrailing text, for example a count.
trailingA custom trailing icon. Overrides trailing-icon.
<mnw-navigation-item> CSS custom properties
Custom propertyDescription
--mnw-navigation-item-heightMinimum height. Default 48px; 56px in a shell with navigation-size="large".
--mnw-navigation-item-heightHeight of the item. Default 48px.
<mnw-navigation-item> CSS parts
PartDescription
linkThe link.

<mnw-product-launcher>

import 'material-next-web-components/launcher.js'; · class MaterialNextProductLauncher · Product launcher guide and demo

An apps button that opens the visitor's favorite products, consoles and shortcuts, with a separate list of admin redirects. Visitors edit their favorites in a draft (select to add or remove, drag or Alt+arrow to reorder). Done saves; Cancel, Escape and closing discard the draft. The list persists in localStorage, shared by every page on the origin. The current product is never offered: entries matching current-product, exclude or this page's URL are hidden, and a hidden favorite keeps its place for the pages where it shows. Without a catalog the launcher lists Mihai-Cristian Condrea's projects (PROJECT_LAUNCHER_CATALOG).

<mnw-product-launcher> properties
PropertyAttributeTypeDefaultDescription
catalogProperty onlyLauncherCatalogPROJECT_LAUNCHER_CATALOGEverything the launcher can show. Defaults to PROJECT_LAUNCHER_CATALOG.
currentProductcurrent-productstring''The product this page belongs to: an item id or a product name.
currentUrlcurrent-urlstring''This page's URL, for hiding links to itself. Defaults to location.href.
excludeexcludestring[][]More item ids or product names to hide, separated by spaces or commas.
storageKeystorage-keyDEFAULT_LAUNCHER_STORAGE_KEYThe localStorage key favorites persist under.
storeProperty onlyLauncherPreferenceStore | undefinedReplaces localStorage, for example with a store that syncs to an account.
openopenbooleanfalseThe panel is open.
followColorPalettefollow-color-palettebooleanfalseUse the host's Material color roles instead of the Google launcher palette.
labellabelstring'Products and shortcuts'Accessible name of the apps button.
headingheadingstring'Your favorites'Title of the favorites card.
redirectsHeadingredirects-headingstring''Optional visible heading above admin redirects; empty by default.
<mnw-product-launcher> events
EventDescription
launcher-toggle{open}: the panel opened or closed.
launcher-change{favoriteIds}: Done or reset committed favorites (hidden ones included).
<mnw-product-launcher> CSS custom properties
Custom propertyDescription
--mnw-launcher-widthPanel width from 600px up. Default 360px.
--mnw-launcher-monochrome-filterFilter for monochrome icons. Default none; monochrome artwork follows the panel text color.
<mnw-product-launcher> CSS parts
PartDescription
triggerThe apps button.
panelThe panel surface.

<mnw-color-picker>

import 'material-next-web-components/theme/ui/color-picker.js'; · class MaterialNextColorPicker · Theme controls guide and demo

A color picker in Material's HCT space: a hex swatch that opens the system color dialog, and hue, chroma and tone sliders. Reusable on its own, for example to choose an app's seed color.

<mnw-color-picker> properties
PropertyAttributeTypeDefaultDescription
valuevalueDEFAULT_SOURCE_COLORThe color, as #rrggbb.
swatchLabelswatch-labelstring'Source color'Label of the swatch row.
<mnw-color-picker> events
EventDescription
type
inputWhile the color changes; read value.
changeWhen a change is committed (a slider let go, the dialog closed).
<mnw-color-picker> CSS parts
PartDescription
swatchThe round swatch.
slidersThe surface around the three sliders.

<mnw-hct-slider>

import 'material-next-web-components/theme/ui/hct-slider.js'; · class MaterialNextHctSlider · Theme controls guide and demo

One HCT channel (hue, chroma or tone) as a labelled Material slider over a gradient of the colors it reaches from color.

<mnw-hct-slider> properties
PropertyAttributeTypeDefaultDescription
channelchannelHctChannel'hue'Which channel the slider sets.
labellabelstring''Visible and accessible label.
valuevaluenumber0The channel's value: hue 0 to 360, chroma 0 to 150, tone 0 to 100.
colorcolorstring''The current color, as hex; the gradient varies only this channel.
<mnw-hct-slider> events
EventDescription
inputWhile the value changes.
changeWhen the visitor lets go.

<mnw-theme-button>

import 'material-next-web-components/theme/ui/theme-button.js'; · class MaterialNextThemeButton · Theme controls guide and demo

A palette button for a top app bar. It opens <mnw-theme-controls> in a panel under it, themes the document and remembers the choice, so a page needs only this element.

<mnw-theme-button> properties
PropertyAttributeTypeDefaultDescription
openopenbooleanfalseWhether the panel is open.
labellabelstring'Theme'
storageKeystorage-keyDEFAULT_THEME_STORAGE_KEYlocalStorage key; every page on the origin with the same key shares the theme.
storeProperty onlyThemePreferenceStore | undefinedA store of your own, instead of storage-key.
defaultColordefault-colorDEFAULT_SOURCE_COLORThe page's own seed, shown until a color is chosen.
<mnw-theme-button> events
EventDescription
color-theme-changeFrom the controls: {sourceColor?, mode}.

<mnw-theme-controls>

import 'material-next-web-components/theme/ui/theme-controls.js'; · class MaterialNextThemeControls · Theme controls guide and demo

A page's theme controls: a source color (hex swatch and HCT sliders), the color mode, and a reset to the page's own colors. Controlled by default: set source-color and mode, and apply each color-theme-change yourself. Set storage-key (or store) to persist the choice, and apply to theme the document as well.

<mnw-theme-controls> properties
PropertyAttributeTypeDefaultDescription
sourceColorsource-colorstring''The chosen source color; empty keeps the page's own colors.
modemodeColorMode'system'Light, dark or the system's choice.
defaultColordefault-colorDEFAULT_SOURCE_COLORShown in the picker until a color is chosen: the page's own seed.
headingheadingstring'Theme'
storageKeystorage-keystring''Persist under this localStorage key; empty persists nothing.
storeProperty onlyThemePreferenceStore | undefinedA store of your own, instead of storage-key.
applyapplybooleanfalseTheme this element's document on every change.
<mnw-theme-controls> events
EventDescription
color-theme-change{sourceColor?, mode} after each change; no sourceColor means the page's own colors.

Marketing hub elements

<mnw-android-screen>

import 'material-next-web-components/marketing.js'; · class MaterialNextAndroidScreen · Android preview guide and demo

An app screen inside the App Toolkit shell, drawn as Compose draws it: status bar, app bar, the navigation the window's layout calls for (bar, rail, expanded rail or permanent drawer), the system navigation, and the modal drawer, modal rail, overflow menu and sheets over it. The app declares itself once with definePreviewApp(); each destination sets its tab, title, app bar and overlay. Which buttons appear comes from previewChrome(), never from the screen. Content stays in light DOM, so the app's own CSS applies to it. Without interactive (videos and captures) nothing reacts and nothing animates in: the shell renders the state it is given. Interactive, it never changes its own state; it asks the host:

<mnw-android-screen> properties
PropertyAttributeTypeDefaultDescription
appProperty onlyPreviewApp | undefined
windowProperty onlystring | WindowSpec | undefinedA window name (phone, fold, desktop) or size.
navTypenav-type'gesture' | 'buttons''gesture'
tabtabstring | undefinedThe tab this destination belongs to, selected in the navigation.
kindkindPreviewDestinationKind'root'
besideListbeside-listbooleanfalseA child open as the detail beside its tab's list: its tab stays marked in the navigation.
headingheadingstring | undefinedThe app bar title, overriding the shell's: a tab's root names the app, or the tab once the navigation beside it names the app; a child or page has no default.
topBartop-barPreviewTopBar'small'
searchPlaceholdersearch-placeholderstring'Search'
searchValuesearch-valuestring''
actionsProperty onlyPreviewAction[][]
navigationProperty onlyPreviewNavigationState{}
overlayProperty onlyPreviewOverlay | nullnull
scrolledscrolledbooleanfalseThe app bar and status bar take the scrolled colour.
collapsecollapsenumber | undefinedHow far a large app bar has collapsed, 0 to 1, for screens that scroll from their state (captures). Unset, the bar follows the content's own scrolling.
titleLinestitle-linesnumber1A large title's lines before it ellipsises (an article's title wraps to two).
scrollPositionscroll-positionnumber | undefinedWhere the content is scrolled to, for screens and captures that start scrolled. Applied when it changes; the person can scroll on from there.
hideNavigationBarhide-navigation-barbooleanfalseThe navigation bar has hidden on scroll (HideOnScrollBottomBar): the content takes its place.
interactiveinteractivebooleanfalseLive preview: reacts to input and animates overlays in. Off in videos and captures.
<mnw-android-screen> events
EventDescription
type
preview-navigation{patch}: a PreviewNavigationState change (drawer, rail, menu).
preview-tab{tab}: a tab was chosen.
preview-entry{entry}: a drawer, rail or overflow entry was chosen.
preview-backThe app bar's or the system's Back.
preview-search{value}: the tab's search text changed.
preview-action{id}: an app bar action was pressed.
preview-dismissThe overlay was dismissed: scrim, Escape or Back.
preview-scroll{scrollTop, scrollHeight, clientHeight, collapseHeight}: the content scrolled.
<mnw-android-screen> slots
SlotDescription
DefaultThe destination's content.
fabA floating action button, placed above the navigation bar and the system bars.
bottomThe destination's own bottom bar (Scaffold's bottomBar): an action row or a message field, between the content and the navigation bar.
topReplaces the app bar, for a destination with its own (an article's).
overlayThe overlay's content (see overlay).

<mnw-play-badge>

import 'material-next-web-components/marketing.js'; · class MaterialNextPlayBadge · Store and source badges guide and demo

Google's official "Get it on Google Play" badge, unaltered. Size it with --mnw-play-badge-height; Google's guidelines allow scaling the artwork whole, never redrawing, recolouring, cropping or animating it. Pages that show it carry PLAY_TRADEMARK alongside their store links.

<mnw-play-badge> properties
PropertyAttributeTypeDefaultDescription
hrefhrefstring''The app's Google Play listing.
<mnw-play-badge> CSS custom properties
Custom propertyDescription
--mnw-play-badge-heightBadge height, clear space included. Default 56px.

<mnw-github-badge>

import 'material-next-web-components/marketing.js'; · class MaterialNextGithubBadge · Store and source badges guide and demo

A link to the app's source repository, with GitHub's mark.

<mnw-github-badge> properties
PropertyAttributeTypeDefaultDescription
hrefhrefstring''Repository URL.
labellabelstring'View source'Link text; with compact, the accessible name and tooltip.
compactcompactbooleanfalseIcon only, with the label kept for assistive technology.

<mnw-device-frame>

import 'material-next-web-components/marketing.js'; · class MaterialNextDeviceFrame · Device frame guide and demo

Google's device art around a slotted app screen: the Pixel 9 Pro XL for phones, the Pixel 9 Pro Fold open for tablets, the Pixelbook Go for desktop windows. The slotted screen stays in light DOM, so the app's CSS applies.

<mnw-device-frame> properties
PropertyAttributeTypeDefaultDescription
devicedeviceDeviceName'pixel_9_pro_xl'Which device: pixel_9_pro_xl, pixel_9_pro_fold or pixelbook_go.
shadowshadowbooleantrueDrop shadow under the device.
tonetone'light' | 'dark''light'Page tone behind the device, which tunes the shadow.
<mnw-device-frame> slots
SlotDescription
DefaultThe app screen, sized to the device's window.

<mnw-marketing-shell>

import 'material-next-web-components/marketing.js'; · class MaterialNextMarketingShell · Marketing shell guide and demo

A marketing hub composed with the shared app shell: a connected or closed drawer, product heading, preview settings behind a top app bar button, and screen catalog. A marketing page has no footer.

<mnw-marketing-shell> properties
PropertyAttributeTypeDefaultDescription
productProperty onlyMarketingProduct | undefinedThe app the page presents. Required: nothing renders without it.
settingsProperty onlyPreviewSettingsDEFAULT_PREVIEW_SETTINGSCurrent preview settings, shown by the preview controls.
defaultsProperty onlyPreviewSettingsDEFAULT_PREVIEW_SETTINGSSettings that Reset returns to.
palettesProperty onlyreadonly string[][]The app's palette names; empty hides the palette select.
navigationModenavigation-mode'auto' | 'none' | AppShellNavigationMode'modal'Drawer policy: automatic modal/permanent, always closed until opened, permanent, or none: no drawer and no menu button.
permanentFrompermanent-fromnumber900Shell width from which the automatic drawer is permanent.
settingsOpensettings-openbooleanfalseWhether the preview settings panel is open.
<mnw-marketing-shell> events
EventDescription
settings-changeFrom the preview controls.
<mnw-marketing-shell> slots
SlotDescription
DefaultThe mnw-screen-card elements.
emptyShown when no cards are supplied.
actionsTop app bar actions, after the preview settings button: icon buttons, buttons or any custom element, for example <mnw-product-launcher>.
navigationApp-specific navigation; defaults to the screen catalog.
extraApp-specific sections after the catalog, for example motion parts.

<mnw-marketing-top-app-bar>

import 'material-next-web-components/marketing.js'; · class MaterialNextMarketingTopAppBar · Marketing top app bar guide and demo

The hub's identity-only top app bar: the app icon and name. It reflects scrolled while the page is scrolled, which gives it the raised container tone.

<mnw-marketing-top-app-bar> properties
PropertyAttributeTypeDefaultDescription
namenamestring''The app's name, linked to href.
iconiconstring''URL of the app's icon, 32px; omitted when empty.
hrefhrefstring'./'Where the brand links to.
scrolledscrolledbooleanfalseRaised tone; set by the element while the window is scrolled.

<mnw-preview-controls>

import 'material-next-web-components/marketing.js'; · class MaterialNextPreviewControls · Preview controls guide and demo

The hub-wide preview settings: theme, system navigation, palette and the device frame, with a reset once anything differs from the defaults.

<mnw-preview-controls> properties
PropertyAttributeTypeDefaultDescription
settingsProperty onlyPreviewSettingsDEFAULT_PREVIEW_SETTINGSThe settings to show.
defaultsProperty onlyPreviewSettingsDEFAULT_PREVIEW_SETTINGSSettings that Reset sends; Reset shows while settings differ from them.
layoutlayout'bar' | 'stacked''bar'bar: one wrapping row. stacked: one control per row, full width, for a panel.
palettesProperty onlyreadonly string[][]The app's palette names; "As captured" is always offered first.
<mnw-preview-controls> events
EventDescription
settings-changeThe new settings, as detail.

<mnw-prototype-layout>

import 'material-next-web-components/marketing.js'; · class MaterialNextPrototypeLayout · Prototype layout guide and demo

The prototype page's frame: a side panel on the leading side, where the back button and the controls start, and a stage for the live screen.

<mnw-prototype-layout> slots
SlotDescription
stageLight-DOM container the screen hosts render into.
panelUsually an mnw-screen-inspector.

<mnw-screen-card>

import 'material-next-web-components/marketing.js'; · class MaterialNextScreenCard · Screen card guide and demo

One screen in the catalog. The live screen goes in the default slot and stays in light DOM, so the app's own CSS and palette reach it.

<mnw-screen-card> properties
PropertyAttributeTypeDefaultDescription
headingheadingstring''The screen's title, linked to href.
descriptiondescriptionstring''One or two sentences under the title.
tagtagstring''Short category label.
hrefhrefstring''The prototype page for this screen.
framedframedbooleanfalseThe preview is inside a device frame.
darkdarkbooleanfalseState of the dark theme toggle.
threeButtonthree-buttonbooleanfalseState of the 3-button navigation toggle.
<mnw-screen-card> events
EventDescription
card-theme-toggle{selected}: dark theme on this card only.
card-nav-toggle{selected}: 3-button navigation on this card only.
<mnw-screen-card> slots
SlotDescription
DefaultThe screen's mount element.
<mnw-screen-card> CSS custom properties
Custom propertyDescription
--mnw-card-preview-heightHeight of a frameless preview. Default clamp(560px, 75dvh, 760px).
--mnw-card-device-zoomScale of a framed preview. Default 0.66.
--mnw-card-indexPosition in the grid, staggering the entrance animation (capped at 6).

<mnw-screen-inspector>

import 'material-next-web-components/marketing.js'; · class MaterialNextScreenInspector · Screen inspector guide and demo

The prototype page's side panel: the screen's details, the view options and the screen's own controls and presets.

<mnw-screen-inspector> properties
PropertyAttributeTypeDefaultDescription
screenProperty onlyMarketingScreen | undefinedThe screen shown. Nothing renders without it.
screensProperty onlyreadonly MarketingScreen[][]Every screen, for the screen picker.
viewProperty onlyPrototypeViewDEFAULT_PROTOTYPE_VIEWThe prototype view: mode, theme, navigation, window, palettes, frame.
palettesProperty onlyreadonly string[][]The app's palette names; empty hides the palette selects.
stateProperty onlyScreenState{}The live screen's state, for the controls' current values.
galleryHrefgallery-hrefstring'./'Where "All screens" links.
captureHrefcapture-hrefstring''Opens the bare screen for captures.
adsToggleads-togglebooleanfalseOffer the ad stand-ins switch (apps with ads only).
<mnw-screen-inspector> events
EventDescription
view-changePartial<PrototypeView> to apply.
screen-select{id} of the screen to open.
state-patch{patch} for the screen's state.
state-resetBack to the screen's defaults.

Documentation layout

<mnw-docs-page>

import 'material-next-web-components/docs-page.js'; · class MaterialNextDocsPage · Docs shell and page guide and demo

Centers documentation content with Material documentation spacing.

<mnw-docs-page> slots
SlotDescription
DefaultPage content.
<mnw-docs-page> CSS custom properties
Custom propertyDescription
--mnw-docs-page-max-widthMaximum content width. Default 1120px.
--mnw-docs-page-inline-gutterTotal inline space kept free. Default 32px.
--mnw-docs-page-padding-blockTop padding. Default 32px, 24px below 820px.

<mnw-docs-shell>

import 'material-next-web-components/docs-shell.js'; · class MaterialNextDocsShell · Docs shell and page guide and demo

Application shell for Material Next documentation pages: a navigation slot, the main landmark and a footer, in a full-height column.

<mnw-docs-shell> slots
SlotDescription
navTop app bar, usually an mnw-docs-top-app-bar.
DefaultPage content, rendered inside <main>.
footerFooter content.

<mnw-docs-table-of-contents>

import 'material-next-web-components/docs-table-of-contents.js'; · class MaterialNextDocsTableOfContents · Docs navigation guide and demo

"On this page" links for a documentation page. The active link has aria-current="page".

<mnw-docs-table-of-contents> properties
PropertyAttributeTypeDefaultDescription
ariaLabelaria-labelstring'Table of contents'Accessible name of the navigation landmark.
headingheadingstring'On this page'Visible heading above the items; an empty string hides it.
itemsProperty onlyDocsNavigationItem[]exampleTableOfContentsItemsThe items, as {label, href, icon?} objects. JavaScript property. The default is four placeholder # anchors; always set it or items-json.
activeIndexactive-indexnumber0Index of the current item. Set by clicks; set it yourself when routing.
itemsJsonitems-jsonstring''The items as a JSON string, for server-rendered HTML. Invalid JSON, or entries without a string label and href, are ignored.
<mnw-docs-table-of-contents> events
EventDescription
navigate{index, item} when an item is clicked, after it becomes active. Cancelable: preventDefault() keeps the browser from following the link, for routing in JavaScript.

<mnw-docs-top-app-bar>

import 'material-next-web-components/docs-top-app-bar.js'; · class MaterialNextDocsTopAppBar · Docs shell and page guide and demo

Sticky Material documentation app bar with leading, navigation, and trailing slots. Below 960px the navigation moves to a scrolling row under the brand and actions; below 600px the bar scrolls away with the page.

<mnw-docs-top-app-bar> slots
SlotDescription
leadingBrand or logo link.
DefaultPrimary navigation, for example md-tabs with links.
trailingActions such as a repository link.

<mnw-docs-vertical-tabs>

import 'material-next-web-components/docs-vertical-tabs.js'; · class MaterialNextDocsVerticalTabs · Docs navigation guide and demo

Vertical navigation list for documentation sections, built on Material Web list items. Each item is a link; the active one has aria-current="page".

<mnw-docs-vertical-tabs> properties
PropertyAttributeTypeDefaultDescription
ariaLabelaria-labelstring'Documentation sections'Accessible name of the navigation landmark.
headingheadingstring'Elements'Visible heading above the items; an empty string hides it.
itemsProperty onlyDocsNavigationItem[]exampleNavigationItemsThe items, as {label, href, icon?} objects. JavaScript property. The default is three placeholder example links; always set it or items-json.
activeIndexactive-indexnumber0Index of the current item. Set by clicks; set it yourself when routing.
itemsJsonitems-jsonstring''The items as a JSON string, for server-rendered HTML. Invalid JSON, or entries without a string label and href, are ignored.
<mnw-docs-vertical-tabs> events
EventDescription
navigate{index, item} when an item is clicked, after it becomes active. Cancelable: preventDefault() keeps the browser from following the link, for routing in JavaScript.

import 'material-next-web-components/app-shell.js'; · class MaterialNextAppShellFooter · Drawer footer guide and demo

Drawer footer with a theme selector and optional policy links, matching the Android Insider and GitHub Dev Tools footers. The host applies the theme.

<mnw-app-shell-footer> properties
PropertyAttributeTypeDefaultDescription
themethemeAppShellTheme'system'Selected theme; the host owns persistence and colour tokens.
privacyHrefprivacy-hrefstring''Privacy policy URL; empty hides the link.
codeOfConductHrefcode-of-conduct-hrefstring''Code of conduct URL; empty hides the link.
<mnw-app-shell-footer> events
EventDescription
theme-change{theme}: the requested Light, Dark or System theme.
mail