Spring
canonDamped-oscillator physics (stiffness 190, damping 17, ~750ms, ~6% overshoot) sampled into WAAPI keyframes — the one physical motion for every reshape between states (dialog window, button/text width, list cursor). Replaces the earlier 0.29s cubic-bezier(0.32, 0.72, 0, 1) curve as canon (RULES.md §11).
27 September 2026: merged on main as !3957 (feat/acrm-322: pružina — přetvarování dialogu a MorphText). Drives <Dialog morphKey>'s window resize and MorphText's width. Small-element morphs written before this module (ChipMorph, NoteRecChip) still run the old 0.29s cubic-bezier curve pending their own migration — see ChipMorph.tsx's own comment ("do doby, než ho nahradí pružina").
Used in 5 files · 4 areas · 8× — components/ItemList, components/company, components/meetings, components/notes
@acrm/ui <springAnimate> <springValues> <prefersReducedMotion> <SPRING_MS> <SPRING_ARRIVE_MS>SourceStoryDefault
export const Default = () => (
<div style={{ padding: 'var(--sp-4)' }}>
<Labeled text="click „⋯“ in the dialog — the window grows to the new state on the spring; „ד folds it back">
<Stage h={400}>
<Deal spring />
</Stage>
</Labeled>
</div>
);States
export const States = () => (
<div style={{ padding: 'var(--sp-4)', display: 'grid', gap: 'var(--sp-6)' }}>
<Labeled text="spring — „⋯“ re-shapes the same panel (morphKey); collapsed state">
<Stage h={400}>
<Deal spring />
</Stage>
</Labeled>
<Labeled text="reduced motion (prefers-reduced-motion) — the same toggle swaps the content at once, no motion; shown in the expanded state (× folds it)">
<Stage h={400}>
<Deal spring={false} startMore />
</Stage>
</Labeled>
<Curve />
</div>
);