@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,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "pulse-word",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "pulse-word.tsx",
|
|
6
|
+
"registryFile": "pulse-word.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 './pulse-word';\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/text/AnimatedText.tsx\nimport { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { RefreshCw } 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/text/AnimatedText.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar AnimatedText = ({ config, theme }) => {\n const [keyIndex, setKeyIndex] = useState(0);\n const { trigger: triggerHaptic } = useWebHaptics();\n const isDark = theme === \"dark\";\n const replay = () => {\n triggerHaptic(\"light\");\n setKeyIndex((prev) => prev + 1);\n };\n const samplePhrase = \"MOVA UI\";\n const sampleWords = [\"Design\", \"Motion\", \"Mova\"];\n return /* @__PURE__ */ jsxs(\n \"div\",\n {\n onClick: replay,\n className: \"relative flex flex-col items-center justify-center w-full h-full cursor-pointer select-none px-4 group\",\n title: \"Click to replay animation\",\n children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center justify-center w-full min-h-[60px] text-center\", children: (() => {\n switch (config.interactionType) {\n /* --- FEATURED --- */\n case \"dia-text-reveal\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"relative overflow-hidden font-black text-2xl tracking-tighter\", children: /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { clipPath: \"polygon(0 0, 0 0, 0 100%, 0% 100%)\", filter: \"blur(8px)\" },\n animate: { clipPath: \"polygon(0 0, 100% 0, 100% 100%, 0 100%)\", filter: \"blur(0px)\" },\n transition: { duration: 0.85, ease: [0.16, 1, 0.3, 1] },\n className: isDark ? \"text-white\" : \"text-black\",\n children: \"DIA REVEAL\"\n }\n ) }, keyIndex);\n /* --- REVEALS --- */\n case \"blur-text\":\n return /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { filter: \"blur(12px)\", opacity: 0, scale: 0.9 },\n animate: { filter: \"blur(0px)\", opacity: 1, scale: 1 },\n transition: { duration: 0.7, ease: [0.16, 1, 0.3, 1] },\n className: `font-bold text-2xl ${isDark ? \"text-white\" : \"text-black\"}`,\n children: \"BLUR REVEAL\"\n },\n keyIndex\n );\n case \"shimmer-text\":\n return /* @__PURE__ */ jsx(\"div\", { className: `font-extrabold text-2xl bg-gradient-to-r ${isDark ? \"from-neutral-400 via-white to-neutral-400\" : \"from-neutral-600 via-black to-neutral-600\"} bg-clip-text text-transparent animate-pulse`, children: \"SHIMMER TEXT\" });\n case \"typewriter-text\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center font-mono text-lg font-bold\", children: /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { width: 0 },\n animate: { width: \"auto\" },\n transition: { duration: 1.2, ease: \"easeInOut\" },\n className: `overflow-hidden whitespace-nowrap border-r-2 ${isDark ? \"text-emerald-400 border-emerald-400\" : \"text-emerald-600 border-emerald-600\"}`,\n children: \"TYPEWRITER\"\n }\n ) }, keyIndex);\n case \"reveal-text\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"relative overflow-hidden font-bold text-2xl\", children: /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { clipPath: \"inset(0 100% 0 0)\" },\n animate: { clipPath: \"inset(0 0 0 0)\" },\n transition: { duration: 0.75, ease: [0.16, 1, 0.3, 1] },\n className: isDark ? \"text-white\" : \"text-black\",\n children: \"CINEMATIC\"\n }\n ) }, keyIndex);\n case \"fade-in-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n transition: { duration: 0.3, delay: i * 0.05 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"fade-in-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n transition: { duration: 0.4, delay: i * 0.15 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: word\n },\n i\n )) }, keyIndex);\n case \"fade-in-text\":\n return /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n transition: { duration: 0.8 },\n className: `font-bold text-2xl ${isDark ? \"text-white\" : \"text-black\"}`,\n children: \"FADE IN TEXT\"\n },\n keyIndex\n );\n case \"blur-up-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { opacity: 0, y: 15, filter: \"blur(8px)\" },\n animate: { opacity: 1, y: 0, filter: \"blur(0px)\" },\n transition: { duration: 0.5, delay: i * 0.12 },\n className: isDark ? \"text-indigo-400\" : \"text-indigo-600\",\n children: word\n },\n i\n )) }, keyIndex);\n case \"blur-up-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { opacity: 0, y: 15, filter: \"blur(8px)\" },\n animate: { opacity: 1, y: 0, filter: \"blur(0px)\" },\n transition: { duration: 0.4, delay: i * 0.04 },\n className: isDark ? \"text-indigo-400\" : \"text-indigo-600\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n /* --- SLIDE & DROP --- */\n case \"stagger-text\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { y: 20, opacity: 0 },\n animate: { y: 0, opacity: 1 },\n transition: { duration: 0.5, delay: i * 0.1, ease: [0.16, 1, 0.3, 1] },\n className: isDark ? \"text-white\" : \"text-black\",\n children: word\n },\n i\n )) }, keyIndex);\n case \"slide-up-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex overflow-hidden font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { y: \"100%\" },\n animate: { y: 0 },\n transition: { duration: 0.4, delay: i * 0.04, ease: [0.16, 1, 0.3, 1] },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"slide-up-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 overflow-hidden font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { y: \"100%\" },\n animate: { y: 0 },\n transition: { duration: 0.5, delay: i * 0.1, ease: [0.16, 1, 0.3, 1] },\n className: isDark ? \"text-white\" : \"text-black\",\n children: word\n },\n i\n )) }, keyIndex);\n case \"slide-up-text\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"overflow-hidden\", children: /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { y: \"100%\" },\n animate: { y: 0 },\n transition: { duration: 0.6, ease: [0.16, 1, 0.3, 1] },\n className: `font-bold text-2xl ${isDark ? \"text-white\" : \"text-black\"}`,\n children: \"SLIDE UP TEXT\"\n }\n ) }, keyIndex);\n case \"slide-down-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex overflow-hidden font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { y: \"-100%\" },\n animate: { y: 0 },\n transition: { duration: 0.4, delay: i * 0.04, ease: [0.16, 1, 0.3, 1] },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"slide-down-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 overflow-hidden font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { y: \"-100%\" },\n animate: { y: 0 },\n transition: { duration: 0.5, delay: i * 0.1, ease: [0.16, 1, 0.3, 1] },\n className: isDark ? \"text-white\" : \"text-black\",\n children: word\n },\n i\n )) }, keyIndex);\n case \"slide-left-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex overflow-hidden font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { x: 40, opacity: 0 },\n animate: { x: 0, opacity: 1 },\n transition: { duration: 0.4, delay: i * 0.04 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"slide-right-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex overflow-hidden font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { x: -40, opacity: 0 },\n animate: { x: 0, opacity: 1 },\n transition: { duration: 0.4, delay: i * 0.04 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"drop-in-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { y: -50, opacity: 0 },\n animate: { y: 0, opacity: 1 },\n transition: { type: \"spring\", stiffness: 500, damping: 25, delay: i * 0.04 },\n className: isDark ? \"text-cyan-400\" : \"text-cyan-600\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"rise-up-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { y: 30, opacity: 0, scale: 0.8 },\n animate: { y: 0, opacity: 1, scale: 1 },\n transition: { type: \"spring\", stiffness: 400, damping: 22, delay: i * 0.12 },\n className: isDark ? \"text-emerald-400\" : \"text-emerald-600\",\n children: word\n },\n i\n )) }, keyIndex);\n case \"bounce-in-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { scale: 0, opacity: 0 },\n animate: { scale: [0, 1.3, 1], opacity: 1 },\n transition: { duration: 0.5, delay: i * 0.05 },\n className: isDark ? \"text-pink-400\" : \"text-pink-600\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n /* --- SCALE & ZOOM --- */\n case \"scale-in-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { scale: 0 },\n animate: { scale: 1 },\n transition: { type: \"spring\", stiffness: 450, damping: 22, delay: i * 0.04 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"scale-in-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { scale: 0.4, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n transition: { duration: 0.4, delay: i * 0.12 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: word\n },\n i\n )) }, keyIndex);\n case \"scale-in-text\":\n return /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { scale: 0.5, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n transition: { type: \"spring\", stiffness: 400, damping: 25 },\n className: `font-bold text-2xl ${isDark ? \"text-white\" : \"text-black\"}`,\n children: \"SCALE IN TEXT\"\n },\n keyIndex\n );\n case \"zoom-in-text\":\n return /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { scale: 0.2, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n transition: { duration: 0.6, ease: [0.16, 1, 0.3, 1] },\n className: `font-extrabold text-2xl ${isDark ? \"text-amber-400\" : \"text-amber-600\"}`,\n children: \"ZOOM IN\"\n },\n keyIndex\n );\n case \"zoom-out-text\":\n return /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { scale: 1.8, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n transition: { duration: 0.6, ease: [0.16, 1, 0.3, 1] },\n className: `font-extrabold text-2xl ${isDark ? \"text-amber-400\" : \"text-amber-600\"}`,\n children: \"ZOOM OUT\"\n },\n keyIndex\n );\n /* --- 3D & ROTATE --- */\n case \"flip-y-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl [perspective:1000px]\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { rotateY: 90, opacity: 0 },\n animate: { rotateY: 0, opacity: 1 },\n transition: { duration: 0.5, delay: i * 0.05 },\n className: isDark ? \"text-indigo-400\" : \"text-indigo-600\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"flip-x-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl [perspective:1000px]\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { rotateX: 90, opacity: 0 },\n animate: { rotateX: 0, opacity: 1 },\n transition: { duration: 0.5, delay: i * 0.05 },\n className: isDark ? \"text-indigo-400\" : \"text-indigo-600\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"rotate-in-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { rotate: -45, opacity: 0, scale: 0.5 },\n animate: { rotate: 0, opacity: 1, scale: 1 },\n transition: { duration: 0.4, delay: i * 0.04 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"swing-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl [perspective:800px]\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { rotateX: -90, opacity: 0 },\n animate: { rotateX: 0, opacity: 1 },\n transition: { type: \"spring\", stiffness: 350, damping: 18, delay: i * 0.12 },\n className: isDark ? \"text-purple-400\" : \"text-purple-600\",\n children: word\n },\n i\n )) }, keyIndex);\n /* --- DISTORTION & SPACING --- */\n case \"stretch-x-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { scaleX: 2.5, opacity: 0 },\n animate: { scaleX: 1, opacity: 1 },\n transition: { duration: 0.4, delay: i * 0.04 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"stretch-y-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { scaleY: 2.5, opacity: 0 },\n animate: { scaleY: 1, opacity: 1 },\n transition: { duration: 0.4, delay: i * 0.04 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"skew-x-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n initial: { skewX: -30, opacity: 0 },\n animate: { skewX: 0, opacity: 1 },\n transition: { duration: 0.4, delay: i * 0.04 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) }, keyIndex);\n case \"tracking-in-text\":\n return /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { letterSpacing: \"0.6em\", opacity: 0 },\n animate: { letterSpacing: \"0.05em\", opacity: 1 },\n transition: { duration: 0.7, ease: [0.16, 1, 0.3, 1] },\n className: `font-black text-xl uppercase ${isDark ? \"text-white\" : \"text-black\"}`,\n children: \"TRACKING IN\"\n },\n keyIndex\n );\n case \"tracking-out-text\":\n return /* @__PURE__ */ jsx(\n motion.div,\n {\n initial: { letterSpacing: \"-0.2em\", opacity: 0 },\n animate: { letterSpacing: \"0.1em\", opacity: 1 },\n transition: { duration: 0.7, ease: [0.16, 1, 0.3, 1] },\n className: `font-black text-xl uppercase ${isDark ? \"text-white\" : \"text-black\"}`,\n children: \"TRACKING OUT\"\n },\n keyIndex\n );\n /* --- HOVER & INTERACTIVE --- */\n case \"spring-text\":\n case \"hover-lift-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl cursor-pointer\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n whileHover: { y: -8, scale: 1.2, color: \"#6366f1\" },\n transition: { type: \"spring\", stiffness: 500, damping: 15 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) });\n case \"hover-lift-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl cursor-pointer\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n whileHover: { y: -6, color: \"#3b82f6\" },\n transition: { type: \"spring\", stiffness: 400, damping: 18 },\n className: isDark ? \"text-white\" : \"text-black\",\n children: word\n },\n i\n )) });\n case \"hover-scale-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl cursor-pointer\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n whileHover: { scale: 1.4 },\n transition: { type: \"spring\", stiffness: 500, damping: 18 },\n className: isDark ? \"text-pink-400\" : \"text-pink-600\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) });\n case \"hover-scale-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl cursor-pointer\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n whileHover: { scale: 1.25 },\n transition: { type: \"spring\", stiffness: 400, damping: 20 },\n className: isDark ? \"text-pink-400\" : \"text-pink-600\",\n children: word\n },\n i\n )) });\n /* --- CONTINUOUS --- */\n case \"float-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n animate: { y: [0, -6, 0] },\n transition: { duration: 2, repeat: Infinity, delay: i * 0.1, ease: \"easeInOut\" },\n className: isDark ? \"text-cyan-400\" : \"text-cyan-600\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) });\n case \"float-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n animate: { y: [0, -8, 0] },\n transition: { duration: 2.4, repeat: Infinity, delay: i * 0.2, ease: \"easeInOut\" },\n className: isDark ? \"text-cyan-400\" : \"text-cyan-600\",\n children: word\n },\n i\n )) });\n case \"pulse-char\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex font-bold text-2xl\", children: samplePhrase.split(\"\").map((char, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n animate: { opacity: [0.3, 1, 0.3] },\n transition: { duration: 1.5, repeat: Infinity, delay: i * 0.08 },\n className: isDark ? \"text-emerald-400\" : \"text-emerald-600\",\n children: char === \" \" ? \"\\xA0\" : char\n },\n i\n )) });\n case \"pulse-word\":\n return /* @__PURE__ */ jsx(\"div\", { className: \"flex gap-2 font-bold text-xl\", children: sampleWords.map((word, i) => /* @__PURE__ */ jsx(\n motion.span,\n {\n animate: { opacity: [0.3, 1, 0.3] },\n transition: { duration: 1.8, repeat: Infinity, delay: i * 0.25 },\n className: isDark ? \"text-emerald-400\" : \"text-emerald-600\",\n children: word\n },\n i\n )) });\n case \"glow-text\":\n return /* @__PURE__ */ jsx(\n motion.div,\n {\n animate: { textShadow: isDark ? [\"0 0 10px rgba(99,102,241,0.5)\", \"0 0 25px rgba(99,102,241,0.9)\", \"0 0 10px rgba(99,102,241,0.5)\"] : [\"0 0 10px rgba(79,70,229,0.3)\", \"0 0 20px rgba(79,70,229,0.6)\", \"0 0 10px rgba(79,70,229,0.3)\"] },\n transition: { duration: 2, repeat: Infinity },\n className: `font-black text-3xl tracking-tight ${isDark ? \"text-indigo-300\" : \"text-indigo-600\"}`,\n children: \"GLOW TEXT\"\n }\n );\n default:\n return /* @__PURE__ */ jsx(\"div\", { className: `font-bold text-2xl ${isDark ? \"text-white\" : \"text-black\"}`, children: config.label });\n }\n })() }),\n /* @__PURE__ */ jsx(\"div\", { className: \"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity p-1.5 rounded-full bg-black/20 text-white/70\", children: /* @__PURE__ */ jsx(RefreshCw, { className: \"w-3.5 h-3.5\" }) })\n ]\n }\n );\n};\n\n// pulse-word.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction MovaComponent({ theme = \"dark\" }) {\n return /* @__PURE__ */ jsx2(AnimatedText, { theme, config: { \"id\": \"txt-pulse-word\", \"label\": \"Pulse Word\", \"interactionType\": \"pulse-word\", \"description\": \"Words pulse in opacity continuously.\", \"cliCommand\": \"npx @mova-ui/react add pulse-word\", \"category\": \"Continuous\" } });\n}\nexport {\n MovaComponent as default\n};\n"
|
|
19
|
+
}
|
package/registry/pulse.json
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "pulse",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
3
5
|
"file": "pulse.tsx",
|
|
6
|
+
"sourcePath": "ui/loading/pulse.tsx",
|
|
7
|
+
"registryFile": "pulse.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"Pulse"
|
|
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 } from 'framer-motion';\n\ninterface PulseProps {\n size?: number;\n color?: string;\n className?: string;\n}\n\nexport function Pulse({\n size = 12,\n color = 'bg-blue-500',\n className = '',\n}: PulseProps) {\n return (\n <div className={`relative flex items-center justify-center ${className}`} style={{ width: size, height: size }}>\n {/* Center Solid Point */}\n <span className={`absolute w-full h-full rounded-full ${color}`} />\n \n {/* Pulsing ring 1 */}\n <motion.span\n initial={{ scale: 1, opacity: 0.5 }}\n animate={{ scale: 2.8, opacity: 0 }}\n transition={{\n repeat: Infinity,\n duration: 1.8,\n ease: 'easeOut',\n }}\n className={`absolute w-full h-full rounded-full ${color} opacity-40`}\n />\n\n {/* Pulsing ring 2 */}\n <motion.span\n initial={{ scale: 1, opacity: 0.5 }}\n animate={{ scale: 2.8, opacity: 0 }}\n transition={{\n repeat: Infinity,\n duration: 1.8,\n delay: 0.6,\n ease: 'easeOut',\n }}\n className={`absolute w-full h-full rounded-full ${color} opacity-40`}\n />\n </div>\n );\n}\n"
|
|
8
17
|
}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "pumping-heart",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
3
5
|
"file": "pumping-heart.tsx",
|
|
6
|
+
"sourcePath": "ui/loading/pumping-heart.tsx",
|
|
7
|
+
"registryFile": "pumping-heart.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"PumpingHeart"
|
|
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 } from 'framer-motion';\n\nexport const PumpingHeart = () => {\n return (\n <motion.div\n className=\"w-8 h-8\"\n animate={{ scale: [1, 1.25, 1, 1.25, 1] }}\n transition={{ duration: 1.5, repeat: Infinity, ease: \"easeInOut\" }}\n >\n <svg viewBox=\"0 0 24 24\" className=\"fill-zinc-800 dark:fill-white\">\n <path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"/>\n </svg>\n </motion.div>\n );\n};\n"
|
|
8
17
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "pyramid-block-build",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "pyramid-block-build.tsx",
|
|
6
|
+
"sourcePath": "components/css-animations/whimsical/ConceptTrios2.tsx",
|
|
7
|
+
"registryFile": "pyramid-block-build.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/ConceptTrios2.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/ConceptTrios2.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction PyramidBlockBuild({\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 block_scale_pop {\n 0%, 15% { transform: scale(0); opacity: 0; }\n 30%, 75% { transform: scale(1); opacity: 1; }\n 90%, 100% { transform: scale(0); opacity: 0; }\n }\n .pyramid-base { animation: block_scale_pop 3s cubic-bezier(0.34, 1.56, 0.64, 1) 0s infinite both; }\n .pyramid-mid { animation: block_scale_pop 3s cubic-bezier(0.34, 1.56, 0.64, 1) 0.2s infinite both; }\n .pyramid-top { animation: block_scale_pop 3s cubic-bezier(0.34, 1.56, 0.64, 1) 0.4s infinite both; }\n ` }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"relative flex flex-col items-center gap-1\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"w-[20px] h-[20px] rounded-md bg-blue-400 pyramid-top\" }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex gap-1 pyramid-mid\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"w-[20px] h-[20px] rounded-md bg-blue-500\" }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-[20px] h-[20px] rounded-md bg-blue-500\" })\n ] }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"flex gap-1 pyramid-base\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"w-[20px] h-[20px] rounded-md bg-blue-700\" }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-[20px] h-[20px] rounded-md bg-blue-700\" }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-[20px] h-[20px] rounded-md bg-blue-700\" })\n ] })\n ] }, activeKey)\n ]\n }\n );\n}\n\n// catalog/registry-bindings/pyramid-block-build.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(PyramidBlockBuild, { ...PRESET_PROPS, ...props });\n}\nexport {\n MovaComponentAdapter as default\n};\n"
|
|
15
|
+
}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "radar-sweep",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
3
5
|
"file": "radar-sweep.tsx",
|
|
6
|
+
"sourcePath": "ui/loading/radar-sweep.tsx",
|
|
7
|
+
"registryFile": "radar-sweep.json",
|
|
8
|
+
"exports": [
|
|
9
|
+
"RadarSweep"
|
|
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 } from 'framer-motion';\n\nexport const RadarSweep = ({ theme = 'light' }: { theme?: 'light' | 'dark' }) => {\n const isDark = theme === 'dark';\n return (\n <div className=\"relative w-12 h-12 rounded-full border border-zinc-800/10 dark:border-white/10 flex items-center justify-center overflow-hidden\">\n {/* Concentric rings */}\n <div className=\"absolute w-8 h-8 rounded-full border border-zinc-800/5 dark:border-white/5\" />\n <div className=\"absolute w-4 h-4 rounded-full border border-zinc-800/5 dark:border-white/5\" />\n \n {/* Center dot */}\n <div className=\"absolute w-1.5 h-1.5 rounded-full bg-zinc-800/80 dark:bg-white/80\" />\n\n {/* Sweep hand */}\n <motion.div\n className=\"absolute inset-0 origin-center\"\n style={{\n background: isDark\n ? \"conic-gradient(from 0deg, transparent 50%, rgba(255,255,255,0.02) 65%, rgba(255,255,255,0.15) 85%, rgba(255,255,255,0.55) 100%)\"\n : \"conic-gradient(from 0deg, transparent 50%, rgba(39,39,42,0.02) 65%, rgba(39,39,42,0.1) 85%, rgba(39,39,42,0.45) 100%)\",\n }}\n animate={{ rotate: 360 }}\n transition={{ duration: 1.8, repeat: Infinity, ease: \"linear\" }}\n />\n </div>\n );\n};\n"
|
|
8
17
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "radial-iris-mask",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "radial-iris-mask.tsx",
|
|
6
|
+
"registryFile": "radial-iris-mask.json",
|
|
7
|
+
"exports": [
|
|
8
|
+
"RadialIrisPortal"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [
|
|
11
|
+
"framer-motion"
|
|
12
|
+
],
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"previewMode": "client",
|
|
15
|
+
"usage": "import { RadialIrisPortal } from './radial-iris-mask';\n\nexport default function Demo() {\n return <RadialIrisPortal />;\n}",
|
|
16
|
+
"css": "",
|
|
17
|
+
"content": "\"use client\";\n// Mova catalog component. See LICENSE.mova and LICENSE.third-party.\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const RadialIrisPortal = ({ isVisible }: { isVisible: boolean }) => (\n <motion.div \n className=\"fixed inset-0 z-50 bg-[#121212] pointer-events-none origin-center\"\n style={{ clipPath: 'circle(150% at 50% 50%)' }}\n initial={{ clipPath: 'circle(0% at 50% 50%)' }}\n animate={isVisible ? { clipPath: 'circle(150% at 50% 50%)' } : { clipPath: 'circle(0% at 50% 50%)' }}\n transition={{ duration: 0.75, ease: [0.16, 1, 0.3, 1] }}\n />\n);"
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "radial-spinner",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "radial-spinner.tsx",
|
|
6
|
+
"sourcePath": "components/css-animations/whimsical/AppleLoaders.tsx",
|
|
7
|
+
"registryFile": "radial-spinner.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/AppleLoaders.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction AppleRadialSpinner({\n theme = \"dark\",\n className = \"\"\n}) {\n const bars = Array.from({ length: 8 });\n return /* @__PURE__ */ jsxs(\"div\", { className: `relative flex items-center justify-center ${className}`, children: [\n /* @__PURE__ */ jsx(\"style\", { children: `\n @keyframes apple_bar_fade {\n 0% { opacity: 1; }\n 100% { opacity: 0.15; }\n }\n .apple-bar {\n animation: apple_bar_fade 0.8s linear infinite;\n }\n ` }),\n /* @__PURE__ */ jsx(\"div\", { className: \"relative w-8 h-8 flex items-center justify-center\", children: bars.map((_, i) => /* @__PURE__ */ jsx(\n \"div\",\n {\n className: `apple-bar absolute top-0 left-1/2 -translate-x-1/2 w-[2.5px] h-[7px] rounded-full origin-[center_16px] ${theme === \"dark\" ? \"bg-[#f5f5f7]\" : \"bg-[#1d1d1f]\"}`,\n style: {\n transform: `translateX(-50%) rotate(${i * 45}deg)`,\n animationDelay: `${i * 0.8 / 8 - 0.8}s`\n }\n },\n i\n )) })\n ] });\n}\n\n// catalog/registry-bindings/radial-spinner.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar PRESET_PROPS = { \"theme\": \"dark\" };\nfunction MovaComponentAdapter(props = {}) {\n return /* @__PURE__ */ jsx2(AppleRadialSpinner, { ...PRESET_PROPS, ...props });\n}\nexport {\n MovaComponentAdapter as default\n};\n"
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "radio-scale",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "radio-scale.tsx",
|
|
6
|
+
"registryFile": "radio-scale.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 './radio-scale';\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// radio-scale.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction MovaComponent({ theme = \"dark\" }) {\n return /* @__PURE__ */ jsx2(AnimatedFormElement, { theme, config: { \"id\": \"frm6\", \"label\": \"Radio Scale\", \"interactionType\": \"radio-scale\", \"description\": \"Radio button scales with spring physics and fills inner core.\", \"cliCommand\": \"npx @mova-ui/react add radio-scale\" } });\n}\nexport {\n MovaComponent as default\n};\n"
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "range-slider",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "range-slider.tsx",
|
|
6
|
+
"registryFile": "range-slider.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 './range-slider';\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// range-slider.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction MovaComponent({ theme = \"dark\" }) {\n return /* @__PURE__ */ jsx2(AnimatedFormElement, { theme, config: { \"id\": \"frm14\", \"label\": \"Spring Range Slider\", \"interactionType\": \"range-slider\", \"description\": \"Slider thumb with spring bounce and floating value tooltip pop.\", \"cliCommand\": \"npx @mova-ui/react add range-slider\" } });\n}\nexport {\n MovaComponent as default\n};\n"
|
|
19
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "receipt-tape-print",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "receipt-tape-print.tsx",
|
|
6
|
+
"sourcePath": "components/css-animations/whimsical/ConceptTrios1.tsx",
|
|
7
|
+
"registryFile": "receipt-tape-print.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/ConceptTrios1.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/ConceptTrios1.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction ReceiptTapePrint({\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 receipt_print_step {\n 0% { height: 0px; opacity: 0; }\n 25% { height: 25px; opacity: 1; }\n 50% { height: 55px; opacity: 1; }\n 75% { height: 55px; opacity: 1; }\n 90%, 100% { height: 0px; opacity: 0; }\n }\n .receipt-paper {\n animation: receipt_print_step 3s steps(4) infinite both;\n }\n ` }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"relative w-[110px] h-[85px] flex flex-col items-center justify-start pt-2\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: `w-[90px] h-[18px] rounded-full z-20 flex items-center justify-center border ${theme === \"dark\" ? \"bg-[#1c1c1e] border-[#2c2c2e]\" : \"bg-[#e5e5ea] border-[#d1d1d6]\"}`, children: /* @__PURE__ */ jsx(\"div\", { className: \"w-[65px] h-[3px] rounded-full bg-neutral-600\" }) }),\n /* @__PURE__ */ jsxs(\"div\", { className: \"w-[60px] receipt-paper bg-blue-500 rounded-b-lg shadow-md -mt-1.5 flex flex-col gap-1 p-1\", children: [\n /* @__PURE__ */ jsx(\"div\", { className: \"w-full h-1 bg-blue-300/60 rounded-full\" }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-3/4 h-1 bg-blue-300/60 rounded-full\" }),\n /* @__PURE__ */ jsx(\"div\", { className: \"w-1/2 h-1 bg-blue-300/60 rounded-full\" })\n ] })\n ] }, activeKey)\n ]\n }\n );\n}\n\n// catalog/registry-bindings/receipt-tape-print.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(ReceiptTapePrint, { ...PRESET_PROPS, ...props });\n}\nexport {\n MovaComponentAdapter as default\n};\n"
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "rectangle-toggle",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "rectangle-toggle.tsx",
|
|
6
|
+
"registryFile": "rectangle-toggle.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 './rectangle-toggle';\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// rectangle-toggle.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction MovaComponent({ theme = \"dark\" }) {\n return /* @__PURE__ */ jsx2(AnimatedToggle, { theme, config: { \"id\": \"t-rect\", \"label\": \"Rectangle Toggle\", \"interactionType\": \"rectangle-toggle\", \"description\": \"Minimal squarish toggle with sharp border radiuses.\", \"cliCommand\": \"npx @mova-ui/react add rectangle-toggle\" } });\n}\nexport {\n MovaComponent as default\n};\n"
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "repost-toggle",
|
|
3
|
+
"tier": "free",
|
|
4
|
+
"version": "0.4.1",
|
|
5
|
+
"file": "repost-toggle.tsx",
|
|
6
|
+
"registryFile": "repost-toggle.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 './repost-toggle';\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// repost-toggle.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction MovaComponent({ theme = \"dark\" }) {\n return /* @__PURE__ */ jsx2(AnimatedToggle, { theme, config: { \"id\": \"t-repost\", \"label\": \"Repost Action\", \"interactionType\": \"repost-toggle\", \"description\": \"Retweet / Repost button with 180\\xB0 rotation & count update.\", \"cliCommand\": \"npx @mova-ui/react add repost-toggle\" } });\n}\nexport {\n MovaComponent as default\n};\n"
|
|
19
|
+
}
|