1.3.0
Minor changes
-
FAB and extended FAB (COMPONENT_SPEC §5). m3e-css
fab.css:.m3e-fab(baseline 56dp,--size-medium80dp,--size-large96dp;--size-small40dp is deprecated, D4) and.m3e-extended-fab(small 56dp,--size-medium,--size-large,--collapsed,__label), six color styles (--primary-containerdefault,--secondary-container,--tertiary-container,--primary,--secondary,--tertiary), Level3 elevation with Level4 on hover. m3e-react:<Fab>,<ExtendedFab>(collapses to its icon with an interruptible width spring whenexpanded={false}; the label stays its accessible name) anduseExtendedFabScroll();<Fab size="small">warns once in development. m3e-tokens:components/fab-defaults.csswith theFloatingActionButtonDefaultsvalues Compose renders that are not in the token files. The plain-HTML ripple (ripple.js) covers both FABs. -
FAB menu (COMPONENT_SPEC §6). m3e-css
fab-menu.css:.m3e-fab-menuwith--open, the toggle.m3e-fab.m3e-fab-menu__toggle(shrinks from the FAB size to the 56dp close button, rounds to a circle, mixes to the color set's role and swaps its icon at half progress),.m3e-fab-menu__items[role=menu]and.m3e-fab-menu__itempills;--size-medium/--size-large(the FAB it opens from),--secondary/--tertiarycolor sets and--align-start/--align-center. m3e-elements:<m3e-fab-menu>with<m3e-fab-menu-item>children (@kyralabs/m3e-elements/fab-menu.js), eventsopen-changeandaction. m3e-react:<FabMenu items open onOpenChange icon closeIcon size color align>andfabMenuClassName(). Both JS layers run Compose's interruptible springs (toggle on fast spatial, items staggered on slow effects with their own width and alpha springs), leave focus on the close button when opening (ArrowDown/Tab enter the items, as in Compose), keep focus in the menu while open, and close on Escape, an outside press or an item press. m3e-tokens:components/fab-menu-defaults.csswith theFloatingActionButtonMenu.ktvalues Compose renders that are not inFabMenuBaselineTokens. m3e-motion:SpringAnimatable(Compose Animatable semantics),fabMenuItemVisible()andmenuNavigationTarget(). -
Button group (COMPONENT_SPEC §3): standard and connected groups, sizes XS–XL, round/square, single/multiple selection and an overflow menu. m3e-css
button-group.css(.m3e-button-group,--connected,--size-*,--overflow,__item,__overflow;.m3e-buttonwitharia-checkednow styles as a toggle). m3e-elements<m3e-button-group>/<m3e-button-group-item>(eventschange,action) and thebutton-group-layout.jsentry (ButtonGroupLayout: press width springs with Compose'sExpandedRatio, interruptible corner springs, roving tabindex, overflow measurement). m3e-react<ButtonGroup>/<ButtonGroupItem>. m3e-motionbuttonGroupWidthsandbuttonGroupVisibleCount(ports ofButtonGroupMeasurePolicy). m3e-tokenscomponents/button-group-defaults.css:ButtonGroupDefaultsvalues Compose renders plus the per-size m3.material.io token DB values Compose lacks (XS between-space 18dp, M/L/XL 8dp, connected corners per size). -
Menus (COMPONENT_SPEC §21): the expressive vertical menu in standard and vibrant colors, segmented with groups, checkable and selectable items, submenus, and Compose's baseline
DropdownMenu.@kyralabs/m3e-tokens:components/menu-defaults.css(andmenuDefaultsin./components) with theMenu.kt/MenuDefaults.ktvalues Compose renders that are not inMenu*Tokens.@kyralabs/m3e-css:menu.css(.m3e-menu,--vibrant,--baseline,__group,__label,__divider,__itemand its parts). Menu items join the state layer and get an inward focus ring.@kyralabs/m3e-elements:<m3e-menu>,<m3e-menu-item>and<m3e-menu-group>(menu.js), andMenuPopup(menu-popup.js): Compose'sDropdownMenuPositionProviderplacement (flips above when there is no room) and the interruptible open/close scale and fade springs.@kyralabs/m3e-react:MenuTrigger,Menu,MenuItemandMenuSection(React AriauseMenu, typeahead,selectionMode,submenu).@kyralabs/m3e-motion:menuPositionandmenuTransformOrigin, ports ofDropdownMenuPositionProviderandcalculateTransformOrigin.
-
Split button (COMPONENT_SPEC §4): a leading button for the primary action and a trailing button that opens a menu, in filled, tonal, elevated and outlined, sizes XS–XL. m3e-css
split-button.css:.m3e-split-buttonaround two.m3e-buttons (__leading,__trailing) with the SplitButton*Tokens paddings, inner corners (pressed; full while open,aria-expanded="true"), trailing icon size and rotation, and Compose's optical centering of the trailing icon. m3e-elements:<m3e-split-button label icon menu-label variant size>(@kyralabs/m3e-elements/split-button.js) anchors its<m3e-menu>child to the trailing button and emitspress. m3e-react:<SplitButton variant size icon onPress menu={<Menu>…</Menu>} menuLabel>. Both spring the inner corners (default effects) and the icon (Compose samples'spring()) with their velocity kept. m3e-tokens:components/split-button-defaults.csswith theSplitButtonDefaultsvalues Compose renders that are not in the token files.