Aurum Changelog
All notable changes to the Aurum design system are documented here.
Format follows Keep a Changelog.
[Unreleased]
Added
AurumGlobalHeader— persistent top bar for top-level destinations (component/navigation/). Mapped to FigmaGlobal Header(5252:2274). SealedAurumGlobalHeaderRightContentwith two variants:Default(optional Support pill + optional Rewards/Notifications pill) andLivePrice(live gold-buy-price pill on a dark surface + optional Rewards/Notifications pill). Each pill is 44 dp tall, 22 dp corner radius, 1 dpinteractive/border/neutral/mutedborder, with a subtleaurumRadialBrushsheen overlay matching Figma's SVG-encoded radial fill. Profile pill accepts either anImageVectorglyph (defaultAurumIcons.User.User) or a caller-suppliedprofileContentslot — the slot pattern lets consumers render URL-loaded avatars (Glide / Coil) without dragging an image-loading dep into Aurum. Ships Code Connect mapping (AurumGlobalHeader.figma.kt), MCP-readiness KDoc tags (@AurumIntendedUse+ 3 ×@AurumDo+ 3 ×@AurumDont), and 6@AurumPreviewpreviews covering all variant combinations. CatalogNavigationDemoextended with three live examples.AurumTab+AurumTabRow— tab navigation family (component/navigation/). Mapped to Figma_Tabs(5430:3115) andGroupRoot(5531:795).AurumTabis a scratch composable (FoundationBox+Row+selectable,role = Role.Tab) with an optional leadingImageVectoricon atAurum.iconSize.xl(24 dp) and a label rendered atTitle/XS-Bold(14/20 sp, Bold 700) withTextOverflow.Clip. Selected usesinteractive/text/primary/normal+interactive/icon/primary/normal; unselected usesinteractive/text/neutral/subtle+interactive/icon/neutral/subtle. No disabled variant — Figma's_Tabsset has none; callers omit unavailable destinations.AurumTabRowuses aSubcomposeLayoutprobe pass to measure each tab's natural width, then auto-fits or scrolls: whentabCount × max(widestNatural, 100.dp) ≤ viewportit wrapsmaterial3.PrimaryTabRowand tabs flex to share the row equally (matching Figma's two/three-tabflex-[1_0_0]variants); otherwise it wrapsmaterial3.PrimaryScrollableTabRowand pins each tab to the computed width viaLocalAurumTabWidth(matching Figma's four-tab fixed-100px+scroll variant and gracefully extending to 5 + tabs). Indicator isborderWidth/lg(2 dp)interactive/border/primary/default; bottom divider isborderWidth/sm(1 dp)interactive/border/neutral/highlighted. Both ship Code Connect mappings (AurumTab.figma.kt,AurumTabRow.figma.kt) and 10@AurumPreviewpreviews including a 640 dp tablet tile and a 5-tab scroll demo. CatalogTabGalleryadded under Navigation with two/three/four/with-icons sections.
[0.3.0] - 2026-05-04
Added
AurumCheckbox+AurumCheckboxGroup— multi-select selection family (component/selection/).AurumCheckboxis a tri-state control (AurumCheckState.Unchecked / Checked / Indeterminate) mapped to Figma5169:1314. Closed enum chosen overBoolean?to avoidnull-as-indeterminate ambiguity. MirrorsAurumRadioButton's API:selected,onCheckStateChange,label,subtext,enabled,error,labelPosition(End/Start). The 24 dp box is rendered viaCanvas— checked state fills withAurum.colors.interactive.bgPrimaryDefaultand overlays a stroked checkmark; indeterminate fills the box and overlays a centred horizontal bar; error tints both outline and glyph withfeedback-negative.AurumCheckboxGroup<T>mirrorsAurumRadioGroup<T>but withselected: ImmutableSet<T>andonSelectionChange: (T, Boolean) -> Unit; usestriStateToggleableper row soIndeterminate → Checkedadvancement is a single tap. Both ship Code Connect mappings (AurumCheckbox.figma.ktat5169:1314,AurumCheckboxGroup.figma.ktat5169:1796) plus 8 + 5@AurumPreviewpreviews. CatalogSelectionDemoextended with single-checkbox and group examples.AurumAmountInput— currency-prefixed numeric input mapped to Figma5080:261(component/field/AurumAmountInput.kt). Delegates toAurumTextFieldfor state, validation, helper/error/success text, label plumbing — currency symbol (default₹) is rendered in the leading slot usingAurum.type.headingLarge; optionalsuffixText(e.g. "0.0097 g") sits in the trailing slot.loading = trueswaps the trailing slot for an inlineAurumLoader(size = Aurum.iconSize.lg)and forces read-only. Caller is responsible for formatting bothvalueandsuffixText(locale + currency conventions are app-level concerns) — flagged in KDoc. Numeric keyboard viaKeyboardOptions(keyboardType = KeyboardType.Number). 8@AurumPreviewpreviews + Code Connect.AurumNavBar+AurumNavBarItem— bottom navigation family (component/navigation/). Mapped to the layout component_set at Figma5575:14226.AurumNavBaris a slot-based composable taking anImmutableList<AurumNavBarItem>(label + line/fill icon pair) plusselectedIndex,onSelect, and alayout: AurumNavBarLayout.AurumNavBarLayoutis asealed interfaceexposing four data variants —Standard3,Standard4,Standard5,CenterQr5(onQrClick)— each carrying anitemCountenforced viarequire()at composition time.CenterQr5takes 4 items (the QR action is rendered by the layout, not surfaced as an item) and inserts the raised QR FAB between items 1 and 2 usingAurumIcons.Action.QrCode. The per-cell rendererAurumNavBarCellisprivate— exposing it would only invite cells without a parent bar. 6@AurumPreviewpreviews (one per layout + selected-state variants) + Code Connect. CatalogNavigationDemoextended with all 4 layouts running interactiveselectedIndexstate.AurumTransactionListCard— opens the Cards family (component/card/, new package). Mapped to Figma5576:19749. Status-tinted card (AurumTransactionStatus.{Success, Error, Pending}) composingAurumSurface+AurumText+AurumIcon. Outer wash usesAurum.colors.feedback.{positive, negative, notice}/subtle; status badge icons map to the newAurumIcons.Status.{Success, Warning, Pending}glyphs landed in v0.2.1; amount and helper-text colours match the wash family. Caller hands in pre-formatted strings fordateTextandamount— no locale or currency handling inside (consistent withAurumAmountInput).helperTextandleadingIconare optional. 7@AurumPreviewpreviews + Code Connect. StandaloneCardDemocomposable wired into the catalog showcase as a new "Cards" section between Navigation and Chips.
Changed
tooling/gallery/generate.py— registered thecardfamily inFAMILY_LABELSso the gallery site renders the newcomponent/card/family with a proper "Cards" heading rather than falling back to the raw directory name.AurumLinkButtonCode Connect mapping validated against Figma4784:1286("Component 1") — the existingAurumLinkButton.figma.ktalready targets the right node, no changes needed. The Figma component name is misleading ("Component 1") but the underlyingvariant=link buttonaxis maps cleanly.
Manifest
- Manifest jumps from 24 → 28 components:
AurumAmountInput,AurumCheckbox,AurumCheckboxGroup,AurumNavBar,AurumTransactionListCard(5 new) —AurumNavBarItemis a public data class but not a composable, so it doesn't count. Code Connect mappings 150 → ~158. Schema version unchanged ("2"); changes are additive.
Known gaps
Icons/NEK(Figma5566:781) is referenced by Jar's nav bar item set but not yet imported intoAurumIcons. Catalog NavBar previews use placeholder icons (Home,Gift,Document, etc.) so compile + render succeed. Action: design to confirm the canonical NEK glyph node, then add anIconEntrytotooling/icons/import_from_figma.py:ICON_MANIFESTand re-runmake icons-import.Icons/Checkstill resolves to a single-weight glyph (5308:800);Icons/Checkat5480:5047remains an empty/orphaned component in Figma (see v0.2.1 ghost-component note inadd-an-icon.md). No action.
[0.2.1] - 2026-05-04
Added
- 11 new Figma-derived icons imported via
tooling/icons/import_from_figma.py. Sourced authoritatively from the Jar Light Design System file (YvIxqu2oTlM6UnkL0OloHc) by enumerating everyIcons/*master component via the Figma REST/v1/files/{key}/componentsendpoint and diffing againstICON_MANIFEST. Each ships a 24×24 vector drawable + AurumIcons accessor (line + filled) + per-weight Code Connect mapping. Breakdown:AurumIcons.Action.{Minus, MoreHorizontal},AurumIcons.Content.Image,AurumIcons.Status.{Pending, Warning, Success, Loader},AurumIcons.Commerce.Withdraw. Single-weight icons (Success,Loader,Selection.Check) reuse the same Figma node id for both weights, producing identical line/fill XMLs while keeping the<Name>+<Name>FilledAPI contract intact.
Changed
AurumIcons.Action.AddandAurumIcons.Action.Overflownow Figma-derived. Previously hand-drawnaurum_ic_action_add.xmlandaurum_ic_action_overflow.xmlare replaced with imports from Figma'sIcons/Plus(5322:1592/5322:1593) andIcons/DotsThreeVertical(5431:2848/5431:2850). Public Kotlin API names unchanged — call sites inAurumButton,AurumIconButton,AurumTextField, andAurumTopAppBarneed no edits. TheirFilledaccessors (AddFilled,OverflowFilled) are now also available.AurumIcons.Selection.Checknow Figma-derived. Hand-drawnaurum_ic_selection_check.xmlreplaced with import from Figma'sIcons/Check(5308:800). Used byAurumSwitchfor the on-state tick. Initial discovery missed this node because the file's components index points at a stale duplicate (5480:5047) that's an empty/orphaned component;5308:800lives near the Warning glyphs and renders fine. Aurum now has zero hand-drawn icons — every icon flows from Figma throughmake icons-import.Icons/X(Close) fill node updated from5162:954→5311:823. Design moved the X fill variant; the old node returns null from/v1/images. Visual unchanged.tooling/icons/import_from_figma.pycleanup. Removed the special-case blocks at the end ofgenerate_aurum_icons_ktthat hand-wiredAction.Add,Action.Overflow, andSelection.Checkfrom legacy XMLs — all three are now regularIconEntryrows. AddedselectiontoCATEGORY_ORDER+CATEGORY_DOCSTRINGS. Removedaurum_ic_selection_check.xmlfrom the obsolete-detection exception set.aurum-catalog/.../IconGallery.ktextended with the 11 new icons (Action, Content, Status, Commerce sections) plus a new Selection section showingCheck.
Tooling
- Documented icon ghosts in
aurum/docs/workflows/add-an-icon.md. FiveIcons/*names appear in the file's/componentsindex but are deleted/orphaned components in Figma — opening their URLs prompts a "Restore component" dialog and/v1/imagesreturns null. They are NOT placeholders awaiting drawings:Icons/InstantSave(5343:1795/1796),Icons/DailySavings(5343:1779/1780),Icons/WeeklySavings(5343:1781/1782),Icons/MonthlySavings(5343:1783/1784), olderIcons/Withdrawon5343:*(superseded by the live pair at5358:456/5358:465which is imported asCommerce.Withdraw). The doc explicitly tells future contributors to skip them rather than chase a "fix it in Figma" thread.
Manifest
- Manifest jumps from 60 → 68 icons. Code Connect mappings 130 → 150. Components count unchanged (24).
- Schema version unchanged (
"2"); changes are additive on the existing icon list.
[0.2.0] - 2026-05-04
Tooling
- MCP manifest schema v2 — enrichment fields for
aurum-mcpv0.3. Bumpedtooling/manifest/schema.jsonschemaVersionenum from["1"]to["1","2"]and added four optional, additive fields: component.intendedUse: string— when-to-reach-for prose authored in a new@AurumIntendedUseKDoc tag.component.usage: { do: string[]; dont: string[] }— guardrails authored in@AurumDo/@AurumDontKDoc tags (one bullet per tag instance).component.relatedTokens: string[]— qualified Aurum token names (surface.bgPageBase,spacing.s12,typography.bodyMedium) the component references in its source. Static-analyzed byanalyze_token_refs(source)againstAurum.{colors,space,type,radius,borderWidth,elevation,iconSize}.<leaf>accessors.icon.tags: string[]— hand-curated synonyms (Delete→[trash, remove, bin, garbage, discard]) sourced from a newaurum/icons/tags.tomlfile. Powers the synonym-awareaurum_search_iconstool.
All four are absent from v1 manifests and ignored gracefully by older readers. The generator emits schemaVersion: "2" whenever any of them are populated, otherwise stays on "1".
@AurumIntendedUse/@AurumDo/@AurumDontKDoc tags authored on all 24 components. Every component in the manifest now carries intended-use prose + Do/Don't guardrails. Counts: 24 ×intendedUse, 70 totaldoentries, 70 totaldontentries. The 6 priority components (Chip, Button, RadioButton, RadioGroup, TopAppBar, OtpInput) landed first; this extends coverage to AurumIconButton, AurumLinkButton, AurumTextField, AurumPhoneNumberInput, AurumSearchField, AurumSwitch, AurumBadge, AurumLoader, AurumSkeleton, AurumSectionHeader, AurumSurface, AurumScreen, AurumSnackbar, AurumStepper, AurumDivider, AurumIcon, AurumText, AurumLabel. Tags are stripped from the rendered KDoc body and re-emitted as structured manifest fields.- Cross-repo dispatch wired up. Committed
.github/workflows/notify-mcp.yml, which fires arepository_dispatch: aurum-content-changedevent atChangejarapp/aurum-mcpon every push tomainand every release. Drops the manifest-sync latency in aurum-mcp from ≤24 h (cron) to ~1 min. Requires theMCP_DISPATCH_PATorg secret (a fine-grained PAT scoped to aurum-mcp with Actions: read+write). - README — manifest pipeline section. Documents how component changes propagate to
aurum-mcpend-to-end: pages.yml → manifest URL → notify-mcp dispatch → sync-manifest auto-PR → human merge + release dispatch. Includes the@AurumIntendedUse/@AurumDo/@AurumDontauthoring convention and theaurum/icons/tags.tomlsynonym format with quality-bar guidance. aurum/icons/tags.toml— curated synonyms for all 60 icons across 9 categories (Action / Commerce / Content / Media / Navigation / Selection / Status / System / User). 222 tags total. Format is TOML keyed by category → icon name → tag list.- Pages workflow now publishes the manifest.
.github/workflows/pages.ymlinvokesgenerate.py --emit-manifest build/gallery/data/manifest.json --also-build-gallery --validateon every deploy, exposinghttps://changejarapp.github.io/aurum-android/data/manifest.json(previously 404). Closes the cross-repo sync gap that leftaurum-mcp's drift-check soft-failing on every PR. - MCP manifest pipeline. Added
tooling/manifest/schema.jsondefining a JSON Schema for an LLM-consumable Aurum manifest, and extendedtooling/gallery/generate.pywith--emit-manifest <path>and--validateflags. The same parsers that drive the static gallery now also emit a structured JSON describing every component (KDoc + signature + params + Figma deeplink + Code Connect path + gallery URL), every token (semantic colour / visual palette / spacing / radius / border-width / icon-size / elevation / typography), every icon (with paired line/fill Figma node IDs), every Code Connect mapping, and the full Keep-a-Changelog history. Single source of truth, two render targets — HTML for humans, JSON for agents. Consumed by the newatri-jar/aurum-mcp(and laterChangejarapp/aurum-mcp) MCP server. Manifest carries aplatforms[]field on each component for forward-compatible cross-platform support (aurum-iosplugs in as a sibling manifest source without restructuring).
[0.1.5] - 2026-04-28
Fixed
- All 114 icons re-rendered to match Figma. The previous import pipeline used Figma MCP asset URLs that returned only the inner SVG path with
viewBoxset to the path's tight bounding box (e.g.7.5 × 13.5for ChevronRight). Combined withwidth/height = 24dp, this caused non-uniform stretch and stripped the surrounding 24×24 frame padding — the chevron rendered fat and squashed, every other non-square icon was distorted, and even square-bbox icons lost their intended 2-3 dp inset. - Stroke-only icons no longer get a fill. Phosphor regular-weight SVGs carry
fill="none"at the<svg>root, cascading to children. The previous import didn't honour the cascade and emitted bothfillColorandstrokeColor— so e.g.Homerendered as a solid black house instead of the intended outline.
Changed
- Icon import pipeline rewritten to fetch via the Figma REST API (
/v1/images?…&format=svg) using$FIGMA_ACCESS_TOKEN. REST exports include the 24×24 frame and proper SVG-level fill cascade, so the conversion is a clean 1:1 to Vector Drawable. The per-iconCOMPOUND_TRANSLATESworkaround (previously hand-coded for SpeakerSimpleX) is no longer needed and was removed. The stalefigma-icon-urls.jsonURL manifest was deleted.
Added
/icons.htmlpage on the gallery website — every icon's line + fill weights side by side, grouped by category, with live search and click-to-copy onAurumIcons.<Category>.<Symbol>. ReadsAurumIcons.ktand inlines each Vector Drawable ascurrentColorSVG so icons follow the page theme. No longer need to install the catalog APK to scan the icon set.
[0.1.4] - 2026-04-28
Changed
AurumChiprealigned with the Figma "Action" chip component (YvIxqu2oTlM6UnkL0OloHc, node4446-701). Addssize(AurumChipSize.Large/Small) andleadingIconparameters; height tightened to 38 dp Large / 30 dp Small (from 40 dp); padding now asymmetric (12 dp text-side, 8 dp icon-side); inter-element gap reduced 8 → 4 dp; text style varies by size (titleT2/bodySmall). Existing call sites are unaffected — new parameters default to the prior behaviour. Previews regrouped into Large-trailing / Large-leading / Large-both / Large-text-only / Small / Disabled.- Code Connect for
AurumChippicks up the newSizeaxis (large↔Large,small↔Small).
[0.1.3] - 2026-04-27
Added
- Compose perf guardrails. Detekt +
mrmans0n/compose-ruleswired in, with the perf/stability rules active (UnstableCollections,MutableStateAutoboxing,MutableParams,MutableStateParam,LambdaParameterInRestartableEffect,Material2). Compose Compiler Metrics enabled on:aurumand:aurum-catalog(build/compose_compiler/). - Compose stability CI gate. New
verifyComposeStabilityGradle task in:aurumfails the build whenaurum_release-classes.txtreports more inferred-unstable classes thancomposeStabilityThreshold(currently0). Wired intocheck.ymlafter detekt. - Compose metrics dashboard deployed alongside the gallery at changejarapp.github.io/aurum-android/metrics/, rendered from
build/compose_compiler/viaPatilShreyas/compose-report-to-html. Per-PRcompose-metricsartifact uploaded bycheck.yml. - Aurum icon set — 57 icons × 2 weights = 114 vector drawables imported from the Figma "Component Icons" frame, exposed under
AurumIcons.<Category>.<Name>(and<Name>Filledfor the fill variant). 8 categories:Navigation,Action,Content,Media,Commerce,System,Status,User. Ingested by the newtooling/icons/import_from_figma.pyscript (make icons-import); idempotent re-runs. IconGalleryscreen in the catalog showing every icon × weight, grouped by category.- 114 Code Connect mappings for the new icons under
aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIcon*.figma.kt. Auto-published to Figma via thefigma-code-connect.ymlworkflow.
Changed
- 6 overlapping icons replaced from the Figma source-of-truth:
Navigation.Back→ArrowLeft,Navigation.ChevronForward→ChevronRight,Media.Like→Content.Heart(renames; 12 call-site migrations acrossAurumTopAppBar,AurumChip,AurumSectionHeader,AurumLinkButton, and the catalog gallery).Navigation.Close,Action.Edit,Action.Searchkept their names — only their underlying XML content was replaced. - 5 components marked codebase-only:
AurumSearchField,AurumIconButton,AurumDivider,AurumLoader,AurumSkeleton— verified absent from the Figma library via MCP search. File-level marker added so future Code-Connect audits don't keep flagging them. AurumIcons.ktregenerated from the import script. The 3 legacy entries that lack a Figma counterpart (Action.Add,Action.Overflow,Selection.Check) remain hand-authored underres/drawable/and are flagged in-file pending design escalation.record.ymlnow also dispatchespages.ymlafter committing fresh baselines onmain, so the gallery's snapshot embeds redeploy without a manual trigger.
Fixed
AurumOtpInput: keyedLaunchedEffecton the completion-boundary transition (value.length == maxLength) instead ofvalueitself, so the coroutine no longer relaunches on every keystroke.AurumSkeleton: moved theshimmerProgressstate read out of thedrawWithCachecache block and intoonDrawBehind, so the cache is no longer invalidated on every animation frame. The gradientcolorslist is nowremember-ed.AurumText:inlineContentparameter typed asImmutableMap<…>instead ofMap<…>, restoring skippability (caught by the new compose-rulesUnstableCollectionsrule).- CI Java mismatch:
compose-report-to-htmlv1.5.0 JAR is built against Java 21;check.ymlandpages.ymlnow install JDK 21 alongside JDK 17 and invoke the JAR via$JAVA_HOME_21_X64/bin/java.
Tooling
- New Makefile targets:
make lint-compose,make compose-metrics,make compose-metrics-html,make icons-import,make icons-brand(rename of the priormake iconsfor clarity vs the new icon-set sync). - New tooling scripts:
tooling/icons/import_from_figma.py(Figma SVG → Vector Drawable + AurumIcons.kt + Code Connect codegen) andtooling/gallery/render_metrics_index.py(gallery/metrics/landing page).
[0.1.2] - 2026-04-23
Added
- Screenshot testing via Roborazzi + ComposablePreviewScanner. 334 baseline
PNGs committed under aurum/src/test/snapshots/ (Git LFS-tracked) covering
every @Preview and every tile of the @AurumPreview 6-device fan-out.
Any visual regression fails CI before merge. Tasks: recordRoborazziDebug
(refresh baselines), verifyRoborazziDebug (CI check), compareRoborazziDebug
(diff without failing).
.github/workflows/check.yml— PR + main-push workflow running library +
catalog build, lint, and snapshot verification. Diff PNGs uploaded as a
workflow artifact on any screenshot drift so design reviewers can eyeball
the exact delta.
- Git LFS (
.gitattributes) trackingaurum/src/test/snapshots/**/*.png
— keeps pack files small, surfaces binary diffs in PR UIs.
[0.1.1] - 2026-04-23
Changed
- Maven coordinate realigned with Jar's library convention.
- Before:
com.jarapp:aurum:<ver> - After:
com.jar.internal.library.aurum-android:core:<ver> - Kotlin import package inside the AAR stays
com.jar.app.aurum.*— no source rename. - This lets consumers resolve Aurum via the existing
Changejarapp/*wildcard
Maven repo in jar-android/settings.gradle.kts, identical to how
com.jar.internal.library.core-network:shared and siblings are resolved.
- The previous
com.jarapp:aurum:0.1.0artifact is stale and should not be
consumed — it's kept in GitHub Packages only to avoid the "published once,
cannot re-publish the same coord" rule.
Removed
AurumElevation.toast+ElevationTintColors.toast+AurumLightElevation.toastentry +AurumLightColors.elevationTint.toastvalue — Figma ships only a tint forelevation/_toast(no dedicated dims) and the fallback shape matchedlowRaised, so the Kotlin surface added API surface without semantic value. Snackbars/toasts now useAurum.elevation.lowRaiseddirectly. The plugin mapping (figma-plugin-aurum-sync) marks_toastas an explicitly skipped elevation token and bumps to0.1.1.
Added
AurumColors.visual— new decorative palette subgroup exposing 77 chromatic tokens (blue/green/orange/pink/purple/red/yellow × shades 50…1000). Mirrors Figma'svisual_colorscollection 1:1 and sources values fromAurumPaletteprimitives. Feature code usesAurum.colors.visual.<family><shade>for palette-keyed decorative colours that have no semantic meaning. RawAurumPalettestaysinternal.AurumPhoneNumberInput— phone-number variant ofAurumTextFieldwith country-code prefix slot, optional flag composable, digit-only input filter,KeyboardType.Phone, and a default 10-digit max length. Mirrors the Figma "Phone Number Input" component set.AurumTextField.figma.kt— Code Connect stub against Figma4623:373mappingstate,validationState,multi_line,label,showHelpTexttoAurumTextFieldAPI props.AurumPhoneNumberInput.figma.kt— Code Connect stub against Figma4904:2455mappingstate,validationState,hasValue,label,showHelpText.AurumOtpValidationState.Timer— fourth validation state for resend-countdown UX. Renders identically toNonebut provides a semantic channel matching the FigmavalidationState=timervariant.Modifier.aurumHardShadow(color, offsetY, shape)— solid-colour offset drop shadow for skeuomorphic "stacked card" effects (matches Figma'sshadow(0, Ypx, 0, 0, color)spec). Encapsulates the double-box idiom into a single modifier that expands layout byoffsetYand paints the shape outline behind content.
Fixed
AurumOtpInputdisabled digits now usesurface.textDefaultDisabled(matching Figmatext/default/disabled) instead oftextDefaultNormalat 10% alpha.AurumTopAppBarsynced to Figma4826:1057Page Header: title uses SemiBold (was Medium); subtitle useslabelL2Medium 12/16 intextDefaultNormal(wasbodyB3Normal intextDefaultSubtle); primary button uses SemiBold label and natural 36 dp height from 8 dp padding (was fixed 32 dp, Medium); back + action icons tint viainteractive.iconNeutralNormal(wassurface.textDefaultNormal— same hex, correct token). Docstring fix: icon wrapper is 32 × 40 dp (w × h), not 40 × 32.AurumBadgesynced to Figma4240:10843: both emphases now render atLabel/L-Medium(12/16 Inter Medium) — previously had a 18 sp line-height and Intense emphasis rendered Normal weight. Emphasis-specific text styles collapsed to a single shared style.AurumSectionHeadersynced to Figma3702:162168: title, link label, and text-action label render SemiBold (Title/S-SemiBold/Title/XS-SemiBold); icon-action tint usesinteractive.iconNeutralNormal(wassurface.iconDefaultNormal— same hex, correct semantic).AurumSwitchsynced to Figma4018:557: thumb now usesinteractive.bgNeutralInverse(wassurface.bgPageBase— same hex, correct semantic); checked icon usesinteractive.iconPrimaryNormal(wasbgPrimaryDefault); disabled-checked icon usesinteractive.iconNeutralDisabled(wasbgNeutralDisabled— real hex drift fixed).AurumSteppersynced to Figma3834:139631: numeric value and ± symbols render Bold (Num/XS); Neutral and Brand state colours moved to theinteractive.*token family; disabled-state bg/border/icon hexes corrected (#6C849D17/#C3C7D1were previously rendering as#ECEEF3/#848A99).AurumLabelsynced to Figma3774:137816: all variants render Medium weight (was SemiBold);Strongvariant now useslabelL2size (waslabelL1) andfeedback.textPrimaryIntensecolour (wassurface.textDefaultNormal).AurumButtonsynced to Figma4692:1074: primary-disabled text token changed totextPrimaryDisabled(wastextOnPrimaryDisabled); secondary variant border usesborderPrimaryDefaultwhen enabled andborderNeutralMutedwhen disabled (wasborderNeutralDefault/borderNeutralDisabled).
[0.2.0] - 2026-04-16
Added
- Figma Code Connect infrastructure: Gradle plugin, CLI,
*.figma.ktpattern AurumIconsnamespace with 8 XML Vector Drawables from Figma exportsAurumLinkButton— new component from Figma Button pageAurumBadge— 6 colors × 2 emphases × 2 sizes from FigmaAurumOtpInput— digit-by-digit OTP from Figma specAurumStepper— numeric +/− from Figma specAurumLabel— styled text label from Figma specAurumSectionHeader— section divider from Figma specAurumSwitch— toggle from Figma specversion.propertiesfor semver tracking
Changed
- AurumButton rebuilt from Figma spec: 3 variants (removed Ghost/Destructive), corrected heights (40/48/56dp), added
isFullWidth+isLoading, 12dp corner radius - AurumTypography restructured to match Figma type scale: 14 scale composites (Display/Heading/Body/Caption) + 6 component-level styles
- AurumTextField audited: added success state, readonly treatment, character counter, fixed error token layer
- All Material Icons replaced with
AurumIcons.*(XML Vector Drawables loaded viaImageVector.vectorResource()) - Button size enum renamed
Sm/Md/Lg→Small/Medium/Large - Button style enum renamed
AurumButtonStyle→AurumButtonVariant
Fixed
- Secondary button was filled grey — now transparent bg + outline border per Figma
- Typography composites were engineering assumptions — now 14 match actual Figma scale
- Hand-drawn
ImageVector.Builderpaths replaced with proper XML drawables
[0.1.0] - 2026-04-16
Added
- Initial Aurum module scaffold (
:core-designsystem+:core-designsystem-catalog) - 196 semantic colour tokens from Figma export (6 sub-structs)
- Spacing, radius, border-width, icon-size, elevation, motion, opacity tokens
AurumThemecomposable withMaterialBridge(hybrid M3 architecture)- Foundation primitives:
AurumText,AurumIcon,AurumSurface,AurumDivider - Interactive primitives:
AurumButton,AurumIconButton,AurumTextField,AurumSearchField - Navigation:
AurumTopAppBar(10 Figma variants) - Feedback:
AurumLoader,AurumSkeleton - Preview infrastructure:
@AurumPreview,AurumPreviewSurface Modifier.aurumShadow()for elevation rendering- CLAUDE.md module guide + 30 documentation files
- Catalog app with 6 foundation gallery screens