{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"silicon-motion-tokens","type":"registry:item","title":"Silicon UI motion tokens","description":"The shared motion presets (durations, easings, springs, staggers) Silicon UI components import. Installed automatically with any item that uses them.","categories":["foundation"],"dependencies":[],"files":[{"path":"registry/motion-tokens.ts","type":"registry:component","target":"@components/silicon-ui/motion-tokens.ts","content":"/**\n * Motion tokens, shared by every component and by apps (`@teamofsilicons/silicon-ui/motion-tokens`).\n *\n * Interface motion runs on three spring tiers. Each tier is the ENTER transition (critically damped, except slow, which\n * keeps a little bounce), and its `.exit` is the matching EXIT: a plain tween one tier quicker, so a dismissal reads as\n * crisp and final instead of replaying the entrance in reverse. The bigger the thing that moves, the slower the tier.\n * Never hand-write a duration: reach for a tier.\n *\n *   transition={motionTokens.spring.fast}                                    // enter\n *   exit={{ opacity: 0, transition: motionTokens.spring.fast.exit }}         // leave\n *\n * The tier values and the exit rule are adapted from Fluid Functionalism by Micka Touillaud (MIT),\n * https://github.com/mickadesign/fluid-functionalism.\n */\n// Written as visualDuration (the form the components read) with values that arrive (95% of the way) at the same moment as\n// FF's settling durations of 0.08, 0.16 and 0.24s: 42, 83 and 109ms.\nconst fast = { type: \"spring\", visualDuration: 0.05, bounce: 0, exit: { duration: 0.06 } } as const;\nconst moderate = { type: \"spring\", visualDuration: 0.09, bounce: 0, exit: { duration: 0.12 } } as const;\nconst slow = { type: \"spring\", visualDuration: 0.15, bounce: 0.12, exit: { duration: 0.16 } } as const;\n\nexport const motionTokens = {\n  /** Tween durations in seconds, for opacity, colour and blur, and for CSS (the same steps as `--duration-*`). */\n  duration: {\n    instant: 0.06, fast: 0.08, exit: 0.12, standard: 0.16, considered: 0.24,\n    /** Motion that tells a story over time rather than answering a click: a chart drawing in, a counter rolling, text\n     *  revealing, a success ring drawing, a slow image zoom. Never for a hover, press, menu or panel. */\n    expressive: 0.48,\n  },\n  ease: {\n    enter: [0.16, 1, 0.3, 1],\n    exit: [0.7, 0, 0.84, 0],\n    standard: [0.22, 1, 0.36, 1],\n    /** For elements that move while already on screen. */\n    inOut: [0.65, 0, 0.35, 1],\n  },\n  spring: {\n    /** Hover highlights, presses, toggles, thumbs and small indicators. */\n    fast,\n    /** Menus, popovers, tabs, drawers, height changes: short travel that must land exactly. */\n    moderate,\n    /** Dialogs, sheets, shape morphs and large shared-layout moves. A little bounce. */\n    slow,\n    /** Earlier names, kept so existing code keeps working. Prefer the tier names. */\n    snappy: fast,\n    smooth: moderate,\n    morph: slow,\n    responsive: moderate,\n    gentle: moderate,\n    /** The spring for expressive motion (see duration.expressive): a bar growing, a value settling into place. */\n    expressive: { type: \"spring\", visualDuration: 0.42, bounce: 0.16 },\n  },\n  /** Stagger steps in seconds. Keep total stagger under roughly 0.4s. */\n  stagger: { char: 0.016, word: 0.04, line: 0.08, item: 0.035 },\n  /** Blur radii in px for text and content crossfades. Keep blur small and brief. */\n  blur: { subtle: 2, soft: 4, text: 8 },\n} as const;\n\n/**\n * How long (ms) a deferred-unmount timer waits for a tier's exit before forcing it: the exit plus a safety margin, for\n * a throttled background tab that never finishes the animation.\n */\nexport const exitFallbackMs = (tier: { exit: { duration: number } }) => Math.round(tier.exit.duration * 1000) + 100;\n"},{"path":"lib/motion-tokens.ts","type":"registry:lib","target":"@components/silicon-ui/lib/motion-tokens.ts","content":"/** Shared alias used by the gallery. The registry source lives in registry/motion-tokens.ts. */\nexport { motionTokens, exitFallbackMs } from \"../motion-tokens\";\n"}]}