@mova-ui/react 0.1.0 → 0.4.1
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/README.md +70 -21
- package/bin/mova.mjs +38 -12
- package/dist/catalog/components/AnimatedButton.d.ts +9 -0
- package/dist/catalog/components/AnimatedButton.js +346 -0
- package/dist/catalog/components/IconSwap.d.ts +6 -0
- package/dist/catalog/components/IconSwap.js +9 -0
- package/dist/catalog/components/InViewRender.d.ts +4 -0
- package/dist/catalog/components/InViewRender.js +14 -0
- package/dist/catalog/components/PageTransitionCard.d.ts +9 -0
- package/dist/catalog/components/PageTransitionCard.js +110 -0
- package/dist/catalog/components/PageTransitionModal.d.ts +10 -0
- package/dist/catalog/components/PageTransitionModal.js +180 -0
- package/dist/catalog/components/PageTransitionOverlay.d.ts +9 -0
- package/dist/catalog/components/PageTransitionOverlay.js +7 -0
- package/dist/catalog/components/cards/CardArc5.d.ts +14 -0
- package/dist/catalog/components/cards/CardArc5.js +76 -0
- package/dist/catalog/components/cards/CardArc7.d.ts +14 -0
- package/dist/catalog/components/cards/CardArc7.js +77 -0
- package/dist/catalog/components/cards/CardCarousel.d.ts +12 -0
- package/dist/catalog/components/cards/CardCarousel.js +139 -0
- package/dist/catalog/components/cards/CardCascadeStagger.d.ts +9 -0
- package/dist/catalog/components/cards/CardCascadeStagger.js +64 -0
- package/dist/catalog/components/cards/CardCornerFan.d.ts +12 -0
- package/dist/catalog/components/cards/CardCornerFan.js +66 -0
- package/dist/catalog/components/cards/CardCoverFlow.d.ts +12 -0
- package/dist/catalog/components/cards/CardCoverFlow.js +115 -0
- package/dist/catalog/components/cards/CardLinearSpread.d.ts +12 -0
- package/dist/catalog/components/cards/CardLinearSpread.js +62 -0
- package/dist/catalog/components/cards/CardLongArc5.d.ts +14 -0
- package/dist/catalog/components/cards/CardLongArc5.js +76 -0
- package/dist/catalog/components/cards/CardScatterSpread.d.ts +9 -0
- package/dist/catalog/components/cards/CardScatterSpread.js +69 -0
- package/dist/catalog/components/cards/CardStampArc.d.ts +14 -0
- package/dist/catalog/components/cards/CardStampArc.js +101 -0
- package/dist/catalog/components/cards/CardTimeMachine.d.ts +8 -0
- package/dist/catalog/components/cards/CardTimeMachine.js +182 -0
- package/dist/catalog/components/cards/CardWheelFan.d.ts +9 -0
- package/dist/catalog/components/cards/CardWheelFan.js +68 -0
- package/dist/catalog/components/cards/FocusBlur.d.ts +14 -0
- package/dist/catalog/components/cards/FocusBlur.js +7 -0
- package/dist/catalog/components/css-animations/Dock.d.ts +6 -0
- package/dist/catalog/components/css-animations/Dock.js +93 -0
- package/dist/catalog/components/css-animations/FocusBlur.d.ts +4 -0
- package/dist/catalog/components/css-animations/FocusBlur.js +35 -0
- package/dist/catalog/components/css-animations/FrequencySelector.d.ts +6 -0
- package/dist/catalog/components/css-animations/FrequencySelector.js +100 -0
- package/dist/catalog/components/css-animations/MediaBetweenText.d.ts +34 -0
- package/dist/catalog/components/css-animations/MediaBetweenText.js +125 -0
- package/dist/catalog/components/css-animations/ScrambleHover.d.ts +16 -0
- package/dist/catalog/components/css-animations/ScrambleHover.js +101 -0
- package/dist/catalog/components/css-animations/TabBar.d.ts +6 -0
- package/dist/catalog/components/css-animations/TabBar.js +57 -0
- package/dist/catalog/components/css-animations/whimsical/AppleLoaders.d.ts +9 -0
- package/dist/catalog/components/css-animations/whimsical/AppleLoaders.js +57 -0
- package/dist/catalog/components/css-animations/whimsical/Area1.d.ts +7 -0
- package/dist/catalog/components/css-animations/whimsical/Area1.js +56 -0
- package/dist/catalog/components/css-animations/whimsical/Area6.d.ts +7 -0
- package/dist/catalog/components/css-animations/whimsical/Area6.js +53 -0
- package/dist/catalog/components/css-animations/whimsical/Bookmark.d.ts +7 -0
- package/dist/catalog/components/css-animations/whimsical/Bookmark.js +183 -0
- package/dist/catalog/components/css-animations/whimsical/ConceptTrios1.d.ts +37 -0
- package/dist/catalog/components/css-animations/whimsical/ConceptTrios1.js +253 -0
- package/dist/catalog/components/css-animations/whimsical/ConceptTrios2.d.ts +37 -0
- package/dist/catalog/components/css-animations/whimsical/ConceptTrios2.js +237 -0
- package/dist/catalog/components/css-animations/whimsical/ConceptTrios3.d.ts +73 -0
- package/dist/catalog/components/css-animations/whimsical/ConceptTrios3.js +441 -0
- package/dist/catalog/components/css-animations/whimsical/Curtain.d.ts +7 -0
- package/dist/catalog/components/css-animations/whimsical/Curtain.js +155 -0
- package/dist/catalog/components/css-animations/whimsical/Kakikaki.d.ts +7 -0
- package/dist/catalog/components/css-animations/whimsical/Kakikaki.js +67 -0
- package/dist/catalog/components/css-animations/whimsical/KineticTensionCapsule.d.ts +7 -0
- package/dist/catalog/components/css-animations/whimsical/KineticTensionCapsule.js +82 -0
- package/dist/catalog/components/css-animations/whimsical/MatrixGridLoader.d.ts +5 -0
- package/dist/catalog/components/css-animations/whimsical/MatrixGridLoader.js +88 -0
- package/dist/catalog/components/css-animations/whimsical/RedesignedPhysicsTrios.d.ts +103 -0
- package/dist/catalog/components/css-animations/whimsical/RedesignedPhysicsTrios.js +607 -0
- package/dist/catalog/components/css-animations/whimsical/Tissue.d.ts +7 -0
- package/dist/catalog/components/css-animations/whimsical/Tissue.js +111 -0
- package/dist/catalog/components/css-animations/whimsical/Tsumiki.d.ts +8 -0
- package/dist/catalog/components/css-animations/whimsical/Tsumiki.js +83 -0
- package/dist/catalog/components/css-animations/whimsical/WhimsicalVariations.d.ts +37 -0
- package/dist/catalog/components/css-animations/whimsical/WhimsicalVariations.js +325 -0
- package/dist/catalog/components/css-animations/whimsical/YuiPhysicsExperiments.d.ts +37 -0
- package/dist/catalog/components/css-animations/whimsical/YuiPhysicsExperiments.js +247 -0
- package/dist/catalog/components/css-animations/yui-components/RedesignedUiTrios.d.ts +19 -0
- package/dist/catalog/components/css-animations/yui-components/RedesignedUiTrios.js +174 -0
- package/dist/catalog/components/css-animations/yui-components/UiKitTrios.d.ts +19 -0
- package/dist/catalog/components/css-animations/yui-components/UiKitTrios.js +147 -0
- package/dist/catalog/components/css-animations/yui-components/YuiUiKit1.d.ts +29 -0
- package/dist/catalog/components/css-animations/yui-components/YuiUiKit1.js +317 -0
- package/dist/catalog/components/css-animations/yui-components/YuiUiKit2.d.ts +34 -0
- package/dist/catalog/components/css-animations/yui-components/YuiUiKit2.js +356 -0
- package/dist/catalog/components/dither-charts/ActivityHeatmap.d.ts +5 -0
- package/dist/catalog/components/dither-charts/ActivityHeatmap.js +8 -0
- package/dist/catalog/components/dither-charts/ChartCard.d.ts +2 -0
- package/dist/catalog/components/dither-charts/ChartCard.js +8 -0
- package/dist/catalog/components/dither-charts/DeviceUsageChart.d.ts +5 -0
- package/dist/catalog/components/dither-charts/DeviceUsageChart.js +8 -0
- package/dist/catalog/components/dither-charts/DitherBarChart.d.ts +5 -0
- package/dist/catalog/components/dither-charts/DitherBarChart.js +148 -0
- package/dist/catalog/components/dither-charts/DitherBook.d.ts +23 -0
- package/dist/catalog/components/dither-charts/DitherBook.js +352 -0
- package/dist/catalog/components/dither-charts/DitherChartsGrid.d.ts +9 -0
- package/dist/catalog/components/dither-charts/DitherChartsGrid.js +108 -0
- package/dist/catalog/components/dither-charts/DitherDonutChart.d.ts +7 -0
- package/dist/catalog/components/dither-charts/DitherDonutChart.js +8 -0
- package/dist/catalog/components/dither-charts/DitherFunnelChart.d.ts +5 -0
- package/dist/catalog/components/dither-charts/DitherFunnelChart.js +8 -0
- package/dist/catalog/components/dither-charts/DitherGrowthChart.d.ts +7 -0
- package/dist/catalog/components/dither-charts/DitherGrowthChart.js +8 -0
- package/dist/catalog/components/dither-charts/DitherHeatmapGrid.d.ts +5 -0
- package/dist/catalog/components/dither-charts/DitherHeatmapGrid.js +115 -0
- package/dist/catalog/components/dither-charts/DitherRadialChart.d.ts +5 -0
- package/dist/catalog/components/dither-charts/DitherRadialChart.js +114 -0
- package/dist/catalog/components/dither-charts/DitherScatterChart.d.ts +5 -0
- package/dist/catalog/components/dither-charts/DitherScatterChart.js +151 -0
- package/dist/catalog/components/dither-charts/DitherSparklineMatrix.d.ts +5 -0
- package/dist/catalog/components/dither-charts/DitherSparklineMatrix.js +89 -0
- package/dist/catalog/components/dither-charts/DitherStackedChart.d.ts +7 -0
- package/dist/catalog/components/dither-charts/DitherStackedChart.js +8 -0
- package/dist/catalog/components/dither-charts/MembersGrowthChart.d.ts +2 -0
- package/dist/catalog/components/dither-charts/MembersGrowthChart.js +8 -0
- package/dist/catalog/components/dither-charts/PaymentsChart.d.ts +2 -0
- package/dist/catalog/components/dither-charts/PaymentsChart.js +8 -0
- package/dist/catalog/components/dither-charts/RevenueLineChart.d.ts +5 -0
- package/dist/catalog/components/dither-charts/RevenueLineChart.js +8 -0
- package/dist/catalog/components/dither-charts/ServerGauge.d.ts +5 -0
- package/dist/catalog/components/dither-charts/ServerGauge.js +8 -0
- package/dist/catalog/components/dither-charts/SimpleCompExtracted.d.ts +6 -0
- package/dist/catalog/components/dither-charts/SimpleCompExtracted.js +423 -0
- package/dist/catalog/components/dither-charts/StorageUsageChart.d.ts +5 -0
- package/dist/catalog/components/dither-charts/StorageUsageChart.js +8 -0
- package/dist/catalog/components/dither-charts/TrafficBubble.d.ts +5 -0
- package/dist/catalog/components/dither-charts/TrafficBubble.js +8 -0
- package/dist/catalog/components/dither-charts/UptimeChart.d.ts +5 -0
- package/dist/catalog/components/dither-charts/UptimeChart.js +8 -0
- package/dist/catalog/components/dither-charts/lib/ditherPatterns.d.ts +7 -0
- package/dist/catalog/components/dither-charts/lib/ditherPatterns.js +107 -0
- package/dist/catalog/components/dither-charts/lib/recharts-legend.d.ts +8 -0
- package/dist/catalog/components/dither-charts/lib/recharts-legend.js +40 -0
- package/dist/catalog/components/dither-charts/lib/recharts-tooltip.d.ts +10 -0
- package/dist/catalog/components/dither-charts/lib/recharts-tooltip.js +7 -0
- package/dist/catalog/components/dither-charts/lib/utils.d.ts +3 -0
- package/dist/catalog/components/dither-charts/lib/utils.js +7 -0
- package/dist/catalog/components/forms/AnimatedFormElement.d.ts +8 -0
- package/dist/catalog/components/forms/AnimatedFormElement.js +412 -0
- package/dist/catalog/components/metrics/AnimatedMetricCard.d.ts +8 -0
- package/dist/catalog/components/metrics/AnimatedMetricCard.js +1049 -0
- package/dist/catalog/components/metrics/Budget.d.ts +1 -0
- package/dist/catalog/components/metrics/Budget.js +35 -0
- package/dist/catalog/components/metrics/CacheStatsCard.d.ts +1 -0
- package/dist/catalog/components/metrics/CacheStatsCard.js +88 -0
- package/dist/catalog/components/metrics/CourseProgressCard.d.ts +1 -0
- package/dist/catalog/components/metrics/CourseProgressCard.js +86 -0
- package/dist/catalog/components/metrics/CreditScoreCards.d.ts +1 -0
- package/dist/catalog/components/metrics/CreditScoreCards.js +139 -0
- package/dist/catalog/components/metrics/FeedbackCard.d.ts +1 -0
- package/dist/catalog/components/metrics/FeedbackCard.js +59 -0
- package/dist/catalog/components/metrics/FinanceDashboard.d.ts +1 -0
- package/dist/catalog/components/metrics/FinanceDashboard.js +164 -0
- package/dist/catalog/components/metrics/Growth.d.ts +1 -0
- package/dist/catalog/components/metrics/Growth.js +40 -0
- package/dist/catalog/components/metrics/GrowthCalendar.d.ts +1 -0
- package/dist/catalog/components/metrics/GrowthCalendar.js +87 -0
- package/dist/catalog/components/metrics/HealthCards.d.ts +1 -0
- package/dist/catalog/components/metrics/HealthCards.js +244 -0
- package/dist/catalog/components/metrics/MarketingCards.d.ts +1 -0
- package/dist/catalog/components/metrics/MarketingCards.js +70 -0
- package/dist/catalog/components/metrics/NetworkTelemetry.d.ts +1 -0
- package/dist/catalog/components/metrics/NetworkTelemetry.js +198 -0
- package/dist/catalog/components/metrics/NoiseCards.d.ts +1 -0
- package/dist/catalog/components/metrics/NoiseCards.js +61 -0
- package/dist/catalog/components/metrics/OverviewChart.d.ts +1 -0
- package/dist/catalog/components/metrics/OverviewChart.js +69 -0
- package/dist/catalog/components/metrics/ProgressIndicator.d.ts +1 -0
- package/dist/catalog/components/metrics/ProgressIndicator.js +35 -0
- package/dist/catalog/components/metrics/PromptsCard.d.ts +1 -0
- package/dist/catalog/components/metrics/PromptsCard.js +29 -0
- package/dist/catalog/components/metrics/RealTimeAlerts.d.ts +1 -0
- package/dist/catalog/components/metrics/RealTimeAlerts.js +64 -0
- package/dist/catalog/components/metrics/RunningStatsCard.d.ts +1 -0
- package/dist/catalog/components/metrics/RunningStatsCard.js +41 -0
- package/dist/catalog/components/metrics/SalesDashboard.d.ts +1 -0
- package/dist/catalog/components/metrics/SalesDashboard.js +156 -0
- package/dist/catalog/components/metrics/SalesOverview.d.ts +1 -0
- package/dist/catalog/components/metrics/SalesOverview.js +71 -0
- package/dist/catalog/components/metrics/SavingsCards.d.ts +1 -0
- package/dist/catalog/components/metrics/SavingsCards.js +118 -0
- package/dist/catalog/components/metrics/ServerPerformance.d.ts +1 -0
- package/dist/catalog/components/metrics/ServerPerformance.js +26 -0
- package/dist/catalog/components/metrics/StatusCards.d.ts +1 -0
- package/dist/catalog/components/metrics/StatusCards.js +165 -0
- package/dist/catalog/components/metrics/StockChartCard.d.ts +1 -0
- package/dist/catalog/components/metrics/StockChartCard.js +122 -0
- package/dist/catalog/components/metrics/SystemMetricsCard.d.ts +1 -0
- package/dist/catalog/components/metrics/SystemMetricsCard.js +129 -0
- package/dist/catalog/components/metrics/TimerCard.d.ts +1 -0
- package/dist/catalog/components/metrics/TimerCard.js +35 -0
- package/dist/catalog/components/metrics/UserMetrics.d.ts +1 -0
- package/dist/catalog/components/metrics/UserMetrics.js +128 -0
- package/dist/catalog/components/metrics/UsersChartCard.d.ts +1 -0
- package/dist/catalog/components/metrics/UsersChartCard.js +111 -0
- package/dist/catalog/components/metrics/VisitorsChartCard.d.ts +1 -0
- package/dist/catalog/components/metrics/VisitorsChartCard.js +178 -0
- package/dist/catalog/components/mono-charts/GitHubActivity.d.ts +30 -0
- package/dist/catalog/components/mono-charts/GitHubActivity.js +547 -0
- package/dist/catalog/components/mono-charts/MonoActivityHeatmap.d.ts +14 -0
- package/dist/catalog/components/mono-charts/MonoActivityHeatmap.js +170 -0
- package/dist/catalog/components/mono-charts/MonoRoundedAreaChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedAreaChart.js +107 -0
- package/dist/catalog/components/mono-charts/MonoRoundedBarChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedBarChart.js +121 -0
- package/dist/catalog/components/mono-charts/MonoRoundedBubbleChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedBubbleChart.js +67 -0
- package/dist/catalog/components/mono-charts/MonoRoundedBulletChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedBulletChart.js +64 -0
- package/dist/catalog/components/mono-charts/MonoRoundedCandlestickChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedCandlestickChart.js +76 -0
- package/dist/catalog/components/mono-charts/MonoRoundedComposedChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedComposedChart.js +117 -0
- package/dist/catalog/components/mono-charts/MonoRoundedDonutChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedDonutChart.js +97 -0
- package/dist/catalog/components/mono-charts/MonoRoundedFunnelChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedFunnelChart.js +65 -0
- package/dist/catalog/components/mono-charts/MonoRoundedGaugeArc.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedGaugeArc.js +64 -0
- package/dist/catalog/components/mono-charts/MonoRoundedHeatmapChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedHeatmapChart.js +56 -0
- package/dist/catalog/components/mono-charts/MonoRoundedKpiCardChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedKpiCardChart.js +61 -0
- package/dist/catalog/components/mono-charts/MonoRoundedLineChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedLineChart.js +142 -0
- package/dist/catalog/components/mono-charts/MonoRoundedMeterChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedMeterChart.js +68 -0
- package/dist/catalog/components/mono-charts/MonoRoundedPolarChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedPolarChart.js +67 -0
- package/dist/catalog/components/mono-charts/MonoRoundedPyramidChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedPyramidChart.js +52 -0
- package/dist/catalog/components/mono-charts/MonoRoundedRadarChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedRadarChart.js +70 -0
- package/dist/catalog/components/mono-charts/MonoRoundedRadialBarGroup.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedRadialBarGroup.js +69 -0
- package/dist/catalog/components/mono-charts/MonoRoundedRadialGaugeChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedRadialGaugeChart.js +68 -0
- package/dist/catalog/components/mono-charts/MonoRoundedRangeChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedRangeChart.js +77 -0
- package/dist/catalog/components/mono-charts/MonoRoundedSankeyChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedSankeyChart.js +66 -0
- package/dist/catalog/components/mono-charts/MonoRoundedScatterChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedScatterChart.js +82 -0
- package/dist/catalog/components/mono-charts/MonoRoundedSparklineChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedSparklineChart.js +73 -0
- package/dist/catalog/components/mono-charts/MonoRoundedStackedBarChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedStackedBarChart.js +63 -0
- package/dist/catalog/components/mono-charts/MonoRoundedStepChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedStepChart.js +72 -0
- package/dist/catalog/components/mono-charts/MonoRoundedStreamChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedStreamChart.js +98 -0
- package/dist/catalog/components/mono-charts/MonoRoundedTreemapChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedTreemapChart.js +56 -0
- package/dist/catalog/components/mono-charts/MonoRoundedWaterfallChart.d.ts +7 -0
- package/dist/catalog/components/mono-charts/MonoRoundedWaterfallChart.js +67 -0
- package/dist/catalog/components/simple-comp/ActivityHeatmap.d.ts +5 -0
- package/dist/catalog/components/simple-comp/ActivityHeatmap.js +7 -0
- package/dist/catalog/components/simple-comp/ChartCard.d.ts +2 -0
- package/dist/catalog/components/simple-comp/ChartCard.js +8 -0
- package/dist/catalog/components/simple-comp/DeviceUsageChart.d.ts +5 -0
- package/dist/catalog/components/simple-comp/DeviceUsageChart.js +7 -0
- package/dist/catalog/components/simple-comp/DitherBarChart.d.ts +5 -0
- package/dist/catalog/components/simple-comp/DitherBarChart.js +148 -0
- package/dist/catalog/components/simple-comp/DitherBook.d.ts +23 -0
- package/dist/catalog/components/simple-comp/DitherBook.js +352 -0
- package/dist/catalog/components/simple-comp/DitherChartsGrid.d.ts +9 -0
- package/dist/catalog/components/simple-comp/DitherChartsGrid.js +107 -0
- package/dist/catalog/components/simple-comp/DitherDonutChart.d.ts +7 -0
- package/dist/catalog/components/simple-comp/DitherDonutChart.js +7 -0
- package/dist/catalog/components/simple-comp/DitherFunnelChart.d.ts +5 -0
- package/dist/catalog/components/simple-comp/DitherFunnelChart.js +7 -0
- package/dist/catalog/components/simple-comp/DitherGrowthChart.d.ts +7 -0
- package/dist/catalog/components/simple-comp/DitherGrowthChart.js +7 -0
- package/dist/catalog/components/simple-comp/DitherHeatmapGrid.d.ts +5 -0
- package/dist/catalog/components/simple-comp/DitherHeatmapGrid.js +115 -0
- package/dist/catalog/components/simple-comp/DitherRadialChart.d.ts +5 -0
- package/dist/catalog/components/simple-comp/DitherRadialChart.js +114 -0
- package/dist/catalog/components/simple-comp/DitherScatterChart.d.ts +5 -0
- package/dist/catalog/components/simple-comp/DitherScatterChart.js +151 -0
- package/dist/catalog/components/simple-comp/DitherSparklineMatrix.d.ts +5 -0
- package/dist/catalog/components/simple-comp/DitherSparklineMatrix.js +89 -0
- package/dist/catalog/components/simple-comp/DitherStackedChart.d.ts +7 -0
- package/dist/catalog/components/simple-comp/DitherStackedChart.js +7 -0
- package/dist/catalog/components/simple-comp/MembersGrowthChart.d.ts +2 -0
- package/dist/catalog/components/simple-comp/MembersGrowthChart.js +8 -0
- package/dist/catalog/components/simple-comp/PaymentsChart.d.ts +2 -0
- package/dist/catalog/components/simple-comp/PaymentsChart.js +8 -0
- package/dist/catalog/components/simple-comp/RevenueLineChart.d.ts +5 -0
- package/dist/catalog/components/simple-comp/RevenueLineChart.js +7 -0
- package/dist/catalog/components/simple-comp/ServerGauge.d.ts +5 -0
- package/dist/catalog/components/simple-comp/ServerGauge.js +7 -0
- package/dist/catalog/components/simple-comp/SimpleCompExtracted.d.ts +6 -0
- package/dist/catalog/components/simple-comp/SimpleCompExtracted.js +423 -0
- package/dist/catalog/components/simple-comp/StorageUsageChart.d.ts +5 -0
- package/dist/catalog/components/simple-comp/StorageUsageChart.js +7 -0
- package/dist/catalog/components/simple-comp/TrafficBubble.d.ts +5 -0
- package/dist/catalog/components/simple-comp/TrafficBubble.js +7 -0
- package/dist/catalog/components/simple-comp/UptimeChart.d.ts +5 -0
- package/dist/catalog/components/simple-comp/UptimeChart.js +7 -0
- package/dist/catalog/components/simple-comp/lib/utils.d.ts +3 -0
- package/dist/catalog/components/simple-comp/lib/utils.js +7 -0
- package/dist/catalog/components/text/AnimatedText.d.ts +8 -0
- package/dist/catalog/components/text/AnimatedText.js +554 -0
- package/dist/catalog/components/toggles/AnimatedToggle.d.ts +8 -0
- package/dist/catalog/components/toggles/AnimatedToggle.js +243 -0
- package/dist/catalog/data/buttons.d.ts +14 -0
- package/dist/catalog/data/buttons.js +94 -0
- package/dist/catalog/data/ditherCharts.d.ts +12 -0
- package/dist/catalog/data/ditherCharts.js +11 -0
- package/dist/catalog/data/formElements.d.ts +9 -0
- package/dist/catalog/data/formElements.js +117 -0
- package/dist/catalog/data/installCommand.d.ts +3 -0
- package/dist/catalog/data/installCommand.js +10 -0
- package/dist/catalog/data/metrics.d.ts +10 -0
- package/dist/catalog/data/metrics.js +136 -0
- package/dist/catalog/data/supportedRegistryIds.d.ts +1 -0
- package/dist/catalog/data/supportedRegistryIds.js +7 -0
- package/dist/catalog/data/textAnimations.d.ts +10 -0
- package/dist/catalog/data/textAnimations.js +65 -0
- package/dist/catalog/data/toggles.d.ts +9 -0
- package/dist/catalog/data/toggles.js +96 -0
- package/dist/catalog/data/transitions.d.ts +11 -0
- package/dist/catalog/data/transitions.js +198 -0
- package/dist/catalog/hooks/useCanvasSetup.d.ts +25 -0
- package/dist/catalog/hooks/useCanvasSetup.js +7 -0
- package/dist/catalog/hooks/useIsMobile.d.ts +5 -0
- package/dist/catalog/hooks/useIsMobile.js +7 -0
- package/dist/catalog/hooks/useLoopFlg.d.ts +1 -0
- package/dist/catalog/hooks/useLoopFlg.js +7 -0
- package/dist/catalog/hooks/useWebHaptics.d.ts +4 -0
- package/dist/catalog/hooks/useWebHaptics.js +7 -0
- package/dist/catalog/utils/cn.d.ts +1 -0
- package/dist/catalog/utils/cn.js +7 -0
- package/dist/catalog-chunks/chunk-3QX6CASP.js +93 -0
- package/dist/catalog-chunks/chunk-3TYA5TCG.js +34 -0
- package/dist/catalog-chunks/chunk-4M7HZE4Z.js +107 -0
- package/dist/catalog-chunks/chunk-62CFYJEA.js +141 -0
- package/dist/catalog-chunks/chunk-7GU353UA.js +261 -0
- package/dist/catalog-chunks/chunk-7XF4PVBJ.js +85 -0
- package/dist/catalog-chunks/chunk-AJLUWL56.js +99 -0
- package/dist/catalog-chunks/chunk-B64DVBSK.js +105 -0
- package/dist/catalog-chunks/chunk-BSR45QIS.js +349 -0
- package/dist/catalog-chunks/chunk-E2GLS5WF.js +325 -0
- package/dist/catalog-chunks/chunk-EC4R54F3.js +35 -0
- package/dist/catalog-chunks/chunk-F47LIDB6.js +19 -0
- package/dist/catalog-chunks/chunk-FXF53HPE.js +476 -0
- package/dist/catalog-chunks/chunk-GDCQNKP7.js +45 -0
- package/dist/catalog-chunks/chunk-I4BVACNZ.js +349 -0
- package/dist/catalog-chunks/chunk-I5MYV6VF.js +248 -0
- package/dist/catalog-chunks/chunk-JSEX6PVP.js +84 -0
- package/dist/catalog-chunks/chunk-KN7YEZTH.js +294 -0
- package/dist/catalog-chunks/chunk-KRXJK3FG.js +19 -0
- package/dist/catalog-chunks/chunk-KTP5OAIN.js +17 -0
- package/dist/catalog-chunks/chunk-KYYXENHF.js +105 -0
- package/dist/catalog-chunks/chunk-M2O2SNWE.js +132 -0
- package/dist/catalog-chunks/chunk-NITEDAMY.js +325 -0
- package/dist/catalog-chunks/chunk-OTFAZXKB.js +8 -0
- package/dist/catalog-chunks/chunk-OVOLUMYF.js +452 -0
- package/dist/catalog-chunks/chunk-OWYADZUR.js +156 -0
- package/dist/catalog-chunks/chunk-PD47DK6W.js +100 -0
- package/dist/catalog-chunks/chunk-QITBAUBH.js +101 -0
- package/dist/catalog-chunks/chunk-QXWREUPI.js +56 -0
- package/dist/catalog-chunks/chunk-RKATUMDL.js +244 -0
- package/dist/catalog-chunks/chunk-S7UYABQK.js +99 -0
- package/dist/catalog-chunks/chunk-SIL53FHG.js +169 -0
- package/dist/catalog-chunks/chunk-SWPGAN45.js +28 -0
- package/dist/catalog-chunks/chunk-VCDBPAAS.js +85 -0
- package/dist/catalog-chunks/chunk-VMGI6CMO.js +15 -0
- package/dist/catalog-chunks/chunk-W7ZMAKCC.js +53 -0
- package/dist/catalog-chunks/chunk-XDDKOCZ7.js +89 -0
- package/dist/catalog-chunks/chunk-YGLQ5K3F.js +452 -0
- package/dist/catalog-chunks/chunk-YHU4BQDL.js +292 -0
- package/dist/catalog-chunks/chunk-ZCRXHCGS.js +108 -0
- package/dist/catalog-chunks/chunk-ZUQZVT7M.js +87 -0
- package/dist/catalog-chunks/chunk-ZXDZMNRZ.js +267 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +6237 -879
- package/dist/styles.css +1 -1
- package/dist/ui/ai/ai-approval-card.d.ts +28 -0
- package/dist/ui/ai/ai-code-block.d.ts +33 -0
- package/dist/ui/ai/ai-context-meter.d.ts +14 -0
- package/dist/ui/ai/ai-fine-tune-card.d.ts +43 -0
- package/dist/ui/ai/ai-prompt-bar.d.ts +25 -0
- package/dist/ui/ai/ai-sidebar-nav.d.ts +26 -0
- package/dist/ui/ai/ai-sources.d.ts +16 -0
- package/dist/ui/ai/ai-suggestions.d.ts +12 -0
- package/dist/ui/ai/ai-task-list.d.ts +15 -0
- package/dist/ui/ai/ai-tool-call.d.ts +13 -0
- package/dist/ui/ai/rudder-issue-board.d.ts +21 -0
- package/dist/ui/animated-sidebar.d.ts +9 -0
- package/dist/ui/hover/inset-button.d.ts +16 -0
- package/dist/ui/loading/analyzing-image.d.ts +2 -0
- package/dist/ui/loading/border-trail-loading.d.ts +9 -0
- package/dist/ui/loading/wandering-eyes.d.ts +10 -0
- package/dist/ui/patterns/animated-tags.d.ts +14 -0
- package/dist/ui/patterns/expanding-icon-tabs.d.ts +8 -0
- package/dist/ui/patterns/gooey-popover.d.ts +24 -0
- package/package.json +79 -14
- package/registry/1.json +19 -0
- package/registry/10.json +19 -0
- package/registry/11.json +19 -0
- package/registry/12.json +19 -0
- package/registry/13.json +19 -0
- package/registry/14.json +19 -0
- package/registry/15.json +19 -0
- package/registry/16.json +19 -0
- package/registry/17.json +19 -0
- package/registry/18.json +19 -0
- package/registry/19.json +19 -0
- package/registry/2.json +19 -0
- package/registry/20.json +19 -0
- package/registry/21.json +19 -0
- package/registry/22.json +19 -0
- package/registry/23.json +19 -0
- package/registry/24.json +19 -0
- package/registry/25.json +19 -0
- package/registry/26.json +19 -0
- package/registry/27.json +19 -0
- package/registry/28.json +19 -0
- package/registry/29.json +19 -0
- package/registry/3.json +19 -0
- package/registry/30.json +19 -0
- package/registry/31.json +19 -0
- package/registry/32.json +19 -0
- package/registry/33.json +19 -0
- package/registry/34.json +19 -0
- package/registry/35.json +19 -0
- package/registry/36.json +16 -0
- package/registry/37.json +16 -0
- package/registry/4.json +19 -0
- package/registry/5.json +19 -0
- package/registry/6.json +19 -0
- package/registry/7.json +19 -0
- package/registry/8.json +19 -0
- package/registry/9.json +19 -0
- package/registry/LICENSE.third-party +542 -0
- package/registry/ab-segmented-tabs.json +18 -0
- package/registry/accordion-blind.json +15 -0
- package/registry/accordion-loader.json +9 -0
- package/registry/ai-approval-card.json +17 -0
- package/registry/ai-code-block.json +19 -0
- package/registry/ai-context-meter.json +19 -0
- package/registry/ai-fine-tune-card.json +19 -0
- package/registry/ai-prompt-bar.json +17 -0
- package/registry/ai-sidebar-nav.json +17 -0
- package/registry/ai-sources.json +20 -0
- package/registry/ai-suggestions.json +19 -0
- package/registry/ai-task-list.json +20 -0
- package/registry/ai-tool-call.json +20 -0
- package/registry/analyzing-image.json +17 -0
- package/registry/animated-sidebar.json +19 -0
- package/registry/animated-tags.json +19 -0
- package/registry/app-icon-load.json +9 -0
- package/registry/apple-breathe.json +9 -0
- package/registry/apple-equalizer.json +9 -0
- package/registry/apple-icon-morph.json +9 -0
- package/registry/apple-pulse-dots.json +9 -0
- package/registry/apple-scale-pulse.json +9 -0
- package/registry/apple-sound-wave.json +9 -0
- package/registry/apple-text-reveal.json +9 -0
- package/registry/apple-unlock.json +9 -0
- package/registry/arc-tracer.json +9 -0
- package/registry/bar-cascade.json +9 -0
- package/registry/bar-sweep.json +9 -0
- package/registry/blur-text.json +9 -0
- package/registry/blur-up-char.json +19 -0
- package/registry/blur-up-word.json +19 -0
- package/registry/bobbing-dots.json +9 -0
- package/registry/bookmark-corner-peel.json +15 -0
- package/registry/bookmark-save-pill.json +18 -0
- package/registry/bookmark-toggle.json +19 -0
- package/registry/border-trail-loading.json +17 -0
- package/registry/bounce-dots.json +9 -0
- package/registry/bounce-in-char.json +19 -0
- package/registry/bouncing-bars.json +9 -0
- package/registry/bouncing-dots.json +9 -0
- package/registry/bouncing-lines.json +9 -0
- package/registry/bouncing-square.json +9 -0
- package/registry/breathe-ring.json +9 -0
- package/registry/breathing-glow.json +9 -0
- package/registry/breathing-square.json +9 -0
- package/registry/btn-1.json +19 -0
- package/registry/btn-10.json +19 -0
- package/registry/btn-11.json +19 -0
- package/registry/btn-12.json +19 -0
- package/registry/btn-13.json +19 -0
- package/registry/btn-14.json +19 -0
- package/registry/btn-15.json +19 -0
- package/registry/btn-16.json +19 -0
- package/registry/btn-17.json +19 -0
- package/registry/btn-18.json +19 -0
- package/registry/btn-19.json +19 -0
- package/registry/btn-2.json +19 -0
- package/registry/btn-20.json +19 -0
- package/registry/btn-21.json +19 -0
- package/registry/btn-22.json +19 -0
- package/registry/btn-23.json +19 -0
- package/registry/btn-24.json +19 -0
- package/registry/btn-25.json +19 -0
- package/registry/btn-26.json +19 -0
- package/registry/btn-27.json +19 -0
- package/registry/btn-28.json +19 -0
- package/registry/btn-29.json +19 -0
- package/registry/btn-3.json +19 -0
- package/registry/btn-30.json +19 -0
- package/registry/btn-31.json +19 -0
- package/registry/btn-32.json +19 -0
- package/registry/btn-33.json +19 -0
- package/registry/btn-34.json +19 -0
- package/registry/btn-35.json +19 -0
- package/registry/btn-36.json +16 -0
- package/registry/btn-37.json +16 -0
- package/registry/btn-4.json +19 -0
- package/registry/btn-5.json +19 -0
- package/registry/btn-6.json +19 -0
- package/registry/btn-7.json +19 -0
- package/registry/btn-8.json +19 -0
- package/registry/btn-9.json +19 -0
- package/registry/button-slide-arrow.json +19 -0
- package/registry/cacheable-bandwidth-cost.json +19 -0
- package/registry/card-arc-5.json +18 -0
- package/registry/card-arc-7.json +18 -0
- package/registry/card-carousel-mono.json +19 -0
- package/registry/card-carousel.json +19 -0
- package/registry/card-cascade-stagger.json +18 -0
- package/registry/card-corner-fan.json +18 -0
- package/registry/card-cover-flow-mono.json +19 -0
- package/registry/card-cover-flow.json +19 -0
- package/registry/card-deck-cascade.json +15 -0
- package/registry/card-glance-preview.json +18 -0
- package/registry/card-hover.json +9 -0
- package/registry/card-linear-spread.json +18 -0
- package/registry/card-long-arc-5.json +18 -0
- package/registry/card-scatter-spread.json +18 -0
- package/registry/card-stack-peel.json +15 -0
- package/registry/card-stamp-arc.json +18 -0
- package/registry/card-time-machine-mono.json +18 -0
- package/registry/card-time-machine.json +18 -0
- package/registry/card-wheel-fan.json +18 -0
- package/registry/category-select.json +18 -0
- package/registry/character-stagger.json +9 -0
- package/registry/checkbox-draw.json +19 -0
- package/registry/checkmark-draw.json +19 -0
- package/registry/circle-toggle.json +19 -0
- package/registry/circuit-trace-draw.json +15 -0
- package/registry/circular-bars.json +9 -0
- package/registry/circular-create-button.json +16 -0
- package/registry/classic-spinner.json +9 -0
- package/registry/classic-toggle.json +9 -0
- package/registry/clock-spinner.json +9 -0
- package/registry/comet-spinner.json +9 -0
- package/registry/compass-needle-deflect.json +15 -0
- package/registry/concentric-pulse.json +9 -0
- package/registry/concentric-ring.json +9 -0
- package/registry/concentric-squares.json +9 -0
- package/registry/context-menu.json +18 -0
- package/registry/conveyor-loop.json +9 -0
- package/registry/credit-score-barcode-meter.json +19 -0
- package/registry/cross-spinner.json +9 -0
- package/registry/cube-flip-spring.json +9 -0
- package/registry/cursor-trail.json +9 -0
- package/registry/dash-ring.json +9 -0
- package/registry/dashed-spiral.json +9 -0
- package/registry/date-position-selector.json +18 -0
- package/registry/dia-text-reveal.json +19 -0
- package/registry/diamond-grid.json +9 -0
- package/registry/diamond-rotate-spring.json +9 -0
- package/registry/dislike-toggle.json +19 -0
- package/registry/dither-book.json +19 -0
- package/registry/domino-cascade.json +15 -0
- package/registry/dot-spinner.json +9 -0
- package/registry/dots-ring.json +9 -0
- package/registry/double-bounce-toggle.json +19 -0
- package/registry/double-ring.json +9 -0
- package/registry/download-icons.json +18 -0
- package/registry/drop-dot.json +9 -0
- package/registry/drop-in-char.json +19 -0
- package/registry/droplet-squish.json +15 -0
- package/registry/dual-arc.json +9 -0
- package/registry/dual-magnet-dipole.json +15 -0
- package/registry/dynamic-island.json +9 -0
- package/registry/elastic-bars.json +9 -0
- package/registry/elastic-square.json +9 -0
- package/registry/elastic-tag-snap.json +15 -0
- package/registry/error-shake.json +19 -0
- package/registry/expanding-cross.json +9 -0
- package/registry/expanding-icon-tabs.json +17 -0
- package/registry/face-id-scan.json +9 -0
- package/registry/fade-arc.json +9 -0
- package/registry/fade-dots.json +9 -0
- package/registry/fade-down.json +9 -0
- package/registry/fade-in-char.json +19 -0
- package/registry/fade-in-text.json +19 -0
- package/registry/fade-in-word.json +19 -0
- package/registry/fade-in.json +9 -0
- package/registry/fade-up.json +9 -0
- package/registry/file-upload-dropzone.json +19 -0
- package/registry/filter-tag-pill.json +18 -0
- package/registry/flip-square.json +9 -0
- package/registry/flip-x-char.json +19 -0
- package/registry/flip-y-char.json +19 -0
- package/registry/float-char.json +19 -0
- package/registry/float-word.json +19 -0
- package/registry/floating-diamonds.json +9 -0
- package/registry/floating-label-input.json +19 -0
- package/registry/fluid-bars.json +9 -0
- package/registry/fluid-diamond.json +9 -0
- package/registry/fluid-dot-orbit.json +9 -0
- package/registry/fluid-skeleton.json +9 -0
- package/registry/focus-blur.json +18 -0
- package/registry/form-submit-button.json +19 -0
- package/registry/french-doors-3d.json +18 -0
- package/registry/gear-tooth-step.json +15 -0
- package/registry/gears.json +9 -0
- package/registry/gelatin-wobble.json +15 -0
- package/registry/geometric-iris-shutter.json +15 -0
- package/registry/glassmorphic-card.json +9 -0
- package/registry/glow-button.json +9 -0
- package/registry/glow-text.json +19 -0
- package/registry/gooey-popover.json +18 -0
- package/registry/gradient-arc.json +9 -0
- package/registry/gradient-shimmer.json +18 -0
- package/registry/grid-dots.json +9 -0
- package/registry/haptic-ring.json +9 -0
- package/registry/heartbeat.json +9 -0
- package/registry/hex-lattice-draw.json +15 -0
- package/registry/hexagon-spinner.json +9 -0
- package/registry/hourglass.json +9 -0
- package/registry/hover-lift-char.json +19 -0
- package/registry/hover-lift-word.json +19 -0
- package/registry/hover-link-card.json +18 -0
- package/registry/hover-scale-char.json +19 -0
- package/registry/hover-scale-word.json +19 -0
- package/registry/inertia-skid-stop.json +15 -0
- package/registry/infinity-path.json +9 -0
- package/registry/input-focus-glow.json +19 -0
- package/registry/inset-action-button.json +16 -0
- package/registry/inset-button.json +17 -0
- package/registry/intersecting-rings.json +9 -0
- package/registry/ios-spinner.json +9 -0
- package/registry/kinetic-metronome-tick.json +15 -0
- package/registry/kinetic-tension-capsule.json +15 -0
- package/registry/light-dark-morph.json +18 -0
- package/registry/like-toggle.json +19 -0
- package/registry/line-spinner.json +9 -0
- package/registry/liquid-dots.json +9 -0
- package/registry/mac-terminal.json +9 -0
- package/registry/magnetic-button.json +9 -0
- package/registry/magnetic-disks.json +15 -0
- package/registry/magnetic-dots.json +9 -0
- package/registry/magnetic-slide-btn.json +18 -0
- package/registry/manifest.json +11258 -0
- package/registry/matrix-grid-loader.json +15 -0
- package/registry/minimal-triangle.json +9 -0
- package/registry/modular-tile-snap.json +15 -0
- package/registry/mono-activity-blue.json +18 -0
- package/registry/mono-activity-green.json +18 -0
- package/registry/mono-activity-purple.json +18 -0
- package/registry/mono-heatmap.json +19 -0
- package/registry/mono-rounded-area.json +18 -0
- package/registry/mono-rounded-bar.json +18 -0
- package/registry/mono-rounded-bubble.json +18 -0
- package/registry/mono-rounded-bullet.json +16 -0
- package/registry/mono-rounded-candlestick.json +16 -0
- package/registry/mono-rounded-composed.json +18 -0
- package/registry/mono-rounded-donut.json +18 -0
- package/registry/mono-rounded-funnel.json +18 -0
- package/registry/mono-rounded-gauge-arc.json +18 -0
- package/registry/mono-rounded-heatmap.json +16 -0
- package/registry/mono-rounded-kpi.json +18 -0
- package/registry/mono-rounded-line.json +18 -0
- package/registry/mono-rounded-meter.json +18 -0
- package/registry/mono-rounded-polar.json +18 -0
- package/registry/mono-rounded-pyramid.json +16 -0
- package/registry/mono-rounded-radar.json +18 -0
- package/registry/mono-rounded-radial-gauge.json +18 -0
- package/registry/mono-rounded-radial-group.json +18 -0
- package/registry/mono-rounded-range.json +18 -0
- package/registry/mono-rounded-sankey.json +16 -0
- package/registry/mono-rounded-scatter.json +18 -0
- package/registry/mono-rounded-sparkline.json +18 -0
- package/registry/mono-rounded-stacked-bar.json +18 -0
- package/registry/mono-rounded-step.json +18 -0
- package/registry/mono-rounded-stream.json +18 -0
- package/registry/mono-rounded-treemap.json +16 -0
- package/registry/mono-rounded-waterfall.json +18 -0
- package/registry/mono-stock.json +19 -0
- package/registry/morph-action-pill.json +18 -0
- package/registry/morph-dot-ring.json +9 -0
- package/registry/morph-loader.json +9 -0
- package/registry/morph-toggle.json +19 -0
- package/registry/morphing-bars.json +9 -0
- package/registry/morphing-infinity.json +9 -0
- package/registry/morphing-ring.json +9 -0
- package/registry/morphing-shape.json +9 -0
- package/registry/mouse-follow.json +9 -0
- package/registry/multi-select-chips.json +19 -0
- package/registry/multi-tab-bar.json +18 -0
- package/registry/neon-sign-draw.json +15 -0
- package/registry/nested-orbital-gimbal.json +15 -0
- package/registry/network-telemetry-matrix.json +19 -0
- package/registry/newtons-cradle.json +9 -0
- package/registry/noise-decibel-level.json +19 -0
- package/registry/obsidian-liquid-wave.json +16 -0
- package/registry/offset-rings.json +9 -0
- package/registry/orbiting-circles.json +9 -0
- package/registry/orbiting-dot.json +9 -0
- package/registry/origami-envelope-unfold.json +15 -0
- package/registry/origami-shape.json +9 -0
- package/registry/otp-input.json +19 -0
- package/registry/overview-bar-scrubber-card.json +19 -0
- package/registry/page-transition.json +11 -0
- package/registry/page-turn-curl.json +15 -0
- package/registry/password-toggle.json +19 -0
- package/registry/pendulum-bubble-level.json +15 -0
- package/registry/pendulum.json +9 -0
- package/registry/perspective-flip-stage.json +18 -0
- package/registry/perspective-flip.json +18 -0
- package/registry/perspective-layout-switcher.json +18 -0
- package/registry/physics-dock.json +17 -0
- package/registry/pill-tabs.json +19 -0
- package/registry/plus-minus-toggle.json +18 -0
- package/registry/presets.json +9 -0
- package/registry/prism-block-stack.json +15 -0
- package/registry/progress-indicator-piano.json +19 -0
- package/registry/progress-indicator.json +9 -0
- package/registry/progress-stepper.json +18 -0
- package/registry/pulsating-dots.json +9 -0
- package/registry/pulse-char.json +19 -0
- package/registry/pulse-dot.json +9 -0
- package/registry/pulse-dots.json +9 -0
- package/registry/pulse-square.json +9 -0
- package/registry/pulse-word.json +19 -0
- package/registry/pulse.json +9 -0
- package/registry/pumping-heart.json +9 -0
- package/registry/pyramid-block-build.json +15 -0
- package/registry/radar-sweep.json +9 -0
- package/registry/radial-iris-mask.json +18 -0
- package/registry/radial-spinner.json +15 -0
- package/registry/radio-scale.json +19 -0
- package/registry/range-slider.json +19 -0
- package/registry/receipt-tape-print.json +15 -0
- package/registry/rectangle-toggle.json +19 -0
- package/registry/repost-toggle.json +19 -0
- package/registry/reveal-text.json +19 -0
- package/registry/ribbon-banner-slide.json +15 -0
- package/registry/ring-sweep.json +9 -0
- package/registry/ripple-effect.json +9 -0
- package/registry/rise-up-word.json +19 -0
- package/registry/roller-blind-drop.json +15 -0
- package/registry/rolling-tumble.json +15 -0
- package/registry/rotate-in-char.json +19 -0
- package/registry/rotating-cross.json +9 -0
- package/registry/rotating-louvers.json +15 -0
- package/registry/rotating-triangle.json +9 -0
- package/registry/rudder-issue-board.json +24 -0
- package/registry/sales-analytics-dual-bars.json +19 -0
- package/registry/sales-overview-radial-dashboard.json +19 -0
- package/registry/sales-target-segmented-arc.json +19 -0
- package/registry/scale-in-char.json +19 -0
- package/registry/scale-in-text.json +19 -0
- package/registry/scale-in-word.json +19 -0
- package/registry/scale-in.json +9 -0
- package/registry/scramble-text.json +18 -0
- package/registry/scroll-canvas-unroll.json +15 -0
- package/registry/scroll-reveal.json +9 -0
- package/registry/search-expand.json +19 -0
- package/registry/segmented-arc-meter.json +18 -0
- package/registry/segmented-link-stretch.json +15 -0
- package/registry/segmented-step-bar.json +18 -0
- package/registry/segmented-stepper-dots.json +18 -0
- package/registry/select-dropdown.json +19 -0
- package/registry/server-performance-step-bars.json +19 -0
- package/registry/shape-shift-grid.json +9 -0
- package/registry/shimmer-line.json +9 -0
- package/registry/shimmer-text.json +19 -0
- package/registry/shutter-slide.json +15 -0
- package/registry/shutter-step-slices.json +15 -0
- package/registry/siri-wave.json +9 -0
- package/registry/skeleton-loader.json +9 -0
- package/registry/skeleton.json +9 -0
- package/registry/skew-x-char.json +19 -0
- package/registry/slide-down-char.json +19 -0
- package/registry/slide-down-word.json +19 -0
- package/registry/slide-left-char.json +19 -0
- package/registry/slide-left.json +9 -0
- package/registry/slide-right-char.json +19 -0
- package/registry/slide-right.json +9 -0
- package/registry/slide-up-char.json +19 -0
- package/registry/slide-up-text.json +19 -0
- package/registry/slide-up-word.json +19 -0
- package/registry/sliding-bars.json +9 -0
- package/registry/slinky-coil.json +15 -0
- package/registry/smart-card-dispenser.json +15 -0
- package/registry/smooth-dot-shift.json +9 -0
- package/registry/smooth-ring.json +9 -0
- package/registry/smooth-rounded-square.json +9 -0
- package/registry/solid-switch.json +19 -0
- package/registry/spatial-door-portal.json +18 -0
- package/registry/spinning-squares.json +9 -0
- package/registry/spiral-spinner.json +9 -0
- package/registry/split-gate-reveal.json +15 -0
- package/registry/spotlight.json +9 -0
- package/registry/spring-bars.json +9 -0
- package/registry/spring-dot-matrix.json +9 -0
- package/registry/spring-hexagon.json +9 -0
- package/registry/spring-ring-expand.json +9 -0
- package/registry/spring-text-pop.json +9 -0
- package/registry/spring-text.json +19 -0
- package/registry/square-accordion.json +9 -0
- package/registry/square-grid.json +9 -0
- package/registry/square-snake.json +9 -0
- package/registry/square-spinner.json +9 -0
- package/registry/squash-sphere.json +15 -0
- package/registry/stacked-bar-pulse.json +9 -0
- package/registry/stagger-text.json +19 -0
- package/registry/staggered-glass-curtain.json +18 -0
- package/registry/sticky-note-peel.json +15 -0
- package/registry/sticky-reveal.json +9 -0
- package/registry/stretch-x-char.json +19 -0
- package/registry/stretch-y-char.json +19 -0
- package/registry/stroke-waveform.json +15 -0
- package/registry/submenu-flyout.json +18 -0
- package/registry/success-check.json +19 -0
- package/registry/sudden-brake.json +15 -0
- package/registry/swapping-dots.json +9 -0
- package/registry/swing-word.json +19 -0
- package/registry/swirling-spinner.json +9 -0
- package/registry/symmetric-wave.json +9 -0
- package/registry/terminal-loader.json +9 -0
- package/registry/text-blink.json +9 -0
- package/registry/text-dots.json +9 -0
- package/registry/text-morph.json +9 -0
- package/registry/text-reveal.json +9 -0
- package/registry/text-shimmer-wave.json +9 -0
- package/registry/text-shimmer.json +9 -0
- package/registry/textarea-auto-grow.json +19 -0
- package/registry/theme-toggle.json +19 -0
- package/registry/tilt-card.json +9 -0
- package/registry/timer-preparation-segmented.json +19 -0
- package/registry/tracking-in-text.json +19 -0
- package/registry/tracking-out-text.json +19 -0
- package/registry/trailing-dots.json +9 -0
- package/registry/triple-dot-spinner.json +9 -0
- package/registry/twin-orbit.json +9 -0
- package/registry/typewriter-text.json +18 -0
- package/registry/typing-indicator.json +9 -0
- package/registry/typing.json +9 -0
- package/registry/use-mouse-position.json +10 -0
- package/registry/use-reduced-motion.json +9 -0
- package/registry/use-scroll-progress.json +9 -0
- package/registry/use-stagger.json +9 -0
- package/registry/use-web-haptics.json +10 -0
- package/registry/users-growth-pill-progress.json +19 -0
- package/registry/utils.json +10 -0
- package/registry/vertical-wheel-counter.json +18 -0
- package/registry/views-hourly-wave-chart.json +19 -0
- package/registry/wandering-cube.json +9 -0
- package/registry/wandering-eyes.json +15 -0
- package/registry/watch-spinner.json +9 -0
- package/registry/wave-dots.json +9 -0
- package/registry/wave-physics-loader.json +9 -0
- package/registry/wave-reveal.json +18 -0
- package/registry/waveform-loader.json +9 -0
- package/registry/word-reveal.json +9 -0
- package/registry/zig-zag-pulse.json +9 -0
- package/registry/zoom-in-text.json +19 -0
- package/registry/zoom-in.json +9 -0
- package/registry/zoom-out-text.json +19 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-cascade-stagger",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-cascade-stagger.tsx",
|
|
6
|
+
"registryFile": "card-cascade-stagger.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-cascade-stagger';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface CardCascadeStaggerProps {\n className?: string;\n cardClassName?: string;\n}\n\nexport default function CardCascadeStagger({\n className = '',\n cardClassName = 'bg-neutral-800'\n}: CardCascadeStaggerProps) {\n const [isHovered, setIsHovered] = useState(false);\n const cards = [0, 1, 2, 3, 4];\n const center = 2;\n\n return (\n <div \n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`relative w-[8rem] h-[11rem] cursor-pointer flex items-center justify-center ${className}`}\n >\n {cards.map((i) => {\n const dist = i - center;\n const targetY = isHovered ? dist * -28 - 14 : dist * 2;\n const targetX = isHovered ? dist * 14 : 0;\n const targetRotate = isHovered ? dist * 6 : 0;\n\n return (\n <motion.div\n key={i}\n animate={{\n y: targetY,\n x: targetX,\n rotate: targetRotate,\n scale: isHovered ? (dist === 0 ? 1.05 : 0.98) : 1\n }}\n transition={{ type: \"spring\", stiffness: 200, damping: 22, mass: 0.9 }}\n style={{ zIndex: 5 - Math.abs(dist) }}\n className={`absolute inset-0 rounded-2xl shadow-[0_4px_12px_-2px_rgba(0,0,0,0.15)] border border-white/5 ${cardClassName}`}\n />\n );\n })}\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-corner-fan",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-corner-fan.tsx",
|
|
6
|
+
"registryFile": "card-corner-fan.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-corner-fan';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface CardCornerFanProps {\n angle?: number;\n duration?: number;\n hoverIntensity?: number;\n cardClassName?: string;\n className?: string;\n}\n\nexport default function CardCornerFan({\n angle = 40,\n duration = 0.5,\n hoverIntensity = 1,\n cardClassName = 'bg-neutral-800',\n className = ''\n}: CardCornerFanProps) {\n const [isHovered, setIsHovered] = useState(false);\n const cards = [0, 1, 2, 3, 4];\n const total = cards.length;\n\n return (\n <div \n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`relative w-[8rem] h-[11rem] cursor-pointer flex items-center justify-center ${className}`}\n >\n {cards.map((i) => {\n const offsetRatio = i / (total - 1);\n const startAngle = -10;\n const targetRotate = isHovered ? (startAngle + offsetRatio * angle) * hoverIntensity : 0;\n\n return (\n <motion.div\n key={i}\n animate={{\n rotate: targetRotate,\n scale: isHovered && i === 2 ? 1.03 : 1\n }}\n transition={{\n type: \"spring\",\n stiffness: 180,\n damping: 20,\n mass: 0.8,\n duration\n }}\n style={{\n zIndex: 5 - i,\n originX: 0,\n originY: 1\n }}\n className={`absolute inset-0 rounded-2xl shadow-[0_4px_10px_-2px_rgba(0,0,0,0.15)] border border-white/5 ${cardClassName}`}\n />\n );\n })}\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-cover-flow-mono",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-cover-flow-mono.tsx",
|
|
6
|
+
"registryFile": "card-cover-flow-mono.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion",
|
|
12
|
+
"lucide-react"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"previewMode": "client",
|
|
16
|
+
"usage": "import MovaComponent from './card-cover-flow-mono';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
17
|
+
"css": "",
|
|
18
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nconst DEFAULT_ASSETS = [\n {\n src: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?auto=format&fit=crop&w=600&q=80',\n title: 'Sunset Beach',\n },\n {\n src: 'https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=600&q=80',\n title: 'Misty Mountains',\n },\n {\n src: 'https://images.unsplash.com/photo-1447752875215-b2761acb3c5d?auto=format&fit=crop&w=600&q=80',\n title: 'Forest Trail',\n },\n {\n src: 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?auto=format&fit=crop&w=600&q=80',\n title: 'Sunlight Woods',\n },\n {\n src: 'https://images.unsplash.com/photo-1501854140801-50d01698950b?auto=format&fit=crop&w=600&q=80',\n title: 'Green Hills',\n },\n];\n\ninterface CardCoverFlowProps {\n className?: string;\n images?: { src: string; title: string }[];\n isMonochrome?: boolean;\n}\n\nexport default function CardCoverFlow({\n className = '',\n images = DEFAULT_ASSETS,\n isMonochrome = true\n}: CardCoverFlowProps) {\n const [activeIndex, setActiveIndex] = useState(2);\n\n const toPrev = (e: React.MouseEvent) => {\n e.stopPropagation();\n setActiveIndex(prev => Math.max(0, prev - 1));\n };\n\n const toNext = (e: React.MouseEvent) => {\n e.stopPropagation();\n setActiveIndex(prev => Math.min(images.length - 1, prev + 1));\n };\n\n const toSlide = (e: React.MouseEvent, index: number) => {\n e.stopPropagation();\n setActiveIndex(index);\n };\n\n return (\n <div className={`w-full h-full flex flex-col items-center justify-center relative overflow-hidden select-none bg-zinc-950/40 rounded-2xl ${className}`} style={{ perspective: '1000px' }}>\n <div className=\"w-full flex justify-center items-center relative h-[140px] [transform-style:preserve-3d]\">\n {images.map((item, i) => {\n const isActive = activeIndex === i;\n const offset = i - activeIndex;\n const absOffset = Math.abs(offset);\n const isPast = i < activeIndex;\n \n return (\n <motion.div \n key={i}\n className=\"absolute w-[80px] aspect-[3/4] cursor-pointer\"\n initial={false}\n animate={{ \n x: offset * 32,\n rotateY: isActive ? 0 : (isPast ? 38 : -38),\n z: isActive ? 50 : -absOffset * 50,\n scale: isActive ? 1.1 : 1 - (absOffset * 0.08),\n opacity: absOffset > 2 ? 0 : 1 - (absOffset * 0.25)\n }}\n transition={{ type: 'spring', stiffness: 200, damping: 25 }}\n style={{ zIndex: 100 - absOffset }}\n onClick={(e) => toSlide(e, i)}\n >\n {isMonochrome ? (\n <div \n className=\"w-full h-full rounded-xl bg-neutral-400 dark:bg-neutral-800 border border-neutral-200/20 shadow-2xl flex items-center justify-center text-neutral-600 dark:text-neutral-400 font-bold text-sm\"\n >\n {i + 1}\n </div>\n ) : (\n <img \n src={item.src} \n alt={item.title} \n referrerPolicy=\"no-referrer\"\n className=\"w-full h-full object-cover rounded-xl shadow-2xl border border-white/10\" \n />\n )}\n <motion.div \n className=\"absolute -bottom-6 left-[-20px] right-[-20px] text-center text-[10px] font-semibold text-white/80 whitespace-nowrap overflow-hidden text-ellipsis\"\n animate={{ opacity: isActive ? 1 : 0, y: isActive ? 0 : -5 }}\n >\n {isMonochrome ? `Card ${i + 1}` : item.title}\n </motion.div>\n </motion.div>\n )\n })}\n </div>\n\n <div className=\"mt-6 w-fit px-1.5 py-0.5 flex items-center gap-2 justify-center text-zinc-300 rounded-full bg-white/5 backdrop-blur-md border border-white/10 shadow-sm z-20\">\n <button onClick={toPrev} className=\"p-1 cursor-pointer hover:bg-white/10 rounded-full transition-colors border-0 bg-transparent text-neutral-300 hover:text-white\">\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n </button>\n <div className=\"flex justify-center items-center gap-1\">\n {images.map((_, i) => (\n <div \n key={i} \n onClick={(e) => toSlide(e, i)}\n className={`rounded-full cursor-pointer h-1 transition-all duration-300 ${activeIndex === i ? 'w-4 bg-white' : 'w-1 bg-white/30 hover:bg-white/50'}`}>\n </div>\n ))}\n </div>\n <button onClick={toNext} className=\"p-1 cursor-pointer hover:bg-white/10 rounded-full transition-colors border-0 bg-transparent text-neutral-300 hover:text-white\">\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n </div>\n );\n}"
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-cover-flow",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-cover-flow.tsx",
|
|
6
|
+
"registryFile": "card-cover-flow.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion",
|
|
12
|
+
"lucide-react"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"previewMode": "client",
|
|
16
|
+
"usage": "import MovaComponent from './card-cover-flow';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
17
|
+
"css": "",
|
|
18
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nconst DEFAULT_ASSETS = [\n {\n src: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?auto=format&fit=crop&w=600&q=80',\n title: 'Sunset Beach',\n },\n {\n src: 'https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=600&q=80',\n title: 'Misty Mountains',\n },\n {\n src: 'https://images.unsplash.com/photo-1447752875215-b2761acb3c5d?auto=format&fit=crop&w=600&q=80',\n title: 'Forest Trail',\n },\n {\n src: 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?auto=format&fit=crop&w=600&q=80',\n title: 'Sunlight Woods',\n },\n {\n src: 'https://images.unsplash.com/photo-1501854140801-50d01698950b?auto=format&fit=crop&w=600&q=80',\n title: 'Green Hills',\n },\n];\n\ninterface CardCoverFlowProps {\n className?: string;\n images?: { src: string; title: string }[];\n}\n\nexport default function CardCoverFlow({\n className = '',\n images = DEFAULT_ASSETS\n}: CardCoverFlowProps) {\n const [activeIndex, setActiveIndex] = useState(2);\n\n const toPrev = (e: React.MouseEvent) => {\n e.stopPropagation();\n setActiveIndex(prev => Math.max(0, prev - 1));\n };\n\n const toNext = (e: React.MouseEvent) => {\n e.stopPropagation();\n setActiveIndex(prev => Math.min(images.length - 1, prev + 1));\n };\n\n const toSlide = (e: React.MouseEvent, index: number) => {\n e.stopPropagation();\n setActiveIndex(index);\n };\n\n return (\n <div className={`w-full h-full flex flex-col items-center justify-center relative overflow-hidden select-none bg-zinc-950/40 rounded-2xl ${className}`} style={{ perspective: '1000px' }}>\n <div className=\"w-full flex justify-center items-center relative h-[140px] [transform-style:preserve-3d]\">\n {images.map((item, i) => {\n const isActive = activeIndex === i;\n const offset = i - activeIndex;\n const absOffset = Math.abs(offset);\n const isPast = i < activeIndex;\n \n return (\n <motion.div \n key={i}\n className=\"absolute w-[80px] aspect-[3/4] cursor-pointer\"\n initial={false}\n animate={{ \n x: offset * 32,\n rotateY: isActive ? 0 : (isPast ? 38 : -38),\n z: isActive ? 50 : -absOffset * 50,\n scale: isActive ? 1.1 : 1 - (absOffset * 0.08),\n opacity: absOffset > 2 ? 0 : 1 - (absOffset * 0.25)\n }}\n transition={{ type: 'spring', stiffness: 200, damping: 25 }}\n style={{ zIndex: 100 - absOffset }}\n onClick={(e) => toSlide(e, i)}\n >\n <img \n src={item.src} \n alt={item.title} \n referrerPolicy=\"no-referrer\"\n className=\"w-full h-full object-cover rounded-xl shadow-2xl border border-white/10\" \n />\n <motion.div \n className=\"absolute -bottom-6 left-[-20px] right-[-20px] text-center text-[10px] font-semibold text-white/80 whitespace-nowrap overflow-hidden text-ellipsis\"\n animate={{ opacity: isActive ? 1 : 0, y: isActive ? 0 : -5 }}\n >\n {item.title}\n </motion.div>\n </motion.div>\n )\n })}\n </div>\n\n <div className=\"mt-6 w-fit px-1.5 py-0.5 flex items-center gap-2 justify-center text-zinc-300 rounded-full bg-white/5 backdrop-blur-md border border-white/10 shadow-sm z-20\">\n <button onClick={toPrev} className=\"p-1 cursor-pointer hover:bg-white/10 rounded-full transition-colors border-0 bg-transparent text-neutral-300 hover:text-white\">\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n </button>\n <div className=\"flex justify-center items-center gap-1\">\n {images.map((_, i) => (\n <div \n key={i} \n onClick={(e) => toSlide(e, i)}\n className={`rounded-full cursor-pointer h-1 transition-all duration-300 ${activeIndex === i ? 'w-4 bg-white' : 'w-1 bg-white/30 hover:bg-white/50'}`}>\n </div>\n ))}\n </div>\n <button onClick={toNext} className=\"p-1 cursor-pointer hover:bg-white/10 rounded-full transition-colors border-0 bg-transparent text-neutral-300 hover:text-white\">\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n </div>\n );\n}"
|
|
19
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-deck-cascade",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-deck-cascade.tsx",
|
|
6
|
+
"sourcePath": "components/css-animations/whimsical/ConceptTrios3.tsx",
|
|
7
|
+
"registryFile": "card-deck-cascade.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"default"
|
|
10
|
+
],
|
|
11
|
+
"dependencies": [],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"previewMode": "client",
|
|
14
|
+
"content": "// @ts-nocheck -- Generated JavaScript bundle; edit the maintained catalog source to retain TypeScript types.\n\"use client\";\n\"use client\";\n\n// catalog/components/css-animations/whimsical/ConceptTrios3.tsx\nimport { useState as useState2 } from \"react\";\n\n// catalog/hooks/useLoopFlg.ts\nimport { useState, useEffect } from \"react\";\nfunction useLoopFlg(enable = true, interval = 2e3) {\n const [flag, setFlag] = useState(0);\n useEffect(() => {\n if (!enable) return;\n const timer = setInterval(() => {\n setFlag((prev) => prev + 1);\n }, interval);\n return () => clearInterval(timer);\n }, [enable, interval]);\n return flag;\n}\n\n// catalog/components/css-animations/whimsical/ConceptTrios3.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction CardDeckCascade({\n trigger = \"hover\",\n loop = true,\n theme = \"dark\",\n className = \"\"\n}) {\n const loopFlg = useLoopFlg(true, 3e3);\n const [hoverKey, setHoverKey] = useState2(0);\n const activeKey = loop ? `${loopFlg}-${hoverKey}` : `${hoverKey}`;\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: `relative w-full h-full rounded-2xl overflow-hidden flex justify-center items-center cursor-pointer transition-all duration-300 bg-transparent ${className}`,\n onMouseEnter: trigger === \"hover\" ? () => setHoverKey((k) => k + 1) : void 0,\n onClick: trigger === \"click\" ? () => setHoverKey((k) => k + 1) : void 0,\n children: [\n /* @__PURE__ */ jsx(\"style\", { children: `\n @keyframes card_fan_spread {\n 0%, 100% { transform: rotate(0deg) translateX(0); }\n 40%, 75% { transform: rotate(var(--rot)) translateX(var(--tx)); }\n }\n .fan-card {\n transform-origin: bottom center;\n animation: card_fan_spread 3s cubic-bezier(0.34, 1.56, 0.64, 1) infinite both;\n }\n ` }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"relative w-[110px] h-[75px] flex items-center justify-center\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"absolute w-[42px] h-[58px] rounded-xl bg-blue-700 border border-neutral-600 fan-card\", style: { \"--rot\": \"-22deg\", \"--tx\": \"-24px\" } }),\n /* @__PURE__ */ jsx(\"div\", { className: \"absolute w-[42px] h-[58px] rounded-xl bg-blue-600 border border-neutral-500 fan-card\", style: { \"--rot\": \"0deg\", \"--tx\": \"0px\" } }),\n /* @__PURE__ */ jsx(\"div\", { className: \"absolute w-[42px] h-[58px] rounded-xl bg-blue-500 border border-neutral-400 fan-card\", style: { \"--rot\": \"22deg\", \"--tx\": \"24px\" } })\n ] }, activeKey)\n ]\n }\n );\n}\n\n// catalog/registry-bindings/card-deck-cascade.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar PRESET_PROPS = { \"loop\": true, \"trigger\": \"hover\", \"theme\": \"dark\" };\nfunction MovaComponentAdapter(props = {}) {\n return /* @__PURE__ */ jsx2(CardDeckCascade, { ...PRESET_PROPS, ...props });\n}\nexport {\n MovaComponentAdapter as default\n};\n"
|
|
15
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-glance-preview",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-glance-preview.tsx",
|
|
6
|
+
"sourcePath": "components/css-animations/yui-components/RedesignedUiTrios.tsx",
|
|
7
|
+
"registryFile": "card-glance-preview.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"default"
|
|
10
|
+
],
|
|
11
|
+
"dependencies": [
|
|
12
|
+
"framer-motion",
|
|
13
|
+
"lucide-react"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"previewMode": "client",
|
|
17
|
+
"content": "// @ts-nocheck -- Generated JavaScript bundle; edit the maintained catalog source to retain TypeScript types.\n\"use client\";\n\"use client\";\n\n// catalog/components/css-animations/yui-components/RedesignedUiTrios.tsx\nimport { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Bookmark,\n Check,\n ChevronUp,\n ChevronDown,\n Layers,\n LayoutGrid,\n Info\n} from \"lucide-react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction CardGlancePreview({ theme = \"dark\" }) {\n const [open, setOpen] = useState(false);\n return /* @__PURE__ */ jsxs(\"div\", { className: \"relative flex flex-col items-center justify-center\", children: [\n /* @__PURE__ */ jsx(AnimatePresence, { children: open && /* @__PURE__ */ jsxs(\n motion.div,\n {\n initial: { opacity: 0, y: 6, scale: 0.92 },\n animate: { opacity: 1, y: -8, scale: 1 },\n exit: { opacity: 0, y: 4, scale: 0.92 },\n className: `absolute -top-12 px-3 py-2 rounded-xl border text-[11px] shadow-xl flex items-center gap-2 whitespace-nowrap z-20 pointer-events-none ${theme === \"dark\" ? \"bg-[#1c1c1e] border-neutral-700 text-neutral-200\" : \"bg-white border-neutral-200 text-neutral-900\"}`,\n children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"w-2 h-2 rounded-full bg-blue-500\" }),\n /* @__PURE__ */ jsx(\"span\", { children: \"Interactive Glance Preview\" })\n ]\n }\n ) }),\n /* @__PURE__ */ jsx(\n motion.button,\n {\n onMouseEnter: () => setOpen(true),\n onMouseLeave: () => setOpen(false),\n whileHover: { scale: 1.08 },\n whileTap: { scale: 0.92 },\n className: `w-10 h-10 rounded-2xl border flex items-center justify-center cursor-pointer shadow-sm ${theme === \"dark\" ? \"bg-[#1e1e1e] border-neutral-700 text-blue-400\" : \"bg-white border-neutral-200 text-blue-600\"}`,\n children: /* @__PURE__ */ jsx(Info, { className: \"w-5 h-5\" })\n }\n )\n ] });\n}\n\n// catalog/registry-bindings/card-glance-preview.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar PRESET_PROPS = { \"theme\": \"dark\" };\nfunction MovaComponentAdapter(props = {}) {\n return /* @__PURE__ */ jsx2(CardGlancePreview, { ...PRESET_PROPS, ...props });\n}\nexport {\n MovaComponentAdapter as default\n};\n"
|
|
18
|
+
}
|
package/registry/card-hover.json
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "card-hover",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
3
5
|
"file": "card-hover.tsx",
|
|
6
|
+
"sourcePath": "ui/hover/card-hover.tsx",
|
|
7
|
+
"registryFile": "card-hover.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"CardHover"
|
|
10
|
+
],
|
|
4
11
|
"dependencies": [
|
|
5
12
|
"framer-motion"
|
|
6
13
|
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"previewMode": "client",
|
|
7
16
|
"content": "\"use client\";\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\n\ninterface CardHoverProps {\n items: {\n id: string;\n title: string;\n description: string;\n link?: string;\n }[];\n className?: string;\n cardClassName?: string;\n}\n\nexport function CardHover({\n items,\n className = '',\n cardClassName = '',\n}: CardHoverProps) {\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\n return (\n <div className={`grid grid-cols-1 md:grid-cols-3 gap-4 w-full ${className}`}>\n {items.map((item, idx) => (\n <a\n key={item.id}\n href={item.link || '#'}\n className=\"relative group block p-2 h-full w-full no-underline\"\n onMouseEnter={() => setHoveredIndex(idx)}\n onMouseLeave={() => setHoveredIndex(null)}\n >\n <AnimatePresence>\n {hoveredIndex === idx && (\n <motion.span\n className=\"absolute inset-0 h-full w-full bg-neutral-200 dark:bg-zinc-800/[0.8] block rounded-3xl -z-10\"\n layoutId=\"hoverBackground\"\n initial={{ opacity: 0 }}\n animate={{\n opacity: 1,\n transition: { duration: 0.15 },\n }}\n exit={{\n opacity: 0,\n transition: { duration: 0.15, delay: 0.1 },\n }}\n />\n )}\n </AnimatePresence>\n <div\n className={`rounded-2xl h-full w-full p-5 overflow-hidden bg-white dark:bg-black border border-neutral-200 dark:border-zinc-800 group-hover:border-slate-350 dark:group-hover:border-zinc-700 relative z-20 transition-colors duration-200 ${cardClassName}`}\n >\n <div className=\"relative z-50\">\n <h4 className=\"text-zinc-900 dark:text-zinc-100 font-bold tracking-wide mt-2\">\n {item.title}\n </h4>\n <p className=\"mt-2 text-zinc-500 dark:text-zinc-400 tracking-wide leading-relaxed text-sm\">\n {item.description}\n </p>\n </div>\n </div>\n </a>\n ))}\n </div>\n );\n}\n"
|
|
8
17
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-linear-spread",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-linear-spread.tsx",
|
|
6
|
+
"registryFile": "card-linear-spread.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-linear-spread';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface CardLinearSpreadProps {\n gap?: number;\n duration?: number;\n hoverIntensity?: number;\n cardClassName?: string;\n className?: string;\n}\n\nexport default function CardLinearSpread({\n gap = 90,\n duration = 0.5,\n hoverIntensity = 1,\n cardClassName = 'bg-neutral-800',\n className = ''\n}: CardLinearSpreadProps) {\n const [isHovered, setIsHovered] = useState(false);\n const cards = [0, 1, 2, 3, 4];\n const center = 2;\n\n return (\n <div \n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`relative w-[8rem] h-[11rem] cursor-pointer flex items-center justify-center ${className}`}\n >\n {cards.map((i) => {\n const dist = i - center;\n const targetX = isHovered ? dist * (gap / center) * hoverIntensity : 0;\n\n return (\n <motion.div\n key={i}\n animate={{\n x: targetX,\n scale: isHovered ? (dist === 0 ? 1.05 : 1) : 1\n }}\n transition={{\n type: \"spring\",\n stiffness: 180,\n damping: 20,\n mass: 0.8,\n duration\n }}\n style={{\n zIndex: 3 - Math.abs(dist)\n }}\n className={`absolute inset-0 rounded-2xl shadow-[0_4px_10px_-2px_rgba(0,0,0,0.15)] border border-white/5 ${cardClassName}`}\n />\n );\n })}\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-long-arc-5",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-long-arc-5.tsx",
|
|
6
|
+
"registryFile": "card-long-arc-5.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-long-arc-5';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface CardLongArc5Props {\n angle?: number;\n gap?: number;\n yOffset?: number;\n duration?: number;\n hoverIntensity?: number;\n cardClassName?: string;\n className?: string;\n}\n\nexport default function CardLongArc5({\n angle = 15,\n gap = 140,\n yOffset = 20,\n duration = 0.5,\n hoverIntensity = 1,\n cardClassName = 'bg-neutral-800',\n className = ''\n}: CardLongArc5Props) {\n const [isHovered, setIsHovered] = useState(false);\n const cards = [0, 1, 2, 3, 4];\n const center = 2;\n\n return (\n <div \n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`relative w-[8rem] h-[11rem] cursor-pointer flex items-center justify-center ${className}`}\n >\n {cards.map((i) => {\n const dist = i - center;\n const targetRotate = isHovered ? dist * (angle / center) * hoverIntensity : 0;\n const targetX = isHovered ? dist * (gap / center) * hoverIntensity : 0;\n \n let targetY = 0;\n if (isHovered) {\n if (Math.abs(dist) === 2) targetY = yOffset;\n else if (Math.abs(dist) === 1) targetY = 0.25 * yOffset;\n else targetY = -0.25 * yOffset;\n targetY = targetY * hoverIntensity;\n }\n\n return (\n <motion.div\n key={i}\n animate={{\n rotate: targetRotate,\n x: targetX,\n y: targetY,\n scale: isHovered ? (dist === 0 ? 1.05 : 1) : 1\n }}\n transition={{\n type: \"spring\",\n stiffness: 180,\n damping: 20,\n mass: 0.8,\n duration\n }}\n style={{\n zIndex: 3 - Math.abs(dist),\n originX: 0.5,\n originY: 1\n }}\n className={`absolute inset-0 rounded-2xl shadow-[0_4px_10px_-2px_rgba(0,0,0,0.15)] border border-white/5 ${cardClassName}`}\n />\n );\n })}\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-scatter-spread",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-scatter-spread.tsx",
|
|
6
|
+
"registryFile": "card-scatter-spread.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-scatter-spread';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface CardScatterSpreadProps {\n className?: string;\n cardClassName?: string;\n}\n\nexport default function CardScatterSpread({\n className = '',\n cardClassName = 'bg-neutral-850'\n}: CardScatterSpreadProps) {\n const [isHovered, setIsHovered] = useState(false);\n const cards = [0, 1, 2, 3, 4];\n\n const offsets = [\n { x: -75, y: 15, rotate: -14 },\n { x: -35, y: -15, rotate: -6 },\n { x: 0, y: -30, rotate: 2 },\n { x: 35, y: -10, rotate: 8 },\n { x: 75, y: 20, rotate: 15 }\n ];\n\n return (\n <div \n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`relative w-[8rem] h-[11rem] cursor-pointer flex items-center justify-center ${className}`}\n >\n {cards.map((i) => {\n const targetX = isHovered ? offsets[i].x : 0;\n const targetY = isHovered ? offsets[i].y : 0;\n const targetRotate = isHovered ? offsets[i].rotate : 0;\n\n return (\n <motion.div\n key={i}\n animate={{\n x: targetX,\n y: targetY,\n rotate: targetRotate,\n scale: isHovered ? (i === 2 ? 1.05 : 0.98) : 1\n }}\n transition={{ type: \"spring\", stiffness: 180, damping: 20, mass: 0.8 }}\n style={{ zIndex: 5 - Math.abs(i - 2) }}\n className={`absolute inset-0 rounded-2xl shadow-[0_4px_12px_rgba(0,0,0,0.15)] border border-white/5 ${cardClassName}`}\n />\n );\n })}\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-stack-peel",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-stack-peel.tsx",
|
|
6
|
+
"sourcePath": "components/css-animations/whimsical/RedesignedPhysicsTrios.tsx",
|
|
7
|
+
"registryFile": "card-stack-peel.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"default"
|
|
10
|
+
],
|
|
11
|
+
"dependencies": [],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"previewMode": "client",
|
|
14
|
+
"content": "// @ts-nocheck -- Generated JavaScript bundle; edit the maintained catalog source to retain TypeScript types.\n\"use client\";\n\"use client\";\n\n// catalog/components/css-animations/whimsical/RedesignedPhysicsTrios.tsx\nimport { useState as useState2 } from \"react\";\n\n// catalog/hooks/useLoopFlg.ts\nimport { useState, useEffect } from \"react\";\nfunction useLoopFlg(enable = true, interval = 2e3) {\n const [flag, setFlag] = useState(0);\n useEffect(() => {\n if (!enable) return;\n const timer = setInterval(() => {\n setFlag((prev) => prev + 1);\n }, interval);\n return () => clearInterval(timer);\n }, [enable, interval]);\n return flag;\n}\n\n// catalog/components/css-animations/whimsical/RedesignedPhysicsTrios.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction CardStackPeel({\n trigger = \"hover\",\n loop = true,\n theme = \"dark\",\n className = \"\"\n}) {\n const loopFlg = useLoopFlg(true, 3e3);\n const [hoverKey, setHoverKey] = useState2(0);\n const activeKey = loop ? `${loopFlg}-${hoverKey}` : `${hoverKey}`;\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n className: `relative w-full h-full rounded-2xl overflow-hidden flex justify-center items-center cursor-pointer transition-all duration-300 bg-transparent ${className}`,\n onMouseEnter: trigger === \"hover\" ? () => setHoverKey((k) => k + 1) : void 0,\n onClick: trigger === \"click\" ? () => setHoverKey((k) => k + 1) : void 0,\n children: [\n /* @__PURE__ */ jsx(\"style\", { children: `\n @keyframes card_peel_drop {\n 0%, 100% { transform: translateY(0) rotateX(0deg); opacity: 1; }\n 40%, 75% { transform: perspective(400px) translateY(24px) rotateX(25deg); opacity: 0.9; }\n }\n .card-top-sheet {\n transform-origin: top center;\n animation: card_peel_drop 3s cubic-bezier(0.34, 1.56, 0.64, 1) infinite both;\n }\n ` }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"relative w-[110px] h-[75px] flex items-center justify-center\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: `absolute w-[100px] h-[65px] rounded-2xl border ${theme === \"dark\" ? \"bg-[#1c1c1e] border-[#2c2c2e]\" : \"bg-white border-[#d2d2d7]\"}`, children: /* @__PURE__ */ jsx(\"div\", { className: \"absolute top-3 left-3 w-10 h-1.5 rounded-full bg-blue-500\" }) }),\n /* @__PURE__ */ jsx(\"div\", { className: \"absolute w-[100px] h-[65px] rounded-2xl card-top-sheet bg-blue-600 shadow-md flex items-center justify-center\", children: /* @__PURE__ */ jsx(\"div\", { className: \"w-12 h-2 rounded-full bg-white/90\" }) })\n ] }, activeKey)\n ]\n }\n );\n}\n\n// catalog/registry-bindings/card-stack-peel.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar PRESET_PROPS = { \"loop\": true, \"trigger\": \"hover\", \"theme\": \"dark\" };\nfunction MovaComponentAdapter(props = {}) {\n return /* @__PURE__ */ jsx2(CardStackPeel, { ...PRESET_PROPS, ...props });\n}\nexport {\n MovaComponentAdapter as default\n};\n"
|
|
15
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-stamp-arc",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-stamp-arc.tsx",
|
|
6
|
+
"registryFile": "card-stamp-arc.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-stamp-arc';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface CardStampArcProps {\n arc?: number;\n spread?: number;\n yOffset?: number;\n isColorful?: boolean;\n duration?: number;\n hoverIntensity?: number;\n className?: string;\n}\n\nexport default function CardStampArc({\n arc = 25,\n spread = 180,\n yOffset = 40,\n isColorful = false,\n duration = 0.5,\n hoverIntensity = 1,\n className = ''\n}: CardStampArcProps) {\n const [isHovered, setIsHovered] = useState(false);\n\n const stamps = [\n { id: 0, color: 'bg-red-500' },\n { id: 1, color: 'bg-blue-500' },\n { id: 2, color: 'bg-emerald-500' },\n { id: 3, color: 'bg-amber-500' },\n { id: 4, color: 'bg-purple-500' }\n ];\n\n return (\n <div \n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`relative w-[8rem] h-[11rem] cursor-pointer flex items-center justify-center ${className}`}\n >\n {stamps.map((stamp, i) => {\n const dist = i - 2;\n \n let targetRotate = 0;\n let targetX = 0;\n let targetY = 0;\n\n if (isHovered) {\n if (i === 0) {\n targetRotate = -1 * arc;\n targetX = -1 * spread;\n targetY = yOffset;\n } else if (i === 1) {\n targetRotate = -0.48 * arc;\n targetX = -0.5 * spread;\n targetY = 0.25 * yOffset;\n } else if (i === 2) {\n targetRotate = 0;\n targetX = 0;\n targetY = -0.25 * yOffset;\n } else if (i === 3) {\n targetRotate = 0.48 * arc;\n targetX = 0.5 * spread;\n targetY = 0.25 * yOffset;\n } else if (i === 4) {\n targetRotate = arc;\n targetX = spread;\n targetY = yOffset;\n }\n\n targetRotate *= hoverIntensity;\n targetX *= hoverIntensity;\n targetY *= hoverIntensity;\n }\n\n return (\n <motion.div\n key={stamp.id}\n animate={{\n rotate: targetRotate,\n x: targetX,\n y: targetY,\n scale: isHovered ? (dist === 0 ? 1.05 : 1) : 1\n }}\n transition={{\n type: \"spring\",\n stiffness: 180,\n damping: 20,\n mass: 0.8,\n duration\n }}\n style={{\n zIndex: 3 - Math.abs(dist),\n originX: 0.5,\n originY: 1\n }}\n className={`absolute inset-0 rounded-2xl shadow-[0_4px_10px_-2px_rgba(0,0,0,0.15)] border-2 border-dashed border-white/40 ${\n isColorful ? stamp.color : 'bg-neutral-800'\n }`}\n />\n );\n })}\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-time-machine-mono",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-time-machine-mono.tsx",
|
|
6
|
+
"registryFile": "card-time-machine-mono.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-time-machine-mono';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState, useMemo } from 'react';\nimport { motion } from 'framer-motion';\n\nconst TIMELINE_DATA = [\n { date: 'Today', src: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?auto=format&fit=crop&w=600&q=80', title: 'Sunset Beach' },\n { date: '1d ago', src: 'https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=600&q=80', title: 'Misty Mountains' },\n { date: '1w ago', src: 'https://images.unsplash.com/photo-1447752875215-b2761acb3c5d?auto=format&fit=crop&w=600&q=80', title: 'Forest Trail' },\n { date: '1m ago', src: 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?auto=format&fit=crop&w=600&q=80', title: 'Sunlight Woods' },\n { date: '1y ago', src: 'https://images.unsplash.com/photo-1501854140801-50d01698950b?auto=format&fit=crop&w=600&q=80', title: 'Green Hills' },\n];\n\ninterface CardTimeMachineProps {\n className?: string;\n isMonochrome?: boolean;\n}\n\nexport default function CardTimeMachine({\n className = '',\n isMonochrome = true\n}: CardTimeMachineProps) {\n const [activeIndex, setActiveIndex] = useState(0);\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\n const handleTimelineHover = (index: number) => {\n setHoveredIndex(index);\n setActiveIndex(Math.round(index));\n };\n\n const timelineNodes = useMemo(() => {\n const nodes: { type: 'main' | 'sub'; index: number; date?: string }[] = [];\n TIMELINE_DATA.forEach((item, i) => {\n nodes.push({ type: 'main', index: i, date: item.date });\n if (i < TIMELINE_DATA.length - 1) {\n for (let j = 0; j < 2; j++) {\n nodes.push({ type: 'sub', index: i + (j + 1) * 0.33 });\n }\n }\n });\n return nodes;\n }, []);\n\n return (\n <div className={`w-full h-full bg-[#09090b]/80 flex flex-row items-center justify-center gap-6 relative overflow-hidden rounded-2xl border border-white/5 p-4 ${className}`}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"absolute w-0 h-0\"\n version=\"1.1\"\n >\n <defs>\n <filter id=\"SkiperSquiCircleFilterLayout\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"6\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -6\"\n result=\"goo\"\n />\n <feBlend in=\"SourceGraphic\" in2=\"goo\" />\n </filter>\n </defs>\n </svg>\n \n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_center,rgba(255,255,255,0.03),transparent_70%)] pointer-events-none\" />\n\n <div \n className=\"relative flex-1 max-w-[290px] aspect-[4/3] flex items-center justify-center\"\n style={{ perspective: '800px' }}\n >\n {TIMELINE_DATA.map((item, i) => {\n const offset = i - activeIndex;\n const isPast = i < activeIndex;\n\n return (\n <motion.div\n key={i}\n className=\"absolute rounded-2xl flex h-[135px] w-[220px] origin-center flex-col overflow-hidden pointer-events-none\"\n initial={false}\n animate={{\n z: isPast ? 200 : -offset * 60,\n y: isPast ? 300 : -offset * 12,\n rotateX: isPast ? -20 : offset * 2,\n opacity: isPast ? 0 : 1 - Math.abs(offset) * 0.2,\n scale: isPast ? 1.3 : 1,\n }}\n transition={{ \n type: 'spring', \n stiffness: 250, \n damping: 25, \n mass: 0.8 \n }}\n style={{\n zIndex: TIMELINE_DATA.length - i,\n filter: \"url(#SkiperSquiCircleFilterLayout)\"\n }}\n >\n {isMonochrome ? (\n <div \n className=\"w-full h-full rounded-2xl bg-neutral-400 dark:bg-neutral-800 border border-neutral-200/20 shadow-lg flex items-center justify-center text-neutral-600 dark:text-neutral-400 font-bold text-sm\"\n >\n {i + 1}\n </div>\n ) : (\n <img src={item.src} alt={item.title} referrerPolicy=\"no-referrer\" className=\"w-full h-full object-cover\" />\n )}\n <div className=\"absolute inset-0 bg-black/10 pointer-events-none\" />\n </motion.div>\n );\n })}\n </div>\n\n <div \n className=\"relative flex flex-col items-end z-50 py-2 px-1\"\n onMouseLeave={() => setHoveredIndex(null)}\n >\n {timelineNodes.map((node, i) => {\n if (node.type === 'main') {\n const index = node.index;\n const isSelected = activeIndex === index;\n\n return (\n <button\n key={`main-${index}`}\n className=\"relative inline-flex items-center justify-end py-[1px] w-20 group cursor-pointer border-0 bg-transparent\"\n onMouseEnter={() => handleTimelineHover(index)}\n onClick={(e) => {\n e.stopPropagation();\n setActiveIndex(index);\n }}\n >\n {hoveredIndex === index ? (\n <motion.span\n className={`absolute top-0 right-10 text-[10px] font-semibold whitespace-nowrap ${\n isSelected\n ? 'text-blue-500'\n : 'text-white/90'\n }`}\n initial={{ opacity: 0, filter: `blur(2px)`, scale: 0.8 }}\n animate={{ opacity: 1, filter: `blur(0px)`, scale: 1 }}\n transition={{ duration: 0.15 }}\n >\n {node.date}\n </motion.span>\n ) : null}\n <motion.div\n className={`h-[3px] w-[24px] rounded-full origin-right transition-colors ${\n isSelected\n ? 'bg-blue-500'\n : 'bg-white/50 group-hover:bg-white/80'\n }`}\n animate={{\n scaleX: hoveredIndex === null ? 1 : (isSelected ? 1.4 : (Math.abs(index - hoveredIndex) < 0.5 ? 1.25 : 1)),\n }}\n transition={{ type: 'spring', stiffness: 400, damping: 25 }}\n />\n </button>\n );\n } else {\n const isHoveringNear = hoveredIndex !== null && Math.abs(node.index - hoveredIndex) <= 0.5;\n\n return (\n <div \n key={`sub-${node.index}`} \n className=\"py-[1px] w-20 flex justify-end cursor-pointer\"\n onMouseEnter={() => handleTimelineHover(node.index)}\n onClick={(e) => {\n e.stopPropagation();\n setActiveIndex(Math.round(node.index));\n }}\n >\n <motion.div\n className=\"h-[3px] w-[24px] rounded-full bg-white/20 origin-right\"\n animate={{\n scaleX: hoveredIndex === null ? 1 : (isHoveringNear ? 1.15 : 1),\n opacity: hoveredIndex === null ? 0.3 : (isHoveringNear ? 0.5 : 0.3)\n }}\n transition={{ type: 'spring', stiffness: 400, damping: 25 }}\n />\n </div>\n );\n }\n })}\n </div>\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-time-machine",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-time-machine.tsx",
|
|
6
|
+
"registryFile": "card-time-machine.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-time-machine';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState, useMemo } from 'react';\nimport { motion } from 'framer-motion';\n\nconst TIMELINE_DATA = [\n { date: 'Today', src: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?auto=format&fit=crop&w=600&q=80', title: 'Sunset Beach' },\n { date: '1d ago', src: 'https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?auto=format&fit=crop&w=600&q=80', title: 'Misty Mountains' },\n { date: '1w ago', src: 'https://images.unsplash.com/photo-1447752875215-b2761acb3c5d?auto=format&fit=crop&w=600&q=80', title: 'Forest Trail' },\n { date: '1m ago', src: 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?auto=format&fit=crop&w=600&q=80', title: 'Sunlight Woods' },\n { date: '1y ago', src: 'https://images.unsplash.com/photo-1501854140801-50d01698950b?auto=format&fit=crop&w=600&q=80', title: 'Green Hills' },\n];\n\ninterface CardTimeMachineProps {\n className?: string;\n}\n\nexport default function CardTimeMachine({\n className = ''\n}: CardTimeMachineProps) {\n const [activeIndex, setActiveIndex] = useState(0);\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\n const handleTimelineHover = (index: number) => {\n setHoveredIndex(index);\n setActiveIndex(Math.round(index));\n };\n\n const timelineNodes = useMemo(() => {\n const nodes: { type: 'main' | 'sub'; index: number; date?: string }[] = [];\n TIMELINE_DATA.forEach((item, i) => {\n nodes.push({ type: 'main', index: i, date: item.date });\n if (i < TIMELINE_DATA.length - 1) {\n for (let j = 0; j < 2; j++) {\n nodes.push({ type: 'sub', index: i + (j + 1) * 0.33 });\n }\n }\n });\n return nodes;\n }, []);\n\n return (\n <div className={`w-full h-full bg-[#09090b]/80 flex flex-row items-center justify-center gap-6 relative overflow-hidden rounded-2xl border border-white/5 p-4 ${className}`}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"absolute w-0 h-0\"\n version=\"1.1\"\n >\n <defs>\n <filter id=\"SkiperSquiCircleFilterLayout\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"6\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -6\"\n result=\"goo\"\n />\n <feBlend in=\"SourceGraphic\" in2=\"goo\" />\n </filter>\n </defs>\n </svg>\n \n <div className=\"absolute inset-0 bg-[radial-gradient(ellipse_at_center,rgba(255,255,255,0.03),transparent_70%)] pointer-events-none\" />\n\n <div \n className=\"relative flex-1 max-w-[290px] aspect-[4/3] flex items-center justify-center\"\n style={{ perspective: '800px' }}\n >\n {TIMELINE_DATA.map((item, i) => {\n const offset = i - activeIndex;\n const isPast = i < activeIndex;\n\n return (\n <motion.div\n key={i}\n className=\"absolute rounded-2xl flex h-[135px] w-[220px] origin-center flex-col overflow-hidden pointer-events-none\"\n initial={false}\n animate={{\n z: isPast ? 200 : -offset * 60,\n y: isPast ? 300 : -offset * 12,\n rotateX: isPast ? -20 : offset * 2,\n opacity: isPast ? 0 : 1 - Math.abs(offset) * 0.2,\n scale: isPast ? 1.3 : 1,\n }}\n transition={{ \n type: 'spring', \n stiffness: 250, \n damping: 25, \n mass: 0.8 \n }}\n style={{\n zIndex: TIMELINE_DATA.length - i,\n filter: \"url(#SkiperSquiCircleFilterLayout)\"\n }}\n >\n <img src={item.src} alt={item.title} referrerPolicy=\"no-referrer\" className=\"w-full h-full object-cover\" />\n <div className=\"absolute inset-0 bg-black/10 pointer-events-none\" />\n </motion.div>\n );\n })}\n </div>\n\n <div \n className=\"relative flex flex-col items-end z-50 py-2 px-1\"\n onMouseLeave={() => setHoveredIndex(null)}\n >\n {timelineNodes.map((node, i) => {\n if (node.type === 'main') {\n const index = node.index;\n const isSelected = activeIndex === index;\n\n return (\n <button\n key={`main-${index}`}\n className=\"relative inline-flex items-center justify-end py-[1px] w-20 group cursor-pointer border-0 bg-transparent\"\n onMouseEnter={() => handleTimelineHover(index)}\n onClick={(e) => {\n e.stopPropagation();\n setActiveIndex(index);\n }}\n >\n {hoveredIndex === index ? (\n <motion.span\n className={`absolute top-0 right-10 text-[10px] font-semibold whitespace-nowrap ${\n isSelected\n ? 'text-blue-500'\n : 'text-white/90'\n }`}\n initial={{ opacity: 0, filter: `blur(2px)`, scale: 0.8 }}\n animate={{ opacity: 1, filter: `blur(0px)`, scale: 1 }}\n transition={{ duration: 0.15 }}\n >\n {node.date}\n </motion.span>\n ) : null}\n <motion.div\n className={`h-[3px] w-[24px] rounded-full origin-right transition-colors ${\n isSelected\n ? 'bg-blue-500'\n : 'bg-white/50 group-hover:bg-white/80'\n }`}\n animate={{\n scaleX: hoveredIndex === null ? 1 : (isSelected ? 1.4 : (Math.abs(index - hoveredIndex) < 0.5 ? 1.25 : 1)),\n }}\n transition={{ type: 'spring', stiffness: 400, damping: 25 }}\n />\n </button>\n );\n } else {\n const isHoveringNear = hoveredIndex !== null && Math.abs(node.index - hoveredIndex) <= 0.5;\n\n return (\n <div \n key={`sub-${node.index}`} \n className=\"py-[1px] w-20 flex justify-end cursor-pointer\"\n onMouseEnter={() => handleTimelineHover(node.index)}\n onClick={(e) => {\n e.stopPropagation();\n setActiveIndex(Math.round(node.index));\n }}\n >\n <motion.div\n className=\"h-[3px] w-[24px] rounded-full bg-white/20 origin-right\"\n animate={{\n scaleX: hoveredIndex === null ? 1 : (isHoveringNear ? 1.15 : 1),\n opacity: hoveredIndex === null ? 0.3 : (isHoveringNear ? 0.5 : 0.3)\n }}\n transition={{ type: 'spring', stiffness: 400, damping: 25 }}\n />\n </div>\n );\n }\n })}\n </div>\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "card-wheel-fan",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "card-wheel-fan.tsx",
|
|
6
|
+
"registryFile": "card-wheel-fan.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import MovaComponent from './card-wheel-fan';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface CardWheelFanProps {\n className?: string;\n cardClassName?: string;\n}\n\nexport default function CardWheelFan({\n className = '',\n cardClassName = 'bg-neutral-800'\n}: CardWheelFanProps) {\n const [isHovered, setIsHovered] = useState(false);\n const cards = [0, 1, 2, 3, 4];\n const center = 2;\n\n return (\n <div \n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={`relative w-[8rem] h-[11rem] cursor-pointer flex items-center justify-center ${className}`}\n >\n {cards.map((i) => {\n const dist = i - center;\n const targetRotate = isHovered ? dist * 18 : 0;\n \n let targetY = 0;\n if (isHovered) {\n if (Math.abs(dist) === 2) targetY = -8;\n else if (Math.abs(dist) === 1) targetY = -22;\n else targetY = -28;\n }\n\n return (\n <motion.div\n key={i}\n animate={{\n rotate: targetRotate,\n y: targetY,\n scale: isHovered ? (dist === 0 ? 1.05 : 0.98) : 1\n }}\n transition={{ type: \"spring\", stiffness: 180, damping: 20, mass: 0.8 }}\n style={{\n zIndex: 5 - Math.abs(dist),\n originX: 0.5,\n originY: 1.1\n }}\n className={`absolute inset-0 rounded-2xl shadow-[0_4px_12px_rgba(0,0,0,0.15)] border border-white/5 ${cardClassName}`}\n />\n );\n })}\n </div>\n );\n}"
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "category-select",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "category-select.tsx",
|
|
6
|
+
"sourcePath": "components/css-animations/yui-components/YuiUiKit1.tsx",
|
|
7
|
+
"registryFile": "category-select.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"default"
|
|
10
|
+
],
|
|
11
|
+
"dependencies": [
|
|
12
|
+
"framer-motion",
|
|
13
|
+
"lucide-react"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"previewMode": "client",
|
|
17
|
+
"content": "// @ts-nocheck -- Generated JavaScript bundle; edit the maintained catalog source to retain TypeScript types.\n\"use client\";\n\"use client\";\n\n// catalog/components/css-animations/yui-components/YuiUiKit1.tsx\nimport { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n ChevronDown,\n ExternalLink,\n Plus,\n Minus,\n Sun,\n Moon,\n X,\n ChevronLeft,\n ChevronRight\n} from \"lucide-react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction CategorySelect({ theme = \"dark\" }) {\n const [isOpen, setIsOpen] = useState(false);\n const [selected, setSelected] = useState(\"Category 1\");\n const options = [\"Category 1\", \"Category 2\", \"Category 3\"];\n return /* @__PURE__ */ jsxs(\"div\", { className: \"relative flex flex-col items-center select-none\", children: [\n /* @__PURE__ */ jsxs(\n motion.button,\n {\n whileTap: { scale: 0.96 },\n onClick: () => setIsOpen(!isOpen),\n className: `flex items-center justify-between gap-3 px-4 py-2.5 rounded-2xl border text-xs font-semibold shadow-sm transition-all cursor-pointer ${theme === \"dark\" ? \"bg-[#181818] border-white/10 text-white hover:bg-neutral-800\" : \"bg-white border-neutral-200 text-neutral-900 hover:bg-neutral-50\"}`,\n children: [\n /* @__PURE__ */ jsx(\"span\", { children: selected }),\n /* @__PURE__ */ jsx(motion.div, { animate: { rotate: isOpen ? 180 : 0 }, transition: { duration: 0.2 }, children: /* @__PURE__ */ jsx(ChevronDown, { className: \"w-3.5 h-3.5 text-neutral-400\" }) })\n ]\n }\n ),\n /* @__PURE__ */ jsx(AnimatePresence, { children: isOpen && /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { opacity: 0, y: -6, scale: 0.95 },\n animate: { opacity: 1, y: 4, scale: 1 },\n exit: { opacity: 0, y: -6, scale: 0.95 },\n transition: { duration: 0.2, ease: [0.16, 1, 0.3, 1] },\n className: `absolute top-full z-30 w-36 p-1 rounded-2xl border shadow-xl flex flex-col gap-0.5 ${theme === \"dark\" ? \"bg-[#181818] border-white/10\" : \"bg-white border-neutral-200\"}`,\n children: options.map((opt) => /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: () => {\n setSelected(opt);\n setIsOpen(false);\n },\n className: `w-full text-left px-3 py-2 rounded-xl text-xs font-medium transition-colors cursor-pointer border-0 ${selected === opt ? theme === \"dark\" ? \"bg-white/10 text-white font-semibold\" : \"bg-neutral-100 text-black font-semibold\" : theme === \"dark\" ? \"text-neutral-400 hover:text-white hover:bg-white/5\" : \"text-neutral-600 hover:text-black hover:bg-neutral-50\"}`,\n children: opt\n },\n opt\n ))\n }\n ) })\n ] });\n}\n\n// catalog/registry-bindings/category-select.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar PRESET_PROPS = { \"theme\": \"dark\" };\nfunction MovaComponentAdapter(props = {}) {\n return /* @__PURE__ */ jsx2(CategorySelect, { ...PRESET_PROPS, ...props });\n}\nexport {\n MovaComponentAdapter as default\n};\n"
|
|
18
|
+
}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "character-stagger",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
3
5
|
"file": "character-stagger.tsx",
|
|
6
|
+
"sourcePath": "ui/text/character-stagger.tsx",
|
|
7
|
+
"registryFile": "character-stagger.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"CharacterStagger"
|
|
10
|
+
],
|
|
4
11
|
"dependencies": [
|
|
5
12
|
"framer-motion"
|
|
6
13
|
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"previewMode": "client",
|
|
7
16
|
"content": "\"use client\";\nimport React from 'react';\nimport { motion, type Variants } from 'framer-motion';\n\ninterface CharacterStaggerProps {\n text: string;\n duration?: number;\n staggerDelay?: number;\n yOffset?: number;\n className?: string;\n}\n\nexport function CharacterStagger({\n text,\n duration = 0.4,\n staggerDelay = 0.015,\n yOffset = 15,\n className = '',\n}: CharacterStaggerProps) {\n const characters = Array.from(text);\n\n const containerVariants: Variants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: staggerDelay,\n },\n },\n };\n\n const charVariants: Variants = {\n hidden: { opacity: 0, y: yOffset, scale: 0.8 },\n visible: {\n opacity: 1,\n y: 0,\n scale: 1,\n transition: {\n type: 'spring',\n stiffness: 300,\n damping: 18,\n mass: 0.8,\n duration,\n },\n },\n };\n\n return (\n <motion.div\n variants={containerVariants}\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once: true, margin: '-10%' }}\n className={`inline-block ${className}`}\n >\n {characters.map((char, index) => (\n <motion.span\n key={index}\n variants={charVariants}\n className=\"inline-block whitespace-pre\"\n >\n {char}\n </motion.span>\n ))}\n </motion.div>\n );\n}\n"
|
|
8
17
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "checkbox-draw",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "checkbox-draw.tsx",
|
|
6
|
+
"registryFile": "checkbox-draw.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion",
|
|
12
|
+
"lucide-react"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"previewMode": "client",
|
|
16
|
+
"usage": "import MovaComponent from './checkbox-draw';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
17
|
+
"css": "",
|
|
18
|
+
"content": "// @ts-nocheck -- Generated JavaScript bundle; edit the maintained catalog source to retain TypeScript types.\n\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\n// src/components/forms/AnimatedFormElement.tsx\nimport { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Eye, EyeOff, Search, Check, Upload, ChevronDown, X, Loader2 } from \"lucide-react\";\n\n// src/hooks/useWebHaptics.ts\nimport { useCallback } from \"react\";\nfunction useWebHaptics() {\n const trigger = useCallback((type = \"light\") => {\n if (typeof window === \"undefined\" || !window.navigator || !window.navigator.vibrate) {\n return false;\n }\n try {\n switch (type) {\n case \"light\":\n return window.navigator.vibrate(10);\n case \"medium\":\n return window.navigator.vibrate(25);\n case \"heavy\":\n return window.navigator.vibrate(50);\n case \"success\":\n return window.navigator.vibrate([15, 60, 15]);\n case \"warning\":\n return window.navigator.vibrate([30, 60, 30]);\n case \"error\":\n return window.navigator.vibrate([60, 60, 60, 60, 60]);\n default:\n return window.navigator.vibrate(type);\n }\n } catch (e) {\n console.warn(\"Vibration API error:\", e);\n return false;\n }\n }, []);\n return { trigger };\n}\n\n// src/components/forms/AnimatedFormElement.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar AnimatedFormElement = ({ config, theme }) => {\n const [val, setVal] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [showPassword, setShowPassword] = useState(false);\n const [isChecked, setIsChecked] = useState(false);\n const [radioSelected, setRadioSelected] = useState(false);\n const [shakeKey, setShakeKey] = useState(0);\n const [hasError, setHasError] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [selectOpen, setSelectOpen] = useState(false);\n const [selectedOption, setSelectedOption] = useState(\"React\");\n const [chips, setChips] = useState([\"Next.js\", \"Tailwind\", \"Motion\"]);\n const [otp, setOtp] = useState([\"\", \"\", \"\", \"\"]);\n const [sliderVal, setSliderVal] = useState(65);\n const [submitState, setSubmitState] = useState(\"idle\");\n const { trigger: triggerHaptic } = useWebHaptics();\n const isDark = theme === \"dark\";\n const triggerErrorShake = () => {\n triggerHaptic(\"error\");\n setHasError(true);\n setShakeKey((prev) => prev + 1);\n setTimeout(() => setHasError(false), 800);\n };\n const handleFormSubmit = () => {\n triggerHaptic(\"medium\");\n setSubmitState(\"loading\");\n setTimeout(() => {\n setSubmitState(\"success\");\n triggerHaptic(\"success\");\n setTimeout(() => setSubmitState(\"idle\"), 2e3);\n }, 1200);\n };\n return /* @__PURE__ */ jsx(\"div\", { className: \"relative flex items-center justify-center w-full h-full p-4 overflow-hidden select-none\", children: (() => {\n switch (config.interactionType) {\n case \"floating-label-input\":\n return /* @__PURE__ */ jsxs(\"div\", { className: \"relative w-full max-w-[240px]\", children: [\n /* @__PURE__ */ jsx(\n motion.label,\n {\n animate: {\n y: isFocused || val ? -24 : 0,\n scale: isFocused || val ? 0.85 : 1,\n color: isFocused ? isDark ? \"#3b82f6\" : \"#2563eb\" : isDark ? \"#9ca3af\" : \"#6b7280\"\n },\n transition: { type: \"spring\", stiffness: 400, damping: 25 },\n className: \"absolute left-3 top-2.5 origin-left pointer-events-none text-sm font-medium\",\n children: \"Email Address\"\n }\n ),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"text\",\n value: val,\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false),\n onChange: (e) => setVal(e.target.value),\n className: `w-full px-3 py-2 pt-3 rounded-xl border text-sm outline-none transition-colors ${isDark ? \"bg-neutral-900 border-neutral-700 text-white focus:border-blue-500\" : \"bg-white border-neutral-300 text-black focus:border-blue-600\"}`\n }\n )\n ] });\n case \"input-focus-glow\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"relative w-full max-w-[240px]\", children: /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"text\",\n placeholder: \"Focus for glow...\",\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false),\n className: `w-full px-4 py-2.5 rounded-xl border text-sm outline-none transition-all duration-300 ${isDark ? \"bg-neutral-900 border-neutral-700 text-white focus:border-indigo-500\" : \"bg-white border-neutral-300 text-black focus:border-indigo-500\"} ${isFocused ? \"ring-4 ring-indigo-500/30 shadow-lg shadow-indigo-500/20\" : \"\"}`\n }\n ) });\n case \"password-toggle\":\n return /* @__PURE__ */ jsxs(\"div\", { className: \"relative w-full max-w-[240px]\", children: [\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: showPassword ? \"text\" : \"password\",\n defaultValue: \"secretpass123\",\n className: `w-full pl-3 pr-10 py-2.5 rounded-xl border text-sm outline-none ${isDark ? \"bg-neutral-900 border-neutral-700 text-white\" : \"bg-white border-neutral-300 text-black\"}`\n }\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n triggerHaptic(\"light\");\n setShowPassword(!showPassword);\n },\n className: \"absolute right-2.5 top-2.5 text-neutral-400 hover:text-neutral-200 cursor-pointer border-0 bg-transparent\",\n children: /* @__PURE__ */ jsx(motion.div, { animate: { scale: showPassword ? 1.1 : 1, rotate: showPassword ? 0 : -10 }, children: showPassword ? /* @__PURE__ */ jsx(Eye, { className: \"w-4 h-4 text-indigo-400\" }) : /* @__PURE__ */ jsx(EyeOff, { className: \"w-4 h-4\" }) })\n }\n )\n ] });\n case \"search-expand\":\n return /* @__PURE__ */ jsxs(\n motion.div,\n {\n animate: { width: isFocused ? 240 : 160 },\n transition: { type: \"spring\", stiffness: 400, damping: 28 },\n className: `relative flex items-center rounded-full border px-3 py-1.5 transition-colors ${isDark ? \"bg-neutral-900 border-neutral-700 text-white\" : \"bg-white border-neutral-300 text-black\"}`,\n children: [\n /* @__PURE__ */ jsx(Search, { className: \"w-4 h-4 text-neutral-400 shrink-0 mr-2\" }),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"text\",\n placeholder: \"Search components...\",\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false),\n className: \"w-full text-xs bg-transparent border-0 outline-none\"\n }\n )\n ]\n }\n );\n case \"checkbox-draw\":\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n triggerHaptic(\"light\");\n setIsChecked(!isChecked);\n },\n className: \"flex items-center gap-3 cursor-pointer border-0 bg-transparent\",\n children: [\n /* @__PURE__ */ jsx(\n motion.div,\n {\n animate: { scale: isChecked ? [1, 1.15, 1] : 1 },\n className: `w-6 h-6 rounded-lg border flex items-center justify-center transition-colors ${isChecked ? \"bg-emerald-500 border-emerald-500 text-white\" : isDark ? \"border-neutral-600 bg-neutral-900\" : \"border-neutral-300 bg-white\"}`,\n children: isChecked && /* @__PURE__ */ jsx(\n motion.svg,\n {\n className: \"w-4 h-4 text-white\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"3.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: /* @__PURE__ */ jsx(\n motion.path,\n {\n d: \"M20 6L9 17l-5-5\",\n initial: { pathLength: 0 },\n animate: { pathLength: 1 },\n transition: { duration: 0.2 }\n }\n )\n }\n )\n }\n ),\n /* @__PURE__ */ jsx(\"span\", { className: `text-sm font-medium ${isDark ? \"text-white\" : \"text-black\"}`, children: \"Accept terms\" })\n ]\n }\n );\n case \"radio-scale\":\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n triggerHaptic(\"light\");\n setRadioSelected(!radioSelected);\n },\n className: \"flex items-center gap-3 cursor-pointer border-0 bg-transparent\",\n children: [\n /* @__PURE__ */ jsx(\"div\", { className: `w-6 h-6 rounded-full border flex items-center justify-center ${radioSelected ? \"border-indigo-500\" : isDark ? \"border-neutral-600 bg-neutral-900\" : \"border-neutral-300 bg-white\"}`, children: radioSelected && /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { scale: 0 },\n animate: { scale: 1 },\n transition: { type: \"spring\", stiffness: 500, damping: 25 },\n className: \"w-3.5 h-3.5 rounded-full bg-indigo-500\"\n }\n ) }),\n /* @__PURE__ */ jsx(\"span\", { className: `text-sm font-medium ${isDark ? \"text-white\" : \"text-black\"}`, children: \"Option selected\" })\n ]\n }\n );\n case \"error-shake\":\n return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col items-center gap-2 w-full max-w-[220px]\", children: [\n /* @__PURE__ */ jsx(\n motion.input,\n {\n animate: hasError ? { x: [-10, 10, -8, 8, -4, 4, 0] } : { x: 0 },\n transition: { duration: 0.5 },\n type: \"text\",\n placeholder: \"Click button to test error\",\n className: `w-full px-3 py-2 rounded-xl border text-xs outline-none ${hasError ? \"border-red-500 text-red-500 bg-red-500/10\" : isDark ? \"bg-neutral-900 border-neutral-700 text-white\" : \"bg-white border-neutral-300 text-black\"}`\n },\n shakeKey\n ),\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: triggerErrorShake,\n className: \"px-3 py-1 text-xs font-semibold rounded-lg bg-red-500/20 text-red-400 hover:bg-red-500/30 cursor-pointer border-0\",\n children: \"Trigger Error Shake\"\n }\n )\n ] });\n case \"success-check\":\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n triggerHaptic(\"success\");\n setIsSuccess(!isSuccess);\n },\n className: `relative px-4 py-2.5 rounded-2xl border flex items-center gap-2 text-sm font-semibold transition-all duration-300 cursor-pointer ${isSuccess ? \"bg-emerald-500/20 text-emerald-400 border-emerald-500/40\" : isDark ? \"bg-neutral-800 text-neutral-300 border-white/10\" : \"bg-neutral-100 text-neutral-700 border-neutral-300\"}`,\n children: [\n /* @__PURE__ */ jsx(\"span\", { children: isSuccess ? \"Verified\" : \"Click to Verify\" }),\n /* @__PURE__ */ jsx(AnimatePresence, { children: isSuccess && /* @__PURE__ */ jsx(\n motion.svg,\n {\n initial: { scale: 0 },\n animate: { scale: 1 },\n exit: { scale: 0 },\n className: \"w-4 h-4 text-emerald-400\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"3\",\n children: /* @__PURE__ */ jsx(\n motion.path,\n {\n d: \"M20 6L9 17l-5-5\",\n initial: { pathLength: 0 },\n animate: { pathLength: 1 },\n transition: { duration: 0.3 }\n }\n )\n },\n \"check\"\n ) })\n ]\n }\n );\n case \"select-dropdown\":\n return /* @__PURE__ */ jsxs(\"div\", { className: \"relative w-full max-w-[200px]\", children: [\n /* @__PURE__ */ jsxs(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n triggerHaptic(\"light\");\n setSelectOpen(!selectOpen);\n },\n className: `w-full flex items-center justify-between px-3 py-2 rounded-xl border text-xs font-medium cursor-pointer ${isDark ? \"bg-neutral-900 border-neutral-700 text-white\" : \"bg-white border-neutral-300 text-black\"}`,\n children: [\n /* @__PURE__ */ jsx(\"span\", { children: selectedOption }),\n /* @__PURE__ */ jsx(ChevronDown, { className: `w-3.5 h-3.5 transition-transform ${selectOpen ? \"rotate-180\" : \"\"}` })\n ]\n }\n ),\n /* @__PURE__ */ jsx(AnimatePresence, { children: selectOpen && /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { opacity: 0, scale: 0.95, y: -6 },\n animate: { opacity: 1, scale: 1, y: 4 },\n exit: { opacity: 0, scale: 0.95, y: -6 },\n className: `absolute left-0 right-0 z-30 p-1 rounded-xl border shadow-xl flex flex-col gap-0.5 ${isDark ? \"bg-neutral-900 border-neutral-700 text-white\" : \"bg-white border-neutral-200 text-black\"}`,\n children: [\"React\", \"Vue\", \"Svelte\", \"Solid\"].map((opt) => /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n setSelectedOption(opt);\n setSelectOpen(false);\n },\n className: `w-full text-left px-3 py-1.5 rounded-lg text-xs font-medium cursor-pointer border-0 ${selectedOption === opt ? isDark ? \"bg-white/10 text-white\" : \"bg-neutral-100 text-black\" : isDark ? \"hover:bg-white/5 text-neutral-400\" : \"hover:bg-neutral-50 text-neutral-600\"}`,\n children: opt\n },\n opt\n ))\n }\n ) })\n ] });\n case \"multi-select-chips\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-wrap gap-1.5 max-w-[240px]\", children: /* @__PURE__ */ jsx(AnimatePresence, { children: chips.map((chip) => /* @__PURE__ */ jsxs(\n motion.span,\n {\n initial: { scale: 0, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n exit: { scale: 0, opacity: 0 },\n className: `inline-flex items-center gap-1 px-2.5 py-1 rounded-full text-xs font-medium border ${isDark ? \"bg-indigo-500/20 text-indigo-300 border-indigo-500/30\" : \"bg-indigo-100 text-indigo-700 border-indigo-200\"}`,\n children: [\n chip,\n /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: () => {\n triggerHaptic(\"light\");\n setChips(chips.filter((c) => c !== chip));\n },\n className: \"hover:opacity-75 cursor-pointer border-0 bg-transparent p-0\",\n children: /* @__PURE__ */ jsx(X, { className: \"w-3 h-3\" })\n }\n )\n ]\n },\n chip\n )) }) });\n case \"textarea-auto-grow\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"w-full max-w-[240px]\", children: /* @__PURE__ */ jsx(\n \"textarea\",\n {\n rows: 2,\n placeholder: \"Type to test auto-grow...\",\n className: `w-full px-3 py-2 rounded-xl border text-xs outline-none resize-none transition-all ${isDark ? \"bg-neutral-900 border-neutral-700 text-white\" : \"bg-white border-neutral-300 text-black\"}`,\n onInput: (e) => {\n const target = e.target;\n target.style.height = \"auto\";\n target.style.height = `${target.scrollHeight}px`;\n }\n }\n ) });\n case \"otp-input\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2\", children: [0, 1, 2, 3].map((idx) => /* @__PURE__ */ jsx(\n motion.input,\n {\n id: `otp-${idx}`,\n type: \"text\",\n maxLength: 1,\n value: otp[idx],\n whileFocus: { scale: 1.1 },\n onChange: (e) => {\n const newOtp = [...otp];\n newOtp[idx] = e.target.value;\n setOtp(newOtp);\n if (e.target.value && idx < 3) {\n const next = document.getElementById(`otp-${idx + 1}`);\n next?.focus();\n }\n },\n className: `w-10 h-12 text-center text-lg font-bold rounded-xl border outline-none ${isDark ? \"bg-neutral-900 border-neutral-700 text-white focus:border-indigo-500\" : \"bg-white border-neutral-300 text-black focus:border-indigo-500\"}`\n },\n idx\n )) });\n case \"file-upload-dropzone\":\n return /* @__PURE__ */ jsxs(\n motion.div,\n {\n whileHover: { scale: 1.02 },\n className: `w-full max-w-[240px] p-4 rounded-2xl border-2 border-dashed flex flex-col items-center justify-center gap-1 cursor-pointer transition-colors ${isDark ? \"border-neutral-700 hover:border-indigo-500 bg-neutral-900/50\" : \"border-neutral-300 hover:border-indigo-500 bg-neutral-50\"}`,\n children: [\n /* @__PURE__ */ jsx(Upload, { className: \"w-6 h-6 text-indigo-500 animate-bounce\" }),\n /* @__PURE__ */ jsx(\"span\", { className: `text-xs font-semibold ${isDark ? \"text-neutral-300\" : \"text-neutral-700\"}`, children: \"Drop files here\" }),\n /* @__PURE__ */ jsx(\"span\", { className: \"text-[10px] text-neutral-400\", children: \"SVG, PNG, JPG (max 5MB)\" })\n ]\n }\n );\n case \"range-slider\":\n return /* @__PURE__ */ jsxs(\"div\", { className: \"relative w-full max-w-[220px] flex flex-col items-center\", children: [\n /* @__PURE__ */ jsxs(\"div\", { className: \"absolute -top-7 px-2 py-0.5 rounded-lg bg-indigo-500 text-white text-[11px] font-bold shadow-md\", children: [\n sliderVal,\n \"%\"\n ] }),\n /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"range\",\n min: \"0\",\n max: \"100\",\n value: sliderVal,\n onChange: (e) => setSliderVal(Number(e.target.value)),\n className: \"w-full accent-indigo-500 cursor-pointer\"\n }\n )\n ] });\n case \"form-submit-button\":\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n type: \"button\",\n onClick: handleFormSubmit,\n className: `px-6 py-2.5 rounded-full font-semibold text-sm transition-all duration-300 flex items-center justify-center gap-2 cursor-pointer border-0 shadow-lg ${submitState === \"success\" ? \"bg-emerald-500 text-white\" : submitState === \"loading\" ? \"bg-neutral-700 text-neutral-300\" : \"bg-indigo-600 text-white hover:bg-indigo-500\"}`,\n children: submitState === \"loading\" ? /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Loader2, { className: \"w-4 h-4 animate-spin text-white\" }),\n /* @__PURE__ */ jsx(\"span\", { children: \"Submitting...\" })\n ] }) : submitState === \"success\" ? /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Check, { className: \"w-4 h-4 text-white\" }),\n /* @__PURE__ */ jsx(\"span\", { children: \"Submitted!\" })\n ] }) : /* @__PURE__ */ jsx(\"span\", { children: \"Submit Form\" })\n }\n );\n default:\n return null;\n }\n })() });\n};\n\n// checkbox-draw.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction MovaComponent({ theme = \"dark\" }) {\n return /* @__PURE__ */ jsx2(AnimatedFormElement, { theme, config: { \"id\": \"frm5\", \"label\": \"Checkbox Path Draw\", \"interactionType\": \"checkbox-draw\", \"description\": \"Custom checkbox with animated SVG checkmark stroke on select.\", \"cliCommand\": \"npx @mova-ui/react add checkbox-draw\" } });\n}\nexport {\n MovaComponent as default\n};\n"
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "checkmark-draw",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "checkmark-draw.tsx",
|
|
6
|
+
"registryFile": "checkmark-draw.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"default"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion",
|
|
12
|
+
"lucide-react"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"previewMode": "client",
|
|
16
|
+
"usage": "import MovaComponent from './checkmark-draw';\n\nexport default function Demo() {\n return <MovaComponent />;\n}",
|
|
17
|
+
"css": "",
|
|
18
|
+
"content": "// @ts-nocheck -- Generated JavaScript bundle; edit the maintained catalog source to retain TypeScript types.\n\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\n// src/components/toggles/AnimatedToggle.tsx\nimport { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Sun, Moon, Lock, Unlock, Bookmark, Heart, ThumbsDown, Repeat } from \"lucide-react\";\n\n// src/hooks/useWebHaptics.ts\nimport { useCallback } from \"react\";\nfunction useWebHaptics() {\n const trigger = useCallback((type = \"light\") => {\n if (typeof window === \"undefined\" || !window.navigator || !window.navigator.vibrate) {\n return false;\n }\n try {\n switch (type) {\n case \"light\":\n return window.navigator.vibrate(10);\n case \"medium\":\n return window.navigator.vibrate(25);\n case \"heavy\":\n return window.navigator.vibrate(50);\n case \"success\":\n return window.navigator.vibrate([15, 60, 15]);\n case \"warning\":\n return window.navigator.vibrate([30, 60, 30]);\n case \"error\":\n return window.navigator.vibrate([60, 60, 60, 60, 60]);\n default:\n return window.navigator.vibrate(type);\n }\n } catch (e) {\n console.warn(\"Vibration API error:\", e);\n return false;\n }\n }, []);\n return { trigger };\n}\n\n// src/components/toggles/AnimatedToggle.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar AnimatedToggle = ({ config, theme }) => {\n const [isOn, setIsOn] = useState(false);\n const [isInit, setIsInit] = useState(false);\n const [pillTab, setPillTab] = useState(\"Daily\");\n const [likeCount, setLikeCount] = useState(42);\n const [repostCount, setRepostCount] = useState(18);\n const { trigger: triggerHaptic } = useWebHaptics();\n const isDark = theme === \"dark\";\n const handleToggle = () => {\n if (!isInit) setIsInit(true);\n triggerHaptic(\"medium\");\n setIsOn(!isOn);\n };\n switch (config.interactionType) {\n case \"double-bounce-toggle\":\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: handleToggle,\n \"data-on\": isOn ? \"true\" : \"false\",\n className: `t-toggle ${isInit ? \"is-init\" : \"\"} relative w-14 h-8 rounded-full p-1 cursor-pointer border-0 transition-colors ${isOn ? \"bg-emerald-500\" : isDark ? \"bg-neutral-800\" : \"bg-neutral-300\"}`,\n children: /* @__PURE__ */ jsx(\"span\", { className: \"t-toggle-thumb block w-6 h-6 bg-white rounded-full shadow-md pointer-events-none\" })\n }\n );\n case \"solid-switch\":\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: handleToggle,\n className: `relative w-14 h-8 rounded-full p-1 transition-colors duration-200 cursor-pointer border-0 ${isOn ? isDark ? \"bg-white text-black\" : \"bg-black text-white\" : isDark ? \"bg-neutral-800 border border-white/10\" : \"bg-neutral-200 border border-neutral-300\"}`,\n children: /* @__PURE__ */ jsx(\n motion.div,\n {\n animate: { x: isOn ? 24 : 0 },\n transition: { duration: 0.15, ease: \"easeOut\" },\n className: `w-6 h-6 rounded-full shadow-sm ${isOn ? isDark ? \"bg-black\" : \"bg-white\" : isDark ? \"bg-white\" : \"bg-black\"}`\n }\n )\n }\n );\n case \"rectangle-toggle\":\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: handleToggle,\n className: `relative w-14 h-8 rounded-md p-1 transition-colors duration-200 cursor-pointer border ${isOn ? \"bg-blue-600 border-blue-500\" : isDark ? \"bg-neutral-900 border-neutral-700\" : \"bg-neutral-100 border-neutral-300\"}`,\n children: /* @__PURE__ */ jsx(\n motion.div,\n {\n animate: { x: isOn ? 24 : 0 },\n transition: { type: \"spring\", stiffness: 500, damping: 30 },\n className: \"w-5 h-5 bg-white rounded-sm shadow-md\"\n }\n )\n }\n );\n case \"circle-toggle\":\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: handleToggle,\n className: `relative w-16 h-9 rounded-full p-1 transition-colors duration-300 cursor-pointer border-0 ${isOn ? \"bg-indigo-500\" : isDark ? \"bg-neutral-800\" : \"bg-neutral-300\"}`,\n children: /* @__PURE__ */ jsx(\n motion.div,\n {\n animate: { x: isOn ? 28 : 0 },\n transition: { type: \"spring\", stiffness: 450, damping: 25 },\n className: \"w-7 h-7 bg-white rounded-full shadow-md\"\n }\n )\n }\n );\n case \"bookmark-toggle\":\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n onClick: handleToggle,\n className: `p-3 rounded-2xl flex items-center gap-2 font-medium text-xs transition-all cursor-pointer border ${isOn ? isDark ? \"bg-blue-500/20 text-blue-400 border-blue-500/40\" : \"bg-blue-100 text-blue-600 border-blue-300\" : isDark ? \"bg-white/[0.05] text-neutral-400 border-white/10 hover:text-white\" : \"bg-neutral-100 text-neutral-600 border-neutral-200 hover:text-black\"}`,\n children: [\n /* @__PURE__ */ jsx(motion.div, { animate: { scale: isOn ? [1, 1.3, 1] : 1 }, children: /* @__PURE__ */ jsx(Bookmark, { className: `w-4 h-4 ${isOn ? \"fill-current\" : \"\"}` }) }),\n /* @__PURE__ */ jsx(\"span\", { children: isOn ? \"Saved\" : \"Bookmark\" })\n ]\n }\n );\n case \"like-toggle\":\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n onClick: () => {\n triggerHaptic(\"success\");\n setLikeCount((prev) => isOn ? prev - 1 : prev + 1);\n setIsOn(!isOn);\n },\n className: `p-2.5 px-3.5 rounded-2xl flex items-center gap-2 text-xs font-semibold transition-all cursor-pointer border ${isOn ? \"bg-rose-500/20 text-rose-400 border-rose-500/40\" : isDark ? \"bg-white/[0.05] text-neutral-400 border-white/10 hover:text-white\" : \"bg-neutral-100 text-neutral-600 border-neutral-200 hover:text-black\"}`,\n children: [\n /* @__PURE__ */ jsx(motion.div, { animate: { scale: isOn ? [1, 1.4, 1] : 1 }, children: /* @__PURE__ */ jsx(Heart, { className: `w-4 h-4 ${isOn ? \"fill-rose-500 text-rose-500\" : \"\"}` }) }),\n /* @__PURE__ */ jsx(\"span\", { children: likeCount })\n ]\n }\n );\n case \"dislike-toggle\":\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n onClick: handleToggle,\n className: `p-2.5 rounded-2xl flex items-center gap-2 text-xs font-medium transition-all cursor-pointer border ${isOn ? isDark ? \"bg-amber-500/20 text-amber-400 border-amber-500/40\" : \"bg-amber-100 text-amber-600 border-amber-300\" : isDark ? \"bg-white/[0.05] text-neutral-400 border-white/10 hover:text-white\" : \"bg-neutral-100 text-neutral-600 border-neutral-200 hover:text-black\"}`,\n children: [\n /* @__PURE__ */ jsx(motion.div, { animate: { rotate: isOn ? [0, -15, 0] : 0 }, children: /* @__PURE__ */ jsx(ThumbsDown, { className: `w-4 h-4 ${isOn ? \"fill-current\" : \"\"}` }) }),\n /* @__PURE__ */ jsx(\"span\", { children: \"Dislike\" })\n ]\n }\n );\n case \"repost-toggle\":\n return /* @__PURE__ */ jsxs(\n \"button\",\n {\n onClick: () => {\n triggerHaptic(\"medium\");\n setRepostCount((prev) => isOn ? prev - 1 : prev + 1);\n setIsOn(!isOn);\n },\n className: `p-2.5 px-3.5 rounded-2xl flex items-center gap-2 text-xs font-semibold transition-all cursor-pointer border ${isOn ? \"bg-emerald-500/20 text-emerald-400 border-emerald-500/40\" : isDark ? \"bg-white/[0.05] text-neutral-400 border-white/10 hover:text-white\" : \"bg-neutral-100 text-neutral-600 border-neutral-200 hover:text-black\"}`,\n children: [\n /* @__PURE__ */ jsx(motion.div, { animate: { rotate: isOn ? 180 : 0 }, transition: { duration: 0.3 }, children: /* @__PURE__ */ jsx(Repeat, { className: \"w-4 h-4\" }) }),\n /* @__PURE__ */ jsx(\"span\", { children: repostCount })\n ]\n }\n );\n case \"pill-tabs\":\n return /* @__PURE__ */ jsx(\"div\", { className: `relative p-1 rounded-full flex items-center border ${isDark ? \"bg-neutral-900 border-white/10\" : \"bg-neutral-200/80 border-neutral-300/40\"}`, children: [\"Daily\", \"Weekly\", \"Monthly\"].map((tab) => /* @__PURE__ */ jsxs(\n \"button\",\n {\n onClick: () => {\n triggerHaptic(\"light\");\n setPillTab(tab);\n },\n className: `relative px-3.5 py-1 text-xs font-semibold rounded-full z-10 transition-colors cursor-pointer border-0 bg-transparent ${pillTab === tab ? isDark ? \"text-white\" : \"text-black\" : isDark ? \"text-neutral-400 hover:text-white\" : \"text-neutral-600 hover:text-black\"}`,\n children: [\n pillTab === tab && /* @__PURE__ */ jsx(\n motion.div,\n {\n layoutId: \"pill-tabs-indicator\",\n transition: { type: \"spring\", stiffness: 500, damping: 30 },\n className: `absolute inset-0 rounded-full -z-10 shadow-sm ${isDark ? \"bg-neutral-800 border border-white/10\" : \"bg-white\"}`\n }\n ),\n tab\n ]\n },\n tab\n )) });\n case \"morph-toggle\":\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: handleToggle,\n className: `relative w-16 h-9 rounded-full p-1 transition-colors duration-300 cursor-pointer border-0 ${isOn ? \"bg-indigo-600\" : isDark ? \"bg-neutral-800\" : \"bg-neutral-300\"}`,\n children: /* @__PURE__ */ jsx(\n motion.div,\n {\n animate: { x: isOn ? 28 : 0, rotate: isOn ? 180 : 0 },\n transition: { type: \"spring\", stiffness: 400, damping: 25 },\n className: \"w-7 h-7 bg-white rounded-full shadow-md flex items-center justify-center text-neutral-800\",\n children: isOn ? /* @__PURE__ */ jsx(Unlock, { className: \"w-4 h-4 text-indigo-600\" }) : /* @__PURE__ */ jsx(Lock, { className: \"w-4 h-4 text-neutral-600\" })\n }\n )\n }\n );\n case \"checkmark-draw\":\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: handleToggle,\n className: `relative w-16 h-9 rounded-full p-1 transition-colors duration-300 cursor-pointer border-0 ${isOn ? \"bg-emerald-500\" : isDark ? \"bg-neutral-800\" : \"bg-neutral-300\"}`,\n children: /* @__PURE__ */ jsx(\n motion.div,\n {\n animate: { x: isOn ? 28 : 0 },\n transition: { type: \"spring\", stiffness: 500, damping: 28 },\n className: \"w-7 h-7 bg-white rounded-full shadow-md flex items-center justify-center\",\n children: /* @__PURE__ */ jsx(AnimatePresence, { mode: \"wait\", children: isOn && /* @__PURE__ */ jsx(\n motion.svg,\n {\n initial: { scale: 0, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n exit: { scale: 0, opacity: 0 },\n className: \"w-4 h-4 text-emerald-600\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"3.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: /* @__PURE__ */ jsx(\n motion.path,\n {\n d: \"M20 6L9 17l-5-5\",\n initial: { pathLength: 0 },\n animate: { pathLength: 1 },\n transition: { duration: 0.25 }\n }\n )\n },\n \"check\"\n ) })\n }\n )\n }\n );\n case \"theme-toggle\":\n return /* @__PURE__ */ jsx(\n \"button\",\n {\n onClick: handleToggle,\n className: `relative w-16 h-9 rounded-full p-1 transition-colors duration-300 cursor-pointer border-0 ${isOn ? \"bg-indigo-950 border border-indigo-700/50\" : \"bg-amber-100 border border-amber-300\"}`,\n children: /* @__PURE__ */ jsx(\n motion.div,\n {\n animate: { x: isOn ? 28 : 0, rotate: isOn ? 360 : 0 },\n transition: { type: \"spring\", stiffness: 350, damping: 22 },\n className: `w-7 h-7 rounded-full shadow-md flex items-center justify-center ${isOn ? \"bg-indigo-900 text-yellow-300\" : \"bg-amber-400 text-white\"}`,\n children: isOn ? /* @__PURE__ */ jsx(Moon, { className: \"w-4 h-4 fill-yellow-300\" }) : /* @__PURE__ */ jsx(Sun, { className: \"w-4 h-4 fill-white\" })\n }\n )\n }\n );\n default:\n return null;\n }\n};\n\n// checkmark-draw.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction MovaComponent({ theme = \"dark\" }) {\n return /* @__PURE__ */ jsx2(AnimatedToggle, { theme, config: { \"id\": \"t-check\", \"label\": \"Checkmark Draw\", \"interactionType\": \"checkmark-draw\", \"description\": \"Sharp vector SVG checkmark path animation on activation.\", \"cliCommand\": \"npx @mova-ui/react add checkmark-draw\" } });\n}\nexport {\n MovaComponent as default\n};\n"
|
|
19
|
+
}
|