astro-component-kit 0.0.1 → 0.1.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 +218 -119
- package/package.json +28 -55
- package/src/components/index.ts +207 -0
- package/src/components/lib/AnimatedGalaxy.astro +185 -0
- package/src/components/lib/Galaxy3D.astro +308 -0
- package/src/components/lib/GlassNavbar.astro +13 -11
- package/src/components/lib/LogoWithGalaxy.astro +63 -0
- package/src/components/lib/buttons/3dPushButton.astro +9 -0
- package/src/components/lib/buttons/AnimatedIconButton.astro +10 -0
- package/src/components/lib/buttons/BorderDrawButton.astro +9 -0
- package/src/components/lib/buttons/CyberpunkButton.astro +10 -0
- package/src/components/lib/buttons/DoubleBorderButton.astro +9 -0
- package/src/components/lib/buttons/GhostOutlineButton.astro +10 -0
- package/src/components/lib/buttons/GlassButton.astro +13 -32
- package/src/components/lib/buttons/GlowButton.astro +9 -0
- package/src/components/lib/buttons/LiquidButton.astro +9 -0
- package/src/components/lib/buttons/LoadingButton.astro +10 -0
- package/src/components/lib/buttons/MagneticButton.astro +10 -0
- package/src/components/lib/buttons/MinimalPillButton.astro +9 -0
- package/src/components/lib/buttons/NeumorphicButton.astro +10 -0
- package/src/components/lib/buttons/PulseButton.astro +10 -0
- package/src/components/lib/buttons/RetroArcadeButton.astro +9 -0
- package/src/components/lib/buttons/RetroShadowButton.astro +9 -0
- package/src/components/lib/buttons/ShimmerButton.astro +9 -0
- package/src/components/lib/buttons/ShinyButton.astro +9 -0
- package/src/components/lib/buttons/TiltGlowButton.astro +10 -0
- package/src/components/lib/cards/BlogHorizontalCard.astro +46 -13
- package/src/components/lib/cards/CyberFeatureCard.astro +50 -6
- package/src/components/lib/cards/EcommerceProductCard.astro +69 -16
- package/src/components/lib/cards/GlassCard.astro +8 -0
- package/src/components/lib/cards/GlassEventCard.astro +53 -12
- package/src/components/lib/cards/GlowPortfolioCard.astro +46 -9
- package/src/components/lib/cards/InteractiveTiltCard.astro +47 -7
- package/src/components/lib/cards/KanbanItemCard.astro +40 -9
- package/src/components/lib/cards/MinimalLinkCard.astro +37 -7
- package/src/components/lib/cards/MusicPlayerMini.astro +54 -14
- package/src/components/lib/cards/NeumorphicCard.astro +32 -2
- package/src/components/lib/cards/NotificationCard.astro +44 -9
- package/src/components/lib/cards/PricingCard.astro +47 -9
- package/src/components/lib/cards/ProfileCard.astro +50 -11
- package/src/components/lib/cards/RetroGameCard.astro +37 -9
- package/src/components/lib/cards/StatCard.astro +43 -8
- package/src/components/lib/cards/TaskKanbanCard.astro +50 -11
- package/src/components/lib/cards/TestimonialCardClean.astro +43 -12
- package/src/components/lib/cards/WeatherWidgetCard.astro +36 -10
- package/src/components/lib/feedback/AnimatedCheckmark.astro +58 -9
- package/src/components/lib/feedback/Badge.astro +47 -12
- package/src/components/lib/feedback/CircleProgress.astro +56 -13
- package/src/components/lib/feedback/ConfettiFeedback.astro +74 -11
- package/src/components/lib/feedback/CyberGlitchAlert.astro +69 -6
- package/src/components/lib/feedback/EmptyStateCard.astro +55 -7
- package/src/components/lib/feedback/GlassAlert.astro +59 -13
- package/src/components/lib/feedback/GlassModal.astro +99 -14
- package/src/components/lib/feedback/GlassProgress.astro +39 -5
- package/src/components/lib/feedback/IndicatorBadgeMinimal.astro +56 -3
- package/src/components/lib/feedback/NeonSpinner.astro +40 -3
- package/src/components/lib/feedback/PulseDot.astro +51 -7
- package/src/components/lib/feedback/RatingPill.astro +38 -8
- package/src/components/lib/feedback/ShakeErrorGroup.astro +44 -3
- package/src/components/lib/feedback/SimpleTooltip.astro +53 -4
- package/src/components/lib/feedback/SkeletonList.astro +59 -13
- package/src/components/lib/feedback/Spotlight.astro +49 -4
- package/src/components/lib/feedback/StepProgress.astro +96 -9
- package/src/components/lib/feedback/ToastNotif.astro +60 -6
- package/src/components/lib/feedback/TypingIndicator.astro +52 -7
- package/src/components/lib/forms/AnimatedInput.astro +47 -5
- package/src/components/lib/forms/ChipInput.astro +116 -8
- package/src/components/lib/forms/ColorPickerInput.astro +53 -6
- package/src/components/lib/forms/CurrencyInput.astro +59 -6
- package/src/components/lib/forms/CustomRadioGroup.astro +61 -9
- package/src/components/lib/forms/CyberpunkCheckbox.astro +64 -8
- package/src/components/lib/forms/DragDropUpload.astro +87 -7
- package/src/components/lib/forms/ErrorInput.astro +31 -4
- package/src/components/lib/forms/FloatingPassword.astro +48 -10
- package/src/components/lib/forms/FormGroupVertical.astro +63 -9
- package/src/components/lib/forms/GlassSlider.astro +84 -3
- package/src/components/lib/forms/GlassTextarea.astro +39 -6
- package/src/components/lib/forms/ModernSelect.astro +66 -10
- package/src/components/lib/forms/NeumorphicSwitch.astro +54 -26
- package/src/components/lib/forms/OTPInput.astro +84 -12
- package/src/components/lib/forms/RatingStars.astro +66 -10
- package/src/components/lib/forms/SearchReveal.astro +44 -6
- package/src/components/lib/forms/SegmentedControl.astro +61 -7
- package/src/components/lib/forms/SimpleFileInput.astro +57 -6
- package/src/components/lib/forms/StepperInput.astro +101 -9
- package/src/components/lib/layout/FeatureHero.astro +70 -6
- package/src/components/lib/layout/FooterCenteredMinimal.astro +5 -2
- package/src/components/lib/navigation/GlassNavbar.astro +10 -5
- package/src/components/lib/navigation/MinimalSidebar.astro +6 -3
- package/src/components/lib/navigation/SimpleFooterGlass.astro +6 -2
- package/src/components/lib/overlays/SplashIntroOverlay.astro +6 -3
- package/src/components/lib/sections/ButtonsShowcase.astro +182 -0
- package/src/components/lib/sections/CardsShowcase.astro +376 -0
- package/src/components/lib/sections/DataShowcase.astro +329 -0
- package/src/components/lib/sections/FeedbackShowcase.astro +320 -0
- package/src/components/lib/sections/FormsShowcase.astro +347 -0
- package/src/components/lib/sections/HeroGlass.astro +202 -0
- package/src/components/lib/sections/HeroGradient.astro +143 -0
- package/src/components/lib/sections/HeroSplit.astro +210 -0
- package/src/components/lib/sections/LayoutShowcase.astro +317 -0
- package/src/components/lib/sections/NavigationShowcase.astro +285 -0
- package/src/components/lib/sections/OverlaysShowcase.astro +373 -0
- package/src/components/lib/sections/TypographyShowcase.astro +239 -0
- package/src/components/lib/sections/index.ts +6 -0
- package/src/components/types.d.ts +6 -0
- package/{dist → src}/styles/global.css +5 -5
- package/dist/AnimatedInput.astro +0 -82
- package/dist/Badge.astro +0 -52
- package/dist/GlassButton.astro +0 -87
- package/dist/GlassCard.astro +0 -72
- package/dist/GlassNavbar.astro +0 -65
- package/dist/GlowButton.astro +0 -60
- package/dist/buttons/3dPushButton.astro +0 -136
- package/dist/buttons/AnimatedIconButton.astro +0 -146
- package/dist/buttons/BorderDrawButton.astro +0 -112
- package/dist/buttons/CyberpunkButton.astro +0 -148
- package/dist/buttons/DoubleBorderButton.astro +0 -131
- package/dist/buttons/GhostOutlineButton.astro +0 -109
- package/dist/buttons/GlassButton.astro +0 -165
- package/dist/buttons/GlowButton.astro +0 -119
- package/dist/buttons/LiquidButton.astro +0 -167
- package/dist/buttons/LoadingButton.astro +0 -148
- package/dist/buttons/MagneticButton.astro +0 -134
- package/dist/buttons/MinimalPillButton.astro +0 -102
- package/dist/buttons/NeumorphicButton.astro +0 -158
- package/dist/buttons/PulseButton.astro +0 -111
- package/dist/buttons/RetroArcadeButton.astro +0 -105
- package/dist/buttons/RetroShadowButton.astro +0 -82
- package/dist/buttons/ShimmerButton.astro +0 -113
- package/dist/buttons/ShinyButton.astro +0 -121
- package/dist/buttons/TiltGlowButton.astro +0 -145
- package/dist/buttons/index.mjs +0 -19
- package/dist/buttons/index.ts +0 -19
- package/dist/cards/BlogHorizontalCard.astro +0 -18
- package/dist/cards/CyberFeatureCard.astro +0 -12
- package/dist/cards/EcommerceProductCard.astro +0 -24
- package/dist/cards/GlassCard.astro +0 -17
- package/dist/cards/GlassEventCard.astro +0 -19
- package/dist/cards/GlowPortfolioCard.astro +0 -16
- package/dist/cards/InteractiveTiltCard.astro +0 -25
- package/dist/cards/KanbanItemCard.astro +0 -15
- package/dist/cards/MinimalLinkCard.astro +0 -12
- package/dist/cards/MusicPlayerMini.astro +0 -21
- package/dist/cards/NeumorphicCard.astro +0 -6
- package/dist/cards/NotificationCard.astro +0 -15
- package/dist/cards/PricingCard.astro +0 -17
- package/dist/cards/ProfileCard.astro +0 -17
- package/dist/cards/RetroGameCard.astro +0 -15
- package/dist/cards/StatCard.astro +0 -15
- package/dist/cards/TaskKanbanCard.astro +0 -18
- package/dist/cards/TestimonialCardClean.astro +0 -20
- package/dist/cards/WeatherWidgetCard.astro +0 -17
- package/dist/cards/index.mjs +0 -19
- package/dist/cards/index.ts +0 -19
- package/dist/data/AccordionGroupGlass.astro +0 -21
- package/dist/data/AvatarGroupStack.astro +0 -15
- package/dist/data/CalendarGridView.astro +0 -18
- package/dist/data/DataChipsGroup.astro +0 -16
- package/dist/data/DescriptionListHoriz.astro +0 -14
- package/dist/data/FileTreeView.astro +0 -22
- package/dist/data/GanttChartMinimal.astro +0 -12
- package/dist/data/GlassTable.astro +0 -23
- package/dist/data/KeyValuePillGroup.astro +0 -12
- package/dist/data/PriceCompareTable.astro +0 -22
- package/dist/data/ProgressListSmall.astro +0 -17
- package/dist/data/RatingBreakdownBar.astro +0 -13
- package/dist/data/SparklineStatCard.astro +0 -16
- package/dist/data/StatsGridDashboard.astro +0 -16
- package/dist/data/StepperDataVertical.astro +0 -15
- package/dist/data/TagCloudData.astro +0 -14
- package/dist/data/TimelineHorizSteps.astro +0 -18
- package/dist/data/TreeItemInteractive.astro +0 -18
- package/dist/data/UserDirectoryItem.astro +0 -15
- package/dist/data/VerticalTimeline.astro +0 -21
- package/dist/data/index.mjs +0 -20
- package/dist/data/index.ts +0 -20
- package/dist/feedback/AnimatedCheckmark.astro +0 -13
- package/dist/feedback/Badge.astro +0 -19
- package/dist/feedback/CircleProgress.astro +0 -22
- package/dist/feedback/ConfettiFeedback.astro +0 -18
- package/dist/feedback/CyberGlitchAlert.astro +0 -11
- package/dist/feedback/EmptyStateCard.astro +0 -13
- package/dist/feedback/GlassAlert.astro +0 -20
- package/dist/feedback/GlassModal.astro +0 -19
- package/dist/feedback/GlassProgress.astro +0 -10
- package/dist/feedback/IndicatorBadgeMinimal.astro +0 -10
- package/dist/feedback/NeonSpinner.astro +0 -7
- package/dist/feedback/PulseDot.astro +0 -12
- package/dist/feedback/RatingPill.astro +0 -13
- package/dist/feedback/ShakeErrorGroup.astro +0 -7
- package/dist/feedback/SimpleTooltip.astro +0 -10
- package/dist/feedback/SkeletonList.astro +0 -20
- package/dist/feedback/Spotlight.astro +0 -9
- package/dist/feedback/StepProgress.astro +0 -14
- package/dist/feedback/ToastNotif.astro +0 -11
- package/dist/feedback/TypingIndicator.astro +0 -12
- package/dist/feedback/index.mjs +0 -20
- package/dist/feedback/index.ts +0 -20
- package/dist/forms/AnimatedInput.astro +0 -16
- package/dist/forms/ChipInput.astro +0 -13
- package/dist/forms/ColorPickerInput.astro +0 -13
- package/dist/forms/CurrencyInput.astro +0 -11
- package/dist/forms/CustomRadioGroup.astro +0 -13
- package/dist/forms/CyberpunkCheckbox.astro +0 -15
- package/dist/forms/DragDropUpload.astro +0 -12
- package/dist/forms/ErrorInput.astro +0 -11
- package/dist/forms/FloatingPassword.astro +0 -20
- package/dist/forms/FormGroupVertical.astro +0 -14
- package/dist/forms/GlassSlider.astro +0 -7
- package/dist/forms/GlassTextarea.astro +0 -14
- package/dist/forms/ModernSelect.astro +0 -16
- package/dist/forms/NeumorphicSwitch.astro +0 -55
- package/dist/forms/OTPInput.astro +0 -22
- package/dist/forms/RatingStars.astro +0 -15
- package/dist/forms/SearchReveal.astro +0 -13
- package/dist/forms/SegmentedControl.astro +0 -13
- package/dist/forms/SimpleFileInput.astro +0 -11
- package/dist/forms/StepperInput.astro +0 -14
- package/dist/forms/index.mjs +0 -20
- package/dist/forms/index.ts +0 -20
- package/dist/index.js +0 -1
- package/dist/index.mjs +0 -1
- package/dist/layout/BentoGrid3.astro +0 -14
- package/dist/layout/CenterFixedBox.astro +0 -6
- package/dist/layout/CenteredContainer.astro +0 -8
- package/dist/layout/ClusterHorizontal.astro +0 -6
- package/dist/layout/FeatureHero.astro +0 -17
- package/dist/layout/FooterCenteredMinimal.astro +0 -11
- package/dist/layout/FullBleedSection.astro +0 -6
- package/dist/layout/GalleryGrid4.astro +0 -7
- package/dist/layout/GlassCardGrid.astro +0 -6
- package/dist/layout/GlassSectionHeader.astro +0 -15
- package/dist/layout/LandingSectionSplit.astro +0 -13
- package/dist/layout/MasonryGrid.astro +0 -7
- package/dist/layout/MinimalFooterGrid.astro +0 -20
- package/dist/layout/ScrollSnapSection.astro +0 -7
- package/dist/layout/SectionDividerText.astro +0 -7
- package/dist/layout/SidebarLayoutWrapper.astro +0 -11
- package/dist/layout/SplitScreenLayout.astro +0 -11
- package/dist/layout/StepLayoutVertical.astro +0 -21
- package/dist/layout/StickySidebarWrapper.astro +0 -10
- package/dist/layout/VerticalStack.astro +0 -8
- package/dist/layout/index.mjs +0 -20
- package/dist/layout/index.ts +0 -20
- package/dist/navigation/AnchorSideNav.astro +0 -13
- package/dist/navigation/BottomNavMobile.astro +0 -13
- package/dist/navigation/BreadcrumbsMinimal.astro +0 -16
- package/dist/navigation/BurgerMorphIcon.astro +0 -12
- package/dist/navigation/CommandPaletteUI.astro +0 -17
- package/dist/navigation/DotNavigationSlider.astro +0 -13
- package/dist/navigation/FloatingTabBar.astro +0 -12
- package/dist/navigation/GlassNavbar.astro +0 -19
- package/dist/navigation/LangSwitcherPill.astro +0 -17
- package/dist/navigation/MegaMenuGlass.astro +0 -25
- package/dist/navigation/MinimalSidebar.astro +0 -18
- package/dist/navigation/PaginationGlass.astro +0 -20
- package/dist/navigation/PaginationInfiniteUI.astro +0 -11
- package/dist/navigation/RadialIconMenu.astro +0 -15
- package/dist/navigation/RetroArcadeMenu.astro +0 -12
- package/dist/navigation/ScrollProgressTop.astro +0 -15
- package/dist/navigation/SimpleFooterGlass.astro +0 -21
- package/dist/navigation/TabUnderline.astro +0 -14
- package/dist/navigation/UserProfileNav.astro +0 -21
- package/dist/navigation/VerticalTabs.astro +0 -14
- package/dist/navigation/index.mjs +0 -20
- package/dist/navigation/index.ts +0 -20
- package/dist/overlays/AgeVerificationOverlay.astro +0 -20
- package/dist/overlays/BackdropBlurMask.astro +0 -6
- package/dist/overlays/BottomSheetMobile.astro +0 -16
- package/dist/overlays/CommandDialog.astro +0 -19
- package/dist/overlays/ContextMenuOverlay.astro +0 -17
- package/dist/overlays/CookieBannerGlass.astro +0 -14
- package/dist/overlays/ExitIntentOverlay.astro +0 -19
- package/dist/overlays/FloatingTrayActions.astro +0 -13
- package/dist/overlays/HelpBubbleOverlay.astro +0 -11
- package/dist/overlays/LightboxOverlay.astro +0 -13
- package/dist/overlays/LoadingOverlayFull.astro +0 -10
- package/dist/overlays/MobileNavOverlay.astro +0 -18
- package/dist/overlays/OverlayModal.astro +0 -24
- package/dist/overlays/PopoverMenuGlass.astro +0 -17
- package/dist/overlays/SearchOverlayFullscreen.astro +0 -15
- package/dist/overlays/SideDrawerRight.astro +0 -16
- package/dist/overlays/SplashIntroOverlay.astro +0 -11
- package/dist/overlays/SpotlightIndicator.astro +0 -6
- package/dist/overlays/ToastStackOverlay.astro +0 -12
- package/dist/overlays/TooltipActionTray.astro +0 -14
- package/dist/overlays/index.mjs +0 -20
- package/dist/overlays/index.ts +0 -20
- package/dist/typography/AnimatedUnderlineLink.astro +0 -10
- package/dist/typography/BackgroundClipMask.astro +0 -7
- package/dist/typography/CodeInlineGlass.astro +0 -6
- package/dist/typography/CyberpunkGlitchText.astro +0 -20
- package/dist/typography/DropCapParagraph.astro +0 -7
- package/dist/typography/FadedVerticalText.astro +0 -6
- package/dist/typography/FloatingTextLabel.astro +0 -10
- package/dist/typography/GlassBlockQuote.astro +0 -13
- package/dist/typography/GlassTextReveal.astro +0 -7
- package/dist/typography/GradientHeading.astro +0 -9
- package/dist/typography/GradientUnderlineLink.astro +0 -7
- package/dist/typography/KbdIndicator.astro +0 -6
- package/dist/typography/LetterSpacingWide.astro +0 -6
- package/dist/typography/MinimalListMarkers.astro +0 -10
- package/dist/typography/MonospaceStatLine.astro +0 -6
- package/dist/typography/NeonTextHighlight.astro +0 -6
- package/dist/typography/ShadowRevealText.astro +0 -7
- package/dist/typography/StrokeHeadingOutline.astro +0 -8
- package/dist/typography/Text3DLayer.astro +0 -7
- package/dist/typography/TypewriterText.astro +0 -15
- package/dist/typography/index.mjs +0 -20
- package/dist/typography/index.ts +0 -20
- package/dist/utilities/AspectRatioBox.astro +0 -11
- package/dist/utilities/BackgroundDotPattern.astro +0 -6
- package/dist/utilities/CircularMask.astro +0 -7
- package/dist/utilities/ClickRippleWrapper.astro +0 -7
- package/dist/utilities/FadeInWrapper.astro +0 -11
- package/dist/utilities/FixedRatioImage.astro +0 -7
- package/dist/utilities/GlassBlurLayer.astro +0 -6
- package/dist/utilities/GradientBorderMask.astro +0 -7
- package/dist/utilities/HoverLift.astro +0 -7
- package/dist/utilities/ResponsiveSpacer.astro +0 -15
- package/dist/utilities/ResponsiveVisToggle.astro +0 -11
- package/dist/utilities/ScrollLockParent.astro +0 -11
- package/dist/utilities/ScrollMarginTarget.astro +0 -10
- package/dist/utilities/SlideUpReveal.astro +0 -7
- package/dist/utilities/SmoothAnchorLink.astro +0 -22
- package/dist/utilities/StackLayering.astro +0 -12
- package/dist/utilities/StickyObserver.astro +0 -8
- package/dist/utilities/TextTruncate.astro +0 -10
- package/dist/utilities/TruncateSingleLine.astro +0 -6
- package/dist/utilities/VisuallyHidden.astro +0 -6
- package/dist/utilities/index.mjs +0 -20
- package/dist/utilities/index.ts +0 -20
- package/src/components/lib/utilities/AspectRatioBox.astro +0 -11
- package/src/components/lib/utilities/BackgroundDotPattern.astro +0 -6
- package/src/components/lib/utilities/CircularMask.astro +0 -7
- package/src/components/lib/utilities/ClickRippleWrapper.astro +0 -7
- package/src/components/lib/utilities/FadeInWrapper.astro +0 -11
- package/src/components/lib/utilities/FixedRatioImage.astro +0 -7
- package/src/components/lib/utilities/GlassBlurLayer.astro +0 -6
- package/src/components/lib/utilities/GradientBorderMask.astro +0 -7
- package/src/components/lib/utilities/HoverLift.astro +0 -7
- package/src/components/lib/utilities/ResponsiveSpacer.astro +0 -15
- package/src/components/lib/utilities/ResponsiveVisToggle.astro +0 -11
- package/src/components/lib/utilities/ScrollLockParent.astro +0 -11
- package/src/components/lib/utilities/ScrollMarginTarget.astro +0 -10
- package/src/components/lib/utilities/SlideUpReveal.astro +0 -7
- package/src/components/lib/utilities/SmoothAnchorLink.astro +0 -22
- package/src/components/lib/utilities/StackLayering.astro +0 -12
- package/src/components/lib/utilities/StickyObserver.astro +0 -8
- package/src/components/lib/utilities/TextTruncate.astro +0 -10
- package/src/components/lib/utilities/TruncateSingleLine.astro +0 -6
- package/src/components/lib/utilities/VisuallyHidden.astro +0 -6
- package/src/components/lib/utilities/index.ts +0 -20
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* NeumorphicButton — A premium Soft UI button with beveled surface gradients and hue-tinted shadows.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} href - Optional. If provided, renders an <a> tag instead of <button>.
|
|
6
|
+
* @param {'button'|'submit'|'reset'} type - Optional. The HTML button type. Default is 'button'.
|
|
7
|
+
* @param {string} baseColor - Optional. Base surface color. Default is 'var(--c-bg-2, #111827)'.
|
|
8
|
+
* @param {'convex'|'concave'} variant - Optional. The visual style variant. Default is 'convex'.
|
|
9
|
+
* @param {'sm'|'md'|'lg'} size - Optional. The size variant of the button. Default is 'md'.
|
|
10
|
+
* @param {boolean} disabled - Optional. Whether the button is disabled. Default is false.
|
|
11
|
+
*/
|
|
2
12
|
interface Props {
|
|
3
13
|
href?: string;
|
|
4
14
|
type?: 'button' | 'submit' | 'reset';
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* PulseButton — A button with a persistent circular pulse effect to draw attention.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} href - Optional. If provided, renders an <a> tag instead of <button>.
|
|
6
|
+
* @param {'button'|'submit'|'reset'} type - Optional. The HTML button type. Default is 'button'.
|
|
7
|
+
* @param {'primary'|'secondary'|'ghost'} variant - Optional. The visual style variant. Default is 'primary'.
|
|
8
|
+
* @param {'sm'|'md'|'lg'} size - Optional. The size variant of the button. Default is 'md'.
|
|
9
|
+
* @param {string} color - Optional. Brand tone base for pulsating aura.
|
|
10
|
+
* @param {boolean} disabled - Optional. Whether the button is disabled. Default is false.
|
|
11
|
+
*/
|
|
2
12
|
interface Props {
|
|
3
13
|
href?: string;
|
|
4
14
|
type?: 'button' | 'submit' | 'reset';
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* RetroArcadeButton — An 8-bit style arcade button with chunky borders and pixelated interactions.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} href - Optional. If provided, renders an <a> tag instead of <button>.
|
|
6
|
+
* @param {'button'|'submit'|'reset'} type - Optional. The HTML button type. Default is 'button'.
|
|
7
|
+
* @param {'primary'|'secondary'|'ghost'} variant - Optional. The visual style variant. Default is 'primary'.
|
|
8
|
+
* @param {'sm'|'md'|'lg'} size - Optional. The size variant of the button. Default is 'md'.
|
|
9
|
+
* @param {boolean} disabled - Optional. Whether the button is disabled. Default is false.
|
|
10
|
+
*/
|
|
2
11
|
interface Props {
|
|
3
12
|
href?: string;
|
|
4
13
|
type?: 'button' | 'submit' | 'reset';
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* RetroShadowButton — A sharp-edged neo-brutalist button with a thick solid block shadow.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} href - Optional. If provided, renders an <a> tag instead of <button>.
|
|
6
|
+
* @param {'button'|'submit'|'reset'} type - Optional. The HTML button type. Default is 'button'.
|
|
7
|
+
* @param {'pink'|'cyan'|'yellow'|'lime'} variant - Optional. The visual highly saturated retro style variant. Default is 'pink'.
|
|
8
|
+
* @param {'sm'|'md'|'lg'} size - Optional. The size variant of the button. Default is 'md'.
|
|
9
|
+
* @param {boolean} disabled - Optional. Whether the button is disabled. Default is false.
|
|
10
|
+
*/
|
|
2
11
|
interface Props {
|
|
3
12
|
href?: string;
|
|
4
13
|
type?: 'button' | 'submit' | 'reset';
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* ShimmerButton — A clean, elegant button with a continuous diagonal shimmer sweeping animation.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} href - Optional. If provided, renders an <a> tag instead of <button>.
|
|
6
|
+
* @param {'button'|'submit'|'reset'} type - Optional. The HTML button type. Default is 'button'.
|
|
7
|
+
* @param {'primary'|'secondary'|'ghost'} variant - Optional. The visual style variant. Default is 'primary'.
|
|
8
|
+
* @param {'sm'|'md'|'lg'} size - Optional. The size variant of the button. Default is 'md'.
|
|
9
|
+
* @param {boolean} disabled - Optional. Whether the button is disabled. Default is false.
|
|
10
|
+
*/
|
|
2
11
|
interface Props {
|
|
3
12
|
href?: string;
|
|
4
13
|
type?: 'button' | 'submit' | 'reset';
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* ShinyButton — A button with a metallic shine effect that sweeps across on hover.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} href - Optional. If provided, renders an <a> tag instead of <button>.
|
|
6
|
+
* @param {'button'|'submit'|'reset'} type - Optional. The HTML button type. Default is 'button'.
|
|
7
|
+
* @param {'primary'|'secondary'|'ghost'} variant - Optional. The visual style variant. Default is 'primary'.
|
|
8
|
+
* @param {'sm'|'md'|'lg'} size - Optional. The size variant of the button. Default is 'md'.
|
|
9
|
+
* @param {boolean} disabled - Optional. Whether the button is disabled. Default is false.
|
|
10
|
+
*/
|
|
2
11
|
interface Props {
|
|
3
12
|
href?: string;
|
|
4
13
|
type?: 'button' | 'submit' | 'reset';
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* TiltGlowButton — An interactive 3D button that tilts towards the cursor with dynamic lighting.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} href - Optional. If provided, renders an <a> tag instead of <button>.
|
|
6
|
+
* @param {'button'|'submit'|'reset'} type - Optional. The HTML button type. Default is 'button'.
|
|
7
|
+
* @param {string} primaryColor - Optional. The primary light/gradient effect color.
|
|
8
|
+
* @param {string} secondaryColor - Optional. The secondary lighting/gradient reflection color.
|
|
9
|
+
* @param {'sm'|'md'|'lg'} size - Optional. The size variant of the button. Default is 'md'.
|
|
10
|
+
* @param {boolean} disabled - Optional. Whether the button is disabled. Default is false.
|
|
11
|
+
*/
|
|
2
12
|
interface Props {
|
|
3
13
|
href?: string;
|
|
4
14
|
type?: 'button' | 'submit' | 'reset';
|
|
@@ -1,18 +1,51 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* BlogHorizontalCard — Landscape card layout for blog feeds or news items.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} title - The blog post title.
|
|
6
|
+
* @param {string} description - Brief summary or excerpt.
|
|
7
|
+
* @param {string} tag - Featured label or category (e.g. "Tutorial").
|
|
8
|
+
* @param {string} thumbUrl - Optional thumbnail image URL.
|
|
9
|
+
*/
|
|
10
|
+
interface Props {
|
|
11
|
+
title: string;
|
|
12
|
+
description: string;
|
|
13
|
+
tag: string;
|
|
14
|
+
thumbUrl?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const { title, description, tag, thumbUrl } = Astro.props;
|
|
2
18
|
---
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<div class="
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
<
|
|
19
|
+
|
|
20
|
+
<article class="blog-h-card">
|
|
21
|
+
<div class="blog-h-card__thumb" style={thumbUrl ? `background-image: url('${thumbUrl}'); background-size: cover;` : ''}></div>
|
|
22
|
+
<div class="blog-h-card__content">
|
|
23
|
+
<span class="blog-h-card__tag">{tag}</span>
|
|
24
|
+
<h4 class="blog-h-card__title">{title}</h4>
|
|
25
|
+
<p class="blog-h-card__desc">{description}</p>
|
|
9
26
|
</div>
|
|
10
|
-
</
|
|
27
|
+
</article>
|
|
28
|
+
|
|
11
29
|
<style>
|
|
12
|
-
.blog-h-card {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
30
|
+
.blog-h-card {
|
|
31
|
+
display: flex; gap: var(--sp-6, 1.5rem);
|
|
32
|
+
background: var(--c-bg-elev, rgba(255,255,255,0.02));
|
|
33
|
+
border: 1px solid var(--c-border, rgba(255,255,255,0.1));
|
|
34
|
+
border-radius: var(--r-lg, 16px);
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
}
|
|
37
|
+
.blog-h-card__thumb {
|
|
38
|
+
width: 150px;
|
|
39
|
+
background-color: var(--c-bg, #1e293b);
|
|
40
|
+
flex-shrink: 0;
|
|
41
|
+
}
|
|
42
|
+
.blog-h-card__content { padding: var(--sp-5, 1.2rem); }
|
|
43
|
+
.blog-h-card__title { color: var(--c-text-1, #fff); margin: 0.5rem 0; font-size: 1.1rem; }
|
|
44
|
+
.blog-h-card__desc { font-size: 0.85rem; color: var(--c-text-2, #94a3b8); margin: 0; }
|
|
45
|
+
.blog-h-card__tag { font-size: 0.7rem; color: var(--c-primary, #818cf8); font-weight: 700; text-transform: uppercase; }
|
|
46
|
+
|
|
47
|
+
@media (max-width: 600px) {
|
|
48
|
+
.blog-h-card { flex-direction: column; }
|
|
49
|
+
.blog-h-card__thumb { width: 100%; height: 180px; }
|
|
50
|
+
}
|
|
18
51
|
</style>
|
|
@@ -1,12 +1,56 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* CyberFeatureCard — A feature card with sharp angles and neon stroke animations.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} title - The main headline of the feature card.
|
|
6
|
+
* @param {string} subtitle - Optional description context.
|
|
7
|
+
*/
|
|
8
|
+
interface Props {
|
|
9
|
+
title: string;
|
|
10
|
+
subtitle?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const { title, subtitle } = Astro.props;
|
|
2
14
|
---
|
|
15
|
+
|
|
3
16
|
<div class="cyber-card">
|
|
4
|
-
<div class="
|
|
5
|
-
<h3>
|
|
6
|
-
<p>
|
|
17
|
+
<div class="cyber-card__glitch-line"></div>
|
|
18
|
+
<h3 class="cyber-card__title">{title}</h3>
|
|
19
|
+
{subtitle && <p class="cyber-card__subtitle">{subtitle}</p>}
|
|
20
|
+
<slot />
|
|
7
21
|
</div>
|
|
22
|
+
|
|
8
23
|
<style>
|
|
9
|
-
.cyber-card {
|
|
10
|
-
|
|
11
|
-
|
|
24
|
+
.cyber-card {
|
|
25
|
+
background: var(--c-bg-elev, #000);
|
|
26
|
+
color: var(--c-text-1, #00e0ff);
|
|
27
|
+
border: 1px solid var(--c-primary, #ff003c);
|
|
28
|
+
padding: var(--sp-6, 1.5rem);
|
|
29
|
+
clip-path: polygon(0 0, 100% 0, 100% 85%, 85% 100%, 0 100%);
|
|
30
|
+
position: relative;
|
|
31
|
+
}
|
|
32
|
+
.cyber-card__glitch-line {
|
|
33
|
+
position: absolute;
|
|
34
|
+
height: 1px;
|
|
35
|
+
width: 100%;
|
|
36
|
+
background: var(--c-primary, #ff003c);
|
|
37
|
+
top: 10%; left: 0;
|
|
38
|
+
opacity: 0.5;
|
|
39
|
+
animation: glitch-anim 4s infinite;
|
|
40
|
+
}
|
|
41
|
+
.cyber-card__title {
|
|
42
|
+
margin: 0 0 0.5rem;
|
|
43
|
+
font-size: 1.25rem;
|
|
44
|
+
color: var(--c-text-1);
|
|
45
|
+
}
|
|
46
|
+
.cyber-card__subtitle {
|
|
47
|
+
margin: 0;
|
|
48
|
+
font-size: 0.9rem;
|
|
49
|
+
color: var(--c-text-2, #ccc);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@keyframes glitch-anim {
|
|
53
|
+
0%, 100% { top: 10%; }
|
|
54
|
+
50% { top: 90%; }
|
|
55
|
+
}
|
|
12
56
|
</style>
|
|
@@ -1,24 +1,77 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* EcommerceProductCard — Commercial card with price, rating and action buttons.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} title - The product name.
|
|
6
|
+
* @param {string} price - The parsed price string (e.g. "$299").
|
|
7
|
+
* @param {string} imageUrl - The URL mapping to the product's thumbnail.
|
|
8
|
+
* @param {string} tag - Optional. The highlight bubble tag (e.g. "New").
|
|
9
|
+
* @param {string} rating - Optional. Formatted rating string.
|
|
10
|
+
* @param {string} ctaText - Optional. Label for the call to action button. Default is "Add".
|
|
11
|
+
*/
|
|
12
|
+
interface Props {
|
|
13
|
+
title: string;
|
|
14
|
+
price: string;
|
|
15
|
+
imageUrl?: string;
|
|
16
|
+
tag?: string;
|
|
17
|
+
rating?: string;
|
|
18
|
+
ctaText?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const {
|
|
22
|
+
title,
|
|
23
|
+
price,
|
|
24
|
+
imageUrl,
|
|
25
|
+
tag,
|
|
26
|
+
rating,
|
|
27
|
+
ctaText = 'Add'
|
|
28
|
+
} = Astro.props;
|
|
2
29
|
---
|
|
30
|
+
|
|
3
31
|
<div class="prod-card">
|
|
4
|
-
<div class="image
|
|
5
|
-
<div class="
|
|
6
|
-
<div class="
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
32
|
+
<div class="prod-card__image" style={imageUrl ? `background-image: url('${imageUrl}'); background-size: cover;` : ''}></div>
|
|
33
|
+
<div class="prod-card__info">
|
|
34
|
+
<div class="prod-card__meta">
|
|
35
|
+
{tag ? <span>{tag}</span> : <span></span>}
|
|
36
|
+
{rating ? <span>{rating}</span> : null}
|
|
37
|
+
</div>
|
|
38
|
+
<h4 class="prod-card__title">{title}</h4>
|
|
39
|
+
<div class="prod-card__bot">
|
|
40
|
+
<span class="prod-card__price">{price}</span>
|
|
41
|
+
<button class="prod-card__cta" type="button">{ctaText}</button>
|
|
11
42
|
</div>
|
|
12
43
|
</div>
|
|
13
44
|
</div>
|
|
45
|
+
|
|
14
46
|
<style>
|
|
15
|
-
.prod-card {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
.
|
|
23
|
-
|
|
47
|
+
.prod-card {
|
|
48
|
+
background: var(--c-bg-elev, #0f172a);
|
|
49
|
+
border-radius: var(--r-lg, 16px);
|
|
50
|
+
border: 1px solid var(--c-border, rgba(255,255,255,0.1));
|
|
51
|
+
overflow: hidden;
|
|
52
|
+
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.3s ease;
|
|
53
|
+
}
|
|
54
|
+
.prod-card:hover {
|
|
55
|
+
border-color: var(--c-primary, #6366f1);
|
|
56
|
+
transform: translateY(-3px);
|
|
57
|
+
}
|
|
58
|
+
.prod-card__image {
|
|
59
|
+
height: 180px;
|
|
60
|
+
background-color: var(--c-bg, #1e293b);
|
|
61
|
+
}
|
|
62
|
+
.prod-card__info { padding: var(--sp-5, 1.25rem); }
|
|
63
|
+
.prod-card__meta {
|
|
64
|
+
display: flex; justify-content: space-between;
|
|
65
|
+
font-size: 0.75rem; color: var(--c-primary-light, #818cf8);
|
|
66
|
+
font-weight: 700; margin-bottom: 0.5rem;
|
|
67
|
+
}
|
|
68
|
+
.prod-card__title { color: var(--c-text-1, #fff); margin: 0; font-size: 1.1rem; }
|
|
69
|
+
.prod-card__bot { display: flex; justify-content: space-between; align-items: center; margin-top: 1.25rem; }
|
|
70
|
+
.prod-card__price { font-weight: 800; color: var(--c-text-1, #fff); font-size: 1.25rem; }
|
|
71
|
+
.prod-card__cta {
|
|
72
|
+
background: var(--c-primary, #6366f1); border: none; color: #fff;
|
|
73
|
+
padding: 0.5rem 1.2rem; border-radius: var(--r-md, 8px);
|
|
74
|
+
font-weight: 600; cursor: pointer; transition: 0.2s;
|
|
75
|
+
}
|
|
76
|
+
.prod-card__cta:hover { filter: brightness(1.1); }
|
|
24
77
|
</style>
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* GlassCard — A versatile glassmorphism card with hover lift effect and gradient border.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} title - Optional title for the glass card header.
|
|
6
|
+
* @param {string} subtitle - Optional description below the title.
|
|
7
|
+
* @param {boolean} hoverable - Whether the card lifts on hover. Default is true.
|
|
8
|
+
* @param {'sm'|'md'|'lg'} padding - Internal padding control. Default is 'md'.
|
|
9
|
+
*/
|
|
2
10
|
interface Props { title?: string; subtitle?: string; hoverable?: boolean; padding?: 'sm' | 'md' | 'lg'; }
|
|
3
11
|
const { title, subtitle, hoverable = true, padding = 'md' } = Astro.props;
|
|
4
12
|
---
|
|
@@ -1,19 +1,60 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* GlassEventCard — Vibrant card for events with date badge and glass effect.
|
|
4
|
+
*
|
|
5
|
+
* @param {string|number} day - The event date numeric segment.
|
|
6
|
+
* @param {string} month - The event month string indicator.
|
|
7
|
+
* @param {string} title - The name of the event.
|
|
8
|
+
* @param {string} details - Additional string metadata (e.g location and time).
|
|
9
|
+
*/
|
|
10
|
+
interface Props {
|
|
11
|
+
day: string | number;
|
|
12
|
+
month: string;
|
|
13
|
+
title: string;
|
|
14
|
+
details: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const { day, month, title, details } = Astro.props;
|
|
2
18
|
---
|
|
19
|
+
|
|
3
20
|
<div class="event-card">
|
|
4
|
-
<div class="
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<p>San Francisco, CA · 6:00 PM</p>
|
|
21
|
+
<div class="event-card__badge">
|
|
22
|
+
<span class="event-card__day">{day}</span>
|
|
23
|
+
{month}
|
|
8
24
|
</div>
|
|
9
|
-
<
|
|
25
|
+
<div class="event-card__info">
|
|
26
|
+
<h3 class="event-card__title">{title}</h3>
|
|
27
|
+
<p class="event-card__details">{details}</p>
|
|
28
|
+
</div>
|
|
29
|
+
<button class="event-card__join" type="button" aria-label="Join event">+</button>
|
|
10
30
|
</div>
|
|
31
|
+
|
|
11
32
|
<style>
|
|
12
|
-
.event-card {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
33
|
+
.event-card {
|
|
34
|
+
display: flex; align-items: center; gap: var(--sp-4, 1rem);
|
|
35
|
+
padding: var(--sp-5, 1.25rem);
|
|
36
|
+
background: var(--c-bg-elev, rgba(255,255,255,0.04));
|
|
37
|
+
backdrop-filter: blur(10px);
|
|
38
|
+
border: 1px solid var(--c-border, rgba(255,255,255,0.1));
|
|
39
|
+
border-radius: var(--r-xl, 20px);
|
|
40
|
+
}
|
|
41
|
+
.event-card__badge {
|
|
42
|
+
background: var(--c-primary, #6366f1); color: #fff;
|
|
43
|
+
width: 50px; height: 60px;
|
|
44
|
+
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
45
|
+
font-size: 0.7rem; font-weight: 800; border-radius: var(--r-md, 12px);
|
|
46
|
+
text-transform: uppercase;
|
|
47
|
+
}
|
|
48
|
+
.event-card__day { font-size: 1.2rem; line-height: 1; margin-bottom: 2px; }
|
|
49
|
+
.event-card__info { flex: 1; }
|
|
50
|
+
.event-card__title { font-size: 1rem; color: var(--c-text-1, #fff); margin: 0; }
|
|
51
|
+
.event-card__details { font-size: 0.8rem; color: var(--c-text-2, #94a3b8); margin: 2px 0 0; }
|
|
52
|
+
.event-card__join {
|
|
53
|
+
margin-left: auto; width: 40px; height: 40px;
|
|
54
|
+
border-radius: var(--r-full, 50%);
|
|
55
|
+
border: 1px solid var(--c-border, rgba(255,255,255,0.2));
|
|
56
|
+
background: none; color: var(--c-text-1, #fff);
|
|
57
|
+
font-size: 1.2rem; cursor: pointer; transition: 0.2s;
|
|
58
|
+
}
|
|
59
|
+
.event-card__join:hover { background: var(--c-text-1, #fff); color: var(--c-bg, #000); }
|
|
19
60
|
</style>
|
|
@@ -1,16 +1,53 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* GlowPortfolioCard — Card with a hovering background glow that follows the card edges.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} title - Project title heading.
|
|
6
|
+
* @param {string} subtitle - Project metadata (e.g. "Web design / 2024").
|
|
7
|
+
* @param {string} glowColor - Optional. Hex color for the animated border glow. Default is '#6366f1'.
|
|
8
|
+
*/
|
|
9
|
+
interface Props {
|
|
10
|
+
title: string;
|
|
11
|
+
subtitle: string;
|
|
12
|
+
glowColor?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const { title, subtitle, glowColor = 'var(--c-primary, #6366f1)' } = Astro.props;
|
|
2
16
|
---
|
|
3
|
-
|
|
17
|
+
|
|
18
|
+
<div class="glow-wrap" style={`--glow-color: ${glowColor};`}>
|
|
4
19
|
<div class="glow-content">
|
|
5
|
-
<h3>
|
|
6
|
-
<p>
|
|
20
|
+
<h3 class="glow-content__title">{title}</h3>
|
|
21
|
+
<p class="glow-content__subtitle">{subtitle}</p>
|
|
22
|
+
<slot />
|
|
7
23
|
</div>
|
|
8
24
|
</div>
|
|
25
|
+
|
|
9
26
|
<style>
|
|
10
|
-
.glow-wrap {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
.glow-wrap {
|
|
28
|
+
position: relative;
|
|
29
|
+
padding: 2px;
|
|
30
|
+
border-radius: var(--r-xl, 20px);
|
|
31
|
+
background: var(--c-border, rgba(255,255,255,0.1));
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
}
|
|
34
|
+
.glow-wrap::before {
|
|
35
|
+
content: '';
|
|
36
|
+
position: absolute;
|
|
37
|
+
inset: -50%;
|
|
38
|
+
background: conic-gradient(from 0deg, transparent, var(--glow-color), transparent);
|
|
39
|
+
animation: rotate-glow 4s linear infinite;
|
|
40
|
+
}
|
|
41
|
+
.glow-content {
|
|
42
|
+
position: relative;
|
|
43
|
+
background: var(--c-bg, #080b14);
|
|
44
|
+
padding: var(--sp-8, 2rem);
|
|
45
|
+
border-radius: calc(var(--r-xl, 20px) - 2px);
|
|
46
|
+
z-index: 1;
|
|
47
|
+
text-align: center;
|
|
48
|
+
}
|
|
49
|
+
.glow-content__title { margin: 0; color: var(--c-text-1, #fff); font-size: 1.25rem; }
|
|
50
|
+
.glow-content__subtitle { color: var(--c-text-2, #94a3b8); font-size: 0.9rem; margin-top: 0.5rem; }
|
|
51
|
+
|
|
52
|
+
@keyframes rotate-glow { 100% { transform: rotate(360deg); } }
|
|
16
53
|
</style>
|
|
@@ -1,17 +1,55 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* InteractiveTiltCard — Card that tilts in 3D space based on mouse position.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} title - The card's heading text.
|
|
6
|
+
* @param {string} description - The descriptive paragraph attached to the card.
|
|
7
|
+
*/
|
|
8
|
+
interface Props {
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const { title, description } = Astro.props;
|
|
2
14
|
---
|
|
15
|
+
|
|
3
16
|
<div class="tilt-card-wrap">
|
|
4
17
|
<div class="tilt-card-inner">
|
|
5
|
-
<h3>
|
|
6
|
-
<p>
|
|
18
|
+
<h3 class="tilt-card__title">{title}</h3>
|
|
19
|
+
<p class="tilt-card__desc">{description}</p>
|
|
7
20
|
</div>
|
|
8
21
|
</div>
|
|
22
|
+
|
|
9
23
|
<style>
|
|
10
|
-
.tilt-card-wrap {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
24
|
+
.tilt-card-wrap {
|
|
25
|
+
perspective: 1000px;
|
|
26
|
+
width: 100%;
|
|
27
|
+
max-width: 300px;
|
|
28
|
+
}
|
|
29
|
+
.tilt-card-inner {
|
|
30
|
+
background: var(--c-bg-elev, #1e293b);
|
|
31
|
+
padding: var(--sp-12, 3rem);
|
|
32
|
+
border-radius: var(--r-xl, 24px);
|
|
33
|
+
color: var(--c-text-1, #fff);
|
|
34
|
+
text-align: center;
|
|
35
|
+
border: 1px solid var(--c-border, rgba(255,255,255,0.1));
|
|
36
|
+
transform-style: preserve-3d;
|
|
37
|
+
transition: transform 0.1s;
|
|
38
|
+
}
|
|
39
|
+
.tilt-card__title {
|
|
40
|
+
transform: translateZ(50px);
|
|
41
|
+
font-size: 1.5rem;
|
|
42
|
+
color: var(--c-primary, #818cf8);
|
|
43
|
+
margin: 0;
|
|
44
|
+
}
|
|
45
|
+
.tilt-card__desc {
|
|
46
|
+
transform: translateZ(30px);
|
|
47
|
+
color: var(--c-text-2, #94a3b8);
|
|
48
|
+
font-size: 0.9rem;
|
|
49
|
+
margin-top: 1rem;
|
|
50
|
+
}
|
|
14
51
|
</style>
|
|
52
|
+
|
|
15
53
|
<script>
|
|
16
54
|
document.querySelectorAll('.tilt-card-inner').forEach(card => {
|
|
17
55
|
card.addEventListener('mousemove', e => {
|
|
@@ -20,6 +58,8 @@
|
|
|
20
58
|
const y = ((e as MouseEvent).clientY - rect.top - rect.height/2) / -10;
|
|
21
59
|
(card as HTMLElement).style.transform = `rotateY(${x}deg) rotateX(${y}deg)`;
|
|
22
60
|
});
|
|
23
|
-
card.addEventListener('mouseleave', () =>
|
|
61
|
+
card.addEventListener('mouseleave', () => {
|
|
62
|
+
(card as HTMLElement).style.transform = 'rotateY(0deg) rotateX(0deg)';
|
|
63
|
+
});
|
|
24
64
|
});
|
|
25
65
|
</script>
|
|
@@ -1,15 +1,46 @@
|
|
|
1
1
|
---
|
|
2
|
+
/**
|
|
3
|
+
* KanbanItemCard — Small card optimized for list-based project management.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} title - The description of the ticket/task.
|
|
6
|
+
* @param {string} priority - Priority level label (e.g. "Prio").
|
|
7
|
+
* @param {string} tag - Contextual label tag (e.g. "SEO", "Bug").
|
|
8
|
+
*/
|
|
9
|
+
interface Props {
|
|
10
|
+
title: string;
|
|
11
|
+
priority?: string;
|
|
12
|
+
tag?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const { title, priority, tag } = Astro.props;
|
|
2
16
|
---
|
|
17
|
+
|
|
3
18
|
<div class="k-item">
|
|
4
|
-
<p>
|
|
5
|
-
<div class="
|
|
19
|
+
<p class="k-item__title">{title}</p>
|
|
20
|
+
<div class="k-item__badges">
|
|
21
|
+
{priority && <span class="k-item__badge k-item__badge--prio">{priority}</span>}
|
|
22
|
+
{tag && <span class="k-item__badge k-item__badge--opt">{tag}</span>}
|
|
23
|
+
</div>
|
|
6
24
|
</div>
|
|
25
|
+
|
|
7
26
|
<style>
|
|
8
|
-
.k-item {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
27
|
+
.k-item {
|
|
28
|
+
background: var(--c-bg-elev, #111);
|
|
29
|
+
border: 1px solid var(--c-border, #333);
|
|
30
|
+
padding: var(--sp-4, 1rem);
|
|
31
|
+
border-radius: var(--r-md, 8px);
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
transition: 0.2s;
|
|
34
|
+
}
|
|
35
|
+
.k-item:hover {
|
|
36
|
+
border-color: var(--c-primary, #6366f1);
|
|
37
|
+
transform: scale(1.02);
|
|
38
|
+
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
|
|
39
|
+
}
|
|
40
|
+
.k-item__title { margin: 0 0 0.75rem; font-size: 0.85rem; color: var(--c-text-1, #fff); font-weight: 500; line-height: 1.4; }
|
|
41
|
+
.k-item__badges { display: flex; gap: 4px; flex-wrap: wrap; }
|
|
42
|
+
.k-item__badge { font-size: 0.65rem; font-weight: 700; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; }
|
|
43
|
+
|
|
44
|
+
.k-item__badge--prio { background: rgba(245,158,11,0.1); color: #fbbf24; }
|
|
45
|
+
.k-item__badge--opt { background: rgba(52,211,153,0.1); color: #34d399; }
|
|
15
46
|
</style>
|