md-fab-menu spec card
Identity · when to use / when NOT · decision cues · behavioural contract · do/don't · anti-patterns · full API. Paste into your agent when you're implementing with this component.
A FAB that fans out into 2–6 related actions. Anchors to an existing
md-fab by id, morphs that FAB’s icon to close while
open, and manages the popup’s ARIA wiring, roving focus and dismissal.
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<md-fab id="create-fab" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="create-fab" placement="up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<MdFab id="create-fab" icon="add" aria-label="Create"></MdFab>
<MdFabMenu anchor="create-fab" placement="up" variant="primary" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="slideshow" label="Presentation"></MdFabMenuItem>
</MdFabMenu>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<md-fab id="create-fab" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="create-fab" placement="up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<md-fab id="create-fab" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="create-fab" placement="up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<md-fab id="create-fab" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="create-fab" placement="up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
Already installed? See the
Installation guide for one-time package setup
(core + tokens, fonts). Each tab below shows two patterns for using
md-fab-menu in your project: Option A registers every AWC UI
component at once (simplest), Option B imports only this component for
tree-shake-friendly bundles.
<!-- ─── Option A: global registration (all components) ─── -->
<script type="module">
import '@awc-ui/core/define';
</script>
<!-- ─── Option B: single import (tree-shake only md-fab-menu) ─── -->
<script type="module">
import '@awc-ui/core/components/md-fab-menu';
</script>
<md-fab-menu></md-fab-menu>// ─── Option A: typed React wrapper (registers all components) ───
// Importing from '@awc-ui/react' calls defineCustomElements() as a
// side effect, so every md-* element becomes available in the browser.
import { MdFabMenu } from '@awc-ui/react';
export function Example() {
return <MdFabMenu></MdFabMenu>;
}
// ─── Option B: single import (tree-shake to only md-fab-menu) ───
// Skip the wrapper and use the raw custom element. Smallest bundle,
// but you lose typed props/events on JSX.
import '@awc-ui/core/components/md-fab-menu';
export function ExampleTreeShaken() {
return <md-fab-menu></md-fab-menu>;
}// ─── Option A: schema module (any md-* element accepted) ───
// Pair with `defineCustomElements(window)` in main.ts.
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@Component({
standalone: true,
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
template: `<md-fab-menu></md-fab-menu>`,
})
export class ExampleComponent {}
// ─── Option B: typed directive (tree-shake friendly) ───
// Pair with `import '@awc-ui/core/components/md-fab-menu'` in main.ts.
import { Component } from '@angular/core';
import { MdFabMenu } from '@awc-ui/angular';
@Component({
standalone: true,
imports: [MdFabMenu],
template: `<md-fab-menu></md-fab-menu>`,
})
export class ExampleTreeShakenComponent {}<!-- ─── Option A: typed Vue wrapper (registers all components) ─── -->
<script setup lang="ts">
import { MdFabMenu } from '@awc-ui/vue';
</script>
<template>
<MdFabMenu></MdFabMenu>
</template>
<!-- ─── Option B: single import (tree-shake to only md-fab-menu) ─── -->
<script setup lang="ts">
import '@awc-ui/core/components/md-fab-menu';
</script>
<template>
<md-fab-menu></md-fab-menu>
</template><!-- ─── Option A: global registration (done once in main entry) ─── -->
<!-- main.ts: -->
<!-- import { defineCustomElements } from '@awc-ui/svelte'; -->
<!-- defineCustomElements(window); -->
<md-fab-menu></md-fab-menu>
<!-- ─── Option B: single import (tree-shake to only md-fab-menu) ─── -->
<script lang="ts">
import '@awc-ui/core/components/md-fab-menu';
</script>
<md-fab-menu></md-fab-menu>| Situation | Use instead |
|---|---|
| Exactly one primary action | md-fab alone |
| More than ~6 actions | md-menu, or a dedicated screen |
| Overflow / secondary / destructive actions | md-menu from an icon button |
| A screen that already has a toolbar or navigation rail | md-menu — M3 says don’t pair them |
| Options that select a value rather than trigger an action | md-select |
The FAB is your element, referenced by id. The menu renders no trigger of
its own.
<md-fab id="create-fab" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="create-fab" placement="up" variant="primary"> <md-fab-menu-item icon="description" label="Document"></md-fab-menu-item> <md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item> <md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item></md-fab-menu>That is the whole contract: two elements joined by one id. The menu can sit
anywhere in the document — it positions itself against the anchor’s rect, not
against its own parent:
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-struct" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-struct" placement="up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', minBlockSize: '200px', display: 'grid', placeItems: 'end center', paddingBlockEnd: '16px' }}>
<MdFab id="fm-struct" icon="add" aria-label="Create"></MdFab>
</div>
<MdFabMenu anchor="fm-struct" placement="up" variant="primary" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="slideshow" label="Presentation"></MdFabMenuItem>
</MdFabMenu>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-struct" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-struct" placement="up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-struct" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-struct" placement="up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-struct" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-struct" placement="up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>| Prop | Values | Notes |
|---|---|---|
placement | up (default) · down · auto | auto picks from available viewport space |
variant | primary (default) · secondary · tertiary | Open-state FAB colour and item container tone |
quick | boolean | Skip the close animation — close() drops straight to open=false instead of holding a 180ms closing state. The opening transition always runs |
menu-label | string | Accessible name of the popup — localize it |
density | 0…-4 | Forwarded to the items |
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">placement="up"</div>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-up" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">placement="down"</div>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:start center;padding-block-start:16px;">
<md-fab id="fm-down" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-down" placement="down" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '24px' }}>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>placement="up"</div>
<div style={{ inlineSize: '100%', minBlockSize: '200px', display: 'grid', placeItems: 'end center', paddingBlockEnd: '16px' }}>
<MdFab id="fm-up" icon="add" aria-label="Create"></MdFab>
</div>
<MdFabMenu anchor="fm-up" variant="primary" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="slideshow" label="Presentation"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>placement="down"</div>
<div style={{ inlineSize: '100%', minBlockSize: '200px', display: 'grid', placeItems: 'start center', paddingBlockStart: '16px' }}>
<MdFab id="fm-down" icon="add" aria-label="Create"></MdFab>
</div>
<MdFabMenu anchor="fm-down" placement="down" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="slideshow" label="Presentation"></MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">placement="up"</div>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-up" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">placement="down"</div>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:start center;padding-block-start:16px;">
<md-fab id="fm-down" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-down" placement="down" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">placement="up"</div>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-up" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">placement="down"</div>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:start center;padding-block-start:16px;">
<md-fab id="fm-down" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-down" placement="down" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">placement="up"</div>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-up" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-up" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">placement="down"</div>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:start center;padding-block-start:16px;">
<md-fab id="fm-down" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-down" placement="down" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>variant tints the open-state FAB and the item containers together, so the
cluster reads as one object rather than a FAB with unrelated chips:
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:16px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">primary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v1" icon="add" aria-label="Primary"></md-fab></div>
<md-fab-menu anchor="fm-v1" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">secondary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v2" variant="secondary-container" icon="add" aria-label="Secondary"></md-fab></div>
<md-fab-menu anchor="fm-v2" variant="secondary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">tertiary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v3" variant="tertiary-container" icon="add" aria-label="Tertiary"></md-fab></div>
<md-fab-menu anchor="fm-v3" variant="tertiary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', display: 'grid', gridTemplateColumns: 'repeat(3,1fr)', gap: '16px' }}>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>primary</div>
<div style={{ minBlockSize: '180px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-v1" icon="add" aria-label="Primary"></MdFab></div>
<MdFabMenu anchor="fm-v1" variant="primary" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>secondary</div>
<div style={{ minBlockSize: '180px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-v2" variant="secondary-container" icon="add" aria-label="Secondary"></MdFab></div>
<MdFabMenu anchor="fm-v2" variant="secondary" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>tertiary</div>
<div style={{ minBlockSize: '180px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-v3" variant="tertiary-container" icon="add" aria-label="Tertiary"></MdFab></div>
<MdFabMenu anchor="fm-v3" variant="tertiary" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:16px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">primary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v1" icon="add" aria-label="Primary"></md-fab></div>
<md-fab-menu anchor="fm-v1" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">secondary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v2" variant="secondary-container" icon="add" aria-label="Secondary"></md-fab></div>
<md-fab-menu anchor="fm-v2" variant="secondary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">tertiary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v3" variant="tertiary-container" icon="add" aria-label="Tertiary"></md-fab></div>
<md-fab-menu anchor="fm-v3" variant="tertiary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:16px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">primary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v1" icon="add" aria-label="Primary"></md-fab></div>
<md-fab-menu anchor="fm-v1" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">secondary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v2" variant="secondary-container" icon="add" aria-label="Secondary"></md-fab></div>
<md-fab-menu anchor="fm-v2" variant="secondary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">tertiary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v3" variant="tertiary-container" icon="add" aria-label="Tertiary"></md-fab></div>
<md-fab-menu anchor="fm-v3" variant="tertiary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:16px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">primary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v1" icon="add" aria-label="Primary"></md-fab></div>
<md-fab-menu anchor="fm-v1" variant="primary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">secondary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v2" variant="secondary-container" icon="add" aria-label="Secondary"></md-fab></div>
<md-fab-menu anchor="fm-v2" variant="secondary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">tertiary</div>
<div style="min-block-size:180px;display:grid;place-items:end center;"><md-fab id="fm-v3" variant="tertiary-container" icon="add" aria-label="Tertiary"></md-fab></div>
<md-fab-menu anchor="fm-v3" variant="tertiary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>While open, the component writes to your FAB:
aria-expanded, aria-haspopup="menu" and aria-controlsanchorEl.icon to close, restoring the original on closedata-shape="circle", which applies border-radius: 50% — a squared
icon-only FAB goes round. That is the whole rule: on an extended FAB it
rounds the pill into an ellipse, it does not collapse the label or the width--md-fab-container-color / --md-fab-icon-color from the menu’s
variant, and removes them again on closeDon’t set those yourself, and don’t change the anchor’s icon while the menu
is open — the component saves and restores it around the morph.
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">variant="primary"</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-morph-a" variant="surface" icon="edit" aria-label="Compose"></md-fab></div>
<md-fab-menu anchor="fm-morph-a" variant="primary" menu-label="Compose">
<md-fab-menu-item icon="mail" label="Email"></md-fab-menu-item>
<md-fab-menu-item icon="chat" label="Message"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">variant="tertiary"</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-morph-b" variant="surface" icon="edit" aria-label="Compose"></md-fab></div>
<md-fab-menu anchor="fm-morph-b" variant="tertiary" menu-label="Compose">
<md-fab-menu-item icon="mail" label="Email"></md-fab-menu-item>
<md-fab-menu-item icon="chat" label="Message"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '24px' }}>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>variant="primary"</div>
<div style={{ minBlockSize: '190px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-morph-a" variant="surface" icon="edit" aria-label="Compose"></MdFab></div>
<MdFabMenu anchor="fm-morph-a" variant="primary" menuLabel="Compose">
<MdFabMenuItem icon="mail" label="Email"></MdFabMenuItem>
<MdFabMenuItem icon="chat" label="Message"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>variant="tertiary"</div>
<div style={{ minBlockSize: '190px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-morph-b" variant="surface" icon="edit" aria-label="Compose"></MdFab></div>
<MdFabMenu anchor="fm-morph-b" variant="tertiary" menuLabel="Compose">
<MdFabMenuItem icon="mail" label="Email"></MdFabMenuItem>
<MdFabMenuItem icon="chat" label="Message"></MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">variant="primary"</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-morph-a" variant="surface" icon="edit" aria-label="Compose"></md-fab></div>
<md-fab-menu anchor="fm-morph-a" variant="primary" menu-label="Compose">
<md-fab-menu-item icon="mail" label="Email"></md-fab-menu-item>
<md-fab-menu-item icon="chat" label="Message"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">variant="tertiary"</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-morph-b" variant="surface" icon="edit" aria-label="Compose"></md-fab></div>
<md-fab-menu anchor="fm-morph-b" variant="tertiary" menu-label="Compose">
<md-fab-menu-item icon="mail" label="Email"></md-fab-menu-item>
<md-fab-menu-item icon="chat" label="Message"></md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">variant="primary"</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-morph-a" variant="surface" icon="edit" aria-label="Compose"></md-fab></div>
<md-fab-menu anchor="fm-morph-a" variant="primary" menu-label="Compose">
<md-fab-menu-item icon="mail" label="Email"></md-fab-menu-item>
<md-fab-menu-item icon="chat" label="Message"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">variant="tertiary"</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-morph-b" variant="surface" icon="edit" aria-label="Compose"></md-fab></div>
<md-fab-menu anchor="fm-morph-b" variant="tertiary" menu-label="Compose">
<md-fab-menu-item icon="mail" label="Email"></md-fab-menu-item>
<md-fab-menu-item icon="chat" label="Message"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">variant="primary"</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-morph-a" variant="surface" icon="edit" aria-label="Compose"></md-fab></div>
<md-fab-menu anchor="fm-morph-a" variant="primary" menu-label="Compose">
<md-fab-menu-item icon="mail" label="Email"></md-fab-menu-item>
<md-fab-menu-item icon="chat" label="Message"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">variant="tertiary"</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-morph-b" variant="surface" icon="edit" aria-label="Compose"></md-fab></div>
<md-fab-menu anchor="fm-morph-b" variant="tertiary" menu-label="Compose">
<md-fab-menu-item icon="mail" label="Email"></md-fab-menu-item>
<md-fab-menu-item icon="chat" label="Message"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>M3 puts the ceiling at six. Past that the fan becomes a list that happens to
animate, and a md-menu or a dedicated screen serves the
user better:
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">2 items — comfortable</div>
<div style="min-block-size:220px;display:grid;place-items:end center;"><md-fab id="fm-two" icon="add" aria-label="Two"></md-fab></div>
<md-fab-menu anchor="fm-two" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">6 items — the ceiling</div>
<div style="min-block-size:220px;display:grid;place-items:end center;"><md-fab id="fm-six" icon="add" aria-label="Six"></md-fab></div>
<md-fab-menu anchor="fm-six" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
<md-fab-menu-item icon="folder" label="Folder"></md-fab-menu-item>
<md-fab-menu-item icon="link" label="Link"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '24px' }}>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>2 items — comfortable</div>
<div style={{ minBlockSize: '220px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-two" icon="add" aria-label="Two"></MdFab></div>
<MdFabMenu anchor="fm-two" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>6 items — the ceiling</div>
<div style={{ minBlockSize: '220px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-six" icon="add" aria-label="Six"></MdFab></div>
<MdFabMenu anchor="fm-six" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="slideshow" label="Presentation"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
<MdFabMenuItem icon="folder" label="Folder"></MdFabMenuItem>
<MdFabMenuItem icon="link" label="Link"></MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">2 items — comfortable</div>
<div style="min-block-size:220px;display:grid;place-items:end center;"><md-fab id="fm-two" icon="add" aria-label="Two"></md-fab></div>
<md-fab-menu anchor="fm-two" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">6 items — the ceiling</div>
<div style="min-block-size:220px;display:grid;place-items:end center;"><md-fab id="fm-six" icon="add" aria-label="Six"></md-fab></div>
<md-fab-menu anchor="fm-six" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
<md-fab-menu-item icon="folder" label="Folder"></md-fab-menu-item>
<md-fab-menu-item icon="link" label="Link"></md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">2 items — comfortable</div>
<div style="min-block-size:220px;display:grid;place-items:end center;"><md-fab id="fm-two" icon="add" aria-label="Two"></md-fab></div>
<md-fab-menu anchor="fm-two" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">6 items — the ceiling</div>
<div style="min-block-size:220px;display:grid;place-items:end center;"><md-fab id="fm-six" icon="add" aria-label="Six"></md-fab></div>
<md-fab-menu anchor="fm-six" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
<md-fab-menu-item icon="folder" label="Folder"></md-fab-menu-item>
<md-fab-menu-item icon="link" label="Link"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">2 items — comfortable</div>
<div style="min-block-size:220px;display:grid;place-items:end center;"><md-fab id="fm-two" icon="add" aria-label="Two"></md-fab></div>
<md-fab-menu anchor="fm-two" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">6 items — the ceiling</div>
<div style="min-block-size:220px;display:grid;place-items:end center;"><md-fab id="fm-six" icon="add" aria-label="Six"></md-fab></div>
<md-fab-menu anchor="fm-six" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
<md-fab-menu-item icon="folder" label="Folder"></md-fab-menu-item>
<md-fab-menu-item icon="link" label="Link"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>| Event | Cancelable | Detail | Fires | From |
|---|---|---|---|---|
mdOpen | no | void | Menu opened | md-fab-menu |
mdClose | no | void | Menu closed | md-fab-menu |
mdClick | no | void | An item was pressed | md-fab-menu-item |
Methods — show(), close().
mdClick comes from the item, not the menu, but it bubbles and is composed, so
one listener on md-fab-menu hears every item. Its detail is null — there
is no e.detail.value to read. Identify the pressed item from e.target,
which is the md-fab-menu-item even though you attached the listener to the
menu; e.currentTarget is the menu, the element you attached to. Attach per
item instead — as the framework snippets below do — and the handler already
knows which action it is, which is handier when each is a different function.
All three events reach a listener on the menu. Press the FAB and then an item to
watch the full open → click → close sequence, including the null detail:
<md-fab id="fab" icon="add" aria-label="Create"></md-fab>
<md-fab-menu id="menu" anchor="fab" placement="up" menu-label="Create">
<md-fab-menu-item icon="edit" label="New note"></md-fab-menu-item>
<md-fab-menu-item icon="photo" label="Upload photo"></md-fab-menu-item>
</md-fab-menu>
<script type="module">
const menu = document.getElementById('menu');
menu.addEventListener('mdOpen', () => console.log('opened'));
menu.addEventListener('mdClose', () => console.log('closed'));
// mdClick comes from the ITEM and bubbles up to the menu.
// The menu closes itself in response — do not call menu.close() here.
menu.addEventListener('mdClick', (e) => {
create(e.target.label);
});
</script>import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function CreateMenu() {
// The menu closes itself after an item press — no ref, no close() call.
return (
<>
<MdFab id="fab" icon="add" aria-label="Create" />
<MdFabMenu
anchor="fab"
placement="up"
menuLabel="Create"
onMdOpen={() => console.log('opened')}
onMdClose={() => console.log('closed')}
>
<MdFabMenuItem icon="edit" label="New note" onMdClick={() => create('New note')} />
<MdFabMenuItem icon="photo" label="Upload photo" onMdClick={() => create('Upload photo')} />
</MdFabMenu>
</>
);
}import { Component } from '@angular/core';
@Component({
selector: 'app-create-menu',
template: `
<md-fab id="fab" icon="add" aria-label="Create"></md-fab>
<md-fab-menu
anchor="fab"
placement="up"
menu-label="Create"
(mdOpen)="onOpen()"
(mdClose)="onClose()"
>
<md-fab-menu-item icon="edit" label="New note" (mdClick)="create('New note')"></md-fab-menu-item>
<md-fab-menu-item icon="photo" label="Upload photo" (mdClick)="create('Upload photo')"></md-fab-menu-item>
</md-fab-menu>
`,
})
export class CreateMenuComponent {
onOpen() { console.log('opened'); }
onClose() { console.log('closed'); }
// The menu closes itself after an item press — this only runs the action.
create(what: string) { /* ... */ }
}<script setup lang="ts">
function onOpen() { console.log('opened'); }
function onClose() { console.log('closed'); }
// The menu closes itself after an item press — this only runs the action.
function create(what: string) { /* ... */ }
</script>
<template>
<md-fab id="fab" icon="add" aria-label="Create" />
<md-fab-menu
anchor="fab"
placement="up"
menu-label="Create"
@mdOpen="onOpen"
@mdClose="onClose"
>
<md-fab-menu-item icon="edit" label="New note" @mdClick="create('New note')" />
<md-fab-menu-item icon="photo" label="Upload photo" @mdClick="create('Upload photo')" />
</md-fab-menu>
</template><script lang="ts">
function onOpen() { console.log('opened'); }
function onClose() { console.log('closed'); }
// The menu closes itself after an item press — this only runs the action.
function create(what: string) { /* ... */ }
</script>
<md-fab id="fab" icon="add" aria-label="Create" />
<md-fab-menu
anchor="fab"
placement="up"
menu-label="Create"
on:mdOpen={onOpen}
on:mdClose={onClose}
>
<md-fab-menu-item icon="edit" label="New note" on:mdClick={() => create('New note')} />
<md-fab-menu-item icon="photo" label="Upload photo" on:mdClick={() => create('Upload photo')} />
</md-fab-menu>| Property | Attribute | Type | Default | Reflects |
|---|---|---|---|---|
open | open | boolean | false | Yes |
anchor | anchor | string | '' | — |
variant | variant | 'primary' | 'secondary' | 'tertiary' | 'primary' | Yes |
placement | placement | 'up' | 'down' | 'auto' | 'up' | Yes |
quick | quick | boolean | false | — |
menuLabel | menu-label | string | 'Actions' | — |
density | density | 0 | -1 | -2 | -3 | -4 | 0 | Yes |
| Method | Parameters |
|---|---|
show() | none |
close() | none |
| Slot | Description |
|---|---|
(default) | — |
Override on the host element for per-instance theming:
| Property | Description |
|---|---|
--md-fab-menu-item-container-color | Item background (cascades to children) |
--md-fab-menu-item-label-color | Item label + icon color (cascades) |
--md-fab-menu-item-gap | Gap between items (default 4px) |
role="menu" with aria-orientation="vertical". Escape
closes; ArrowUp/ArrowDown move a roving focus across items.aria-expanded/aria-haspopup/aria-controls onto it.aria-hidden, so its items are not announced.<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;min-block-size:220px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-kbd" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-kbd" menu-label="Create something">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', minBlockSize: '220px', display: 'grid', placeItems: 'end center', paddingBlockEnd: '16px' }}>
<MdFab id="fm-kbd" icon="add" aria-label="Create"></MdFab>
</div>
<MdFabMenu anchor="fm-kbd" menuLabel="Create something">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="slideshow" label="Presentation"></MdFabMenuItem>
</MdFabMenu>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;min-block-size:220px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-kbd" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-kbd" menu-label="Create something">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;min-block-size:220px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-kbd" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-kbd" menu-label="Create something">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;min-block-size:220px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-kbd" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-kbd" menu-label="Create something">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="slideshow" label="Presentation"></md-fab-menu-item>
</md-fab-menu>Open the menu above and use the keyboard: ArrowUp / ArrowDown move through
the items, Home / End jump to the ends, typing a letter jumps to the next
item whose label starts with it, and Escape closes and returns focus to the
FAB. Tab walks forward through the items and dismisses the menu once it
passes the last one; Shift+Tab from the first item hands focus back to the
FAB — so Tab never strands you in a popup that is still open behind you.
The stack is vertical, so placement never mirrors — up stays up. What does
mirror is the edge the cluster hangs from: the menu reads the computed
direction and pins itself to the anchor’s trailing edge, so nothing needs
re-authoring between directions. See RTL.
<div dir="rtl"> <md-fab id="fab" icon="add" aria-label="إنشاء"></md-fab> <md-fab-menu anchor="fab" menu-label="إنشاء"></md-fab-menu></div>The same menu in both directions. Only dir and the strings change; the
markup and props are identical:
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center;">
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">ltr</span>
<div dir="ltr" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-ltr" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="fm-ltr" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">rtl</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-rtl" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-rtl" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="جدول"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ display: 'grid', gridTemplateColumns: 'auto 1fr', gap: '14px 16px', alignItems: 'center' }}>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace' }}>ltr</span>
<div dir="ltr" style={{ minBlockSize: '170px', display: 'grid', alignItems: 'end', justifyItems: 'end', padding: '0 16px 16px' }}>
<MdFab id="fm-ltr" icon="add" aria-label="Create"></MdFab>
<MdFabMenu anchor="fm-ltr" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace' }}>rtl</span>
<div dir="rtl" style={{ minBlockSize: '170px', display: 'grid', alignItems: 'end', justifyItems: 'end', padding: '0 16px 16px' }}>
<MdFab id="fm-rtl" icon="add" aria-label="إنشاء"></MdFab>
<MdFabMenu anchor="fm-rtl" menuLabel="إنشاء">
<MdFabMenuItem icon="description" label="مستند"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="جدول"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="صورة"></MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center;">
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">ltr</span>
<div dir="ltr" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-ltr" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="fm-ltr" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">rtl</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-rtl" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-rtl" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="جدول"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center;">
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">ltr</span>
<div dir="ltr" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-ltr" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="fm-ltr" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">rtl</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-rtl" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-rtl" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="جدول"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center;">
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">ltr</span>
<div dir="ltr" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-ltr" icon="add" aria-label="Create"></md-fab>
<md-fab-menu anchor="fm-ltr" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">rtl</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-rtl" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-rtl" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="جدول"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>rightThe menu follows the FAB wherever the FAB lands, so the one thing that can go
wrong is your layout. Pin the anchor with a logical value (justify-items: end, inset-inline-end) and the whole cluster moves corner-to-corner under
RTL. Pin it with a physical right and the FAB — and therefore the menu —
stays welded to the right edge of an RTL screen:
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center;">
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">correct</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;border-radius:12px;background:color-mix(in srgb, currentColor 4%, transparent);">
<md-fab id="fm-ok" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-ok" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">wrong</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:right;padding:0 16px 16px;border-radius:12px;background:color-mix(in srgb, currentColor 4%, transparent);">
<md-fab id="fm-bad" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-bad" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ display: 'grid', gridTemplateColumns: 'auto 1fr', gap: '14px 16px', alignItems: 'center' }}>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace' }}>correct</span>
<div dir="rtl" style={{ minBlockSize: '170px', display: 'grid', alignItems: 'end', justifyItems: 'end', padding: '0 16px 16px', borderRadius: '12px', background: 'color-mix(in srgb, currentColor 4%, transparent)' }}>
<MdFab id="fm-ok" icon="add" aria-label="إنشاء"></MdFab>
<MdFabMenu anchor="fm-ok" menuLabel="إنشاء">
<MdFabMenuItem icon="description" label="مستند"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="صورة"></MdFabMenuItem>
</MdFabMenu>
</div>
<span style={{ inlineSize: '3.5rem', opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace' }}>wrong</span>
<div dir="rtl" style={{ minBlockSize: '170px', display: 'grid', alignItems: 'end', justifyItems: 'right', padding: '0 16px 16px', borderRadius: '12px', background: 'color-mix(in srgb, currentColor 4%, transparent)' }}>
<MdFab id="fm-bad" icon="add" aria-label="إنشاء"></MdFab>
<MdFabMenu anchor="fm-bad" menuLabel="إنشاء">
<MdFabMenuItem icon="description" label="مستند"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="صورة"></MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center;">
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">correct</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;border-radius:12px;background:color-mix(in srgb, currentColor 4%, transparent);">
<md-fab id="fm-ok" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-ok" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">wrong</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:right;padding:0 16px 16px;border-radius:12px;background:color-mix(in srgb, currentColor 4%, transparent);">
<md-fab id="fm-bad" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-bad" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center;">
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">correct</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;border-radius:12px;background:color-mix(in srgb, currentColor 4%, transparent);">
<md-fab id="fm-ok" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-ok" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">wrong</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:right;padding:0 16px 16px;border-radius:12px;background:color-mix(in srgb, currentColor 4%, transparent);">
<md-fab id="fm-bad" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-bad" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="display:grid;grid-template-columns:auto 1fr;gap:14px 16px;align-items:center;">
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">correct</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;border-radius:12px;background:color-mix(in srgb, currentColor 4%, transparent);">
<md-fab id="fm-ok" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-ok" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
<span style="inline-size:3.5rem;opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;">wrong</span>
<div dir="rtl" style="min-block-size:170px;display:grid;align-items:end;justify-items:right;padding:0 16px 16px;border-radius:12px;background:color-mix(in srgb, currentColor 4%, transparent);">
<md-fab id="fm-bad" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-bad" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>density on the menu cascades to its items — set it there, not on each item.
It does not reach the anchor FAB: the anchor is resolved by id, is not a
descendant of the menu, and the component writes only shape, icon and colour to
it. Set density on your md-fab as well when you want the whole cluster on
one rung — which is exactly what each pair below does. Open any of these to
compare the item heights:
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:repeat(5,1fr);gap:12px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">0</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d0" density="0" icon="add" aria-label="Create at density 0"></md-fab>
</div>
<md-fab-menu anchor="fm-d0" density="0" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-1</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d1" density="-1" icon="add" aria-label="Create at density -1"></md-fab>
</div>
<md-fab-menu anchor="fm-d1" density="-1" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-2</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d2" density="-2" icon="add" aria-label="Create at density -2"></md-fab>
</div>
<md-fab-menu anchor="fm-d2" density="-2" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-3</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d3" density="-3" icon="add" aria-label="Create at density -3"></md-fab>
</div>
<md-fab-menu anchor="fm-d3" density="-3" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-4</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d4" density="-4" icon="add" aria-label="Create at density -4"></md-fab>
</div>
<md-fab-menu anchor="fm-d4" density="-4" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', display: 'grid', gridTemplateColumns: 'repeat(5,1fr)', gap: '12px' }}>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px', textAlign: 'center' }}>0</div>
<div style={{ minBlockSize: '170px', display: 'grid', placeItems: 'end center' }}>
<MdFab id="fm-d0" density="0" icon="add" aria-label="Create at density 0"></MdFab>
</div>
<MdFabMenu anchor="fm-d0" density="0" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px', textAlign: 'center' }}>-1</div>
<div style={{ minBlockSize: '170px', display: 'grid', placeItems: 'end center' }}>
<MdFab id="fm-d1" density="-1" icon="add" aria-label="Create at density -1"></MdFab>
</div>
<MdFabMenu anchor="fm-d1" density="-1" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px', textAlign: 'center' }}>-2</div>
<div style={{ minBlockSize: '170px', display: 'grid', placeItems: 'end center' }}>
<MdFab id="fm-d2" density="-2" icon="add" aria-label="Create at density -2"></MdFab>
</div>
<MdFabMenu anchor="fm-d2" density="-2" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px', textAlign: 'center' }}>-3</div>
<div style={{ minBlockSize: '170px', display: 'grid', placeItems: 'end center' }}>
<MdFab id="fm-d3" density="-3" icon="add" aria-label="Create at density -3"></MdFab>
</div>
<MdFabMenu anchor="fm-d3" density="-3" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px', textAlign: 'center' }}>-4</div>
<div style={{ minBlockSize: '170px', display: 'grid', placeItems: 'end center' }}>
<MdFab id="fm-d4" density="-4" icon="add" aria-label="Create at density -4"></MdFab>
</div>
<MdFabMenu anchor="fm-d4" density="-4" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="Spreadsheet"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;display:grid;grid-template-columns:repeat(5,1fr);gap:12px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">0</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d0" density="0" icon="add" aria-label="Create at density 0"></md-fab>
</div>
<md-fab-menu anchor="fm-d0" density="0" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-1</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d1" density="-1" icon="add" aria-label="Create at density -1"></md-fab>
</div>
<md-fab-menu anchor="fm-d1" density="-1" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-2</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d2" density="-2" icon="add" aria-label="Create at density -2"></md-fab>
</div>
<md-fab-menu anchor="fm-d2" density="-2" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-3</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d3" density="-3" icon="add" aria-label="Create at density -3"></md-fab>
</div>
<md-fab-menu anchor="fm-d3" density="-3" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-4</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d4" density="-4" icon="add" aria-label="Create at density -4"></md-fab>
</div>
<md-fab-menu anchor="fm-d4" density="-4" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;display:grid;grid-template-columns:repeat(5,1fr);gap:12px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">0</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d0" density="0" icon="add" aria-label="Create at density 0"></md-fab>
</div>
<md-fab-menu anchor="fm-d0" density="0" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-1</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d1" density="-1" icon="add" aria-label="Create at density -1"></md-fab>
</div>
<md-fab-menu anchor="fm-d1" density="-1" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-2</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d2" density="-2" icon="add" aria-label="Create at density -2"></md-fab>
</div>
<md-fab-menu anchor="fm-d2" density="-2" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-3</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d3" density="-3" icon="add" aria-label="Create at density -3"></md-fab>
</div>
<md-fab-menu anchor="fm-d3" density="-3" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-4</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d4" density="-4" icon="add" aria-label="Create at density -4"></md-fab>
</div>
<md-fab-menu anchor="fm-d4" density="-4" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:repeat(5,1fr);gap:12px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">0</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d0" density="0" icon="add" aria-label="Create at density 0"></md-fab>
</div>
<md-fab-menu anchor="fm-d0" density="0" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-1</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d1" density="-1" icon="add" aria-label="Create at density -1"></md-fab>
</div>
<md-fab-menu anchor="fm-d1" density="-1" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-2</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d2" density="-2" icon="add" aria-label="Create at density -2"></md-fab>
</div>
<md-fab-menu anchor="fm-d2" density="-2" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-3</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d3" density="-3" icon="add" aria-label="Create at density -3"></md-fab>
</div>
<md-fab-menu anchor="fm-d3" density="-3" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;text-align:center;">-4</div>
<div style="min-block-size:170px;display:grid;place-items:end center;">
<md-fab id="fm-d4" density="-4" icon="add" aria-label="Create at density -4"></md-fab>
</div>
<md-fab-menu anchor="fm-d4" density="-4" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="Spreadsheet"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>The two are independent signals, so they compose without any extra wiring — an
inherited data-density ancestor and dir="rtl" on the same element:
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div dir="rtl" data-density="-3" style="min-block-size:190px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-dd" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-dd" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="جدول"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div dir="rtl" data-density="-3" style={{ minBlockSize: '190px', display: 'grid', alignItems: 'end', justifyItems: 'end', padding: '0 16px 16px' }}>
<MdFab id="fm-dd" icon="add" aria-label="إنشاء"></MdFab>
<MdFabMenu anchor="fm-dd" menuLabel="إنشاء">
<MdFabMenuItem icon="description" label="مستند"></MdFabMenuItem>
<MdFabMenuItem icon="table_chart" label="جدول"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="صورة"></MdFabMenuItem>
</MdFabMenu>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div dir="rtl" data-density="-3" style="min-block-size:190px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-dd" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-dd" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="جدول"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div dir="rtl" data-density="-3" style="min-block-size:190px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-dd" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-dd" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="جدول"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div dir="rtl" data-density="-3" style="min-block-size:190px;display:grid;align-items:end;justify-items:end;padding:0 16px 16px;">
<md-fab id="fm-dd" icon="add" aria-label="إنشاء"></md-fab>
<md-fab-menu anchor="fm-dd" menu-label="إنشاء">
<md-fab-menu-item icon="description" label="مستند"></md-fab-menu-item>
<md-fab-menu-item icon="table_chart" label="جدول"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="صورة"></md-fab-menu-item>
</md-fab-menu>
</div>Density — density="-1…-4" on the menu locally overrides the inherited
data-density rung and cascades to every item. See
Density.
i18n — translate the item labels and menu-label, the popup’s
accessible name, which is English ("Actions") by default. lang and dir
are inherited from any ancestor.
All three are set once on md-fab-menu. The first two inherit down into every
item; the third is the menu’s own flex gap and never reaches an item:
| Custom property | Purpose | Read by | Default |
|---|---|---|---|
--md-fab-menu-item-container-color | Item container background | each item | *-container per variant |
--md-fab-menu-item-label-color | Item label + icon colour | each item | on-*-container per variant |
--md-fab-menu-item-gap | Gap between stacked items | the menu itself | --md-sys-spacing-gap-xs (4px) |
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">custom colours</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-theme1" variant="surface" icon="add" aria-label="Themed"></md-fab></div>
<md-fab-menu anchor="fm-theme1" menu-label="Create" style="--md-fab-menu-item-container-color: var(--md-sys-color-error); --md-fab-menu-item-label-color: var(--md-sys-color-on-error);">
<md-fab-menu-item icon="delete" label="Delete"></md-fab-menu-item>
<md-fab-menu-item icon="report" label="Report"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">wider gap</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-theme2" icon="add" aria-label="Spaced"></md-fab></div>
<md-fab-menu anchor="fm-theme2" menu-label="Create" style="--md-fab-menu-item-gap: 16px;">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '24px' }}>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>custom colours</div>
<div style={{ minBlockSize: '190px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-theme1" variant="surface" icon="add" aria-label="Themed"></MdFab></div>
<MdFabMenu anchor="fm-theme1" menuLabel="Create" style={{ '--md-fab-menu-item-container-color': 'var(--md-sys-color-error)', '--md-fab-menu-item-label-color': 'var(--md-sys-color-on-error)' }}>
<MdFabMenuItem icon="delete" label="Delete"></MdFabMenuItem>
<MdFabMenuItem icon="report" label="Report"></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>wider gap</div>
<div style={{ minBlockSize: '190px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-theme2" icon="add" aria-label="Spaced"></MdFab></div>
<MdFabMenu anchor="fm-theme2" menuLabel="Create" style={{ '--md-fab-menu-item-gap': '16px' }}>
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">custom colours</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-theme1" variant="surface" icon="add" aria-label="Themed"></md-fab></div>
<md-fab-menu anchor="fm-theme1" menu-label="Create" style="--md-fab-menu-item-container-color: var(--md-sys-color-error); --md-fab-menu-item-label-color: var(--md-sys-color-on-error);">
<md-fab-menu-item icon="delete" label="Delete"></md-fab-menu-item>
<md-fab-menu-item icon="report" label="Report"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">wider gap</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-theme2" icon="add" aria-label="Spaced"></md-fab></div>
<md-fab-menu anchor="fm-theme2" menu-label="Create" style="--md-fab-menu-item-gap: 16px;">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">custom colours</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-theme1" variant="surface" icon="add" aria-label="Themed"></md-fab></div>
<md-fab-menu anchor="fm-theme1" menu-label="Create" style="--md-fab-menu-item-container-color: var(--md-sys-color-error); --md-fab-menu-item-label-color: var(--md-sys-color-on-error);">
<md-fab-menu-item icon="delete" label="Delete"></md-fab-menu-item>
<md-fab-menu-item icon="report" label="Report"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">wider gap</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-theme2" icon="add" aria-label="Spaced"></md-fab></div>
<md-fab-menu anchor="fm-theme2" menu-label="Create" style="--md-fab-menu-item-gap: 16px;">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">custom colours</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-theme1" variant="surface" icon="add" aria-label="Themed"></md-fab></div>
<md-fab-menu anchor="fm-theme1" menu-label="Create" style="--md-fab-menu-item-container-color: var(--md-sys-color-error); --md-fab-menu-item-label-color: var(--md-sys-color-on-error);">
<md-fab-menu-item icon="delete" label="Delete"></md-fab-menu-item>
<md-fab-menu-item icon="report" label="Report"></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">wider gap</div>
<div style="min-block-size:190px;display:grid;place-items:end center;"><md-fab id="fm-theme2" icon="add" aria-label="Spaced"></md-fab></div>
<md-fab-menu anchor="fm-theme2" menu-label="Create" style="--md-fab-menu-item-gap: 16px;">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</div>
</div>CSS parts reach inside the item’s shadow root for things custom properties
do not cover. md-fab-menu itself exposes none — the parts live on
md-fab-menu-item: state-layer, icon and label.
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<style>
.fm-shout md-fab-menu-item::part(label) { text-transform: uppercase; letter-spacing: .08em; font-weight: 600; }
.fm-shout md-fab-menu-item::part(icon) { transform: scale(1.25); }
</style>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-part" variant="tertiary-container" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu class="fm-shout" anchor="fm-part" variant="tertiary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<style>
.fm-shout md-fab-menu-item::part(label) { text-transform: uppercase; letter-spacing: .08em; font-weight: 600; }
.fm-shout md-fab-menu-item::part(icon) { transform: scale(1.25); }
</style>
<div style={{ inlineSize: '100%', minBlockSize: '200px', display: 'grid', placeItems: 'end center', paddingBlockEnd: '16px' }}>
<MdFab id="fm-part" variant="tertiary-container" icon="add" aria-label="Create"></MdFab>
</div>
<MdFabMenu className="fm-shout" anchor="fm-part" variant="tertiary" menuLabel="Create">
<MdFabMenuItem icon="description" label="Document"></MdFabMenuItem>
<MdFabMenuItem icon="image" label="Image"></MdFabMenuItem>
</MdFabMenu>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<style>
.fm-shout md-fab-menu-item::part(label) { text-transform: uppercase; letter-spacing: .08em; font-weight: 600; }
.fm-shout md-fab-menu-item::part(icon) { transform: scale(1.25); }
</style>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-part" variant="tertiary-container" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu class="fm-shout" anchor="fm-part" variant="tertiary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<style>
.fm-shout md-fab-menu-item::part(label) { text-transform: uppercase; letter-spacing: .08em; font-weight: 600; }
.fm-shout md-fab-menu-item::part(icon) { transform: scale(1.25); }
</style>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-part" variant="tertiary-container" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu class="fm-shout" anchor="fm-part" variant="tertiary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<style>
.fm-shout md-fab-menu-item::part(label) { text-transform: uppercase; letter-spacing: .08em; font-weight: 600; }
.fm-shout md-fab-menu-item::part(icon) { transform: scale(1.25); }
</style>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-part" variant="tertiary-container" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu class="fm-shout" anchor="fm-part" variant="tertiary" menu-label="Create">
<md-fab-menu-item icon="description" label="Document"></md-fab-menu-item>
<md-fab-menu-item icon="image" label="Image"></md-fab-menu-item>
</md-fab-menu>md-fab-menu-item::part(label) { letter-spacing: 0.4px;}md-fab-menu-itemmd-fab-menu-item has no page of its own: it is only ever valid as a direct
child of md-fab-menu, which owns opening, roving focus and dismissal.
Standalone it renders a row that nothing manages — no keyboard model, no ARIA
menu context, no dismissal.
mdClick; md-fab-menu listens
for it, calls close() and restores focus to the anchor. Your handler runs
the action, not the dismissal.mdClick has no detail (it is null). Read the pressed item off
e.target, which is the md-fab-menu-item even when the listener sits on the
menu — e.currentTarget is whatever you attached to.rovingFocusVisible is set by the parent during arrow-key navigation so
the focus ring appears on the roved item even when DOM focus hasn’t moved.
Don’t set it yourself.disabled and soft-disabled block activation and grey the row.
disabled additionally sets pointer-events: none, so it cannot be clicked
or hovered. Neither removes the item from the menu’s keyboard model: the
menu’s roving tabindex and its arrow / Home / End / typeahead navigation
walk every item, so a disabled branch is still reachable and announced
(aria-disabled="true"). Prefer omitting an action you never want reached.label prop and the default slot are alternatives: label wins, and the
slot is the fallback when it is empty.An item takes a slotted glyph in the icon slot in place of the icon prop
when you need an SVG or emoji:
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">states</div>
<div style="min-block-size:200px;display:grid;place-items:end center;"><md-fab id="fm-states" icon="add" aria-label="States"></md-fab></div>
<md-fab-menu anchor="fm-states" menu-label="Create">
<md-fab-menu-item icon="edit" label="Edit"></md-fab-menu-item>
<md-fab-menu-item icon="share" label="Share (disabled)" disabled></md-fab-menu-item>
<md-fab-menu-item icon="delete" label="Delete (soft-disabled)" soft-disabled></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">slotted glyphs</div>
<div style="min-block-size:200px;display:grid;place-items:end center;"><md-fab id="fm-slot" variant="tertiary-container" icon="add" aria-label="Slotted"></md-fab></div>
<md-fab-menu anchor="fm-slot" variant="tertiary" menu-label="Create">
<md-fab-menu-item label="Star">
<svg slot="icon" viewBox="0 0 24 24" width="18" height="18" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
</md-fab-menu-item>
<md-fab-menu-item label="Rocket">
<span slot="icon" aria-hidden="true">🚀</span>
</md-fab-menu-item>
</md-fab-menu>
</div>
</div>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '24px' }}>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>states</div>
<div style={{ minBlockSize: '200px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-states" icon="add" aria-label="States"></MdFab></div>
<MdFabMenu anchor="fm-states" menuLabel="Create">
<MdFabMenuItem icon="edit" label="Edit"></MdFabMenuItem>
<MdFabMenuItem icon="share" label="Share (disabled)" disabled></MdFabMenuItem>
<MdFabMenuItem icon="delete" label="Delete (soft-disabled)" soft-disabled></MdFabMenuItem>
</MdFabMenu>
</div>
<div>
<div style={{ opacity: '.65', fontSize: '.75rem', fontFamily: 'ui-monospace,monospace', marginBlockEnd: '8px' }}>slotted glyphs</div>
<div style={{ minBlockSize: '200px', display: 'grid', placeItems: 'end center' }}><MdFab id="fm-slot" variant="tertiary-container" icon="add" aria-label="Slotted"></MdFab></div>
<MdFabMenu anchor="fm-slot" variant="tertiary" menuLabel="Create">
<MdFabMenuItem label="Star">
<svg slot="icon" viewBox="0 0 24 24" width="18" height="18" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
</MdFabMenuItem>
<MdFabMenuItem label="Rocket">
<span slot="icon" aria-hidden="true">🚀</span>
</MdFabMenuItem>
</MdFabMenu>
</div>
</div>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">states</div>
<div style="min-block-size:200px;display:grid;place-items:end center;"><md-fab id="fm-states" icon="add" aria-label="States"></md-fab></div>
<md-fab-menu anchor="fm-states" menu-label="Create">
<md-fab-menu-item icon="edit" label="Edit"></md-fab-menu-item>
<md-fab-menu-item icon="share" label="Share (disabled)" disabled></md-fab-menu-item>
<md-fab-menu-item icon="delete" label="Delete (soft-disabled)" soft-disabled></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">slotted glyphs</div>
<div style="min-block-size:200px;display:grid;place-items:end center;"><md-fab id="fm-slot" variant="tertiary-container" icon="add" aria-label="Slotted"></md-fab></div>
<md-fab-menu anchor="fm-slot" variant="tertiary" menu-label="Create">
<md-fab-menu-item label="Star">
<svg slot="icon" viewBox="0 0 24 24" width="18" height="18" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
</md-fab-menu-item>
<md-fab-menu-item label="Rocket">
<span slot="icon" aria-hidden="true">🚀</span>
</md-fab-menu-item>
</md-fab-menu>
</div>
</div><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">states</div>
<div style="min-block-size:200px;display:grid;place-items:end center;"><md-fab id="fm-states" icon="add" aria-label="States"></md-fab></div>
<md-fab-menu anchor="fm-states" menu-label="Create">
<md-fab-menu-item icon="edit" label="Edit"></md-fab-menu-item>
<md-fab-menu-item icon="share" label="Share (disabled)" disabled></md-fab-menu-item>
<md-fab-menu-item icon="delete" label="Delete (soft-disabled)" soft-disabled></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">slotted glyphs</div>
<div style="min-block-size:200px;display:grid;place-items:end center;"><md-fab id="fm-slot" variant="tertiary-container" icon="add" aria-label="Slotted"></md-fab></div>
<md-fab-menu anchor="fm-slot" variant="tertiary" menu-label="Create">
<md-fab-menu-item label="Star">
<svg slot="icon" viewBox="0 0 24 24" width="18" height="18" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
</md-fab-menu-item>
<md-fab-menu-item label="Rocket">
<span slot="icon" aria-hidden="true">🚀</span>
</md-fab-menu-item>
</md-fab-menu>
</div>
</div>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;display:grid;grid-template-columns:1fr 1fr;gap:24px;">
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">states</div>
<div style="min-block-size:200px;display:grid;place-items:end center;"><md-fab id="fm-states" icon="add" aria-label="States"></md-fab></div>
<md-fab-menu anchor="fm-states" menu-label="Create">
<md-fab-menu-item icon="edit" label="Edit"></md-fab-menu-item>
<md-fab-menu-item icon="share" label="Share (disabled)" disabled></md-fab-menu-item>
<md-fab-menu-item icon="delete" label="Delete (soft-disabled)" soft-disabled></md-fab-menu-item>
</md-fab-menu>
</div>
<div>
<div style="opacity:.65;font-size:.75rem;font-family:ui-monospace,monospace;margin-block-end:8px;">slotted glyphs</div>
<div style="min-block-size:200px;display:grid;place-items:end center;"><md-fab id="fm-slot" variant="tertiary-container" icon="add" aria-label="Slotted"></md-fab></div>
<md-fab-menu anchor="fm-slot" variant="tertiary" menu-label="Create">
<md-fab-menu-item label="Star">
<svg slot="icon" viewBox="0 0 24 24" width="18" height="18" fill="currentColor"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
</md-fab-menu-item>
<md-fab-menu-item label="Rocket">
<span slot="icon" aria-hidden="true">🚀</span>
</md-fab-menu-item>
</md-fab-menu>
</div>
</div>| Property | Attribute | Type | Default | Reflects |
|---|---|---|---|---|
icon | icon | string | '' | — |
label | label | string | '' | — |
disabled | disabled | boolean | false | Yes |
softDisabled | soft-disabled | boolean | false | Yes |
rovingFocusVisible | roving-focus-visible | boolean | false | — |
density | density | 0 | -1 | -2 | -3 | -4 | 0 | Yes |
| Slot | Description |
|---|---|
(default) | — |
icon | Custom leading icon (replaces icon prop) |
Override on the host element for per-instance theming:
| Property | Description |
|---|---|
--md-fab-menu-item-container-color | Container background |
--md-fab-menu-item-label-color | Label + icon color |
--md-fab-menu-item-icon-color | Icon color override |
--md-fab-menu-item-icon-size | Icon dimensions |
--md-fab-menu-item-container-shape | Border-radius override |
Style internal elements through shadow DOM with ::part():
| Part | Description |
|---|---|
state-layer | State-layer overlay |
icon | Leading icon (fallback) |
label | Label text wrapper |
The colour properties above are set on the menu and inherited. These three are the item’s own, for when one branch needs to differ from the rest:
| Custom property | Purpose | Default |
|---|---|---|
--md-fab-menu-item-icon-color | Icon colour, independent of the label | Inherits the label colour |
--md-fab-menu-item-icon-size | Icon box | max(16px, 20px + density) |
--md-fab-menu-item-container-shape | Item border radius | --md-sys-shape-corner-full |
<!-- index.html <head> — the icon font the components draw from -->
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<!-- index.html — register the AWC UI elements once -->
<script type="module">
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-item-theme" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-item-theme" menu-label="Create">
<md-fab-menu-item icon="description" label="Default"></md-fab-menu-item>
<md-fab-menu-item icon="warning" label="Squared off" style="--md-fab-menu-item-container-shape: 8px;"></md-fab-menu-item>
<md-fab-menu-item icon="bolt" label="Bigger, tinted icon" style="--md-fab-menu-item-icon-size: 28px; --md-fab-menu-item-icon-color: var(--md-sys-color-error);"></md-fab-menu-item>
</md-fab-menu>// Icons need the Material Symbols stylesheet in index.html — see Installation.
import { MdFab, MdFabMenu, MdFabMenuItem } from '@awc-ui/react';
export function Demo() {
return (
<>
<div style={{ inlineSize: '100%', minBlockSize: '200px', display: 'grid', placeItems: 'end center', paddingBlockEnd: '16px' }}>
<MdFab id="fm-item-theme" icon="add" aria-label="Create"></MdFab>
</div>
<MdFabMenu anchor="fm-item-theme" menuLabel="Create">
<MdFabMenuItem icon="description" label="Default"></MdFabMenuItem>
<MdFabMenuItem icon="warning" label="Squared off" style={{ '--md-fab-menu-item-container-shape': '8px' }}></MdFabMenuItem>
<MdFabMenuItem icon="bolt" label="Bigger, tinted icon" style={{ '--md-fab-menu-item-icon-size': '28px', '--md-fab-menu-item-icon-color': 'var(--md-sys-color-error)' }}></MdFabMenuItem>
</MdFabMenu>
</>
);
}// Icons need the Material Symbols stylesheet in index.html — see Installation.
// app.module.ts — register the AWC UI elements once
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AwcUiModule } from '@awc-ui/angular';
@NgModule({
imports: [AwcUiModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
<!-- app.component.html -->
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-item-theme" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-item-theme" menu-label="Create">
<md-fab-menu-item icon="description" label="Default"></md-fab-menu-item>
<md-fab-menu-item icon="warning" label="Squared off" style="--md-fab-menu-item-container-shape: 8px;"></md-fab-menu-item>
<md-fab-menu-item icon="bolt" label="Bigger, tinted icon" style="--md-fab-menu-item-icon-size: 28px; --md-fab-menu-item-icon-color: var(--md-sys-color-error);"></md-fab-menu-item>
</md-fab-menu><script setup>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<template>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-item-theme" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-item-theme" menu-label="Create">
<md-fab-menu-item icon="description" label="Default"></md-fab-menu-item>
<md-fab-menu-item icon="warning" label="Squared off" style="--md-fab-menu-item-container-shape: 8px;"></md-fab-menu-item>
<md-fab-menu-item icon="bolt" label="Bigger, tinted icon" style="--md-fab-menu-item-icon-size: 28px; --md-fab-menu-item-icon-color: var(--md-sys-color-error);"></md-fab-menu-item>
</md-fab-menu>
</template><script>
// Icons need the Material Symbols stylesheet in index.html — see Installation.
import '@awc-ui/core/define';
</script>
<div style="inline-size:100%;min-block-size:200px;display:grid;place-items:end center;padding-block-end:16px;">
<md-fab id="fm-item-theme" icon="add" aria-label="Create"></md-fab>
</div>
<md-fab-menu anchor="fm-item-theme" menu-label="Create">
<md-fab-menu-item icon="description" label="Default"></md-fab-menu-item>
<md-fab-menu-item icon="warning" label="Squared off" style="--md-fab-menu-item-container-shape: 8px;"></md-fab-menu-item>
<md-fab-menu-item icon="bolt" label="Bigger, tinted icon" style="--md-fab-menu-item-icon-size: 28px; --md-fab-menu-item-icon-color: var(--md-sys-color-error);"></md-fab-menu-item>
</md-fab-menu>md-fab ·
md-menu ·
md-button ·
md-icon-button ·
md-select
md-fab-menuTwo artefacts to give your AI agent so it generates correct UI with this component. The per-component spec answers "how do I use this exact tag?". The main-llm spec answers "which tag should I pick in the first place?".
md-fab-menu spec card
Identity · when to use / when NOT · decision cues · behavioural contract · do/don't · anti-patterns · full API. Paste into your agent when you're implementing with this component.
System-prompt preamble · decision matrix · token reference · page recipes · anti-patterns. Paste into the system prompt at the start of a piece of work.