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,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Multi-Style Presets & Aesthetic Themes Guide"
|
|
3
|
+
description: "Architecture and guidelines for AI agents to select, switch, and apply shared design tokens across components."
|
|
4
|
+
category: "Design Systems"
|
|
5
|
+
publishedAt: "2026-09-05"
|
|
6
|
+
updatedAt: "2026-09-05"
|
|
7
|
+
documentation: "references/guides/style-presets.md"
|
|
8
|
+
markdown: "references/guides/style-presets.md"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Multi-Style Presets & Aesthetic Themes
|
|
13
|
+
|
|
14
|
+
> Architecture and guidelines for AI agents to select, switch, and apply shared design tokens across components in this skill.
|
|
15
|
+
|
|
16
|
+
Modern web and mobile applications span dramatically different visual aesthetics. Rather than forcing a single rigid look, the Motion UI Skill equips agents with **6 Canonical Style Presets**:
|
|
17
|
+
|
|
18
|
+
1. **`minimal`** — Clean, flat monochrome, crisp 1px borders, subtle hover transitions (inspired by *shadcn/ui* and *Linear*).
|
|
19
|
+
2. **`origin`** — High-craft, micro-elevation, subtle specular inner borders, precision focus rings, dark-mode luxury (inspired by *Coss* and *Cal.com*).
|
|
20
|
+
3. **`enterprise`** — High information density, compact spacing, clear semantic contrast, sharp geometry, data-heavy (inspired by *KeenThemes ReUI*).
|
|
21
|
+
4. **`glow`** — Luminous radial gradient halos, spotlight cursor highlights, dark ambient glass, metallic beams (inspired by *ibelick/ui-skills*).
|
|
22
|
+
5. **`ios`** — Deep rounded squircle curves (`rounded-2xl` to `rounded-3xl`), translucent blurred glass (`backdrop-blur-2xl`), tactile spring bounce, haptic vibrations (inspired by *Expo* and *Apple iOS*).
|
|
23
|
+
6. **`brutalist`** — Bold 2px/3px black outlines, high-contrast flat fills, hard 4px offset drop-shadows, tactile press translations (Neo-brutalist aesthetic).
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## The Style Tokens Architecture (`lib/styles.ts`)
|
|
28
|
+
|
|
29
|
+
Every preset is formalized into reusable Tailwind utility tokens and spring physics configurations:
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { STYLE_PRESETS, getStylePreset, type StylePreset } from "@/lib/styles";
|
|
33
|
+
|
|
34
|
+
const tokens = getStylePreset("origin");
|
|
35
|
+
// tokens.card -> Card surface classes
|
|
36
|
+
// tokens.buttonPrimary -> Primary action button classes
|
|
37
|
+
// tokens.input -> Text/search field classes
|
|
38
|
+
// tokens.badge -> Status badge classes
|
|
39
|
+
// tokens.panel -> Modal/drawer/popover container classes
|
|
40
|
+
// tokens.radius -> Corner rounding token
|
|
41
|
+
// tokens.spring -> Corresponding Motion spring curve
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Visual Comparison of the 6 Styles
|
|
47
|
+
|
|
48
|
+
| Style Preset | Border & Geometry | Surface & Lighting | Shadows & Elevation | Motion Physics | Target Archetype |
|
|
49
|
+
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
50
|
+
| **`minimal`** | `border-border`, `rounded-xl` | Flat `bg-card`, monochrome | `shadow-none` / `shadow-sm` | `SPRING_PRESS` (stiff) | Minimalist SaaS, developer tools |
|
|
51
|
+
| **`origin`** | `border-border/70`, `rounded-2xl`, `ring-1 ring-white/5` | Gradient `from-card to-card/90`, glass | Refined micro-shadows | `SPRING_SNAPPY` (velocity) | Cal.com, Stripe, high-craft web apps |
|
|
52
|
+
| **`enterprise`** | `border-border`, `rounded-md`, compact | High contrast, clear cells | Minimal shadow | `SPRING_PRESS` (subtle) | ReUI dashboards, ERP, CRM, data grids |
|
|
53
|
+
| **`glow`** | `border-border/60`, `rounded-2xl` | Radial gradient spotlights, cyan/indigo | `shadow-2xl`, glow blooms | `SPRING_GENTLE` (smooth) | Web3, AI platforms, luxury landing pages |
|
|
54
|
+
| **`ios`** | `border-white/10`, `rounded-3xl` | Translucent glass `backdrop-blur-2xl` | Diffuse ambient soft shadows | `SPRING_BOUNCE` (playful) | Expo mobile apps, consumer iOS PWAs |
|
|
55
|
+
| **`brutalist`** | `border-2 border-foreground`, `rounded-none` | High contrast flat fills, saturated accents | Hard offset `shadow-[4px_4px_0px_0px_currentColor]` | Snappy step transitions | Creative studios, modern editorial, web zines |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## How AI Agents Should Select Styles
|
|
60
|
+
|
|
61
|
+
When generating UI code or answering user prompts, follow these decision heuristics:
|
|
62
|
+
|
|
63
|
+
### Step 1: Detect User Aesthetic Preference
|
|
64
|
+
- If the user specifies an aesthetic (e.g. *"make it look like Apple"*, *"make a high-craft Stripe/Cal.com interface"*, *"make a compact admin dashboard"*, *"make a cyber glow look"*), map immediately to the preset:
|
|
65
|
+
- *"Apple / Mobile / Expo"* $\rightarrow$ **`ios`**
|
|
66
|
+
- *"Stripe / Linear / Cal.com / High Craft"* $\rightarrow$ **`origin`**
|
|
67
|
+
- *"Shadcn / Minimal / Clean"* $\rightarrow$ **`minimal`**
|
|
68
|
+
- *"KeenThemes / ReUI / Enterprise / Compact / Admin"* $\rightarrow$ **`enterprise`**
|
|
69
|
+
- *"Glow / Cyber / Dark Modern / Spotlight"* $\rightarrow$ **`glow`**
|
|
70
|
+
- *"Retro / Brutalist / Bold / Outline"* $\rightarrow$ **`brutalist`**
|
|
71
|
+
|
|
72
|
+
### Step 2: If Unspecified, Ask or Default Wisely
|
|
73
|
+
- Default for web apps: **`origin`** (balanced high-craft, works in both dark and light mode).
|
|
74
|
+
- Default for mobile / touch-first: **`ios`**.
|
|
75
|
+
- Default for heavy data tables / Gantt / Kanban: **`enterprise`**.
|
|
76
|
+
|
|
77
|
+
### Step 3: Implement with Style Preset Props or Utility Tokens
|
|
78
|
+
`MetricCard` accepts a `stylePreset` prop directly. Other components can consume the shared tokens in a wrapper:
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
<MetricCard
|
|
82
|
+
title="Monthly Recurring Revenue"
|
|
83
|
+
value="$48,250"
|
|
84
|
+
change="+14.2%"
|
|
85
|
+
stylePreset="origin"
|
|
86
|
+
/>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Or consume `STYLE_PRESETS` in custom wrappers:
|
|
90
|
+
|
|
91
|
+
```tsx
|
|
92
|
+
import { STYLE_PRESETS, type StylePreset } from "@/lib/styles";
|
|
93
|
+
import { cn } from "@/lib/utils";
|
|
94
|
+
|
|
95
|
+
export function CustomCard({ stylePreset = "origin", children }: { stylePreset?: StylePreset; children: React.ReactNode }) {
|
|
96
|
+
const tokens = STYLE_PRESETS[stylePreset];
|
|
97
|
+
return <div className={cn(tokens.card)}>{children}</div>;
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## CLI Style Flag
|
|
104
|
+
|
|
105
|
+
The CLI component installer supports explicit style selection:
|
|
106
|
+
|
|
107
|
+
The selected value is reported for the agent and the shared `lib/styles.ts` helper is copied; component class names are not rewritten automatically.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Install a component and include the shared style tokens
|
|
111
|
+
python scripts/install-component.py metric-card --style origin --dest ./src
|
|
112
|
+
|
|
113
|
+
# List all available styles and tokens
|
|
114
|
+
python scripts/install-component.py --list-styles
|
|
115
|
+
```
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Universal Mobile-First Interaction Patterns"
|
|
3
|
+
description: "Cross-platform touch guidelines, mobile gesture physics, haptic feedback semantics, and responsive adaptive component adaptations inspired by Expo."
|
|
4
|
+
documentation: "references/guides/universal-mobile-patterns.md"
|
|
5
|
+
markdown: "references/guides/universal-mobile-patterns.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Universal Mobile-First Interaction Patterns
|
|
9
|
+
|
|
10
|
+
> Engineering resilient cross-platform web and mobile interfaces, synthesizing principles from [expo/expo](https://github.com/expo/expo) and Apple HIG / Material Design standards.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. Touch Target Ergonomics
|
|
15
|
+
|
|
16
|
+
On mobile devices, human thumbs and index fingers lack pixel-level precision.
|
|
17
|
+
- **Minimum Interactive Touch Region**:
|
|
18
|
+
- Apple Human Interface Guidelines: **$44 \times 44\text{pt}$**
|
|
19
|
+
- Android Material Design: **$48 \times 48\text{dp}$**
|
|
20
|
+
- **Visual vs Tap Target**: An icon button may visually measure $28 \times 28\text{px}$, but its clickable hit area must be expanded via padding or pseudo-elements (`after:absolute after:-inset-2`).
|
|
21
|
+
- **Pointer Media Query Guard**:
|
|
22
|
+
```tsx
|
|
23
|
+
// lib/hooks/use-hover-capable.ts
|
|
24
|
+
// Only enable hover transforms on devices with a true pointer
|
|
25
|
+
@media (hover: hover) and (pointer: fine) { ... }
|
|
26
|
+
```
|
|
27
|
+
Prevents mobile browsers from entering sticky tap states where a tapped button permanently retains its desktop `:hover` appearance.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. Semantic Haptic Feedback
|
|
32
|
+
|
|
33
|
+
Haptics bridge the gap between digital software and physical tactile perception.
|
|
34
|
+
|
|
35
|
+
### Haptic Trigger Taxonomy
|
|
36
|
+
| Haptic Role | Sensation | Use Case |
|
|
37
|
+
| :--- | :--- | :--- |
|
|
38
|
+
| `selection` | 10ms crisp tap | Wheel picker notches, slider steps, tab switching. |
|
|
39
|
+
| `light` | 15ms soft impulse | Button tap, toggle switch, dropdown menu item click. |
|
|
40
|
+
| `medium` | 30ms firm impulse | Long-press activation, reordering item pickup. |
|
|
41
|
+
| `heavy` | 50ms deep thump | Bottom sheet snap to max height, pull-to-refresh trigger threshold. |
|
|
42
|
+
| `success` | Light-pause-medium | Form submission success, transaction confirmed, task completed. |
|
|
43
|
+
| `warning` | Medium-pause-medium | Destructive action confirmation, near limit alert. |
|
|
44
|
+
| `error` | Rapid 3-pulse vibration | Validation failure, unauthorized action, network error. |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 3. Gesture Physics & Sheet Dynamics
|
|
49
|
+
|
|
50
|
+
### Dragging & Rubber-Banding
|
|
51
|
+
When an overlay or bottom sheet is pulled past its boundary, apply exponential decay rather than hard clamping:
|
|
52
|
+
$$\text{offset}_{\text{damped}} = \text{threshold} + (\text{excess} \times 0.2)$$
|
|
53
|
+
This gives the interface a tactile, elastic physical boundary.
|
|
54
|
+
|
|
55
|
+
### Velocity Handoff (Flick vs Distance)
|
|
56
|
+
When dismissing a bottom sheet or swipeable row:
|
|
57
|
+
- If velocity $v_y > 400\text{px/s}$, dismiss the sheet regardless of distance moved.
|
|
58
|
+
- If velocity is low, dismiss only if dragged past 40% of the total height.
|
|
59
|
+
- If released before 40% with low velocity, spring back to open state using `SPRING_PANEL`.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 4. Adaptive Responsive Primitives
|
|
64
|
+
|
|
65
|
+
Universal components gracefully adapt between mobile and desktop form factors:
|
|
66
|
+
|
|
67
|
+
| Mobile Primitive | Desktop Adaptation | Rationale |
|
|
68
|
+
| :--- | :--- | :--- |
|
|
69
|
+
| **Action Sheet** | Dropdown Menu / Popover | Mobile thumbs reach bottom edge easily; desktop users click near mouse cursor. |
|
|
70
|
+
| **Bottom Sheet** | Center Modal Dialog | Bottom sheet fills mobile viewport ergonomically; modals center on widescreen displays. |
|
|
71
|
+
| **Segmented Control** | Tabs / Underline Bar | Touch thumbs tap wide pills; desktop users navigate compact tab rows. |
|
|
72
|
+
| **Full-Screen Search** | Command Palette (⌘K) | Mobile keyboards need full screen space; desktop keyboards favor centered palettes. |
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Action Sheet"
|
|
3
|
+
description: "Universal mobile action sheet menu with drag gesture dismissal, rubber-band resistance, haptic feedback, and desktop center modal fallback."
|
|
4
|
+
category: "Blocks"
|
|
5
|
+
publishedAt: "2026-09-05"
|
|
6
|
+
updatedAt: "2026-09-05"
|
|
7
|
+
documentation: "references/motion/action-sheet.md"
|
|
8
|
+
markdown: "references/motion/action-sheet.md"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Action Sheet
|
|
13
|
+
|
|
14
|
+
> Universal mobile action sheet menu with drag gesture dismissal, rubber-band resistance, haptic feedback, and desktop center modal fallback. Inspired by Expo and Apple HIG.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install via motion-ui skill CLI:
|
|
20
|
+
python scripts/install-component.py action-sheet --dest ./src
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- `clsx`
|
|
26
|
+
- `lucide-react`
|
|
27
|
+
- `motion`
|
|
28
|
+
- `react`
|
|
29
|
+
- `react-dom`
|
|
30
|
+
- `tailwind-merge`
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
"use client";
|
|
36
|
+
|
|
37
|
+
import { ActionSheet, type ActionSheetAction } from "@/components/motion/action-sheet";
|
|
38
|
+
import { Copy, Share2, Trash2 } from "lucide-react";
|
|
39
|
+
import { useState } from "react";
|
|
40
|
+
|
|
41
|
+
export function ActionSheetExample() {
|
|
42
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
43
|
+
|
|
44
|
+
const actions: ActionSheetAction[] = [
|
|
45
|
+
{
|
|
46
|
+
id: "share",
|
|
47
|
+
label: "Share Workflow Link",
|
|
48
|
+
icon: <Share2 className="size-4" />,
|
|
49
|
+
onClick: () => console.log("Shared"),
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "copy",
|
|
53
|
+
label: "Copy Configuration JSON",
|
|
54
|
+
icon: <Copy className="size-4" />,
|
|
55
|
+
onClick: () => console.log("Copied"),
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: "delete",
|
|
59
|
+
label: "Delete Project",
|
|
60
|
+
icon: <Trash2 className="size-4" />,
|
|
61
|
+
destructive: true,
|
|
62
|
+
onClick: () => console.log("Deleted"),
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<div className="p-8">
|
|
68
|
+
<button
|
|
69
|
+
type="button"
|
|
70
|
+
onClick={() => setIsOpen(true)}
|
|
71
|
+
className="px-4 py-2.5 rounded-xl bg-primary text-primary-foreground text-xs font-semibold"
|
|
72
|
+
>
|
|
73
|
+
Open Action Sheet
|
|
74
|
+
</button>
|
|
75
|
+
|
|
76
|
+
<ActionSheet
|
|
77
|
+
isOpen={isOpen}
|
|
78
|
+
onClose={() => setIsOpen(false)}
|
|
79
|
+
title="Project Options"
|
|
80
|
+
description="Choose an action to perform on this workspace."
|
|
81
|
+
actions={actions}
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Props
|
|
89
|
+
|
|
90
|
+
| Prop | Type | Default | Description |
|
|
91
|
+
| :--- | :--- | :--- | :--- |
|
|
92
|
+
| `isOpen` | `boolean` | required | Visibility state of the action sheet overlay. |
|
|
93
|
+
| `onClose` | `() => void` | required | Callback triggered on backdrop tap, Escape key, or drag dismissal. |
|
|
94
|
+
| `title` | `string` | `undefined` | Header title displayed above action items. |
|
|
95
|
+
| `description` | `string` | `undefined` | Explanatory subtitle below header title. |
|
|
96
|
+
| `actions` | `ActionSheetAction[]` | required | List of action buttons with labels, icons, and destructive flags. |
|
|
97
|
+
| `cancelLabel` | `string` | `"Cancel"` | Label text on the bottom dismissal button. |
|
|
98
|
+
| `className` | `string` | `undefined` | Custom styling overrides merged via `cn()`. |
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Action Swap"
|
|
3
|
+
description: "CTA button and slot primitives for swapping text and icons with blur motion."
|
|
4
|
+
category: "Components"
|
|
5
|
+
publishedAt: "2026-06-10"
|
|
6
|
+
updatedAt: "2026-06-28"
|
|
7
|
+
documentation: "references/motion/action-swap.md"
|
|
8
|
+
markdown: "references/motion/action-swap.md"
|
|
9
|
+
license: "MIT"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Action Swap
|
|
13
|
+
|
|
14
|
+
> CTA button and slot primitives for swapping text and icons with blur motion.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
### Cascade
|
|
19
|
+
|
|
20
|
+
Letter-by-letter slot roll — the old label's letters drop away as the new ones land, left to right.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Install via motion-ui skill CLI:
|
|
24
|
+
python scripts/install-component.py action-swap-cascade --dest ./src
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Blur
|
|
28
|
+
|
|
29
|
+
Copy-button style swap with blur, opacity and scale.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Install via motion-ui skill CLI:
|
|
33
|
+
python scripts/install-component.py action-swap-blur --dest ./src
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Roll
|
|
37
|
+
|
|
38
|
+
The next text or icon rolls in from below with blur.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Install via motion-ui skill CLI:
|
|
42
|
+
python scripts/install-component.py action-swap-roll --dest ./src
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Dependencies
|
|
46
|
+
|
|
47
|
+
- `clsx`
|
|
48
|
+
- `lucide-react`
|
|
49
|
+
- `motion`
|
|
50
|
+
- `react`
|
|
51
|
+
- `tailwind-merge`
|
|
52
|
+
|
|
53
|
+
## Usage
|
|
54
|
+
|
|
55
|
+
### Cascade usage
|
|
56
|
+
|
|
57
|
+
Letter-by-letter slot roll — the old label's letters drop away as the new ones land, left to right.
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
"use client";
|
|
61
|
+
|
|
62
|
+
import { Check, Copy } from "lucide-react";
|
|
63
|
+
import {
|
|
64
|
+
ActionSwapCascadeButton,
|
|
65
|
+
type ActionSwapItem,
|
|
66
|
+
} from "@/components/motion/action-swap-cascade";
|
|
67
|
+
|
|
68
|
+
const CTA_ITEMS: ActionSwapItem[] = [
|
|
69
|
+
{
|
|
70
|
+
id: "copy",
|
|
71
|
+
label: "Copy link",
|
|
72
|
+
icon: <Copy className="h-4 w-4" />,
|
|
73
|
+
ariaLabel: "Copy link",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: "copied",
|
|
77
|
+
label: "Copied!",
|
|
78
|
+
icon: <Check className="h-4 w-4" />,
|
|
79
|
+
ariaLabel: "Copied",
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
export function ActionSwapCascadePreview() {
|
|
84
|
+
return (
|
|
85
|
+
<div className="flex w-full justify-center">
|
|
86
|
+
<ActionSwapCascadeButton items={CTA_ITEMS} variant="primary" />
|
|
87
|
+
</div>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Blur usage
|
|
93
|
+
|
|
94
|
+
Copy-button style swap with blur, opacity and scale.
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
"use client";
|
|
98
|
+
|
|
99
|
+
import { Check, Copy, Moon, Sun } from "lucide-react";
|
|
100
|
+
import { useState } from "react";
|
|
101
|
+
import {
|
|
102
|
+
ActionSwapBlurButton,
|
|
103
|
+
type ActionSwapItem,
|
|
104
|
+
} from "@/components/motion/action-swap-blur";
|
|
105
|
+
|
|
106
|
+
const TEXT_ITEMS: ActionSwapItem[] = [
|
|
107
|
+
{ id: "copy", label: "Copy" },
|
|
108
|
+
{ id: "copied", label: "Copied" },
|
|
109
|
+
];
|
|
110
|
+
|
|
111
|
+
const ICON_ITEMS: ActionSwapItem[] = [
|
|
112
|
+
{
|
|
113
|
+
id: "light",
|
|
114
|
+
label: "Light",
|
|
115
|
+
icon: <Sun className="h-4 w-4" />,
|
|
116
|
+
ariaLabel: "Use light theme",
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: "dark",
|
|
120
|
+
label: "Dark",
|
|
121
|
+
icon: <Moon className="h-4 w-4" />,
|
|
122
|
+
ariaLabel: "Use dark theme",
|
|
123
|
+
},
|
|
124
|
+
];
|
|
125
|
+
|
|
126
|
+
const CTA_ITEMS: ActionSwapItem[] = [
|
|
127
|
+
{
|
|
128
|
+
id: "copy",
|
|
129
|
+
label: "Copy link",
|
|
130
|
+
icon: <Copy className="h-4 w-4" />,
|
|
131
|
+
ariaLabel: "Copy link",
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: "copied",
|
|
135
|
+
label: "Copied",
|
|
136
|
+
icon: <Check className="h-4 w-4" />,
|
|
137
|
+
ariaLabel: "Copied",
|
|
138
|
+
},
|
|
139
|
+
];
|
|
140
|
+
|
|
141
|
+
export function ActionSwapBlurPreview() {
|
|
142
|
+
const [textValue, setTextValue] = useState(TEXT_ITEMS[0]?.id);
|
|
143
|
+
const [iconValue, setIconValue] = useState(ICON_ITEMS[0]?.id);
|
|
144
|
+
const [ctaValue, setCtaValue] = useState(CTA_ITEMS[0]?.id);
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
<div className="flex flex-wrap items-center justify-center gap-3">
|
|
148
|
+
<ActionSwapBlurButton
|
|
149
|
+
items={TEXT_ITEMS}
|
|
150
|
+
value={textValue}
|
|
151
|
+
onValueChange={setTextValue}
|
|
152
|
+
variant="secondary"
|
|
153
|
+
/>
|
|
154
|
+
<ActionSwapBlurButton
|
|
155
|
+
items={ICON_ITEMS}
|
|
156
|
+
value={iconValue}
|
|
157
|
+
onValueChange={setIconValue}
|
|
158
|
+
variant="outline"
|
|
159
|
+
size="icon"
|
|
160
|
+
iconOnly
|
|
161
|
+
/>
|
|
162
|
+
<ActionSwapBlurButton
|
|
163
|
+
items={CTA_ITEMS}
|
|
164
|
+
value={ctaValue}
|
|
165
|
+
onValueChange={setCtaValue}
|
|
166
|
+
variant="primary"
|
|
167
|
+
/>
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Roll usage
|
|
174
|
+
|
|
175
|
+
The next text or icon rolls in from below with blur.
|
|
176
|
+
|
|
177
|
+
```tsx
|
|
178
|
+
"use client";
|
|
179
|
+
|
|
180
|
+
import { Moon, Send, Sparkles, Sun } from "lucide-react";
|
|
181
|
+
import { useState } from "react";
|
|
182
|
+
import {
|
|
183
|
+
type ActionSwapItem,
|
|
184
|
+
ActionSwapRollButton,
|
|
185
|
+
} from "@/components/motion/action-swap-roll";
|
|
186
|
+
|
|
187
|
+
const TEXT_ITEMS: ActionSwapItem[] = [
|
|
188
|
+
{ id: "idle", label: "Save" },
|
|
189
|
+
{ id: "done", label: "Saved" },
|
|
190
|
+
];
|
|
191
|
+
|
|
192
|
+
const ICON_ITEMS: ActionSwapItem[] = [
|
|
193
|
+
{
|
|
194
|
+
id: "light",
|
|
195
|
+
label: "Light",
|
|
196
|
+
icon: <Sun className="h-4 w-4" />,
|
|
197
|
+
ariaLabel: "Use light theme",
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
id: "dark",
|
|
201
|
+
label: "Dark",
|
|
202
|
+
icon: <Moon className="h-4 w-4" />,
|
|
203
|
+
ariaLabel: "Use dark theme",
|
|
204
|
+
},
|
|
205
|
+
];
|
|
206
|
+
|
|
207
|
+
const CTA_ITEMS: ActionSwapItem[] = [
|
|
208
|
+
{
|
|
209
|
+
id: "send",
|
|
210
|
+
label: "Send invite",
|
|
211
|
+
icon: <Send className="h-4 w-4" />,
|
|
212
|
+
ariaLabel: "Send invite",
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: "sent",
|
|
216
|
+
label: "Invite sent",
|
|
217
|
+
icon: <Sparkles className="h-4 w-4" />,
|
|
218
|
+
ariaLabel: "Invite sent",
|
|
219
|
+
},
|
|
220
|
+
];
|
|
221
|
+
|
|
222
|
+
export function ActionSwapRollPreview() {
|
|
223
|
+
const [textValue, setTextValue] = useState(TEXT_ITEMS[0]?.id);
|
|
224
|
+
const [iconValue, setIconValue] = useState(ICON_ITEMS[0]?.id);
|
|
225
|
+
const [ctaValue, setCtaValue] = useState(CTA_ITEMS[0]?.id);
|
|
226
|
+
|
|
227
|
+
return (
|
|
228
|
+
<div className="flex flex-wrap items-center justify-center gap-3">
|
|
229
|
+
<ActionSwapRollButton
|
|
230
|
+
items={TEXT_ITEMS}
|
|
231
|
+
value={textValue}
|
|
232
|
+
onValueChange={setTextValue}
|
|
233
|
+
variant="secondary"
|
|
234
|
+
/>
|
|
235
|
+
<ActionSwapRollButton
|
|
236
|
+
items={ICON_ITEMS}
|
|
237
|
+
value={iconValue}
|
|
238
|
+
onValueChange={setIconValue}
|
|
239
|
+
variant="outline"
|
|
240
|
+
size="icon"
|
|
241
|
+
iconOnly
|
|
242
|
+
/>
|
|
243
|
+
<ActionSwapRollButton
|
|
244
|
+
items={CTA_ITEMS}
|
|
245
|
+
value={ctaValue}
|
|
246
|
+
onValueChange={setCtaValue}
|
|
247
|
+
variant="primary"
|
|
248
|
+
/>
|
|
249
|
+
</div>
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## API Reference
|
|
255
|
+
|
|
256
|
+
### ActionSwapCascadeButton
|
|
257
|
+
|
|
258
|
+
| Prop | Type | Default | Required | Description |
|
|
259
|
+
| --- | --- | --- | --- | --- |
|
|
260
|
+
| `value` | `string` | — | No | — |
|
|
261
|
+
| `defaultValue` | `string` | — | No | — |
|
|
262
|
+
| `size` | `"icon" \| "sm" \| "md" \| "lg"` | — | No | — |
|
|
263
|
+
| `className` | `string` | — | No | — |
|
|
264
|
+
| `variant` | `"outline" \| "primary" \| "secondary" \| "ghost"` | — | No | — |
|
|
265
|
+
| `items` | `ActionSwapItem[]` | — | Yes | — |
|
|
266
|
+
| `onValueChange` | `((value: string, item: ActionSwapItem) => void)` | — | No | — |
|
|
267
|
+
| `iconOnly` | `boolean` | — | No | — |
|
|
268
|
+
| `cycle` | `boolean` | — | No | — |
|
|
269
|
+
|
|
270
|
+
### ActionSwapCascadeText
|
|
271
|
+
|
|
272
|
+
| Prop | Type | Default | Required | Description |
|
|
273
|
+
| --- | --- | --- | --- | --- |
|
|
274
|
+
| `value` | `string` | — | Yes | — |
|
|
275
|
+
| `className` | `string` | — | No | — |
|
|
276
|
+
|
|
277
|
+
### ActionSwapCascadeIcon
|
|
278
|
+
|
|
279
|
+
| Prop | Type | Default | Required | Description |
|
|
280
|
+
| --- | --- | --- | --- | --- |
|
|
281
|
+
| `value` | `string` | — | Yes | — |
|
|
282
|
+
| `className` | `string` | — | No | — |
|
|
283
|
+
|
|
284
|
+
### ActionSwapBlurButton
|
|
285
|
+
|
|
286
|
+
| Prop | Type | Default | Required | Description |
|
|
287
|
+
| --- | --- | --- | --- | --- |
|
|
288
|
+
| `value` | `string` | — | No | — |
|
|
289
|
+
| `defaultValue` | `string` | — | No | — |
|
|
290
|
+
| `size` | `"icon" \| "sm" \| "md" \| "lg"` | — | No | — |
|
|
291
|
+
| `className` | `string` | — | No | — |
|
|
292
|
+
| `variant` | `"outline" \| "primary" \| "secondary" \| "ghost"` | — | No | — |
|
|
293
|
+
| `items` | `ActionSwapItem[]` | — | Yes | — |
|
|
294
|
+
| `onValueChange` | `((value: string, item: ActionSwapItem) => void)` | — | No | — |
|
|
295
|
+
| `iconOnly` | `boolean` | — | No | — |
|
|
296
|
+
| `cycle` | `boolean` | — | No | — |
|
|
297
|
+
|
|
298
|
+
### ActionSwapBlurText
|
|
299
|
+
|
|
300
|
+
| Prop | Type | Default | Required | Description |
|
|
301
|
+
| --- | --- | --- | --- | --- |
|
|
302
|
+
| `value` | `string` | — | Yes | — |
|
|
303
|
+
| `className` | `string` | — | No | — |
|
|
304
|
+
|
|
305
|
+
### ActionSwapBlurIcon
|
|
306
|
+
|
|
307
|
+
| Prop | Type | Default | Required | Description |
|
|
308
|
+
| --- | --- | --- | --- | --- |
|
|
309
|
+
| `value` | `string` | — | Yes | — |
|
|
310
|
+
| `className` | `string` | — | No | — |
|
|
311
|
+
|
|
312
|
+
### ActionSwapRollButton
|
|
313
|
+
|
|
314
|
+
| Prop | Type | Default | Required | Description |
|
|
315
|
+
| --- | --- | --- | --- | --- |
|
|
316
|
+
| `value` | `string` | — | No | — |
|
|
317
|
+
| `defaultValue` | `string` | — | No | — |
|
|
318
|
+
| `size` | `"icon" \| "sm" \| "md" \| "lg"` | — | No | — |
|
|
319
|
+
| `className` | `string` | — | No | — |
|
|
320
|
+
| `variant` | `"outline" \| "primary" \| "secondary" \| "ghost"` | — | No | — |
|
|
321
|
+
| `items` | `ActionSwapItem[]` | — | Yes | — |
|
|
322
|
+
| `onValueChange` | `((value: string, item: ActionSwapItem) => void)` | — | No | — |
|
|
323
|
+
| `iconOnly` | `boolean` | — | No | — |
|
|
324
|
+
| `cycle` | `boolean` | — | No | — |
|
|
325
|
+
|
|
326
|
+
### ActionSwapRollText
|
|
327
|
+
|
|
328
|
+
| Prop | Type | Default | Required | Description |
|
|
329
|
+
| --- | --- | --- | --- | --- |
|
|
330
|
+
| `value` | `string` | — | Yes | — |
|
|
331
|
+
| `className` | `string` | — | No | — |
|
|
332
|
+
|
|
333
|
+
### ActionSwapRollIcon
|
|
334
|
+
|
|
335
|
+
| Prop | Type | Default | Required | Description |
|
|
336
|
+
| --- | --- | --- | --- | --- |
|
|
337
|
+
| `value` | `string` | — | Yes | — |
|
|
338
|
+
| `className` | `string` | — | No | — |
|
|
339
|
+
|