motion-ui-skill 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +637 -0
- package/SKILL.md +529 -0
- package/agents/openai.yaml +8 -0
- package/bin/index.mjs +242 -0
- package/bin/installer.mjs +457 -0
- package/bin/updater.mjs +207 -0
- package/catalog.json +8120 -0
- package/components/agents/agent-activity/activity-row.tsx +242 -0
- package/components/agents/agent-activity/index.tsx +287 -0
- package/components/agents/agent-activity/types.ts +106 -0
- package/components/agents/agent-code.tsx +171 -0
- package/components/agents/agent-disclosure.tsx +55 -0
- package/components/agents/ai-sidebar.tsx +981 -0
- package/components/agents/approval-card/index.tsx +467 -0
- package/components/agents/approval-card/types.ts +56 -0
- package/components/agents/chat-app.tsx +97 -0
- package/components/agents/citations.tsx +288 -0
- package/components/agents/code-block.tsx +202 -0
- package/components/agents/file-diff.tsx +288 -0
- package/components/agents/image-generation.tsx +388 -0
- package/components/agents/loading-states/agent-progress.tsx +105 -0
- package/components/agents/loading-states/index.ts +13 -0
- package/components/agents/loading-states/reasoning-text.tsx +224 -0
- package/components/agents/loading-states/thinking-shimmer.tsx +27 -0
- package/components/agents/message-bubble.tsx +369 -0
- package/components/agents/message-context.tsx +9 -0
- package/components/agents/message-scroller.tsx +487 -0
- package/components/agents/message.tsx +272 -0
- package/components/agents/prompt-input.tsx +327 -0
- package/components/agents/streaming-response.tsx +263 -0
- package/components/agents/todo-list.tsx +387 -0
- package/components/agents/tool-approval.tsx +276 -0
- package/components/agents/tool-result.tsx +352 -0
- package/components/app/icons.tsx +19 -0
- package/components/audio/music-player-card.tsx +146 -0
- package/components/audio/music-playlist-card.tsx +172 -0
- package/components/audio/now-playing-bar.tsx +116 -0
- package/components/background-gradient/arc-bands-background.tsx +54 -0
- package/components/background-gradient/aurora-background.tsx +49 -0
- package/components/background-gradient/cherry-petal-background.tsx +50 -0
- package/components/background-gradient/coral-glow-background.tsx +47 -0
- package/components/background-gradient/dark-arc-bands-background.tsx +52 -0
- package/components/background-gradient/dark-aurora-background.tsx +52 -0
- package/components/background-gradient/dark-carbon-spotlight-background.tsx +47 -0
- package/components/background-gradient/dark-ember-background.tsx +47 -0
- package/components/background-gradient/dark-ink-field-background.tsx +46 -0
- package/components/background-gradient/dark-midnight-mesh-background.tsx +61 -0
- package/components/background-gradient/dark-rose-noir-background.tsx +52 -0
- package/components/background-gradient/dark-teal-depth-background.tsx +52 -0
- package/components/background-gradient/frost-mesh-background.tsx +56 -0
- package/components/background-gradient/halftone-pop-background.tsx +52 -0
- package/components/background-gradient/honey-ember-background.tsx +47 -0
- package/components/background-gradient/ink-wash-background.tsx +49 -0
- package/components/background-gradient/linen-weave-background.tsx +47 -0
- package/components/background-gradient/mint-lagoon-background.tsx +47 -0
- package/components/background-gradient/paper-fold-background.tsx +52 -0
- package/components/background-gradient/rain-prism-background.tsx +52 -0
- package/components/background-gradient/sand-drift-background.tsx +47 -0
- package/components/background-gradient/soft-spotlight-background.tsx +47 -0
- package/components/background-gradient/sunrise-horizon-background.tsx +51 -0
- package/components/background-gradient/sunset-bloom-background.tsx +47 -0
- package/components/background-gradient/terrazzo-fragment-background.tsx +53 -0
- package/components/background-gradient/tropical-tide-background.tsx +47 -0
- package/components/background-pattern/diagonal-box-pattern.tsx +29 -0
- package/components/background-pattern/dot-grid-pattern.tsx +29 -0
- package/components/background-pattern/fine-grain-pattern.tsx +39 -0
- package/components/background-pattern/graph-paper-pattern.tsx +29 -0
- package/components/background-pattern/line-grid-pattern.tsx +39 -0
- package/components/background-pattern/reverse-diagonal-box-pattern.tsx +30 -0
- package/components/buttons/add-to-cart-button.tsx +190 -0
- package/components/buttons/bookmark-save-button.tsx +105 -0
- package/components/buttons/cinder-latch-button.tsx +80 -0
- package/components/buttons/copy-button.tsx +155 -0
- package/components/buttons/depth-outline-button.tsx +72 -0
- package/components/buttons/dimple-switch.tsx +114 -0
- package/components/buttons/download-button.tsx +186 -0
- package/components/buttons/follow-button.tsx +98 -0
- package/components/buttons/hold-to-delete-button.tsx +205 -0
- package/components/buttons/inset-button.tsx +82 -0
- package/components/buttons/like-button.tsx +135 -0
- package/components/buttons/linen-tab-button.tsx +92 -0
- package/components/buttons/prism-depth-button.tsx +90 -0
- package/components/buttons/quantity-stepper-button.tsx +104 -0
- package/components/buttons/segmented-toggle-button.tsx +134 -0
- package/components/buttons/sheen-pill-button.tsx +127 -0
- package/components/buttons/slate-chip-switch.tsx +94 -0
- package/components/buttons/slide-to-confirm-button.tsx +163 -0
- package/components/buttons/soft-pill-button.tsx +86 -0
- package/components/buttons/soft-ui-button.tsx +59 -0
- package/components/buttons/three-d-button.tsx +99 -0
- package/components/buttons/three-d-icon-button.tsx +88 -0
- package/components/calendar/booking-slot-calendar.tsx +315 -0
- package/components/calendar/date-range-picker-card.tsx +216 -0
- package/components/calendar/event-countdown-card.tsx +105 -0
- package/components/calendar/month-picker-calendar.tsx +183 -0
- package/components/calendar/week-strip-calendar.tsx +182 -0
- package/components/contact/copy-email.tsx +94 -0
- package/components/docks/Icons.tsx +222 -0
- package/components/docks/app-dock.tsx +111 -0
- package/components/docks/editor-tool-dock.tsx +113 -0
- package/components/docks/mac-dock.tsx +144 -0
- package/components/docks/presence-dock.tsx +178 -0
- package/components/docks/spotlight-bar.tsx +188 -0
- package/components/dropdowns/file-menu-dropdown.tsx +192 -0
- package/components/dropdowns/filter-sort-dropdown.tsx +189 -0
- package/components/dropdowns/kebab-actions-dropdown.tsx +195 -0
- package/components/dropdowns/notification-dropdown.tsx +235 -0
- package/components/dropdowns/share-menu-dropdown.tsx +197 -0
- package/components/dropdowns/user-menu-dropdown.tsx +251 -0
- package/components/dropdowns/workspace-switcher-dropdown.tsx +248 -0
- package/components/event/event-ticket-card.tsx +116 -0
- package/components/files/ink-stamp-document-card.tsx +88 -0
- package/components/files/stacked-folder-card.tsx +176 -0
- package/components/folder/folder-tab-card.tsx +123 -0
- package/components/forms/contact-form.tsx +417 -0
- package/components/forms/forgot-password-form.tsx +264 -0
- package/components/forms/login-form.tsx +342 -0
- package/components/forms/newsletter-form.tsx +212 -0
- package/components/forms/signup-form.tsx +487 -0
- package/components/frames/circle-cut-frame.tsx +198 -0
- package/components/frames/hard-shadow-polaroid-frame.tsx +158 -0
- package/components/frames/sticky-note-polaroid-frame.tsx +230 -0
- package/components/frames/transform-box-frame.tsx +287 -0
- package/components/frames/transform-plus-frame.tsx +308 -0
- package/components/gallery/film-strip-card.tsx +103 -0
- package/components/gallery/gallery-grid-card.tsx +106 -0
- package/components/gallery/gallery-wall-card.tsx +71 -0
- package/components/gallery/glass-overlay-image-card.tsx +156 -0
- package/components/gallery/museum-placard-card.tsx +105 -0
- package/components/gallery/photo-album-card.tsx +114 -0
- package/components/gallery/photo-contact-sheet-card.tsx +71 -0
- package/components/gallery/polaroid-image-card.tsx +81 -0
- package/components/gallery/slow-living-polaroid-card.tsx +88 -0
- package/components/gallery/stamp-postcard-card.tsx +78 -0
- package/components/inputs/checkbox-field-input.tsx +148 -0
- package/components/inputs/combobox-field-input.tsx +466 -0
- package/components/inputs/date-field-input.tsx +472 -0
- package/components/inputs/file-upload-field-input.tsx +578 -0
- package/components/inputs/floating-label-field-input.tsx +206 -0
- package/components/inputs/input-group-field.tsx +132 -0
- package/components/inputs/password-field-input.tsx +125 -0
- package/components/inputs/phone-field-input.tsx +157 -0
- package/components/inputs/radio-group-field-input.tsx +220 -0
- package/components/inputs/search-input.tsx +163 -0
- package/components/inputs/select-field-input.tsx +416 -0
- package/components/inputs/switch-field-input.tsx +179 -0
- package/components/inputs/text-field-input.tsx +89 -0
- package/components/inputs/textarea-field-input.tsx +152 -0
- package/components/loaders/apple-hello-loader.tsx +86 -0
- package/components/loaders/spin-loader.tsx +51 -0
- package/components/loaders/text-loader.tsx +148 -0
- package/components/mockups/apple-ipod-mockup-card.tsx +155 -0
- package/components/mockups/apple-watch-mockup-card.tsx +278 -0
- package/components/mockups/browser-mockup-card.tsx +109 -0
- package/components/mockups/laptop-mockup-card.tsx +118 -0
- package/components/mockups/phone-mockup-card.tsx +210 -0
- package/components/mockups/tablet-mockup-card.tsx +212 -0
- package/components/motion/action-sheet.tsx +218 -0
- package/components/motion/action-swap-roll.tsx +32 -0
- package/components/motion/action-swap.tsx +340 -0
- package/components/motion/adaptive-stepper.tsx +442 -0
- package/components/motion/animated-badge.tsx +213 -0
- package/components/motion/animated-number.tsx +50 -0
- package/components/motion/animated-sidebar.tsx +1174 -0
- package/components/motion/animated-toast-stack.tsx +503 -0
- package/components/motion/aspect-ratio.tsx +55 -0
- package/components/motion/attachment-upload.tsx +1080 -0
- package/components/motion/audio-player.tsx +266 -0
- package/components/motion/autocomplete.tsx +183 -0
- package/components/motion/availability-scheduler/copy-menu.tsx +119 -0
- package/components/motion/availability-scheduler/day-row.tsx +231 -0
- package/components/motion/availability-scheduler/icon-button.tsx +46 -0
- package/components/motion/availability-scheduler/index.tsx +154 -0
- package/components/motion/availability-scheduler/time-select.tsx +49 -0
- package/components/motion/availability-scheduler/types.ts +189 -0
- package/components/motion/avatar-group.tsx +154 -0
- package/components/motion/bloom-menu.tsx +216 -0
- package/components/motion/bottom-sheet.tsx +249 -0
- package/components/motion/bounce-sidebar.tsx +266 -0
- package/components/motion/bouncy-accordion.tsx +325 -0
- package/components/motion/breadcrumb.tsx +122 -0
- package/components/motion/button/base.tsx +189 -0
- package/components/motion/button/index.tsx +13 -0
- package/components/motion/button/magnetic.tsx +25 -0
- package/components/motion/button/metallic.tsx +100 -0
- package/components/motion/button/stateful.tsx +237 -0
- package/components/motion/card-folder.tsx +345 -0
- package/components/motion/card-resize.tsx +229 -0
- package/components/motion/cascader.tsx +279 -0
- package/components/motion/center-morph-modal.tsx +366 -0
- package/components/motion/checkbox.tsx +123 -0
- package/components/motion/chip.tsx +121 -0
- package/components/motion/chromatic-text-reveal.tsx +203 -0
- package/components/motion/collapsible.tsx +108 -0
- package/components/motion/color-picker.tsx +206 -0
- package/components/motion/combobox/content.tsx +163 -0
- package/components/motion/combobox/context.tsx +359 -0
- package/components/motion/combobox/list.tsx +222 -0
- package/components/motion/combobox/trigger.tsx +191 -0
- package/components/motion/combobox/use-active-option.ts +130 -0
- package/components/motion/combobox.tsx +33 -0
- package/components/motion/command-palette.tsx +381 -0
- package/components/motion/confetti.tsx +128 -0
- package/components/motion/context-menu.tsx +790 -0
- package/components/motion/copy-button.tsx +103 -0
- package/components/motion/cylinder-carousel.tsx +459 -0
- package/components/motion/date-range-picker.tsx +218 -0
- package/components/motion/digit-swap.tsx +125 -0
- package/components/motion/dock.tsx +113 -0
- package/components/motion/drawer.tsx +108 -0
- package/components/motion/dynamic-island.tsx +221 -0
- package/components/motion/error-shake.tsx +66 -0
- package/components/motion/event-calendar.tsx +224 -0
- package/components/motion/expandable-action-bar.tsx +412 -0
- package/components/motion/expandable-control.tsx +254 -0
- package/components/motion/expandable-tabs.tsx +444 -0
- package/components/motion/expanding-arrow-button.tsx +171 -0
- package/components/motion/feedback-widget.tsx +473 -0
- package/components/motion/file-tree.tsx +429 -0
- package/components/motion/file-upload.tsx +606 -0
- package/components/motion/filter-builder.tsx +283 -0
- package/components/motion/frame.tsx +116 -0
- package/components/motion/gantt.tsx +156 -0
- package/components/motion/glow-button.tsx +101 -0
- package/components/motion/haptic-pressable.tsx +107 -0
- package/components/motion/hold-action-button.tsx +279 -0
- package/components/motion/hover-card.tsx +118 -0
- package/components/motion/icon-stack.tsx +138 -0
- package/components/motion/infinite-masonry.tsx +349 -0
- package/components/motion/input.tsx +242 -0
- package/components/motion/kanban.tsx +255 -0
- package/components/motion/kbd.tsx +127 -0
- package/components/motion/knockout-bracket.tsx +909 -0
- package/components/motion/knockout-wheel.tsx +1112 -0
- package/components/motion/liquid.tsx +351 -0
- package/components/motion/loader.tsx +616 -0
- package/components/motion/magnet-dock.tsx +117 -0
- package/components/motion/magnetic.tsx +50 -0
- package/components/motion/marquee.tsx +66 -0
- package/components/motion/metric-card.tsx +116 -0
- package/components/motion/morphing-modal.tsx +160 -0
- package/components/motion/morphing-search.tsx +643 -0
- package/components/motion/morphing-tabs.tsx +940 -0
- package/components/motion/multi-select/content.tsx +164 -0
- package/components/motion/multi-select/context.tsx +381 -0
- package/components/motion/multi-select/index.tsx +33 -0
- package/components/motion/multi-select/list.tsx +239 -0
- package/components/motion/multi-select/trigger.tsx +262 -0
- package/components/motion/not-found/glitch.tsx +107 -0
- package/components/motion/not-found/index.tsx +11 -0
- package/components/motion/not-found/magnetic.tsx +57 -0
- package/components/motion/not-found/shared.tsx +96 -0
- package/components/motion/not-found/spotlight.tsx +86 -0
- package/components/motion/not-found/stacked.tsx +77 -0
- package/components/motion/not-found/terminal.tsx +83 -0
- package/components/motion/notification-stack.tsx +380 -0
- package/components/motion/number-field.tsx +178 -0
- package/components/motion/number-ticker.tsx +185 -0
- package/components/motion/otp-input.tsx +392 -0
- package/components/motion/overflow-actions.tsx +375 -0
- package/components/motion/page-transition.tsx +92 -0
- package/components/motion/pagination.tsx +163 -0
- package/components/motion/parallax.tsx +64 -0
- package/components/motion/password-input.tsx +165 -0
- package/components/motion/phone-input.tsx +181 -0
- package/components/motion/popover-morph.tsx +317 -0
- package/components/motion/popover-position.ts +86 -0
- package/components/motion/popover.tsx +694 -0
- package/components/motion/prediction-market.tsx +682 -0
- package/components/motion/preview-rail.tsx +390 -0
- package/components/motion/progress-ring.tsx +115 -0
- package/components/motion/project-folder.tsx +418 -0
- package/components/motion/pull-to-refresh.tsx +522 -0
- package/components/motion/radio.tsx +148 -0
- package/components/motion/range-slider.tsx +93 -0
- package/components/motion/rating.tsx +171 -0
- package/components/motion/reorder-grid.tsx +123 -0
- package/components/motion/resizable-panel.tsx +160 -0
- package/components/motion/scroll-progress.tsx +127 -0
- package/components/motion/scroll-reveal.tsx +60 -0
- package/components/motion/scroll-to.tsx +48 -0
- package/components/motion/segmented-control.tsx +130 -0
- package/components/motion/segmented-progress.tsx +128 -0
- package/components/motion/select.tsx +440 -0
- package/components/motion/shader-background.tsx +134 -0
- package/components/motion/shared-layout-bg.tsx +151 -0
- package/components/motion/signup-form.tsx +467 -0
- package/components/motion/slide-action-button.tsx +203 -0
- package/components/motion/smooth-scroll.tsx +264 -0
- package/components/motion/sortable-list.tsx +98 -0
- package/components/motion/speed-dial.tsx +144 -0
- package/components/motion/split-text.tsx +115 -0
- package/components/motion/spotlight-card.tsx +89 -0
- package/components/motion/stepper.tsx +127 -0
- package/components/motion/success-check.tsx +142 -0
- package/components/motion/swap/constants.ts +2 -0
- package/components/motion/swap/controls.tsx +201 -0
- package/components/motion/swap/data.ts +186 -0
- package/components/motion/swap/field.tsx +115 -0
- package/components/motion/swap/quote-row.tsx +46 -0
- package/components/motion/swap/token-badges.tsx +83 -0
- package/components/motion/swap/token-picker.tsx +219 -0
- package/components/motion/swap/types.ts +20 -0
- package/components/motion/swap/utils.ts +28 -0
- package/components/motion/swap.tsx +182 -0
- package/components/motion/swipeable-list.tsx +507 -0
- package/components/motion/switch.tsx +96 -0
- package/components/motion/table/editable-cell.tsx +22 -0
- package/components/motion/table/index.tsx +431 -0
- package/components/motion/table/row-handle.tsx +81 -0
- package/components/motion/table/skeleton-rows.tsx +39 -0
- package/components/motion/table/table-header.tsx +344 -0
- package/components/motion/table/table-menu.tsx +129 -0
- package/components/motion/table/types.ts +86 -0
- package/components/motion/table/use-column-reorder.ts +105 -0
- package/components/motion/table/use-column-resize.ts +81 -0
- package/components/motion/table/use-column-sort.ts +64 -0
- package/components/motion/table/use-row-selection.ts +59 -0
- package/components/motion/table/utils.ts +33 -0
- package/components/motion/tabs.tsx +207 -0
- package/components/motion/text-cascade.tsx +22 -0
- package/components/motion/text-reveal.tsx +143 -0
- package/components/motion/text-scramble.tsx +84 -0
- package/components/motion/text-shimmer.tsx +34 -0
- package/components/motion/text-swap.tsx +56 -0
- package/components/motion/theme-toggle.tsx +210 -0
- package/components/motion/tilt-card.tsx +68 -0
- package/components/motion/timeline.tsx +236 -0
- package/components/motion/toggle-group.tsx +128 -0
- package/components/motion/tooltip.tsx +297 -0
- package/components/motion/tree-view.tsx +200 -0
- package/components/motion/wallet-card/account-avatar.tsx +21 -0
- package/components/motion/wallet-card/account-switcher.tsx +199 -0
- package/components/motion/wallet-card/actions.tsx +59 -0
- package/components/motion/wallet-card/balance-delta.tsx +69 -0
- package/components/motion/wallet-card/constants.ts +18 -0
- package/components/motion/wallet-card/copy-button.tsx +58 -0
- package/components/motion/wallet-card/index.tsx +151 -0
- package/components/motion/wallet-card/search-bar.tsx +198 -0
- package/components/motion/wallet-card/types.ts +34 -0
- package/components/motion/wallet-card/utils.ts +9 -0
- package/components/motion/wheel-picker.tsx +610 -0
- package/components/notifications/apple-notification-banner.tsx +155 -0
- package/components/notifications/calendar-reminder-notification-banner.tsx +138 -0
- package/components/notifications/chat-bubble-notification-banner.tsx +136 -0
- package/components/notifications/delivery-notification-banner.tsx +126 -0
- package/components/notifications/deploy-notification-banner.tsx +140 -0
- package/components/notifications/email-notification-banner.tsx +148 -0
- package/components/notifications/incoming-call-notification-banner.tsx +144 -0
- package/components/notifications/payment-notification-banner.tsx +137 -0
- package/components/notifications/system-alert-banner.tsx +137 -0
- package/components/notifications/toast-notification-banner.tsx +130 -0
- package/components/others/progress-ring-card.tsx +217 -0
- package/components/others/stacked-cards-effect.tsx +62 -0
- package/components/others/terminal-log-card.tsx +107 -0
- package/components/others/thermal-receipt-card.tsx +132 -0
- package/components/others/weather-snapshot-card.tsx +124 -0
- package/components/otp/otp-boxed-input.tsx +482 -0
- package/components/otp/otp-underline-input.tsx +356 -0
- package/components/previews/agents/agent-activity.preview.tsx +136 -0
- package/components/previews/agents/ai-sidebar.preview.tsx +236 -0
- package/components/previews/agents/chat-app-usage.tsx +689 -0
- package/components/previews/agents/chat-app.preview.tsx +130 -0
- package/components/previews/agents/chat-preview.tsx +285 -0
- package/components/previews/agents/citations.preview.tsx +78 -0
- package/components/previews/agents/code-block.preview.tsx +67 -0
- package/components/previews/agents/file-diff.preview.tsx +64 -0
- package/components/previews/agents/image-generation.preview.tsx +117 -0
- package/components/previews/agents/message-bubble.preview.tsx +12 -0
- package/components/previews/agents/message-scroller.preview.tsx +70 -0
- package/components/previews/agents/message.preview.tsx +14 -0
- package/components/previews/agents/prompt-input.preview.tsx +145 -0
- package/components/previews/agents/streaming-response.preview.tsx +156 -0
- package/components/previews/agents/todo-list.preview.tsx +73 -0
- package/components/previews/agents/tool-approval.preview.tsx +80 -0
- package/components/previews/agents/use-tool-result-demo.ts +28 -0
- package/components/previews/blocks/availability-scheduler.preview.tsx +11 -0
- package/components/previews/blocks/bloom-menu.preview.tsx +11 -0
- package/components/previews/blocks/card-folder.preview.tsx +105 -0
- package/components/previews/blocks/command-palette.preview.tsx +40 -0
- package/components/previews/blocks/dynamic-island.preview.tsx +150 -0
- package/components/previews/blocks/expandable-action-bar.preview.tsx +136 -0
- package/components/previews/blocks/expandable-tabs.preview.tsx +136 -0
- package/components/previews/blocks/feedback-widget.preview.tsx +34 -0
- package/components/previews/blocks/file-upload.preview.tsx +175 -0
- package/components/previews/blocks/infinite-masonry.preview.tsx +145 -0
- package/components/previews/blocks/knockout-bracket.preview.tsx +43 -0
- package/components/previews/blocks/morphing-search.preview.tsx +59 -0
- package/components/previews/blocks/morphing-tabs.preview.tsx +91 -0
- package/components/previews/blocks/notification-stack.preview.tsx +39 -0
- package/components/previews/blocks/otp-input.preview.tsx +29 -0
- package/components/previews/blocks/overflow-actions.preview.tsx +51 -0
- package/components/previews/blocks/prediction-market.preview.tsx +41 -0
- package/components/previews/blocks/project-folder.preview.tsx +41 -0
- package/components/previews/blocks/signup-form.preview.tsx +36 -0
- package/components/previews/blocks/swap.preview.tsx +11 -0
- package/components/previews/blocks/swipeable-list.preview.tsx +149 -0
- package/components/previews/blocks/wallet-card.preview.tsx +36 -0
- package/components/previews/motion/action-swap.preview.tsx +82 -0
- package/components/previews/motion/adaptive-stepper.preview.tsx +20 -0
- package/components/previews/motion/animated-badge.preview.tsx +43 -0
- package/components/previews/motion/animated-sidebar.preview.tsx +269 -0
- package/components/previews/motion/animated-toast-stack.preview.tsx +151 -0
- package/components/previews/motion/bottom-sheet.preview.tsx +35 -0
- package/components/previews/motion/bounce-sidebar.preview.tsx +30 -0
- package/components/previews/motion/bouncy-accordion.preview.tsx +66 -0
- package/components/previews/motion/center-morph-modal.preview.tsx +75 -0
- package/components/previews/motion/checkbox.preview.tsx +26 -0
- package/components/previews/motion/combobox.preview.tsx +119 -0
- package/components/previews/motion/context-menu.preview.tsx +144 -0
- package/components/previews/motion/cylinder-carousel.preview.tsx +96 -0
- package/components/previews/motion/dock.preview.tsx +46 -0
- package/components/previews/motion/drawer.preview.tsx +46 -0
- package/components/previews/motion/expandable-control.preview.tsx +27 -0
- package/components/previews/motion/expanding-arrow-button.preview.tsx +11 -0
- package/components/previews/motion/file-tree.preview.tsx +67 -0
- package/components/previews/motion/input.preview.tsx +55 -0
- package/components/previews/motion/loader.preview.tsx +36 -0
- package/components/previews/motion/marquee.preview.tsx +22 -0
- package/components/previews/motion/morphing-modal.preview.tsx +184 -0
- package/components/previews/motion/multi-select.preview.tsx +73 -0
- package/components/previews/motion/number.preview.tsx +61 -0
- package/components/previews/motion/popover.preview.tsx +53 -0
- package/components/previews/motion/preview-rail.preview.tsx +108 -0
- package/components/previews/motion/pull-to-refresh.preview.tsx +117 -0
- package/components/previews/motion/radio.preview.tsx +17 -0
- package/components/previews/motion/range-slider.preview.tsx +19 -0
- package/components/previews/motion/select.preview.tsx +29 -0
- package/components/previews/motion/shader-background.preview.tsx +308 -0
- package/components/previews/motion/shared-layout-bg.preview.tsx +33 -0
- package/components/previews/motion/switch.preview.tsx +15 -0
- package/components/previews/motion/table.preview.tsx +140 -0
- package/components/previews/motion/tabs.preview.tsx +49 -0
- package/components/previews/motion/text-animation.preview.tsx +63 -0
- package/components/previews/motion/theme-toggle.preview.tsx +28 -0
- package/components/previews/motion/tilt-card.preview.tsx +15 -0
- package/components/previews/motion/tooltip.preview.tsx +34 -0
- package/components/previews/motion/wheel-picker.preview.tsx +91 -0
- package/components/pricing/retail-price-tag-card.tsx +104 -0
- package/components/pricing/toggle-pricing-cards.tsx +209 -0
- package/components/profile/contact-profile-card.tsx +100 -0
- package/components/profile/editorial-staff-profile-card.tsx +79 -0
- package/components/profile/team-member-profile-grid.tsx +159 -0
- package/components/profile/user-profile-card.tsx +125 -0
- package/components/resources/resource-links-panel.tsx +176 -0
- package/components/socials/discord-chat-card.tsx +157 -0
- package/components/socials/facebook-post-card.tsx +198 -0
- package/components/socials/github-contribution.tsx +716 -0
- package/components/socials/github-repo-card.tsx +111 -0
- package/components/socials/instagram-post-card.tsx +204 -0
- package/components/socials/linked-in-post-card.tsx +213 -0
- package/components/socials/linked-in-profile-card.tsx +173 -0
- package/components/socials/threads-post-card.tsx +162 -0
- package/components/socials/twitter-post-card.tsx +184 -0
- package/components/socials/twitter-profile-card.tsx +180 -0
- package/components/system/loaders/index.ts +1 -0
- package/components/system/loaders/page-loader-overlay.tsx +16 -0
- package/components/table/customers-table.tsx +146 -0
- package/components/table/orders-table.tsx +195 -0
- package/components/table/recent-transactions-table.tsx +125 -0
- package/components/table/tasks-table.tsx +163 -0
- package/components/table/team-members-table.tsx +155 -0
- package/components/table/users-select-table.tsx +184 -0
- package/components/text/cafe-menu-board-card.tsx +101 -0
- package/components/text/cinema-ticket-card.tsx +99 -0
- package/components/text/daily-motivation-card.tsx +80 -0
- package/components/text/denim-product-editorial-card.tsx +101 -0
- package/components/text/drop-cap-editorial-card.tsx +54 -0
- package/components/text/editorial-quote-card.tsx +98 -0
- package/components/text/journal-writing-card.tsx +131 -0
- package/components/text/keyboard-shortcuts-card.tsx +92 -0
- package/components/text/magazine-cover-card.tsx +109 -0
- package/components/text/notepad-card.tsx +95 -0
- package/components/travel/flight-boarding-card.tsx +177 -0
- package/components/travel/travel-postcard-card.tsx +96 -0
- package/components/underlines/annotated-text-showcase.tsx +37 -0
- package/components/underlines/annotated-text.tsx +471 -0
- package/components/users/credit-card-glass.tsx +113 -0
- package/components/users/team-member-card.tsx +50 -0
- package/components/users/testimonial-card.tsx +239 -0
- package/components/wallet/wallet-pass-card.tsx +220 -0
- package/components/widgets/analog-clock-widget.tsx +203 -0
- package/components/widgets/audio-recorder-widget.tsx +87 -0
- package/components/widgets/battery-face-widget.tsx +152 -0
- package/components/widgets/blob-profile.tsx +64 -0
- package/components/widgets/bluetooth-face-widget.tsx +125 -0
- package/components/widgets/compass-widget.tsx +296 -0
- package/components/widgets/daily-activity-calendar-widget.tsx +133 -0
- package/components/widgets/dnd-face-widget.tsx +129 -0
- package/components/widgets/electric-scooter-widget.tsx +88 -0
- package/components/widgets/flight-arrival-widget.tsx +76 -0
- package/components/widgets/focus-breath-widget.tsx +71 -0
- package/components/widgets/heart-rate-widget.tsx +93 -0
- package/components/widgets/hydration-widget.tsx +109 -0
- package/components/widgets/ios-calendar-widget.tsx +87 -0
- package/components/widgets/ios-digital-clock-widget.tsx +192 -0
- package/components/widgets/ios-earbuds-widget.tsx +120 -0
- package/components/widgets/ios-map-location-widget.tsx +133 -0
- package/components/widgets/minimal-agenda-widget.tsx +123 -0
- package/components/widgets/pomodoro-widget.tsx +155 -0
- package/components/widgets/recorder-face-widget.tsx +146 -0
- package/components/widgets/ride-pickup-widget.tsx +72 -0
- package/components/widgets/sleep-score-widget.tsx +107 -0
- package/components/widgets/step-count-widget.tsx +53 -0
- package/components/widgets/stopwatch-widget.tsx +176 -0
- package/components/widgets/torch-face-widget.tsx +128 -0
- package/components/widgets/voice-assistant-widget.tsx +103 -0
- package/components/widgets/wifi-toggle-widget.tsx +108 -0
- package/lib/cn.ts +1 -0
- package/lib/ease.ts +108 -0
- package/lib/favicon.ts +8 -0
- package/lib/hooks/use-dismiss.ts +120 -0
- package/lib/hooks/use-favicon.ts +39 -0
- package/lib/hooks/use-haptic.ts +44 -0
- package/lib/hooks/use-hover-capable.ts +23 -0
- package/lib/hooks/use-hover-gesture.ts +61 -0
- package/lib/hooks/use-in-view-animation.ts +35 -0
- package/lib/hooks/use-measure.ts +39 -0
- package/lib/hooks/use-on-open.ts +24 -0
- package/lib/hooks/use-row-cursor.ts +86 -0
- package/lib/hooks/use-slider.ts +176 -0
- package/lib/hooks/use-tap-gesture.ts +66 -0
- package/lib/hooks/use-touch-capable.ts +31 -0
- package/lib/presence-gate.tsx +52 -0
- package/lib/styles.ts +124 -0
- package/lib/text-shimmer.ts +21 -0
- package/lib/tick-sound.ts +151 -0
- package/lib/touch.ts +117 -0
- package/lib/utils.ts +6 -0
- package/package.json +49 -0
- package/references/agents/agent-activity.md +747 -0
- package/references/agents/ai-sidebar.md +293 -0
- package/references/agents/approval-card.md +233 -0
- package/references/agents/chat-app.md +184 -0
- package/references/agents/citations.md +159 -0
- package/references/agents/code-block.md +122 -0
- package/references/agents/file-diff.md +119 -0
- package/references/agents/image-generation.md +173 -0
- package/references/agents/loading-states.md +186 -0
- package/references/agents/message-bubble.md +274 -0
- package/references/agents/message-scroller.md +128 -0
- package/references/agents/message.md +162 -0
- package/references/agents/prompt-input.md +204 -0
- package/references/agents/streaming-response.md +216 -0
- package/references/agents/todo-list.md +123 -0
- package/references/agents/tool-approval.md +143 -0
- package/references/agents/tool-result.md +199 -0
- package/references/blocks/availability-scheduler.md +59 -0
- package/references/blocks/bloom-menu.md +56 -0
- package/references/blocks/card-folder.md +165 -0
- package/references/blocks/command-palette.md +89 -0
- package/references/blocks/dynamic-island.md +203 -0
- package/references/blocks/expandable-action-bar.md +191 -0
- package/references/blocks/expandable-tabs.md +184 -0
- package/references/blocks/feedback-widget.md +82 -0
- package/references/blocks/file-upload.md +406 -0
- package/references/blocks/infinite-masonry.md +211 -0
- package/references/blocks/knockout-bracket.md +161 -0
- package/references/blocks/morphing-search.md +113 -0
- package/references/blocks/morphing-tabs.md +143 -0
- package/references/blocks/not-found.md +228 -0
- package/references/blocks/notification-stack.md +92 -0
- package/references/blocks/otp-input.md +85 -0
- package/references/blocks/overflow-actions.md +105 -0
- package/references/blocks/prediction-market.md +97 -0
- package/references/blocks/project-folder.md +99 -0
- package/references/blocks/signup-form.md +92 -0
- package/references/blocks/swap.md +58 -0
- package/references/blocks/swipeable-list.md +202 -0
- package/references/blocks/wallet-card.md +97 -0
- package/references/codex-install.md +59 -0
- package/references/craft/3d-button.md +51 -0
- package/references/craft/3d-icon-button.md +51 -0
- package/references/craft/add-to-cart-button.md +52 -0
- package/references/craft/analog-clock-minimal.md +51 -0
- package/references/craft/analog-clock-numeric.md +51 -0
- package/references/craft/analog-clock-roman.md +51 -0
- package/references/craft/annotated-text.md +51 -0
- package/references/craft/app-dock.md +52 -0
- package/references/craft/apple-hello-loader.md +51 -0
- package/references/craft/apple-notification.md +53 -0
- package/references/craft/apple-watch.md +51 -0
- package/references/craft/arc-bands-background.md +51 -0
- package/references/craft/audio-recorder.md +52 -0
- package/references/craft/aurora-background.md +51 -0
- package/references/craft/battery-face.md +52 -0
- package/references/craft/blob-profile.md +53 -0
- package/references/craft/bluetooth-face.md +52 -0
- package/references/craft/booking-slot-calendar.md +52 -0
- package/references/craft/bookmark-save-button.md +52 -0
- package/references/craft/browser.md +51 -0
- package/references/craft/cafe-menu-board.md +52 -0
- package/references/craft/calendar-reminder-notification.md +52 -0
- package/references/craft/chat-bubble-notification.md +53 -0
- package/references/craft/checkbox-field-input.md +52 -0
- package/references/craft/cherry-petal-background.md +51 -0
- package/references/craft/cinder-latch-button.md +51 -0
- package/references/craft/cinema-ticket.md +52 -0
- package/references/craft/circle-cut-frame.md +51 -0
- package/references/craft/combobox-field-input.md +52 -0
- package/references/craft/compass.md +51 -0
- package/references/craft/contact-form.md +52 -0
- package/references/craft/contact-profile.md +52 -0
- package/references/craft/copy-email.md +53 -0
- package/references/craft/coral-glow-background.md +51 -0
- package/references/craft/craft-copy-button.md +52 -0
- package/references/craft/craft-signup-form.md +53 -0
- package/references/craft/credit-card-glass.md +51 -0
- package/references/craft/customers-table.md +52 -0
- package/references/craft/daily-activity-calendar.md +52 -0
- package/references/craft/daily-motivation.md +53 -0
- package/references/craft/dark-arc-bands-background.md +51 -0
- package/references/craft/dark-aurora-background.md +51 -0
- package/references/craft/dark-carbon-spotlight-background.md +51 -0
- package/references/craft/dark-ember-background.md +51 -0
- package/references/craft/dark-ink-field-background.md +51 -0
- package/references/craft/dark-midnight-mesh-background.md +51 -0
- package/references/craft/dark-rose-noir-background.md +51 -0
- package/references/craft/dark-teal-depth-background.md +51 -0
- package/references/craft/date-field-input.md +52 -0
- package/references/craft/date-range-picker-card.md +52 -0
- package/references/craft/delivery-notification.md +52 -0
- package/references/craft/denim-product-editorial.md +52 -0
- package/references/craft/deploy-notification.md +52 -0
- package/references/craft/depth-outline-button.md +51 -0
- package/references/craft/diagonal-box-pattern.md +51 -0
- package/references/craft/dimple-switch.md +51 -0
- package/references/craft/discord-chat.md +53 -0
- package/references/craft/dnd-face.md +52 -0
- package/references/craft/dot-grid-pattern.md +51 -0
- package/references/craft/download-button.md +52 -0
- package/references/craft/drop-cap-editorial.md +52 -0
- package/references/craft/editor-tool-dock.md +52 -0
- package/references/craft/editorial-quote.md +52 -0
- package/references/craft/editorial-staff-profile.md +51 -0
- package/references/craft/electric-scooter.md +53 -0
- package/references/craft/email-notification.md +53 -0
- package/references/craft/event-countdown-card.md +51 -0
- package/references/craft/event-ticket.md +53 -0
- package/references/craft/facebook-post.md +53 -0
- package/references/craft/file-menu.md +52 -0
- package/references/craft/file-upload-field-input.md +52 -0
- package/references/craft/film-strip.md +52 -0
- package/references/craft/filter-sort.md +52 -0
- package/references/craft/fine-grain-pattern.md +51 -0
- package/references/craft/flight-arrival.md +52 -0
- package/references/craft/flight-boarding.md +52 -0
- package/references/craft/floating-label-field-input.md +51 -0
- package/references/craft/focus-breath.md +51 -0
- package/references/craft/folder-tab-card.md +52 -0
- package/references/craft/follow-button.md +52 -0
- package/references/craft/forgot-password-form.md +53 -0
- package/references/craft/frost-mesh-background.md +51 -0
- package/references/craft/gallery-grid.md +53 -0
- package/references/craft/gallery-wall.md +52 -0
- package/references/craft/github-contribution.md +52 -0
- package/references/craft/github-repo.md +52 -0
- package/references/craft/glass-overlay-image.md +53 -0
- package/references/craft/graph-paper-pattern.md +51 -0
- package/references/craft/halftone-pop-background.md +51 -0
- package/references/craft/hard-shadow-polaroid-frame.md +51 -0
- package/references/craft/heart-rate.md +52 -0
- package/references/craft/hold-to-delete-button.md +52 -0
- package/references/craft/honey-ember-background.md +51 -0
- package/references/craft/hydration.md +51 -0
- package/references/craft/incoming-call-notification.md +53 -0
- package/references/craft/ink-stamp-document.md +52 -0
- package/references/craft/ink-wash-background.md +51 -0
- package/references/craft/input-group-field.md +51 -0
- package/references/craft/inset-button.md +51 -0
- package/references/craft/instagram-post.md +53 -0
- package/references/craft/ios-calendar-widget.md +51 -0
- package/references/craft/ios-digital-clock.md +51 -0
- package/references/craft/ios-earbuds.md +51 -0
- package/references/craft/ios-map-location.md +51 -0
- package/references/craft/ipad.md +51 -0
- package/references/craft/ipod.md +51 -0
- package/references/craft/journal-writing.md +52 -0
- package/references/craft/kebab-actions.md +52 -0
- package/references/craft/keyboard-shortcuts.md +52 -0
- package/references/craft/laptop.md +51 -0
- package/references/craft/like-button.md +52 -0
- package/references/craft/line-grid-pattern.md +51 -0
- package/references/craft/linen-tab-button.md +51 -0
- package/references/craft/linen-weave-background.md +51 -0
- package/references/craft/linked-in-post.md +53 -0
- package/references/craft/linked-in-profile.md +52 -0
- package/references/craft/login-form.md +53 -0
- package/references/craft/mac-dock.md +52 -0
- package/references/craft/magazine-cover.md +53 -0
- package/references/craft/minimal-agenda.md +52 -0
- package/references/craft/mint-lagoon-background.md +51 -0
- package/references/craft/month-picker-calendar.md +52 -0
- package/references/craft/museum-placard.md +51 -0
- package/references/craft/music-player.md +53 -0
- package/references/craft/music-playlist.md +53 -0
- package/references/craft/newsletter-form.md +52 -0
- package/references/craft/notepad.md +52 -0
- package/references/craft/notification.md +52 -0
- package/references/craft/now-playing-bar.md +53 -0
- package/references/craft/orders-table.md +52 -0
- package/references/craft/otp-boxed-input.md +52 -0
- package/references/craft/otp-underline-input.md +51 -0
- package/references/craft/page-loader-overlay.md +46 -0
- package/references/craft/paper-fold-background.md +51 -0
- package/references/craft/password-field-input.md +52 -0
- package/references/craft/payment-notification.md +52 -0
- package/references/craft/phone-field-input.md +51 -0
- package/references/craft/phone.md +51 -0
- package/references/craft/photo-album.md +52 -0
- package/references/craft/photo-contact-sheet.md +52 -0
- package/references/craft/polaroid-image.md +52 -0
- package/references/craft/pomodoro.md +52 -0
- package/references/craft/presence-dock.md +51 -0
- package/references/craft/prism-depth-button.md +51 -0
- package/references/craft/progress-ring-card.md +51 -0
- package/references/craft/quantity-stepper-button.md +52 -0
- package/references/craft/radio-group-field-input.md +51 -0
- package/references/craft/rain-prism-background.md +51 -0
- package/references/craft/recent-transactions-table.md +52 -0
- package/references/craft/recorder-face.md +52 -0
- package/references/craft/resource-links-panel.md +52 -0
- package/references/craft/retail-price-tag.md +51 -0
- package/references/craft/reverse-diagonal-box-pattern.md +51 -0
- package/references/craft/ride-pickup.md +53 -0
- package/references/craft/sand-drift-background.md +51 -0
- package/references/craft/search-input.md +52 -0
- package/references/craft/segmented-toggle-button.md +51 -0
- package/references/craft/select-field-input.md +52 -0
- package/references/craft/share-menu.md +52 -0
- package/references/craft/sheen-pill-button.md +51 -0
- package/references/craft/slate-chip-switch.md +51 -0
- package/references/craft/sleep-score.md +52 -0
- package/references/craft/slide-to-confirm-button.md +52 -0
- package/references/craft/slow-living-polaroid.md +52 -0
- package/references/craft/soft-pill-button.md +51 -0
- package/references/craft/soft-spotlight-background.md +51 -0
- package/references/craft/soft-ui-button.md +51 -0
- package/references/craft/spin-loader.md +52 -0
- package/references/craft/spotlight-bar.md +52 -0
- package/references/craft/stacked-cards-effect.md +52 -0
- package/references/craft/stacked-folder-card.md +52 -0
- package/references/craft/stamp-postcard.md +52 -0
- package/references/craft/step-count.md +51 -0
- package/references/craft/sticky-note-polaroid-frame.md +51 -0
- package/references/craft/stopwatch.md +52 -0
- package/references/craft/sunrise-horizon-background.md +51 -0
- package/references/craft/sunset-bloom-background.md +51 -0
- package/references/craft/switch-field-input.md +51 -0
- package/references/craft/system-alert.md +52 -0
- package/references/craft/tasks-table.md +53 -0
- package/references/craft/team-member-profile-grid.md +52 -0
- package/references/craft/team-member.md +53 -0
- package/references/craft/team-members-table.md +53 -0
- package/references/craft/terminal-log.md +52 -0
- package/references/craft/terrazzo-fragment-background.md +51 -0
- package/references/craft/testimonial.md +53 -0
- package/references/craft/text-field-input.md +51 -0
- package/references/craft/text-loader.md +51 -0
- package/references/craft/textarea-field-input.md +51 -0
- package/references/craft/thermal-receipt.md +52 -0
- package/references/craft/threads-post.md +53 -0
- package/references/craft/toast-notification.md +52 -0
- package/references/craft/toggle-pricing-cards.md +52 -0
- package/references/craft/torch-face.md +52 -0
- package/references/craft/transform-box-frame.md +51 -0
- package/references/craft/transform-plus-frame.md +51 -0
- package/references/craft/travel-postcard.md +53 -0
- package/references/craft/tropical-tide-background.md +51 -0
- package/references/craft/twitter-post.md +53 -0
- package/references/craft/twitter-profile.md +53 -0
- package/references/craft/user-menu.md +53 -0
- package/references/craft/user-profile.md +53 -0
- package/references/craft/users-select-table.md +53 -0
- package/references/craft/voice-assistant.md +52 -0
- package/references/craft/wallet-pass.md +52 -0
- package/references/craft/weather-snapshot.md +52 -0
- package/references/craft/week-strip-calendar.md +52 -0
- package/references/craft/wifi-toggle.md +52 -0
- package/references/craft/workspace-switcher.md +52 -0
- package/references/guides/baseline-ui-craft.md +61 -0
- package/references/guides/craft-surface-design-system.md +120 -0
- package/references/guides/design-system-checklist.md +98 -0
- package/references/guides/enterprise-dashboard-patterns.md +53 -0
- package/references/guides/interaction-transitions.md +71 -0
- package/references/guides/motion-engineering.md +137 -0
- package/references/guides/motion-patterns.md +106 -0
- package/references/guides/motion-performance.md +66 -0
- package/references/guides/style-presets.md +115 -0
- package/references/guides/universal-mobile-patterns.md +72 -0
- package/references/motion/action-sheet.md +98 -0
- package/references/motion/action-swap.md +339 -0
- package/references/motion/adaptive-stepper.md +95 -0
- package/references/motion/animated-badge.md +92 -0
- package/references/motion/animated-sidebar.md +446 -0
- package/references/motion/animated-toast-stack.md +214 -0
- package/references/motion/aspect-ratio.md +59 -0
- package/references/motion/audio-player.md +59 -0
- package/references/motion/autocomplete.md +69 -0
- package/references/motion/avatar-group.md +93 -0
- package/references/motion/bottom-sheet.md +85 -0
- package/references/motion/bounce-sidebar.md +80 -0
- package/references/motion/bouncy-accordion.md +115 -0
- package/references/motion/breadcrumb.md +62 -0
- package/references/motion/button.md +271 -0
- package/references/motion/card-resize.md +60 -0
- package/references/motion/cascader.md +99 -0
- package/references/motion/center-morph-modal.md +133 -0
- package/references/motion/checkbox.md +76 -0
- package/references/motion/chip.md +81 -0
- package/references/motion/collapsible.md +73 -0
- package/references/motion/color-picker.md +57 -0
- package/references/motion/combobox.md +247 -0
- package/references/motion/confetti.md +65 -0
- package/references/motion/context-menu.md +269 -0
- package/references/motion/copy-button.md +59 -0
- package/references/motion/cylinder-carousel.md +151 -0
- package/references/motion/date-range-picker.md +68 -0
- package/references/motion/dock.md +105 -0
- package/references/motion/drawer.md +94 -0
- package/references/motion/error-shake.md +85 -0
- package/references/motion/event-calendar.md +81 -0
- package/references/motion/expandable-control.md +89 -0
- package/references/motion/expanding-arrow-button.md +178 -0
- package/references/motion/file-tree.md +139 -0
- package/references/motion/filter-builder.md +106 -0
- package/references/motion/frame.md +61 -0
- package/references/motion/gantt.md +61 -0
- package/references/motion/glow-button.md +59 -0
- package/references/motion/haptic-pressable.md +64 -0
- package/references/motion/hover-card.md +86 -0
- package/references/motion/icon-stack.md +64 -0
- package/references/motion/input.md +108 -0
- package/references/motion/kanban.md +111 -0
- package/references/motion/kbd.md +66 -0
- package/references/motion/loader.md +82 -0
- package/references/motion/magnet-dock.md +64 -0
- package/references/motion/marquee.md +68 -0
- package/references/motion/metric-card.md +81 -0
- package/references/motion/morphing-modal.md +230 -0
- package/references/motion/multi-select.md +202 -0
- package/references/motion/number-field.md +70 -0
- package/references/motion/number.md +198 -0
- package/references/motion/page-transition.md +78 -0
- package/references/motion/pagination.md +64 -0
- package/references/motion/password-input.md +77 -0
- package/references/motion/phone-input.md +63 -0
- package/references/motion/popover.md +209 -0
- package/references/motion/preview-rail.md +165 -0
- package/references/motion/progress-ring.md +73 -0
- package/references/motion/pull-to-refresh.md +172 -0
- package/references/motion/radio.md +73 -0
- package/references/motion/range-slider.md +290 -0
- package/references/motion/rating.md +69 -0
- package/references/motion/reorder-grid.md +69 -0
- package/references/motion/resizable-panel.md +75 -0
- package/references/motion/scroll-animation.md +397 -0
- package/references/motion/segmented-control.md +68 -0
- package/references/motion/segmented-progress.md +70 -0
- package/references/motion/select.md +196 -0
- package/references/motion/shader-background.md +351 -0
- package/references/motion/shared-layout-bg.md +80 -0
- package/references/motion/sortable-list.md +62 -0
- package/references/motion/speed-dial.md +63 -0
- package/references/motion/split-text.md +62 -0
- package/references/motion/spotlight-card.md +67 -0
- package/references/motion/stepper.md +83 -0
- package/references/motion/success-check.md +67 -0
- package/references/motion/switch.md +62 -0
- package/references/motion/table.md +519 -0
- package/references/motion/tabs.md +116 -0
- package/references/motion/text-animation.md +285 -0
- package/references/motion/text-swap.md +64 -0
- package/references/motion/theme-toggle.md +82 -0
- package/references/motion/tilt-card.md +59 -0
- package/references/motion/timeline.md +85 -0
- package/references/motion/toggle-group.md +70 -0
- package/references/motion/tooltip.md +82 -0
- package/references/motion/tree-view.md +87 -0
- package/references/motion/wheel-picker.md +142 -0
- package/scripts/build_docs.py +557 -0
- package/scripts/install-component.py +232 -0
- package/scripts/test_release.py +119 -0
- package/scripts/updater.mjs +9 -0
- package/scripts/verify_skill.py +84 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Reorder Grid"
|
|
3
|
+
description: "Drag-and-drop sortable grid driven by Motion's native Reorder primitives with spring elevation and haptic feedback."
|
|
4
|
+
category: "Components"
|
|
5
|
+
publishedAt: "2026-09-05"
|
|
6
|
+
updatedAt: "2026-09-05"
|
|
7
|
+
documentation: "references/motion/reorder-grid.md"
|
|
8
|
+
markdown: "references/motion/reorder-grid.md"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Reorder Grid
|
|
13
|
+
|
|
14
|
+
> Drag-and-drop sortable grid driven by Motion's native Reorder primitives with spring elevation and haptic feedback. Inspired by Motion (Framer Motion) and KeenThemes ReUI.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install via motion-ui skill CLI:
|
|
20
|
+
python scripts/install-component.py reorder-grid --dest ./src
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- `clsx`
|
|
26
|
+
- `lucide-react`
|
|
27
|
+
- `motion`
|
|
28
|
+
- `react`
|
|
29
|
+
- `tailwind-merge`
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
"use client";
|
|
35
|
+
|
|
36
|
+
import { ReorderGrid, type ReorderItem } from "@/components/motion/reorder-grid";
|
|
37
|
+
import { Folder, FileText, Image, Code } from "lucide-react";
|
|
38
|
+
import { useState } from "react";
|
|
39
|
+
|
|
40
|
+
const INITIAL_ITEMS: ReorderItem[] = [
|
|
41
|
+
{ id: "1", title: "Documents", subtitle: "14 files", icon: <Folder className="size-4" />, badge: "Active" },
|
|
42
|
+
{ id: "2", title: "Images", subtitle: "84 assets", icon: <Image className="size-4" /> },
|
|
43
|
+
{ id: "3", title: "Source Code", subtitle: "Git repository", icon: <Code className="size-4" />, badge: "Main" },
|
|
44
|
+
{ id: "4", title: "Invoices", subtitle: "Q3 reports", icon: <FileText className="size-4" /> },
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
export function ReorderGridExample() {
|
|
48
|
+
const [items, setItems] = useState(INITIAL_ITEMS);
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<div className="max-w-xl p-8">
|
|
52
|
+
<ReorderGrid
|
|
53
|
+
items={items}
|
|
54
|
+
columns={2}
|
|
55
|
+
onChange={(newOrder) => setItems(newOrder)}
|
|
56
|
+
/>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Props
|
|
63
|
+
|
|
64
|
+
| Prop | Type | Default | Description |
|
|
65
|
+
| :--- | :--- | :--- | :--- |
|
|
66
|
+
| `items` | `ReorderItem[]` | Required | Array of draggable grid items. |
|
|
67
|
+
| `onChange` | `(items: ReorderItem[]) => void` | `undefined` | Callback fired when items are reordered. |
|
|
68
|
+
| `columns` | `1 \| 2 \| 3 \| 4` | `2` | Number of responsive grid columns. |
|
|
69
|
+
| `className` | `string` | `undefined` | Container classes. |
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Resizable Panel"
|
|
3
|
+
description: "Accessible multi-direction split container with smooth pointer dragging, keyboard ratio controls, and boundary snapping."
|
|
4
|
+
category: "Components"
|
|
5
|
+
publishedAt: "2026-09-05"
|
|
6
|
+
updatedAt: "2026-09-05"
|
|
7
|
+
documentation: "references/motion/resizable-panel.md"
|
|
8
|
+
markdown: "references/motion/resizable-panel.md"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Resizable Panel
|
|
13
|
+
|
|
14
|
+
> Accessible multi-direction split container with smooth pointer dragging, keyboard ratio controls, and boundary snapping. Inspired by shadcn/ui and React Resizable Panels.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install via motion-ui skill CLI:
|
|
20
|
+
python scripts/install-component.py resizable-panel --dest ./src
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- `clsx`
|
|
26
|
+
- `lucide-react`
|
|
27
|
+
- `motion`
|
|
28
|
+
- `react`
|
|
29
|
+
- `tailwind-merge`
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
"use client";
|
|
35
|
+
|
|
36
|
+
import { ResizablePanelGroup } from "@/components/motion/resizable-panel";
|
|
37
|
+
|
|
38
|
+
export function ResizablePanelExample() {
|
|
39
|
+
return (
|
|
40
|
+
<div className="h-96 w-full p-4">
|
|
41
|
+
<ResizablePanelGroup
|
|
42
|
+
direction="horizontal"
|
|
43
|
+
defaultSize={40}
|
|
44
|
+
minSize={25}
|
|
45
|
+
maxSize={75}
|
|
46
|
+
panelA={
|
|
47
|
+
<div className="p-4 bg-muted/20 h-full">
|
|
48
|
+
<h3 className="text-sm font-semibold">Left Sidebar</h3>
|
|
49
|
+
<p className="text-xs text-muted-foreground mt-2">File tree and navigation</p>
|
|
50
|
+
</div>
|
|
51
|
+
}
|
|
52
|
+
panelB={
|
|
53
|
+
<div className="p-4 bg-card h-full">
|
|
54
|
+
<h3 className="text-sm font-semibold">Editor Surface</h3>
|
|
55
|
+
<p className="text-xs text-muted-foreground mt-2">Main workspace</p>
|
|
56
|
+
</div>
|
|
57
|
+
}
|
|
58
|
+
/>
|
|
59
|
+
</div>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Props
|
|
65
|
+
|
|
66
|
+
| Prop | Type | Default | Description |
|
|
67
|
+
| :--- | :--- | :--- | :--- |
|
|
68
|
+
| `direction` | `"horizontal" \| "vertical"` | `"horizontal"` | Split orientation. |
|
|
69
|
+
| `defaultSize` | `number` | `50` | Default percentage width/height for panel A. |
|
|
70
|
+
| `minSize` | `number` | `20` | Minimum percentage for panel A. |
|
|
71
|
+
| `maxSize` | `number` | `80` | Maximum percentage for panel A. |
|
|
72
|
+
| `panelA` | `React.ReactNode` | Required | First panel content. |
|
|
73
|
+
| `panelB` | `React.ReactNode` | Required | Second panel content. |
|
|
74
|
+
| `onResize` | `(size: number) => void` | `undefined` | Callback invoked when split ratio changes. |
|
|
75
|
+
| `className` | `string` | `undefined` | Outer container classes. |
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Scroll Animation"
|
|
3
|
+
description: "Scroll-driven motion: a Lenis smooth-scroll provider and a reading-progress indicator that reads from it."
|
|
4
|
+
category: "Components"
|
|
5
|
+
publishedAt: "2026-06-24"
|
|
6
|
+
updatedAt: "2026-06-28"
|
|
7
|
+
documentation: "references/motion/scroll-animation.md"
|
|
8
|
+
markdown: "references/motion/scroll-animation.md"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Scroll Animation
|
|
13
|
+
|
|
14
|
+
> Scroll-driven motion: a Lenis smooth-scroll provider and a reading-progress indicator that reads from it.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
### Smooth Scroll
|
|
19
|
+
|
|
20
|
+
Smooth-scroll provider over Lenis with a useSmoothScroll hook exposing scroll offset, progress and velocity. Reduced-motion safe.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Install via motion-ui skill CLI:
|
|
24
|
+
python scripts/install-component.py smooth-scroll --dest ./src
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Scroll Progress
|
|
28
|
+
|
|
29
|
+
Reading-progress indicator — fixed bar or circular ring — driven by scroll position via useSmoothScroll, with spring smoothing.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Install via motion-ui skill CLI:
|
|
33
|
+
python scripts/install-component.py scroll-progress --dest ./src
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Parallax
|
|
37
|
+
|
|
38
|
+
Wrapper that drifts its children at a speed factor as they cross the viewport, on either axis. Reduced-motion safe.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Install via motion-ui skill CLI:
|
|
42
|
+
python scripts/install-component.py parallax --dest ./src
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Scroll To
|
|
46
|
+
|
|
47
|
+
Button that smooth-scrolls to a target (offset, selector or element) via the active SmoothScroll provider; reduced-motion jumps instantly.
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Install via motion-ui skill CLI:
|
|
51
|
+
python scripts/install-component.py scroll-to --dest ./src
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Scroll Reveal
|
|
55
|
+
|
|
56
|
+
Reveals its children with a spring slide and blur as they enter the viewport, once or every time. Reduced-motion keeps a fade.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Install via motion-ui skill CLI:
|
|
60
|
+
python scripts/install-component.py scroll-reveal --dest ./src
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Dependencies
|
|
64
|
+
|
|
65
|
+
- `clsx`
|
|
66
|
+
- `lenis`
|
|
67
|
+
- `motion`
|
|
68
|
+
- `react`
|
|
69
|
+
- `tailwind-merge`
|
|
70
|
+
|
|
71
|
+
## Usage
|
|
72
|
+
|
|
73
|
+
### Smooth Scroll usage
|
|
74
|
+
|
|
75
|
+
Smooth-scroll provider over Lenis with a useSmoothScroll hook exposing scroll offset, progress and velocity. Reduced-motion safe.
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
"use client";
|
|
79
|
+
|
|
80
|
+
import { ArrowUp } from "lucide-react";
|
|
81
|
+
|
|
82
|
+
import { SmoothScroll, useSmoothScroll } from "@/components/motion/smooth-scroll";
|
|
83
|
+
|
|
84
|
+
// In production <SmoothScroll> wraps the page (root). Here it runs in contained
|
|
85
|
+
// mode (root={false}) so the box itself smooth-scrolls — the same engine, and
|
|
86
|
+
// the button uses the useSmoothScroll() hook to glide back to the top.
|
|
87
|
+
const SECTIONS = Array.from({ length: 16 }, (_, i) => i + 1);
|
|
88
|
+
|
|
89
|
+
function ScrollTopButton() {
|
|
90
|
+
const { scrollTo } = useSmoothScroll();
|
|
91
|
+
return (
|
|
92
|
+
<button
|
|
93
|
+
type="button"
|
|
94
|
+
onClick={() => scrollTo(0)}
|
|
95
|
+
className="sticky bottom-3 left-[calc(100%-3rem)] z-10 grid size-9 place-items-center rounded-full border border-border bg-background/80 text-foreground backdrop-blur transition-colors hover:bg-background"
|
|
96
|
+
aria-label="Scroll to top"
|
|
97
|
+
>
|
|
98
|
+
<ArrowUp className="size-4" />
|
|
99
|
+
</button>
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function SmoothScrollPreview() {
|
|
104
|
+
return (
|
|
105
|
+
<SmoothScroll
|
|
106
|
+
root={false}
|
|
107
|
+
className="h-64 w-full max-w-lg overflow-y-auto scrollbar-hide rounded-2xl border border-border bg-card"
|
|
108
|
+
>
|
|
109
|
+
<div className="space-y-3 p-4">
|
|
110
|
+
{SECTIONS.map((n) => (
|
|
111
|
+
<div
|
|
112
|
+
key={`section-${n}`}
|
|
113
|
+
className="rounded-lg bg-muted/60 px-3 py-4 text-sm text-muted-foreground"
|
|
114
|
+
>
|
|
115
|
+
Section {n}
|
|
116
|
+
</div>
|
|
117
|
+
))}
|
|
118
|
+
</div>
|
|
119
|
+
<ScrollTopButton />
|
|
120
|
+
</SmoothScroll>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Scroll Progress usage
|
|
126
|
+
|
|
127
|
+
Reading-progress indicator — fixed bar or circular ring — driven by scroll position via useSmoothScroll, with spring smoothing.
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
"use client";
|
|
131
|
+
|
|
132
|
+
import { useScroll } from "motion/react";
|
|
133
|
+
import { useRef } from "react";
|
|
134
|
+
|
|
135
|
+
import { ScrollProgress } from "@/components/motion/scroll-progress";
|
|
136
|
+
|
|
137
|
+
// Real usage: drop <ScrollProgress /> anywhere — it reads page scroll via
|
|
138
|
+
// useSmoothScroll and pins itself with `fixed`. Here we scope it to a box by
|
|
139
|
+
// passing a contained `progress` source and `fixed={false}`.
|
|
140
|
+
const SECTIONS = Array.from({ length: 18 }, (_, i) => i + 1);
|
|
141
|
+
|
|
142
|
+
export function ScrollProgressPreview() {
|
|
143
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
144
|
+
const { scrollYProgress } = useScroll({ container: ref });
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
<div className="relative w-full max-w-lg overflow-hidden rounded-2xl border border-border bg-card">
|
|
148
|
+
<ScrollProgress progress={scrollYProgress} fixed={false} height={3} />
|
|
149
|
+
<div className="absolute right-3 top-3 z-10 rounded-full bg-background/70 p-1 backdrop-blur">
|
|
150
|
+
<ScrollProgress variant="circle" progress={scrollYProgress} size={36} />
|
|
151
|
+
</div>
|
|
152
|
+
<div ref={ref} className="h-64 overflow-y-auto scrollbar-hide">
|
|
153
|
+
<div className="space-y-3 p-4">
|
|
154
|
+
{SECTIONS.map((n) => (
|
|
155
|
+
<div
|
|
156
|
+
key={`row-${n}`}
|
|
157
|
+
className="rounded-lg bg-muted/60 px-3 py-4 text-sm text-muted-foreground"
|
|
158
|
+
>
|
|
159
|
+
Section {n}
|
|
160
|
+
</div>
|
|
161
|
+
))}
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Parallax usage
|
|
170
|
+
|
|
171
|
+
Wrapper that drifts its children at a speed factor as they cross the viewport, on either axis. Reduced-motion safe.
|
|
172
|
+
|
|
173
|
+
```tsx
|
|
174
|
+
"use client";
|
|
175
|
+
|
|
176
|
+
import { useRef } from "react";
|
|
177
|
+
|
|
178
|
+
import { Parallax } from "@/components/motion/parallax";
|
|
179
|
+
|
|
180
|
+
// On a real page <Parallax> tracks the viewport. Here it's scoped to the box
|
|
181
|
+
// via the container prop. Scroll inside the box: the background image drifts
|
|
182
|
+
// against the scroll, the label and avatar drift with it at different speeds.
|
|
183
|
+
export function ParallaxPreview() {
|
|
184
|
+
const containerRef = useRef<HTMLDivElement>(null);
|
|
185
|
+
|
|
186
|
+
return (
|
|
187
|
+
<div
|
|
188
|
+
ref={containerRef}
|
|
189
|
+
className="relative h-[600px] w-full max-w-2xl overflow-y-auto scrollbar-hide rounded-2xl border border-border bg-card"
|
|
190
|
+
>
|
|
191
|
+
<div className="flex h-80 items-center justify-center text-sm text-muted-foreground">
|
|
192
|
+
Scroll down ↓
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<div className="relative h-96 overflow-hidden">
|
|
196
|
+
<Parallax
|
|
197
|
+
container={containerRef}
|
|
198
|
+
speed={-0.6}
|
|
199
|
+
className="absolute inset-x-0 -top-1/4 h-[150%]"
|
|
200
|
+
>
|
|
201
|
+
{/* biome-ignore lint/performance/noImgElement: plain img keeps the copy-paste preview portable (no next/image host config). */}
|
|
202
|
+
<img
|
|
203
|
+
src="https://picsum.photos/seed/motion-ui-parallax/800/600"
|
|
204
|
+
alt=""
|
|
205
|
+
className="size-full object-cover"
|
|
206
|
+
/>
|
|
207
|
+
</Parallax>
|
|
208
|
+
|
|
209
|
+
<Parallax
|
|
210
|
+
container={containerRef}
|
|
211
|
+
speed={0.5}
|
|
212
|
+
className="absolute inset-0 grid place-items-center"
|
|
213
|
+
>
|
|
214
|
+
<span className="rounded-full bg-background/85 px-5 py-2 text-base font-medium text-foreground backdrop-blur">
|
|
215
|
+
Parallax
|
|
216
|
+
</span>
|
|
217
|
+
</Parallax>
|
|
218
|
+
|
|
219
|
+
<Parallax
|
|
220
|
+
container={containerRef}
|
|
221
|
+
speed={0.9}
|
|
222
|
+
className="absolute bottom-4 right-4"
|
|
223
|
+
>
|
|
224
|
+
{/* biome-ignore lint/performance/noImgElement: plain img keeps the copy-paste preview portable (no next/image host config). */}
|
|
225
|
+
<img
|
|
226
|
+
src="https://picsum.photos/seed/motion-ui-avatar/120/120"
|
|
227
|
+
alt=""
|
|
228
|
+
className="size-12 rounded-full border-2 border-background object-cover shadow-lg"
|
|
229
|
+
/>
|
|
230
|
+
</Parallax>
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
<div className="flex h-80 items-center justify-center text-sm text-muted-foreground">
|
|
234
|
+
↑ Scroll up
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Scroll To usage
|
|
242
|
+
|
|
243
|
+
Button that smooth-scrolls to a target (offset, selector or element) via the active SmoothScroll provider; reduced-motion jumps instantly.
|
|
244
|
+
|
|
245
|
+
```tsx
|
|
246
|
+
"use client";
|
|
247
|
+
|
|
248
|
+
import { ScrollTo } from "@/components/motion/scroll-to";
|
|
249
|
+
import { SmoothScroll } from "@/components/motion/smooth-scroll";
|
|
250
|
+
|
|
251
|
+
// ScrollTo uses the active SmoothScroll provider. Here it's contained
|
|
252
|
+
// (root={false}); the nav buttons glide the box to each section.
|
|
253
|
+
const SECTIONS = [
|
|
254
|
+
{ id: "sec-intro", label: "Intro" },
|
|
255
|
+
{ id: "sec-features", label: "Features" },
|
|
256
|
+
{ id: "sec-pricing", label: "Pricing" },
|
|
257
|
+
{ id: "sec-faq", label: "FAQ" },
|
|
258
|
+
];
|
|
259
|
+
|
|
260
|
+
export function ScrollToPreview() {
|
|
261
|
+
return (
|
|
262
|
+
<SmoothScroll
|
|
263
|
+
root={false}
|
|
264
|
+
className="relative h-80 w-full max-w-lg overflow-y-auto scrollbar-hide rounded-2xl border border-border bg-card"
|
|
265
|
+
>
|
|
266
|
+
<nav className="sticky top-0 z-10 flex gap-1.5 border-b border-border bg-background/80 p-2 backdrop-blur">
|
|
267
|
+
{SECTIONS.map((s) => (
|
|
268
|
+
<ScrollTo
|
|
269
|
+
key={s.id}
|
|
270
|
+
to={`#${s.id}`}
|
|
271
|
+
offset={-48}
|
|
272
|
+
className="rounded-full px-3 py-1 text-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"
|
|
273
|
+
>
|
|
274
|
+
{s.label}
|
|
275
|
+
</ScrollTo>
|
|
276
|
+
))}
|
|
277
|
+
</nav>
|
|
278
|
+
|
|
279
|
+
{SECTIONS.map((s) => (
|
|
280
|
+
<section
|
|
281
|
+
id={s.id}
|
|
282
|
+
key={s.id}
|
|
283
|
+
className="flex h-64 items-center justify-center text-lg font-medium text-foreground"
|
|
284
|
+
>
|
|
285
|
+
{s.label}
|
|
286
|
+
</section>
|
|
287
|
+
))}
|
|
288
|
+
</SmoothScroll>
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Scroll Reveal usage
|
|
294
|
+
|
|
295
|
+
Reveals its children with a spring slide and blur as they enter the viewport, once or every time. Reduced-motion keeps a fade.
|
|
296
|
+
|
|
297
|
+
```tsx
|
|
298
|
+
"use client";
|
|
299
|
+
|
|
300
|
+
import { useRef } from "react";
|
|
301
|
+
|
|
302
|
+
import { ScrollReveal } from "@/components/motion/scroll-reveal";
|
|
303
|
+
|
|
304
|
+
// On a page <ScrollReveal> tracks the viewport. Here root points at the box so
|
|
305
|
+
// each card reveals as it scrolls into the contained view.
|
|
306
|
+
const CARDS = ["Spring slide", "Blur in", "Staggered by delay", "Reveal once"];
|
|
307
|
+
|
|
308
|
+
export function ScrollRevealPreview() {
|
|
309
|
+
const containerRef = useRef<HTMLDivElement>(null);
|
|
310
|
+
|
|
311
|
+
return (
|
|
312
|
+
<div
|
|
313
|
+
ref={containerRef}
|
|
314
|
+
className="h-80 w-full max-w-lg overflow-y-auto scrollbar-hide rounded-2xl border border-border bg-card"
|
|
315
|
+
>
|
|
316
|
+
<div className="flex flex-col gap-16 p-6">
|
|
317
|
+
<div className="text-center text-sm text-muted-foreground">
|
|
318
|
+
Scroll ↓
|
|
319
|
+
</div>
|
|
320
|
+
{CARDS.map((label, i) => (
|
|
321
|
+
<ScrollReveal
|
|
322
|
+
key={label}
|
|
323
|
+
root={containerRef}
|
|
324
|
+
once={false}
|
|
325
|
+
delay={i * 0.05}
|
|
326
|
+
className="rounded-xl border border-border bg-muted/50 px-4 py-16 text-center text-base font-medium text-foreground"
|
|
327
|
+
>
|
|
328
|
+
{label}
|
|
329
|
+
</ScrollReveal>
|
|
330
|
+
))}
|
|
331
|
+
<div className="text-center text-sm text-muted-foreground">End</div>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## API Reference
|
|
339
|
+
|
|
340
|
+
### SmoothScroll
|
|
341
|
+
|
|
342
|
+
| Prop | Type | Default | Required | Description |
|
|
343
|
+
| --- | --- | --- | --- | --- |
|
|
344
|
+
| `root` | `boolean` | `true` | No | Drive the page (window) when true, or a contained scroll area when false. |
|
|
345
|
+
| `lerp` | `number` | `0.1` | No | Smoothing factor; lower is smoother and heavier. |
|
|
346
|
+
| `duration` | `number` | `1.2` | No | Wheel / programmatic ease duration in seconds. |
|
|
347
|
+
| `orientation` | `"horizontal" \| "vertical"` | `vertical` | No | — |
|
|
348
|
+
| `wheelMultiplier` | `number` | `1` | No | Wheel scroll speed multiplier. |
|
|
349
|
+
| `touch` | `boolean` | `false` | No | Smooth touch scrolling. Off by default — native momentum is good on mobile. |
|
|
350
|
+
| `className` | `string` | — | No | — |
|
|
351
|
+
|
|
352
|
+
### ScrollProgress
|
|
353
|
+
|
|
354
|
+
| Prop | Type | Default | Required | Description |
|
|
355
|
+
| --- | --- | --- | --- | --- |
|
|
356
|
+
| `variant` | `"circle" \| "bar"` | — | No | — |
|
|
357
|
+
| `position` | `"bottom" \| "top"` | — | No | — |
|
|
358
|
+
| `height` | `number` | — | No | Bar thickness in px. |
|
|
359
|
+
| `fixed` | `boolean` | — | No | Position the bar with `fixed` (page) or `absolute` (embedded). |
|
|
360
|
+
| `progress` | `MotionValue<number>` | — | No | Override the scroll source. Defaults to the page via useSmoothScroll. |
|
|
361
|
+
| `spring` | `boolean` | — | No | Spring-smooth the value. Disabled automatically under reduced motion. |
|
|
362
|
+
| `className` | `string` | — | No | — |
|
|
363
|
+
| `size` | `number` | — | No | Diameter in px. |
|
|
364
|
+
| `thickness` | `number` | — | No | Stroke width in px. |
|
|
365
|
+
|
|
366
|
+
### Parallax
|
|
367
|
+
|
|
368
|
+
| Prop | Type | Default | Required | Description |
|
|
369
|
+
| --- | --- | --- | --- | --- |
|
|
370
|
+
| `speed` | `number` | `0.3` | No | Drift as a fraction of the element's travel through the viewport. Positive moves with the scroll (foreground), negative against it (background). ~0.1–0.5 reads best. |
|
|
371
|
+
| `axis` | `"x" \| "y"` | `y` | No | — |
|
|
372
|
+
| `container` | `RefObject<HTMLElement \| null>` | — | No | Scroll container for contained scroll areas. Defaults to the viewport. |
|
|
373
|
+
| `spring` | `boolean` | `true` | No | Spring-smooth the drift. Disabled automatically under reduced motion. |
|
|
374
|
+
| `className` | `string` | — | No | — |
|
|
375
|
+
|
|
376
|
+
### ScrollTo
|
|
377
|
+
|
|
378
|
+
| Prop | Type | Default | Required | Description |
|
|
379
|
+
| --- | --- | --- | --- | --- |
|
|
380
|
+
| `to` | `ScrollTarget` | — | Yes | Where to scroll: px offset, selector string or element. |
|
|
381
|
+
| `offset` | `number` | — | No | Extra px offset from the target (e.g. to clear a sticky header). |
|
|
382
|
+
| `duration` | `number` | — | No | Override the ease duration in seconds. |
|
|
383
|
+
| `className` | `string` | — | No | — |
|
|
384
|
+
|
|
385
|
+
### ScrollReveal
|
|
386
|
+
|
|
387
|
+
| Prop | Type | Default | Required | Description |
|
|
388
|
+
| --- | --- | --- | --- | --- |
|
|
389
|
+
| `y` | `number` | `16` | No | Slide distance in px before reveal. |
|
|
390
|
+
| `blur` | `number` | `8` | No | Enter blur in px (kept ≤ 10 per motion conventions). |
|
|
391
|
+
| `duration` | `number` | `0.6` | No | Reveal duration in seconds. |
|
|
392
|
+
| `delay` | `number` | `0` | No | — |
|
|
393
|
+
| `once` | `boolean` | `true` | No | Reveal only once (default) or every time it enters view. |
|
|
394
|
+
| `amount` | `number \| "all" \| "some"` | `0.3` | No | Portion of the element that must be visible to trigger. |
|
|
395
|
+
| `root` | `RefObject<Element \| null>` | — | No | Scroll root for contained scroll areas. Defaults to the viewport. |
|
|
396
|
+
| `className` | `string` | — | No | — |
|
|
397
|
+
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Segmented Control"
|
|
3
|
+
description: "Tactile iOS/macOS segmented control with layoutId gliding indicator, icon labels, haptic taps, and keyboard arrow navigation."
|
|
4
|
+
category: "Components"
|
|
5
|
+
publishedAt: "2026-09-05"
|
|
6
|
+
updatedAt: "2026-09-05"
|
|
7
|
+
documentation: "references/motion/segmented-control.md"
|
|
8
|
+
markdown: "references/motion/segmented-control.md"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Segmented Control
|
|
13
|
+
|
|
14
|
+
> Tactile iOS/macOS segmented control with `layoutId` gliding indicator, icon labels, haptic taps, and keyboard arrow navigation. Inspired by Expo and Transitions.dev.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install via motion-ui skill CLI:
|
|
20
|
+
python scripts/install-component.py segmented-control --dest ./src
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- `clsx`
|
|
26
|
+
- `motion`
|
|
27
|
+
- `react`
|
|
28
|
+
- `tailwind-merge`
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
"use client";
|
|
34
|
+
|
|
35
|
+
import { SegmentedControl } from "@/components/motion/segmented-control";
|
|
36
|
+
import { Grid, List, Table } from "lucide-react";
|
|
37
|
+
import { useState } from "react";
|
|
38
|
+
|
|
39
|
+
export function SegmentedControlExample() {
|
|
40
|
+
const [view, setView] = useState("grid");
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<div className="p-8 bg-card rounded-2xl border border-border inline-block">
|
|
44
|
+
<SegmentedControl
|
|
45
|
+
value={view}
|
|
46
|
+
onChange={(val) => setView(val)}
|
|
47
|
+
items={[
|
|
48
|
+
{ value: "grid", label: "Grid", icon: <Grid className="size-3.5" /> },
|
|
49
|
+
{ value: "list", label: "List", icon: <List className="size-3.5" /> },
|
|
50
|
+
{ value: "table", label: "Table", icon: <Table className="size-3.5" /> },
|
|
51
|
+
]}
|
|
52
|
+
/>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Props
|
|
59
|
+
|
|
60
|
+
| Prop | Type | Default | Description |
|
|
61
|
+
| :--- | :--- | :--- | :--- |
|
|
62
|
+
| `items` | `SegmentedItem[]` | required | Array of selectable segments with label, value, and optional icon. |
|
|
63
|
+
| `value` | `string` | `undefined` | Controlled active segment value. |
|
|
64
|
+
| `defaultValue` | `string` | `items[0].value` | Uncontrolled initial segment value. |
|
|
65
|
+
| `onChange` | `(value: string) => void` | `undefined` | Callback emitted on segment change. |
|
|
66
|
+
| `size` | `"sm" \| "md" \| "lg"` | `"md"` | Size scale of segments. |
|
|
67
|
+
| `fullWidth` | `boolean` | `false` | Stretches segments to fill container width equally. |
|
|
68
|
+
| `className` | `string` | `undefined` | Custom styling overrides merged via `cn()`. |
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Segmented Progress"
|
|
3
|
+
description: "Multi-segment story timer progress bar with auto-advance, press-to-pause gestures, and interactive step navigation."
|
|
4
|
+
category: "Components"
|
|
5
|
+
publishedAt: "2026-09-05"
|
|
6
|
+
updatedAt: "2026-09-05"
|
|
7
|
+
documentation: "references/motion/segmented-progress.md"
|
|
8
|
+
markdown: "references/motion/segmented-progress.md"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Segmented Progress
|
|
13
|
+
|
|
14
|
+
> Multi-segment story timer progress bar with auto-advance, press-to-pause gestures, and interactive step navigation. Inspired by Expo and mobile story UX.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install via motion-ui skill CLI:
|
|
20
|
+
python scripts/install-component.py segmented-progress --dest ./src
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- `clsx`
|
|
26
|
+
- `motion`
|
|
27
|
+
- `react`
|
|
28
|
+
- `tailwind-merge`
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
"use client";
|
|
34
|
+
|
|
35
|
+
import { SegmentedProgress } from "@/components/motion/segmented-progress";
|
|
36
|
+
import { useState } from "react";
|
|
37
|
+
|
|
38
|
+
export function SegmentedProgressExample() {
|
|
39
|
+
const [active, setActive] = useState(0);
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<div className="max-w-md p-6 bg-card rounded-2xl border border-border space-y-4">
|
|
43
|
+
<SegmentedProgress
|
|
44
|
+
segmentsCount={5}
|
|
45
|
+
activeIndex={active}
|
|
46
|
+
durationPerSegment={4}
|
|
47
|
+
onSegmentClick={(i) => setActive(i)}
|
|
48
|
+
onAllComplete={() => console.log("Story sequence finished")}
|
|
49
|
+
/>
|
|
50
|
+
<div className="flex justify-between items-center text-xs text-muted-foreground">
|
|
51
|
+
<span>Story {active + 1} of 5</span>
|
|
52
|
+
<span>Hold to pause</span>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Props
|
|
60
|
+
|
|
61
|
+
| Prop | Type | Default | Description |
|
|
62
|
+
| :--- | :--- | :--- | :--- |
|
|
63
|
+
| `segmentsCount` | `number` | required | Total count of progress segments. |
|
|
64
|
+
| `activeIndex` | `number` | `undefined` | Controlled active segment index. |
|
|
65
|
+
| `durationPerSegment` | `number` | `5` | Transition duration in seconds per segment. |
|
|
66
|
+
| `autoAdvance` | `boolean` | `true` | Enables automatic timed advancement. |
|
|
67
|
+
| `onSegmentComplete` | `(index: number) => void` | `undefined` | Callback emitted when an individual segment completes. |
|
|
68
|
+
| `onAllComplete` | `() => void` | `undefined` | Callback emitted when the final segment finishes. |
|
|
69
|
+
| `onSegmentClick` | `(index: number) => void` | `undefined` | Enables manual segment clicking. |
|
|
70
|
+
| `className` | `string` | `undefined` | Custom styling overrides merged via `cn()`. |
|