Compose API reference

April 11, 2026 · View on GitHub

This document is the authoritative surface-area reference for Jetpack Compose extensions in scaled mode, plus rules that every other strategy (percent, power, fluid, …) mirrors with a different name prefix.

Source of truth: library/src/main/java/com/appdimens/dynamic/compose/.

Not in this file: the resize strategy (com.appdimens.dynamic.compose.resize, code.resize, autoResize*, ResizeBound) — see resize.md and the KDoc tree under KDOC/com.appdimens.dynamic.compose.resize/.


1. Imports

Most Compose extensions live in the top-level package (re-exported from strategy packages):

import com.appdimens.dynamic.compose.sdp
import com.appdimens.dynamic.compose.hdp
import com.appdimens.dynamic.compose.wdp
import com.appdimens.dynamic.compose.ssp
import com.appdimens.dynamic.compose.scaledDp
import com.appdimens.dynamic.compose.scaledSp
import com.appdimens.dynamic.common.DpQualifier
import com.appdimens.dynamic.common.Orientation
import com.appdimens.dynamic.common.UiModeType

Strategy-specific imports (examples):

import com.appdimens.dynamic.compose.percent.psdp
import com.appdimens.dynamic.compose.power.pwsdp

2. Shared behavior (all strategies)

2.1 Flags on Number properties

SuffixMeaningWhen to use
(none)Default scaling for that axisNormal layouts
aapplyAspectRatio = trueNon-standard aspect ratios; refined curve
iignoreMultiWindows = trueSplit-screen: may return unscaled base when heuristic matches
iaBoth a and iTV/tablet + multi-window policies together

2.2 Px variants

Properties ending in Px return Float in px (layout pixel units for the current density), not Dp. Use for Canvas, legacy interop, or custom Modifier math.

Example: val stroke = 2f.sdpPx

2.3 Orientation inverters (middle of the name)

These swap which Configuration metric is read when orientation matches the inverter rule (see DimenCalculationPlumbing.effectiveQualifier).

Token in nameTypical use
PhSW-based default → height in portrait
LhSW-based default → height in landscape
PwSW-based default → width in portrait
LwSW-based default → width in landscape
hdp + Lw / PwHeight axis with PH↔LW / LH↔PW style swaps
wdp + Lh / PhWidth axis with PW↔LH / LW↔PH style swaps

Note: hdp / wdp blocks expose fewer inverter combinations than sdp by design (see property tables below).

2.4 Low-level composable functions (escape hatch)

fun Number.toDynamicScaledDp(
    qualifier: DpQualifier,
    inverter: Inverter = Inverter.DEFAULT,
    ignoreMultiWindows: Boolean = false,
    applyAspectRatio: Boolean = false,
    customSensitivityK: Float? = null,
): Dp

fun Number.toDynamicScaledPx(...): Float
fun Number.toDynamicScaledSp(...): TextUnit  // also supports fontScale, inverter, etc.

On the View / code side, toDynamicScaledPx and toDynamicScaledDp also have Int and Float overloads with the same parameters (mirroring Number), to avoid boxing on hot paths.

Use when you need a combination that is not exposed as a val shortcut.


3. Strategy prefix map (mirror of scaled)

Replace the bold stem to get the same API shape in another package:

StrategyPackageDp stem (SW / H / W)Sp stem (scaled font)“Fixed” Sp (no font scale)
scaledcomposesdp / hdp / wdpssp / hsp / wspsem / hem / wem
percentcompose.percentpsdp / phdp / pwdppssp / phsp / pwsppsem / phem / pwem
powercompose.powerpwsdp / pwhdp / pwwdppwssp / pwhsp / pwwsppwsem / pwhem / pwwem
fluidcompose.fluidfsdp / fhdp / fwdpfssp / fhsp / fwspfsem / fhem / fwem
autocompose.autoasdp / ahdp / awdpassp / ahsp / awspasem / ahem / awem
diagonalcompose.diagonaldgsdp / dghdp / dgwdpdgssp / dghsp / dgwspdgsem / dghem / dgwem
fillcompose.fillflsdp / flhdp / flwdpflssp / flhsp / flwspflsem / flhem / flwem
fitcompose.fitftsdp / fthdp / ftwdpftssp / fthsp / ftwspftsem / fthem / ftwem
interpolatedcompose.interpolatedisdp / ihdp / iwdpissp / ihsp / iwspisem / ihem / iwem
logarithmiccompose.logarithmiclogsdp / loghdp / logwdplogssp / loghsp / logwsplogsem / loghem / logwem
perimetercompose.perimeterprsdp / prhdp / prwdpprssp / prhsp / prwspprsem / prhem / prwem
densitycompose.densitydsdp / dhdp / dwdpdssp / dhsp / dwspdsem / dhem / dwem

Recommendation: learn scaled first; for other strategies, keep the same suffix pattern (a, i, ia, Px, Ph, …) and only change the prefix column.

Builder classes (Compose + code) use the same prefixed names for terminal accessors (e.g. density builder ends with .dsdp / .dssp / .dsem, not .sdp). On the code module, JVM static entry points live in Dimen{Strategy}Dp objects (e.g. DimenAutoDp.asdp); the custom-dimension builder type is Dimen{Strategy} (e.g. DimenAuto). The scaled strategy keeps DimenScaled and DimenSdp / DimenSsp unchanged.

Source files — code mirrors compose: For each strategy, Kotlin facilitators for Views live in the same Dimen<Strategy>DpExtensions.kt / Dimen<Strategy>SpExtensions.kt filenames as in compose/<strategy>/ (under code/<strategy>/). Scaled uses code/scaled/DimenSdpExtensions.kt and DimenSspExtensions.kt (package com.appdimens.dynamic.code), analogous to compose/scaled/ with package com.appdimens.dynamic.compose.


4. Facilitators — Dp (DimenSdpExtensions.kt)

All functions are @Composable. They combine a base value with conditional scaling (rotation, UI mode, sw/h/w thresholds, or both).

Common optional parameters (where present):

  • finalQualifierResolver: DpQualifier — which axis scales the chosen branch (default matches axis: sdp→SW, hdp→HEIGHT, wdp→WIDTH).
  • orientation: Orientation — usually LANDSCAPE or PORTRAIT for rotate helpers.
  • ignoreMultiWindows, applyAspectRatio, customSensitivityK — same meaning as on Number properties.

4.1 Rotation family

FunctionReceiverReturnsWhat it doesExample
sdpRotateIntDpBase Int as sdp unless orientation matches → then rotationValue scaled with finalQualifierResolver80.sdpRotate(50, Orientation.LANDSCAPE)
sdpRotatePxIntFloatSame, px80.sdpRotatePx(50)
sdpRotateDpDpAlways scales the active branch: uses scaled receiver in default orientation, scaled rotationValue when orientation matches30.dp.sdpRotate(50, orientation = Orientation.LANDSCAPE)
sdpRotatePxDpFloatpx variant30.dp.sdpRotatePx(50)
sdpRotatePlainDpDpPlain (Number alternate): inactive branch = receiver; active branch scales rotationValue (cache + strategy)16.sdp.sdpRotatePlain(50)
sdpRotatePlainDpDpPlain (Dp alternate): only orientation branch; no extra scaling — receiver and rotation must already be strategy values30.sdp.sdpRotatePlain(20.sdp)
sdpRotatePlainPxDpFloatpx variant for Number alternate16.sdp.sdpRotatePlainPx(50)
sdpRotatePlainPxDpFloatpx variant for Dp alternate30.sdp.sdpRotatePlainPx(20.sdp)

Repeat the same name pattern for hdpRotate* and wdpRotate* (defaults: finalQualifierResolver = HEIGHT or WIDTH).

4.2 UI mode family (UiModeType)

FunctionReceiverExample
sdpMode / sdpModePxInt30.sdpMode(200, UiModeType.TELEVISION)
sdpMode / sdpModePxDp30.dp.sdpMode(200, UiModeType.TELEVISION)
sdpModePlain / sdpModePlainPxDpTwo overloads: alternate Number (scaled when branch matches) or Dp (logic only, no scaling)

Same for hdpMode*, wdpMode*.

4.3 Qualifier threshold family (DpQualifier + value)

FunctionReceiverExample
sdpQualifier / sdpQualifierPxNumber60.sdpQualifier(120, DpQualifier.SMALL_WIDTH, 600)
sdpQualifier / sdpQualifierPx / sdpQualifierPlain / sdpQualifierPlainPxDpqualifiedValue: Number or qualified: Dp (qualifierValue stays the config threshold)

Same for hdpQualifier*, wdpQualifier*.

4.4 Combined screen family (mode + qualifier)

FunctionReceiverExample
sdpScreen / sdpScreenPxNumber70.sdpScreen(150, UiModeType.TELEVISION, DpQualifier.SMALL_WIDTH, 600)
sdpScreen / sdpScreenPx / sdpScreenPlain / sdpScreenPlainPxDpscreenValue: Number or screen: Dp for Plain (+ same UiModeType / qualifier threshold)

Same for hdpScreen*, wdpScreen*.

Nested extensions vs .screen builder: Chained facilitators on Dp / TextUnit (e.g. a.sdpRotatePlain(…).sdpModePlain(…)) follow expression nesting (outside → inside). DimenScaled / scaledDp() .screen(…) entries use priority inside the API, not the same rule as facilitator nesting. Prefer Dp / TextUnit Plain alternates when chaining many facilitators so values are not scaled twice.

Recommendation: wrap the tree with AppDimensProvider when using mode/fold-related UiModeType heavily (see library/PERFORMANCE.md).

Performance: sdpMode / hdpMode / wdpMode and sdpScreen / hdpScreen / wdpScreen (and strategy equivalents) resolve UiModeType via DimenCache.getCachedUiModeType(context), which caches the result per Configuration hash — they do not call SensorManager / WindowMetricsCalculator on every invocation.

4.5 Views / code — Plain (Float px + Context)

Compose logic-only Plain overloads use Dp / TextUnit alternates (no second scaling). On the View side, the same branching is exposed as Float extensions whose receiver and alternate arguments are already in px (layout or text px, depending on use), plus an explicit Context for Configuration / UI-mode cache:

  • Per strategy: Dimen*PlainPx.kt under com.appdimens.dynamic.code.<strategy> (e.g. DimenScaledPlainPx.kt in code.scaled, DimenPercentPlainPx.kt in code.percent). Naming mirrors Compose: sdpRotatePlainPx, psdpRotatePlainPx, sspRotatePlainPx, etc., for RotatePlain, ModePlain, QualifierPlain, ScreenPlain.
  • Shared helpers (internal): com.appdimens.dynamic.code.plainDimenPlainBranch.kt (plainRotatePx, plainModePx, plainQualifierPx, plainScreenPx).

Example (percent / layout px):

import com.appdimens.dynamic.code.percent.psdpRotatePlainPx
import com.appdimens.dynamic.common.Orientation

val a = layoutPx.psdpRotatePlainPx(context, rotationPx, Orientation.LANDSCAPE)

Not covered here: Compose Plain overloads that still re-scale a Number on the active branch — on Views, keep using the existing Number.*Rotate / .*Mode / … functions with Context that already perform full scaling.


5. Facilitators — Sp (DimenSsp.kt + DimenSspExtensions.kt)

5.1 Number rotation (returns TextUnit)

FunctionExample
sspRotate16.sspRotate(24, orientation = Orientation.LANDSCAPE)
hspRotate16.hspRotate(22)
wspRotate16.wspRotate(20)

Optional: fontScale (default true), ignoreMultiWindows, applyAspectRatio, customSensitivityK.

5.2 Number px rotation

FunctionExample
sspRotatePxval px = 16.sspRotatePx(24)

(hspRotatePx, wspRotatePx same pattern.)

5.3 TextUnit rotation / mode / qualifier / screen

For each axis (ssp, hsp, wsp) the module provides composable extensions on TextUnit:

  • sspRotate, sspRotatePx, sspRotatePlain, sspRotatePlainPx*RotatePlain / *RotatePlainPx mirror Dp: alternate Number (scaled when active) or TextUnit (logic only).
  • sspMode, sspModePx, sspModePlain, sspModePlainPx
  • sspQualifier, sspQualifierPx, sspQualifierPlain, sspQualifierPlainPx
  • sspScreen, sspScreenPx, sspScreenPlain, sspScreenPlainPx

Examples:

Text("A", fontSize = 16.ssp.sspRotatePlain(24))           // Number alternate (scaled when branch active)
Text("A2", fontSize = 16.ssp.sspRotatePlain(12.ssp))       // TextUnit alternate (no second scaling)
Text("B", fontSize = 16.sspMode(40, UiModeType.TELEVISION))
Text("C", fontSize = 16.ssp.sspQualifier(24, DpQualifier.SMALL_WIDTH, 600))
Text("D", fontSize = 16.ssp.sspScreen(32, UiModeType.TELEVISION, DpQualifier.SMALL_WIDTH, 600))

Number also exposes sspQualifier, sspScreen (+ Px variants) where implemented; sspMode on Number is not present — use TextUnit or property 16.ssp then sspMode on the result, or sspModePx on Number if you need px.


6. Builders — DimenScaled / ScaledSp

6.1 Entry points

val chain = 16.scaledDp()   // or: 16.dp.scaledDp()
val spChain = 16.scaledSp()

6.2 Fluent configuration

MethodPurposeExample
ignoreMultiWindows(Boolean)Split-screen heuristic.ignoreMultiWindows(true)
aspectRatio(Boolean, sensitivityK?)AR scaling.aspectRatio(true)

6.3 screen(...) overloads (priority order)

Entries are sorted by priority (1 = most specific) and qualifier value (larger sw first).

PriorityOverload ideaExample
1UiModeType + DpQualifier + threshold.screen(UiModeType.TELEVISION, DpQualifier.SMALL_WIDTH, 600, customValue = 40)
2UiModeType only.screen(UiModeType.TELEVISION, 40)
3DpQualifier + threshold.screen(DpQualifier.SMALL_WIDTH, 600, 24)
4Orientation.screen(Orientation.LANDSCAPE, 12)

Each overload has variants taking customValue as Dp or Number, and optional finalQualifierResolver, inverter. The Number branch must preserve the same applyAspectRatio and customSensitivityK as the Dp branch (fractional dp values are kept as Float, not truncated to Int).

Physical units (mm / cm / inch) are documented in physical-units.md (unitSizeInDp, radius in dp, code.units conversions).

6.4 Resolution properties (DimenScaled)

PropertyResult
.sdp / .hdp / .wdpFinal Dp on that axis
.sdpPx / .hdpPx / .wdpPxFinal px Float

Example:

val pad = 16.scaledDp()
    .aspectRatio(true)
    .ignoreMultiWindows(true)
    .screen(UiModeType.TELEVISION, 40)
    .screen(DpQualifier.SMALL_WIDTH, 600, 24)
    .sdp

6.5 Resolution properties (ScaledSp)

PropertyResult
.ssp / .hsp / .wspTextUnit
.sspPx / .hspPx / .wspPxpx Float

Appendix A — Complete Number property catalog (scaled)

The following tables list every Number extension property in scaled mode. Other strategies use the same names after swapping the prefix (see §3).

A.1 Scaled — Number Dp / px properties (DimenSdp.kt)

PropertyTypeExample
sdpDpModifier.padding(16.sdp)
sdpaDpModifier.padding(16.sdpa)
sdpiDpModifier.padding(16.sdpi)
sdpiaDpModifier.padding(16.sdpia)
sdpPxFloatval px = 16.sdpPx
sdpaPxFloatval px = 16.sdpaPx
sdpiPxFloatval px = 16.sdpiPx
sdpiaPxFloatval px = 16.sdpiaPx
sdpPhDpModifier.padding(16.sdpPh)
sdpPhaDpModifier.padding(16.sdpPha)
sdpPhiDpModifier.padding(16.sdpPhi)
sdpPhiaDpModifier.padding(16.sdpPhia)
sdpPxPhFloatval px = 16.sdpPxPh
sdpPxaPhFloatval px = 16.sdpPxaPh
sdpPxiPhFloatval px = 16.sdpPxiPh
sdpPxiaPhFloatval px = 16.sdpPxiaPh
sdpLhDpModifier.padding(16.sdpLh)
sdpLhaDpModifier.padding(16.sdpLha)
sdpLhiDpModifier.padding(16.sdpLhi)
sdpLhiaDpModifier.padding(16.sdpLhia)
sdpPxLhFloatval px = 16.sdpPxLh
sdpPxaLhFloatval px = 16.sdpPxaLh
sdpPxiLhFloatval px = 16.sdpPxiLh
sdpPxiaLhFloatval px = 16.sdpPxiaLh
sdpPwDpModifier.padding(16.sdpPw)
sdpPwaDpModifier.padding(16.sdpPwa)
sdpPwiDpModifier.padding(16.sdpPwi)
sdpPwiaDpModifier.padding(16.sdpPwia)
sdpPxPwFloatval px = 16.sdpPxPw
sdpPxaPwFloatval px = 16.sdpPxaPw
sdpPxiPwFloatval px = 16.sdpPxiPw
sdpPwiaPxFloatval px = 16.sdpPwiaPx
sdpLwDpModifier.padding(16.sdpLw)
sdpLwaDpModifier.padding(16.sdpLwa)
sdpLwiDpModifier.padding(16.sdpLwi)
sdpLwiaDpModifier.padding(16.sdpLwia)
sdpPxLwFloatval px = 16.sdpPxLw
sdpPxaLwFloatval px = 16.sdpPxaLw
sdpPxiLwFloatval px = 16.sdpPxiLw
sdpPxiaLwFloatval px = 16.sdpPxiaLw
hdpDpModifier.padding(16.hdp)
hdpaDpModifier.padding(16.hdpa)
hdpiDpModifier.padding(16.hdpi)
hdpiaDpModifier.padding(16.hdpia)
hdpPxFloatval px = 16.hdpPx
hdpaPxFloatval px = 16.hdpaPx
hdpiPxFloatval px = 16.hdpiPx
hdpiaPxFloatval px = 16.hdpiaPx
hdpLwDpModifier.padding(16.hdpLw)
hdpLwaDpModifier.padding(16.hdpLwa)
hdpLwiDpModifier.padding(16.hdpLwi)
hdpLwiaDpModifier.padding(16.hdpLwia)
hdpPxLwFloatval px = 16.hdpPxLw
hdpPxaLwFloatval px = 16.hdpPxaLw
hdpPxiLwFloatval px = 16.hdpPxiLw
hdpPxiaLwFloatval px = 16.hdpPxiaLw
hdpPwDpModifier.padding(16.hdpPw)
hdpPwaDpModifier.padding(16.hdpPwa)
hdpPwiDpModifier.padding(16.hdpPwi)
hdpPwiaDpModifier.padding(16.hdpPwia)
hdpPxPwFloatval px = 16.hdpPxPw
hdpPxaPwFloatval px = 16.hdpPxaPw
hdpPxiPwFloatval px = 16.hdpPxiPw
hdpPxiaPwFloatval px = 16.hdpPxiaPw
wdpDpModifier.padding(16.wdp)
wdpaDpModifier.padding(16.wdpa)
wdpiDpModifier.padding(16.wdpi)
wdpiaDpModifier.padding(16.wdpia)
wdpPxFloatval px = 16.wdpPx
wdpaPxFloatval px = 16.wdpaPx
wdpiPxFloatval px = 16.wdpiPx
wdpiaPxFloatval px = 16.wdpiaPx
wdpLhDpModifier.padding(16.wdpLh)
wdpLhaDpModifier.padding(16.wdpLha)
wdpLhiDpModifier.padding(16.wdpLhi)
wdpLhiaDpModifier.padding(16.wdpLhia)
wdpPxLhFloatval px = 16.wdpPxLh
wdpPxaLhFloatval px = 16.wdpPxaLh
wdpPxiLhFloatval px = 16.wdpPxiLh
wdpPxiaLhFloatval px = 16.wdpPxiaLh
wdpPhDpModifier.padding(16.wdpPh)
wdpPhaDpModifier.padding(16.wdpPha)
wdpPhiDpModifier.padding(16.wdpPhi)
wdpPhiaDpModifier.padding(16.wdpPhia)
wdpPxPhFloatval px = 16.wdpPxPh
wdpPxaPhFloatval px = 16.wdpPxaPh
wdpPxiPhFloatval px = 16.wdpPxiPh
wdpPxiaPhFloatval px = 16.wdpPxiaPh

A.2 Scaled — Number Sp / px properties (DimenSsp.kt)

PropertyTypeExample
sspTextUnitText("Hi", fontSize = 16.ssp)
sspaTextUnitText("Hi", fontSize = 16.sspa)
sspiTextUnitText("Hi", fontSize = 16.sspi)
sspiaTextUnitText("Hi", fontSize = 16.sspia)
sspPxFloatval px = 16.sspPx
sspPxaFloatval px = 16.sspPxa
sspPxiFloatval px = 16.sspPxi
sspPxiaFloatval px = 16.sspPxia
semTextUnitText("Hi", fontSize = 16.sem)
semaTextUnitText("Hi", fontSize = 16.sema)
semiTextUnitText("Hi", fontSize = 16.semi)
semiaTextUnitText("Hi", fontSize = 16.semia)
semPxFloatval px = 16.semPx
semPxaFloatval px = 16.semPxa
semPxiFloatval px = 16.semPxi
semPxiaFloatval px = 16.semPxia
sspPhTextUnitText("Hi", fontSize = 16.sspPh)
sspPhaTextUnitText("Hi", fontSize = 16.sspPha)
sspPhiTextUnitText("Hi", fontSize = 16.sspPhi)
sspPhiaTextUnitText("Hi", fontSize = 16.sspPhia)
sspPxPhFloatval px = 16.sspPxPh
sspPxaPhFloatval px = 16.sspPxaPh
sspPxiPhFloatval px = 16.sspPxiPh
sspPxiaPhFloatval px = 16.sspPxiaPh
sspLhTextUnitText("Hi", fontSize = 16.sspLh)
sspLhaTextUnitText("Hi", fontSize = 16.sspLha)
sspLhiTextUnitText("Hi", fontSize = 16.sspLhi)
sspLhiaTextUnitText("Hi", fontSize = 16.sspLhia)
sspPxLhFloatval px = 16.sspPxLh
sspPxaLhFloatval px = 16.sspPxaLh
sspPxiLhFloatval px = 16.sspPxiLh
sspPxiaLhFloatval px = 16.sspPxiaLh
sspPwTextUnitText("Hi", fontSize = 16.sspPw)
sspPwaTextUnitText("Hi", fontSize = 16.sspPwa)
sspPwiTextUnitText("Hi", fontSize = 16.sspPwi)
sspPwiaTextUnitText("Hi", fontSize = 16.sspPwia)
sspPxPwFloatval px = 16.sspPxPw
sspPxaPwFloatval px = 16.sspPxaPw
sspPxiPwFloatval px = 16.sspPxiPw
sspPxiaPwFloatval px = 16.sspPxiaPw
sspLwTextUnitText("Hi", fontSize = 16.sspLw)
sspLwaTextUnitText("Hi", fontSize = 16.sspLwa)
sspLwiTextUnitText("Hi", fontSize = 16.sspLwi)
sspLwiaTextUnitText("Hi", fontSize = 16.sspLwia)
sspPxLwFloatval px = 16.sspPxLw
sspPxaLwFloatval px = 16.sspPxaLw
sspPxiLwFloatval px = 16.sspPxiLw
sspPxiaLwFloatval px = 16.sspPxiaLw
hspTextUnitText("Hi", fontSize = 16.hsp)
hspaTextUnitText("Hi", fontSize = 16.hspa)
hspiTextUnitText("Hi", fontSize = 16.hspi)
hspiaTextUnitText("Hi", fontSize = 16.hspia)
hspPxFloatval px = 16.hspPx
hspPxaFloatval px = 16.hspPxa
hspPxiFloatval px = 16.hspPxi
hspPxiaFloatval px = 16.hspPxia
hemTextUnitText("Hi", fontSize = 16.hem)
hemaTextUnitText("Hi", fontSize = 16.hema)
hemiTextUnitText("Hi", fontSize = 16.hemi)
hemiaTextUnitText("Hi", fontSize = 16.hemia)
hemPxFloatval px = 16.hemPx
hemPxaFloatval px = 16.hemPxa
hemPxiFloatval px = 16.hemPxi
hemPxiaFloatval px = 16.hemPxia
hspLwTextUnitText("Hi", fontSize = 16.hspLw)
hspLwaTextUnitText("Hi", fontSize = 16.hspLwa)
hspLwiTextUnitText("Hi", fontSize = 16.hspLwi)
hspLwiaTextUnitText("Hi", fontSize = 16.hspLwia)
hspPxLwFloatval px = 16.hspPxLw
hspPxaLwFloatval px = 16.hspPxaLw
hspPxiLwFloatval px = 16.hspPxiLw
hspPxiaLwFloatval px = 16.hspPxiaLw
hspPwTextUnitText("Hi", fontSize = 16.hspPw)
hspPwaTextUnitText("Hi", fontSize = 16.hspPwa)
hspPwiTextUnitText("Hi", fontSize = 16.hspPwi)
hspPwiaTextUnitText("Hi", fontSize = 16.hspPwia)
hspPxPwFloatval px = 16.hspPxPw
hspPxaPwFloatval px = 16.hspPxaPw
hspPxiPwFloatval px = 16.hspPxiPw
hspPxiaPwFloatval px = 16.hspPxiaPw
wspTextUnitText("Hi", fontSize = 16.wsp)
wspaTextUnitText("Hi", fontSize = 16.wspa)
wspiTextUnitText("Hi", fontSize = 16.wspi)
wspiaTextUnitText("Hi", fontSize = 16.wspia)
wspPxFloatval px = 16.wspPx
wspPxaFloatval px = 16.wspPxa
wspPxiFloatval px = 16.wspPxi
wspPxiaFloatval px = 16.wspPxia
wemTextUnitText("Hi", fontSize = 16.wem)
wemaTextUnitText("Hi", fontSize = 16.wema)
wemiTextUnitText("Hi", fontSize = 16.wemi)
wemiaTextUnitText("Hi", fontSize = 16.wemia)
wemPxFloatval px = 16.wemPx
wemPxaFloatval px = 16.wemPxa
wemPxiFloatval px = 16.wemPxi
wemPxiaFloatval px = 16.wemPxia
wspLhTextUnitText("Hi", fontSize = 16.wspLh)
wspLhaTextUnitText("Hi", fontSize = 16.wspLha)
wspLhiTextUnitText("Hi", fontSize = 16.wspLhi)
wspLhiaTextUnitText("Hi", fontSize = 16.wspLhia)
wspPxLhFloatval px = 16.wspPxLh
wspPxaLhFloatval px = 16.wspPxaLh
wspPxiLhFloatval px = 16.wspPxiLh
wspPxiaLhFloatval px = 16.wspPxiaLh
wspPhTextUnitText("Hi", fontSize = 16.wspPh)
wspPhaTextUnitText("Hi", fontSize = 16.wspPha)
wspPhiTextUnitText("Hi", fontSize = 16.wspPhi)
wspPhiaTextUnitText("Hi", fontSize = 16.wspPhia)
wspPxPhFloatval px = 16.wspPxPh
wspPxaPhFloatval px = 16.wspPxaPh
wspPxiPhFloatval px = 16.wspPxiPh
wspPxiaPhFloatval px = 16.wspPxiaPh
wemPhTextUnitText("Hi", fontSize = 16.wemPh)
wemPhaTextUnitText("Hi", fontSize = 16.wemPha)
wemPhiTextUnitText("Hi", fontSize = 16.wemPhi)
wemPhiaTextUnitText("Hi", fontSize = 16.wemPhia)
wemPxPhFloatval px = 16.wemPxPh
wemPxaPhFloatval px = 16.wemPxaPh
wemPxiPhFloatval px = 16.wemPxiPh
wemPxiaPhFloatval px = 16.wemPxiaPh

Appendix B — Maintenance

When the library adds a new property or facilitator, update:

  1. The Kotlin sources under library/src/main/java/com/appdimens/dynamic/compose/.
  2. This file (or regenerate Appendix A with the project script).
  3. The strategy overview in scaled.md and README.md.
  4. Regenerate Dokka HTML (./gradlew :library:dokkaGenerateHtmlDOCUMENTATION2/), then run python3 scripts/sync_kdoc_from_dokka_html.py so DOCUMENTATION/KDOC/ matches renamed members (e.g. unitSizeInDp).
  5. physical-units.md when DimenPhysicalUnits or code.units behavior changes.