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.
Files changed (353) hide show
  1. package/README.md +218 -119
  2. package/package.json +28 -55
  3. package/src/components/index.ts +207 -0
  4. package/src/components/lib/AnimatedGalaxy.astro +185 -0
  5. package/src/components/lib/Galaxy3D.astro +308 -0
  6. package/src/components/lib/GlassNavbar.astro +13 -11
  7. package/src/components/lib/LogoWithGalaxy.astro +63 -0
  8. package/src/components/lib/buttons/3dPushButton.astro +9 -0
  9. package/src/components/lib/buttons/AnimatedIconButton.astro +10 -0
  10. package/src/components/lib/buttons/BorderDrawButton.astro +9 -0
  11. package/src/components/lib/buttons/CyberpunkButton.astro +10 -0
  12. package/src/components/lib/buttons/DoubleBorderButton.astro +9 -0
  13. package/src/components/lib/buttons/GhostOutlineButton.astro +10 -0
  14. package/src/components/lib/buttons/GlassButton.astro +13 -32
  15. package/src/components/lib/buttons/GlowButton.astro +9 -0
  16. package/src/components/lib/buttons/LiquidButton.astro +9 -0
  17. package/src/components/lib/buttons/LoadingButton.astro +10 -0
  18. package/src/components/lib/buttons/MagneticButton.astro +10 -0
  19. package/src/components/lib/buttons/MinimalPillButton.astro +9 -0
  20. package/src/components/lib/buttons/NeumorphicButton.astro +10 -0
  21. package/src/components/lib/buttons/PulseButton.astro +10 -0
  22. package/src/components/lib/buttons/RetroArcadeButton.astro +9 -0
  23. package/src/components/lib/buttons/RetroShadowButton.astro +9 -0
  24. package/src/components/lib/buttons/ShimmerButton.astro +9 -0
  25. package/src/components/lib/buttons/ShinyButton.astro +9 -0
  26. package/src/components/lib/buttons/TiltGlowButton.astro +10 -0
  27. package/src/components/lib/cards/BlogHorizontalCard.astro +46 -13
  28. package/src/components/lib/cards/CyberFeatureCard.astro +50 -6
  29. package/src/components/lib/cards/EcommerceProductCard.astro +69 -16
  30. package/src/components/lib/cards/GlassCard.astro +8 -0
  31. package/src/components/lib/cards/GlassEventCard.astro +53 -12
  32. package/src/components/lib/cards/GlowPortfolioCard.astro +46 -9
  33. package/src/components/lib/cards/InteractiveTiltCard.astro +47 -7
  34. package/src/components/lib/cards/KanbanItemCard.astro +40 -9
  35. package/src/components/lib/cards/MinimalLinkCard.astro +37 -7
  36. package/src/components/lib/cards/MusicPlayerMini.astro +54 -14
  37. package/src/components/lib/cards/NeumorphicCard.astro +32 -2
  38. package/src/components/lib/cards/NotificationCard.astro +44 -9
  39. package/src/components/lib/cards/PricingCard.astro +47 -9
  40. package/src/components/lib/cards/ProfileCard.astro +50 -11
  41. package/src/components/lib/cards/RetroGameCard.astro +37 -9
  42. package/src/components/lib/cards/StatCard.astro +43 -8
  43. package/src/components/lib/cards/TaskKanbanCard.astro +50 -11
  44. package/src/components/lib/cards/TestimonialCardClean.astro +43 -12
  45. package/src/components/lib/cards/WeatherWidgetCard.astro +36 -10
  46. package/src/components/lib/feedback/AnimatedCheckmark.astro +58 -9
  47. package/src/components/lib/feedback/Badge.astro +47 -12
  48. package/src/components/lib/feedback/CircleProgress.astro +56 -13
  49. package/src/components/lib/feedback/ConfettiFeedback.astro +74 -11
  50. package/src/components/lib/feedback/CyberGlitchAlert.astro +69 -6
  51. package/src/components/lib/feedback/EmptyStateCard.astro +55 -7
  52. package/src/components/lib/feedback/GlassAlert.astro +59 -13
  53. package/src/components/lib/feedback/GlassModal.astro +99 -14
  54. package/src/components/lib/feedback/GlassProgress.astro +39 -5
  55. package/src/components/lib/feedback/IndicatorBadgeMinimal.astro +56 -3
  56. package/src/components/lib/feedback/NeonSpinner.astro +40 -3
  57. package/src/components/lib/feedback/PulseDot.astro +51 -7
  58. package/src/components/lib/feedback/RatingPill.astro +38 -8
  59. package/src/components/lib/feedback/ShakeErrorGroup.astro +44 -3
  60. package/src/components/lib/feedback/SimpleTooltip.astro +53 -4
  61. package/src/components/lib/feedback/SkeletonList.astro +59 -13
  62. package/src/components/lib/feedback/Spotlight.astro +49 -4
  63. package/src/components/lib/feedback/StepProgress.astro +96 -9
  64. package/src/components/lib/feedback/ToastNotif.astro +60 -6
  65. package/src/components/lib/feedback/TypingIndicator.astro +52 -7
  66. package/src/components/lib/forms/AnimatedInput.astro +47 -5
  67. package/src/components/lib/forms/ChipInput.astro +116 -8
  68. package/src/components/lib/forms/ColorPickerInput.astro +53 -6
  69. package/src/components/lib/forms/CurrencyInput.astro +59 -6
  70. package/src/components/lib/forms/CustomRadioGroup.astro +61 -9
  71. package/src/components/lib/forms/CyberpunkCheckbox.astro +64 -8
  72. package/src/components/lib/forms/DragDropUpload.astro +87 -7
  73. package/src/components/lib/forms/ErrorInput.astro +31 -4
  74. package/src/components/lib/forms/FloatingPassword.astro +48 -10
  75. package/src/components/lib/forms/FormGroupVertical.astro +63 -9
  76. package/src/components/lib/forms/GlassSlider.astro +84 -3
  77. package/src/components/lib/forms/GlassTextarea.astro +39 -6
  78. package/src/components/lib/forms/ModernSelect.astro +66 -10
  79. package/src/components/lib/forms/NeumorphicSwitch.astro +54 -26
  80. package/src/components/lib/forms/OTPInput.astro +84 -12
  81. package/src/components/lib/forms/RatingStars.astro +66 -10
  82. package/src/components/lib/forms/SearchReveal.astro +44 -6
  83. package/src/components/lib/forms/SegmentedControl.astro +61 -7
  84. package/src/components/lib/forms/SimpleFileInput.astro +57 -6
  85. package/src/components/lib/forms/StepperInput.astro +101 -9
  86. package/src/components/lib/layout/FeatureHero.astro +70 -6
  87. package/src/components/lib/layout/FooterCenteredMinimal.astro +5 -2
  88. package/src/components/lib/navigation/GlassNavbar.astro +10 -5
  89. package/src/components/lib/navigation/MinimalSidebar.astro +6 -3
  90. package/src/components/lib/navigation/SimpleFooterGlass.astro +6 -2
  91. package/src/components/lib/overlays/SplashIntroOverlay.astro +6 -3
  92. package/src/components/lib/sections/ButtonsShowcase.astro +182 -0
  93. package/src/components/lib/sections/CardsShowcase.astro +376 -0
  94. package/src/components/lib/sections/DataShowcase.astro +329 -0
  95. package/src/components/lib/sections/FeedbackShowcase.astro +320 -0
  96. package/src/components/lib/sections/FormsShowcase.astro +347 -0
  97. package/src/components/lib/sections/HeroGlass.astro +202 -0
  98. package/src/components/lib/sections/HeroGradient.astro +143 -0
  99. package/src/components/lib/sections/HeroSplit.astro +210 -0
  100. package/src/components/lib/sections/LayoutShowcase.astro +317 -0
  101. package/src/components/lib/sections/NavigationShowcase.astro +285 -0
  102. package/src/components/lib/sections/OverlaysShowcase.astro +373 -0
  103. package/src/components/lib/sections/TypographyShowcase.astro +239 -0
  104. package/src/components/lib/sections/index.ts +6 -0
  105. package/src/components/types.d.ts +6 -0
  106. package/{dist → src}/styles/global.css +5 -5
  107. package/dist/AnimatedInput.astro +0 -82
  108. package/dist/Badge.astro +0 -52
  109. package/dist/GlassButton.astro +0 -87
  110. package/dist/GlassCard.astro +0 -72
  111. package/dist/GlassNavbar.astro +0 -65
  112. package/dist/GlowButton.astro +0 -60
  113. package/dist/buttons/3dPushButton.astro +0 -136
  114. package/dist/buttons/AnimatedIconButton.astro +0 -146
  115. package/dist/buttons/BorderDrawButton.astro +0 -112
  116. package/dist/buttons/CyberpunkButton.astro +0 -148
  117. package/dist/buttons/DoubleBorderButton.astro +0 -131
  118. package/dist/buttons/GhostOutlineButton.astro +0 -109
  119. package/dist/buttons/GlassButton.astro +0 -165
  120. package/dist/buttons/GlowButton.astro +0 -119
  121. package/dist/buttons/LiquidButton.astro +0 -167
  122. package/dist/buttons/LoadingButton.astro +0 -148
  123. package/dist/buttons/MagneticButton.astro +0 -134
  124. package/dist/buttons/MinimalPillButton.astro +0 -102
  125. package/dist/buttons/NeumorphicButton.astro +0 -158
  126. package/dist/buttons/PulseButton.astro +0 -111
  127. package/dist/buttons/RetroArcadeButton.astro +0 -105
  128. package/dist/buttons/RetroShadowButton.astro +0 -82
  129. package/dist/buttons/ShimmerButton.astro +0 -113
  130. package/dist/buttons/ShinyButton.astro +0 -121
  131. package/dist/buttons/TiltGlowButton.astro +0 -145
  132. package/dist/buttons/index.mjs +0 -19
  133. package/dist/buttons/index.ts +0 -19
  134. package/dist/cards/BlogHorizontalCard.astro +0 -18
  135. package/dist/cards/CyberFeatureCard.astro +0 -12
  136. package/dist/cards/EcommerceProductCard.astro +0 -24
  137. package/dist/cards/GlassCard.astro +0 -17
  138. package/dist/cards/GlassEventCard.astro +0 -19
  139. package/dist/cards/GlowPortfolioCard.astro +0 -16
  140. package/dist/cards/InteractiveTiltCard.astro +0 -25
  141. package/dist/cards/KanbanItemCard.astro +0 -15
  142. package/dist/cards/MinimalLinkCard.astro +0 -12
  143. package/dist/cards/MusicPlayerMini.astro +0 -21
  144. package/dist/cards/NeumorphicCard.astro +0 -6
  145. package/dist/cards/NotificationCard.astro +0 -15
  146. package/dist/cards/PricingCard.astro +0 -17
  147. package/dist/cards/ProfileCard.astro +0 -17
  148. package/dist/cards/RetroGameCard.astro +0 -15
  149. package/dist/cards/StatCard.astro +0 -15
  150. package/dist/cards/TaskKanbanCard.astro +0 -18
  151. package/dist/cards/TestimonialCardClean.astro +0 -20
  152. package/dist/cards/WeatherWidgetCard.astro +0 -17
  153. package/dist/cards/index.mjs +0 -19
  154. package/dist/cards/index.ts +0 -19
  155. package/dist/data/AccordionGroupGlass.astro +0 -21
  156. package/dist/data/AvatarGroupStack.astro +0 -15
  157. package/dist/data/CalendarGridView.astro +0 -18
  158. package/dist/data/DataChipsGroup.astro +0 -16
  159. package/dist/data/DescriptionListHoriz.astro +0 -14
  160. package/dist/data/FileTreeView.astro +0 -22
  161. package/dist/data/GanttChartMinimal.astro +0 -12
  162. package/dist/data/GlassTable.astro +0 -23
  163. package/dist/data/KeyValuePillGroup.astro +0 -12
  164. package/dist/data/PriceCompareTable.astro +0 -22
  165. package/dist/data/ProgressListSmall.astro +0 -17
  166. package/dist/data/RatingBreakdownBar.astro +0 -13
  167. package/dist/data/SparklineStatCard.astro +0 -16
  168. package/dist/data/StatsGridDashboard.astro +0 -16
  169. package/dist/data/StepperDataVertical.astro +0 -15
  170. package/dist/data/TagCloudData.astro +0 -14
  171. package/dist/data/TimelineHorizSteps.astro +0 -18
  172. package/dist/data/TreeItemInteractive.astro +0 -18
  173. package/dist/data/UserDirectoryItem.astro +0 -15
  174. package/dist/data/VerticalTimeline.astro +0 -21
  175. package/dist/data/index.mjs +0 -20
  176. package/dist/data/index.ts +0 -20
  177. package/dist/feedback/AnimatedCheckmark.astro +0 -13
  178. package/dist/feedback/Badge.astro +0 -19
  179. package/dist/feedback/CircleProgress.astro +0 -22
  180. package/dist/feedback/ConfettiFeedback.astro +0 -18
  181. package/dist/feedback/CyberGlitchAlert.astro +0 -11
  182. package/dist/feedback/EmptyStateCard.astro +0 -13
  183. package/dist/feedback/GlassAlert.astro +0 -20
  184. package/dist/feedback/GlassModal.astro +0 -19
  185. package/dist/feedback/GlassProgress.astro +0 -10
  186. package/dist/feedback/IndicatorBadgeMinimal.astro +0 -10
  187. package/dist/feedback/NeonSpinner.astro +0 -7
  188. package/dist/feedback/PulseDot.astro +0 -12
  189. package/dist/feedback/RatingPill.astro +0 -13
  190. package/dist/feedback/ShakeErrorGroup.astro +0 -7
  191. package/dist/feedback/SimpleTooltip.astro +0 -10
  192. package/dist/feedback/SkeletonList.astro +0 -20
  193. package/dist/feedback/Spotlight.astro +0 -9
  194. package/dist/feedback/StepProgress.astro +0 -14
  195. package/dist/feedback/ToastNotif.astro +0 -11
  196. package/dist/feedback/TypingIndicator.astro +0 -12
  197. package/dist/feedback/index.mjs +0 -20
  198. package/dist/feedback/index.ts +0 -20
  199. package/dist/forms/AnimatedInput.astro +0 -16
  200. package/dist/forms/ChipInput.astro +0 -13
  201. package/dist/forms/ColorPickerInput.astro +0 -13
  202. package/dist/forms/CurrencyInput.astro +0 -11
  203. package/dist/forms/CustomRadioGroup.astro +0 -13
  204. package/dist/forms/CyberpunkCheckbox.astro +0 -15
  205. package/dist/forms/DragDropUpload.astro +0 -12
  206. package/dist/forms/ErrorInput.astro +0 -11
  207. package/dist/forms/FloatingPassword.astro +0 -20
  208. package/dist/forms/FormGroupVertical.astro +0 -14
  209. package/dist/forms/GlassSlider.astro +0 -7
  210. package/dist/forms/GlassTextarea.astro +0 -14
  211. package/dist/forms/ModernSelect.astro +0 -16
  212. package/dist/forms/NeumorphicSwitch.astro +0 -55
  213. package/dist/forms/OTPInput.astro +0 -22
  214. package/dist/forms/RatingStars.astro +0 -15
  215. package/dist/forms/SearchReveal.astro +0 -13
  216. package/dist/forms/SegmentedControl.astro +0 -13
  217. package/dist/forms/SimpleFileInput.astro +0 -11
  218. package/dist/forms/StepperInput.astro +0 -14
  219. package/dist/forms/index.mjs +0 -20
  220. package/dist/forms/index.ts +0 -20
  221. package/dist/index.js +0 -1
  222. package/dist/index.mjs +0 -1
  223. package/dist/layout/BentoGrid3.astro +0 -14
  224. package/dist/layout/CenterFixedBox.astro +0 -6
  225. package/dist/layout/CenteredContainer.astro +0 -8
  226. package/dist/layout/ClusterHorizontal.astro +0 -6
  227. package/dist/layout/FeatureHero.astro +0 -17
  228. package/dist/layout/FooterCenteredMinimal.astro +0 -11
  229. package/dist/layout/FullBleedSection.astro +0 -6
  230. package/dist/layout/GalleryGrid4.astro +0 -7
  231. package/dist/layout/GlassCardGrid.astro +0 -6
  232. package/dist/layout/GlassSectionHeader.astro +0 -15
  233. package/dist/layout/LandingSectionSplit.astro +0 -13
  234. package/dist/layout/MasonryGrid.astro +0 -7
  235. package/dist/layout/MinimalFooterGrid.astro +0 -20
  236. package/dist/layout/ScrollSnapSection.astro +0 -7
  237. package/dist/layout/SectionDividerText.astro +0 -7
  238. package/dist/layout/SidebarLayoutWrapper.astro +0 -11
  239. package/dist/layout/SplitScreenLayout.astro +0 -11
  240. package/dist/layout/StepLayoutVertical.astro +0 -21
  241. package/dist/layout/StickySidebarWrapper.astro +0 -10
  242. package/dist/layout/VerticalStack.astro +0 -8
  243. package/dist/layout/index.mjs +0 -20
  244. package/dist/layout/index.ts +0 -20
  245. package/dist/navigation/AnchorSideNav.astro +0 -13
  246. package/dist/navigation/BottomNavMobile.astro +0 -13
  247. package/dist/navigation/BreadcrumbsMinimal.astro +0 -16
  248. package/dist/navigation/BurgerMorphIcon.astro +0 -12
  249. package/dist/navigation/CommandPaletteUI.astro +0 -17
  250. package/dist/navigation/DotNavigationSlider.astro +0 -13
  251. package/dist/navigation/FloatingTabBar.astro +0 -12
  252. package/dist/navigation/GlassNavbar.astro +0 -19
  253. package/dist/navigation/LangSwitcherPill.astro +0 -17
  254. package/dist/navigation/MegaMenuGlass.astro +0 -25
  255. package/dist/navigation/MinimalSidebar.astro +0 -18
  256. package/dist/navigation/PaginationGlass.astro +0 -20
  257. package/dist/navigation/PaginationInfiniteUI.astro +0 -11
  258. package/dist/navigation/RadialIconMenu.astro +0 -15
  259. package/dist/navigation/RetroArcadeMenu.astro +0 -12
  260. package/dist/navigation/ScrollProgressTop.astro +0 -15
  261. package/dist/navigation/SimpleFooterGlass.astro +0 -21
  262. package/dist/navigation/TabUnderline.astro +0 -14
  263. package/dist/navigation/UserProfileNav.astro +0 -21
  264. package/dist/navigation/VerticalTabs.astro +0 -14
  265. package/dist/navigation/index.mjs +0 -20
  266. package/dist/navigation/index.ts +0 -20
  267. package/dist/overlays/AgeVerificationOverlay.astro +0 -20
  268. package/dist/overlays/BackdropBlurMask.astro +0 -6
  269. package/dist/overlays/BottomSheetMobile.astro +0 -16
  270. package/dist/overlays/CommandDialog.astro +0 -19
  271. package/dist/overlays/ContextMenuOverlay.astro +0 -17
  272. package/dist/overlays/CookieBannerGlass.astro +0 -14
  273. package/dist/overlays/ExitIntentOverlay.astro +0 -19
  274. package/dist/overlays/FloatingTrayActions.astro +0 -13
  275. package/dist/overlays/HelpBubbleOverlay.astro +0 -11
  276. package/dist/overlays/LightboxOverlay.astro +0 -13
  277. package/dist/overlays/LoadingOverlayFull.astro +0 -10
  278. package/dist/overlays/MobileNavOverlay.astro +0 -18
  279. package/dist/overlays/OverlayModal.astro +0 -24
  280. package/dist/overlays/PopoverMenuGlass.astro +0 -17
  281. package/dist/overlays/SearchOverlayFullscreen.astro +0 -15
  282. package/dist/overlays/SideDrawerRight.astro +0 -16
  283. package/dist/overlays/SplashIntroOverlay.astro +0 -11
  284. package/dist/overlays/SpotlightIndicator.astro +0 -6
  285. package/dist/overlays/ToastStackOverlay.astro +0 -12
  286. package/dist/overlays/TooltipActionTray.astro +0 -14
  287. package/dist/overlays/index.mjs +0 -20
  288. package/dist/overlays/index.ts +0 -20
  289. package/dist/typography/AnimatedUnderlineLink.astro +0 -10
  290. package/dist/typography/BackgroundClipMask.astro +0 -7
  291. package/dist/typography/CodeInlineGlass.astro +0 -6
  292. package/dist/typography/CyberpunkGlitchText.astro +0 -20
  293. package/dist/typography/DropCapParagraph.astro +0 -7
  294. package/dist/typography/FadedVerticalText.astro +0 -6
  295. package/dist/typography/FloatingTextLabel.astro +0 -10
  296. package/dist/typography/GlassBlockQuote.astro +0 -13
  297. package/dist/typography/GlassTextReveal.astro +0 -7
  298. package/dist/typography/GradientHeading.astro +0 -9
  299. package/dist/typography/GradientUnderlineLink.astro +0 -7
  300. package/dist/typography/KbdIndicator.astro +0 -6
  301. package/dist/typography/LetterSpacingWide.astro +0 -6
  302. package/dist/typography/MinimalListMarkers.astro +0 -10
  303. package/dist/typography/MonospaceStatLine.astro +0 -6
  304. package/dist/typography/NeonTextHighlight.astro +0 -6
  305. package/dist/typography/ShadowRevealText.astro +0 -7
  306. package/dist/typography/StrokeHeadingOutline.astro +0 -8
  307. package/dist/typography/Text3DLayer.astro +0 -7
  308. package/dist/typography/TypewriterText.astro +0 -15
  309. package/dist/typography/index.mjs +0 -20
  310. package/dist/typography/index.ts +0 -20
  311. package/dist/utilities/AspectRatioBox.astro +0 -11
  312. package/dist/utilities/BackgroundDotPattern.astro +0 -6
  313. package/dist/utilities/CircularMask.astro +0 -7
  314. package/dist/utilities/ClickRippleWrapper.astro +0 -7
  315. package/dist/utilities/FadeInWrapper.astro +0 -11
  316. package/dist/utilities/FixedRatioImage.astro +0 -7
  317. package/dist/utilities/GlassBlurLayer.astro +0 -6
  318. package/dist/utilities/GradientBorderMask.astro +0 -7
  319. package/dist/utilities/HoverLift.astro +0 -7
  320. package/dist/utilities/ResponsiveSpacer.astro +0 -15
  321. package/dist/utilities/ResponsiveVisToggle.astro +0 -11
  322. package/dist/utilities/ScrollLockParent.astro +0 -11
  323. package/dist/utilities/ScrollMarginTarget.astro +0 -10
  324. package/dist/utilities/SlideUpReveal.astro +0 -7
  325. package/dist/utilities/SmoothAnchorLink.astro +0 -22
  326. package/dist/utilities/StackLayering.astro +0 -12
  327. package/dist/utilities/StickyObserver.astro +0 -8
  328. package/dist/utilities/TextTruncate.astro +0 -10
  329. package/dist/utilities/TruncateSingleLine.astro +0 -6
  330. package/dist/utilities/VisuallyHidden.astro +0 -6
  331. package/dist/utilities/index.mjs +0 -20
  332. package/dist/utilities/index.ts +0 -20
  333. package/src/components/lib/utilities/AspectRatioBox.astro +0 -11
  334. package/src/components/lib/utilities/BackgroundDotPattern.astro +0 -6
  335. package/src/components/lib/utilities/CircularMask.astro +0 -7
  336. package/src/components/lib/utilities/ClickRippleWrapper.astro +0 -7
  337. package/src/components/lib/utilities/FadeInWrapper.astro +0 -11
  338. package/src/components/lib/utilities/FixedRatioImage.astro +0 -7
  339. package/src/components/lib/utilities/GlassBlurLayer.astro +0 -6
  340. package/src/components/lib/utilities/GradientBorderMask.astro +0 -7
  341. package/src/components/lib/utilities/HoverLift.astro +0 -7
  342. package/src/components/lib/utilities/ResponsiveSpacer.astro +0 -15
  343. package/src/components/lib/utilities/ResponsiveVisToggle.astro +0 -11
  344. package/src/components/lib/utilities/ScrollLockParent.astro +0 -11
  345. package/src/components/lib/utilities/ScrollMarginTarget.astro +0 -10
  346. package/src/components/lib/utilities/SlideUpReveal.astro +0 -7
  347. package/src/components/lib/utilities/SmoothAnchorLink.astro +0 -22
  348. package/src/components/lib/utilities/StackLayering.astro +0 -12
  349. package/src/components/lib/utilities/StickyObserver.astro +0 -8
  350. package/src/components/lib/utilities/TextTruncate.astro +0 -10
  351. package/src/components/lib/utilities/TruncateSingleLine.astro +0 -6
  352. package/src/components/lib/utilities/VisuallyHidden.astro +0 -6
  353. package/src/components/lib/utilities/index.ts +0 -20
@@ -1,12 +1,42 @@
1
1
  ---
2
+ /**
3
+ * MinimalLinkCard — Elegant arrow-link card for site navigation sections.
4
+ *
5
+ * @param {string} title - The text label of the link.
6
+ * @param {string} href - The destination URL.
7
+ */
8
+ interface Props {
9
+ title: string;
10
+ href: string;
11
+ }
12
+
13
+ const { title, href } = Astro.props;
2
14
  ---
3
- <a href="#" class="link-card">
4
- <span>Documentation</span>
5
- <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
15
+
16
+ <a href={href} class="link-card">
17
+ <span class="link-card__title">{title}</span>
18
+ <svg class="link-card__icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
19
+ <path d="M5 12h14M12 5l7 7-7 7"/>
20
+ </svg>
6
21
  </a>
22
+
7
23
  <style>
8
- .link-card { display: flex; justify-content: space-between; align-items: center; padding: 1.5rem; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.1); border-radius: 12px; text-decoration: none; color: #fff; font-weight: 600; transition: 0.2s; }
9
- .link-card:hover { background: rgba(255,255,255,0.06); border-color: #6366f1; color: #818cf8; }
10
- svg { transition: transform 0.2s; }
11
- .link-card:hover svg { transform: translateX(5px); }
24
+ .link-card {
25
+ display: flex; justify-content: space-between; align-items: center;
26
+ padding: var(--sp-6, 1.5rem);
27
+ background: var(--c-bg-elev, rgba(255,255,255,0.03));
28
+ border: 1px solid var(--c-border, rgba(255,255,255,0.1));
29
+ border-radius: var(--r-md, 12px);
30
+ text-decoration: none;
31
+ color: var(--c-text-1, #fff);
32
+ font-weight: 600;
33
+ transition: 0.2s;
34
+ }
35
+ .link-card:hover {
36
+ background: rgba(255,255,255,0.06);
37
+ border-color: var(--c-primary, #6366f1);
38
+ color: var(--c-primary-light, #818cf8);
39
+ }
40
+ .link-card__icon { transition: transform 0.2s; }
41
+ .link-card:hover .link-card__icon { transform: translateX(5px); }
12
42
  </style>
@@ -1,21 +1,61 @@
1
1
  ---
2
+ /**
3
+ * MusicPlayerMini — Compact player widget with controls and progress bar.
4
+ *
5
+ * @param {string} title - The song track title.
6
+ * @param {string} artist - The artist or band name.
7
+ * @param {string} coverUrl - Optional string matching the album cover image URL.
8
+ * @param {number} progress - The song progress representation (0 to 100). Default is 40.
9
+ */
10
+ interface Props {
11
+ title: string;
12
+ artist: string;
13
+ coverUrl?: string;
14
+ progress?: number;
15
+ }
16
+
17
+ const { title, artist, coverUrl, progress = 40 } = Astro.props;
2
18
  ---
19
+
3
20
  <div class="music-mini">
4
- <div class="art"></div>
5
- <div class="track">
6
- <h4>Moonlight Sonatina</h4>
7
- <p>Astro Orchestra</p>
8
- <div class="progress"><div class="bar"></div></div>
21
+ <div class="music-mini__art" style={coverUrl ? `background-image: url('${coverUrl}'); background-size: cover;` : ''}></div>
22
+ <div class="music-mini__track">
23
+ <h4 class="music-mini__title">{title}</h4>
24
+ <p class="music-mini__artist">{artist}</p>
25
+ <div class="music-mini__progress" role="progressbar" aria-valuenow={progress} aria-valuemin="0" aria-valuemax="100">
26
+ <div class="music-mini__bar" style={`width: ${progress}%;`}></div>
27
+ </div>
9
28
  </div>
10
- <div class="play">▶</div>
29
+ <button class="music-mini__play" type="button" aria-label="Play track">▶</button>
11
30
  </div>
31
+
12
32
  <style>
13
- .music-mini { display: flex; align-items: center; gap: 1rem; background: #111; padding: 0.75rem; border-radius: 14px; border: 1px solid #333; width: 100%; max-width: 320px; }
14
- .art { width: 50px; height: 50px; background: #818cf8; border-radius: 8px; flex-shrink: 0; }
15
- .track { flex: 1; }
16
- h4 { font-size: 0.85rem; color: #fff; margin: 0; }
17
- p { font-size: 0.7rem; color: #64748b; margin: 0; }
18
- .progress { height: 3px; background: #222; border-radius: 2px; margin-top: 8px; position: relative; }
19
- .bar { position: absolute; left: 0; top: 0; height: 100%; width: 40%; background: #6366f1; border-radius: 2px; }
20
- .play { font-size: 1.2rem; cursor: pointer; color: #fff; }
33
+ .music-mini {
34
+ display: flex; align-items: center; gap: var(--sp-4, 1rem);
35
+ background: var(--c-bg-elev, #111);
36
+ padding: var(--sp-3, 0.75rem);
37
+ border-radius: var(--r-md, 14px); border: 1px solid var(--c-border, #333);
38
+ width: 100%; max-width: 320px;
39
+ }
40
+ .music-mini__art {
41
+ width: 50px; height: 50px;
42
+ background-color: var(--c-primary-light, #818cf8);
43
+ border-radius: var(--r-sm, 8px); flex-shrink: 0;
44
+ }
45
+ .music-mini__track { flex: 1; }
46
+ .music-mini__title { font-size: 0.85rem; color: var(--c-text-1, #fff); margin: 0; }
47
+ .music-mini__artist { font-size: 0.7rem; color: var(--c-text-2, #64748b); margin: 0; }
48
+ .music-mini__progress {
49
+ height: 3px; background: rgba(255,255,255,0.1);
50
+ border-radius: 2px; margin-top: 8px; position: relative; overflow: hidden;
51
+ }
52
+ .music-mini__bar {
53
+ position: absolute; left: 0; top: 0; height: 100%;
54
+ background: var(--c-primary, #6366f1); border-radius: 2px;
55
+ }
56
+ .music-mini__play {
57
+ font-size: 1.2rem; cursor: pointer; color: var(--c-text-1, #fff);
58
+ background: none; border: none; padding: 0.25rem; display: grid; place-items: center;
59
+ }
60
+ .music-mini__play:hover { color: var(--c-primary-light, #818cf8); }
21
61
  </style>
@@ -1,6 +1,36 @@
1
1
  ---
2
+ /**
3
+ * NeumorphicCard — A soft UI card with deep shadows for a realistic elevated look.
4
+ *
5
+ * @param {'sm'|'md'|'lg'} padding - Optional. Inner padding layout size. Default is 'md'.
6
+ */
7
+ interface Props {
8
+ padding?: 'sm' | 'md' | 'lg';
9
+ }
10
+
11
+ const { padding = 'md' } = Astro.props;
2
12
  ---
3
- <div class="neu-card"><slot /></div>
13
+
14
+ <div class={`neu-card neu-card--p${padding}`}>
15
+ <slot />
16
+ </div>
17
+
4
18
  <style>
5
- .neu-card { background: #e0e0e0; border-radius: 30px; box-shadow: 15px 15px 30px #bebebe, -15px -15px 30px #ffffff; padding: 2rem; color: #444; }
19
+ .neu-card {
20
+ background: var(--c-bg-elev, #e0e0e0);
21
+ border-radius: var(--r-xl, 30px);
22
+ box-shadow: 15px 15px 30px rgba(0,0,0,0.1), -15px -15px 30px rgba(255,255,255,0.7);
23
+ color: var(--c-text-1, #444);
24
+ transition: all 0.3s ease;
25
+ }
26
+
27
+ .neu-card--psm { padding: var(--sp-4, 1rem); }
28
+ .neu-card--pmd { padding: var(--sp-8, 2rem); }
29
+ .neu-card--plg { padding: var(--sp-12, 3rem); }
30
+
31
+ @media (prefers-color-scheme: dark) {
32
+ .neu-card {
33
+ box-shadow: 15px 15px 30px rgba(0,0,0,0.4), -15px -15px 30px rgba(255,255,255,0.05);
34
+ }
35
+ }
6
36
  </style>
@@ -1,15 +1,50 @@
1
1
  ---
2
+ /**
3
+ * NotificationCard — Toast-like card for app notifications and alerts.
4
+ *
5
+ * @param {string} title - The notification headline.
6
+ * @param {string} message - The notification detail text.
7
+ * @param {'info'|'warning'|'success'|'error'} type - Optional. Changes the notification dot indicator color. Default is 'info'.
8
+ */
9
+ interface Props {
10
+ title: string;
11
+ message: string;
12
+ type?: 'info' | 'warning' | 'success' | 'error';
13
+ }
14
+
15
+ const { title, message, type = 'info' } = Astro.props;
2
16
  ---
3
- <div class="notify-card">
4
- <div class="dot"></div>
5
- <div class="msg">
6
- <strong>Updates Available</strong>
7
- <p>Version 2.0 is now ready for install.</p>
17
+
18
+ <div class={`notify-card notify-card--${type}`}>
19
+ <div class="notify-card__dot" aria-hidden="true"></div>
20
+ <div class="notify-card__content">
21
+ <strong class="notify-card__title">{title}</strong>
22
+ <p class="notify-card__message">{message}</p>
8
23
  </div>
9
24
  </div>
25
+
10
26
  <style>
11
- .notify-card { display: flex; gap: 1rem; padding: 1rem; background: #0f172a; border-radius: 12px; border: 1px solid rgba(255,255,255,0.1); box-shadow: 0 10px 40px rgba(0,0,0,0.4); max-width: 300px; }
12
- .dot { width: 8px; height: 8px; background: #6366f1; border-radius: 50%; margin-top: 5px; }
13
- .msg p { margin: 2px 0 0; font-size: 0.82rem; color: #94a3b8; }
14
- strong { font-size: 0.9rem; color: #fff; }
27
+ .notify-card {
28
+ display: flex; gap: var(--sp-4, 1rem);
29
+ padding: var(--sp-4, 1rem);
30
+ background: var(--c-bg-elev, #0f172a);
31
+ border-radius: var(--r-md, 12px);
32
+ border: 1px solid var(--c-border, rgba(255,255,255,0.1));
33
+ box-shadow: 0 10px 40px rgba(0,0,0,0.4);
34
+ max-width: 300px;
35
+ }
36
+ .notify-card__dot {
37
+ width: 8px; height: 8px;
38
+ border-radius: var(--r-full, 50%);
39
+ margin-top: 5px;
40
+ flex-shrink: 0;
41
+ }
42
+ .notify-card__content { flex: 1; }
43
+ .notify-card__title { font-size: 0.9rem; color: var(--c-text-1, #fff); }
44
+ .notify-card__message { margin: 2px 0 0; font-size: 0.82rem; color: var(--c-text-2, #94a3b8); line-height: 1.4; }
45
+
46
+ .notify-card--info .notify-card__dot { background: var(--c-primary, #6366f1); }
47
+ .notify-card--success .notify-card__dot { background: #10b981; }
48
+ .notify-card--warning .notify-card__dot { background: #f59e0b; }
49
+ .notify-card--error .notify-card__dot { background: #ef4444; }
15
50
  </style>
@@ -1,17 +1,55 @@
1
1
  ---
2
+ /**
3
+ * PricingCard — Optimized card for showing product plans and features.
4
+ *
5
+ * @param {string} plan - The plan name (e.g. "Pro").
6
+ * @param {string} price - The integer/decimal price value.
7
+ * @param {boolean} featured - Applies a highlighted styling variant if true.
8
+ */
2
9
  interface Props { plan: string; price: string; featured?: boolean; }
3
10
  const { plan, price, featured = false } = Astro.props;
4
11
  ---
5
12
  <div class:list={["price-card", { "featured": featured }]}>
6
- <span class="plan">{plan}</span>
7
- <div class="price"><span>$</span>{price}</div>
8
- <ul class="features"><li>Unlimited Projects</li><li>24/7 Support</li><li>Custom Domain</li></ul>
9
- <button>Choose Plan</button>
13
+ <span class="price-card__plan">{plan}</span>
14
+ <div class="price-card__price"><span>$</span>{price}</div>
15
+ <ul class="price-card__features">
16
+ <slot />
17
+ </ul>
18
+ <button class="price-card__btn" type="button">Choose Plan</button>
10
19
  </div>
20
+
11
21
  <style>
12
- .price-card { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.1); border-radius: 24px; padding: 2.5rem; display: flex; flex-direction: column; gap: 1.5rem; }
13
- .featured { border-color: #6366f1; background: rgba(99,102,241,0.05); transform: scale(1.05); }
14
- .price { font-size: 2.5rem; font-weight: 800; color: #fff; }
15
- .features { list-style: none; padding: 0; font-size: 0.9rem; color: #94a3b8; }
16
- button { background: #6366f1; color: #fff; border: none; padding: 0.8rem; border-radius: 12px; font-weight: 700; cursor: pointer; }
22
+ .price-card {
23
+ background: var(--c-bg-elev, rgba(255,255,255,0.03));
24
+ border: 1px solid var(--c-border, rgba(255,255,255,0.1));
25
+ border-radius: var(--r-xl, 24px);
26
+ padding: var(--sp-10, 2.5rem);
27
+ display: flex; flex-direction: column; gap: var(--sp-6, 1.5rem);
28
+ }
29
+ .featured {
30
+ border-color: var(--c-primary, #6366f1);
31
+ background: rgba(99,102,241,0.05);
32
+ transform: scale(1.05);
33
+ }
34
+ .price-card__plan { font-size: 1.1rem; font-weight: 600; color: var(--c-text-1, #fff); }
35
+ .price-card__price { font-size: 2.5rem; font-weight: 800; color: var(--c-text-1, #fff); }
36
+ .price-card__price span { font-size: 1.2rem; opacity: 0.7; margin-right: 2px; }
37
+
38
+ .price-card__features {
39
+ list-style: none; padding: 0; margin: 0;
40
+ font-size: 0.9rem; color: var(--c-text-2, #94a3b8);
41
+ display: flex; flex-direction: column; gap: 0.5rem;
42
+ }
43
+
44
+ /* Global sub-selector rule to style slotted list items cleanly */
45
+ .price-card__features :global(li) { position: relative; padding-left: 1.5rem; }
46
+ .price-card__features :global(li::before) {
47
+ content: "✓"; position: absolute; left: 0; color: var(--c-primary, #6366f1);
48
+ }
49
+
50
+ .price-card__btn {
51
+ background: var(--c-primary, #6366f1); color: #fff;
52
+ border: none; padding: 0.8rem; border-radius: var(--r-md, 12px);
53
+ font-weight: 700; cursor: pointer; transition: 0.2s;
54
+ }
17
55
  </style>
@@ -1,17 +1,56 @@
1
1
  ---
2
+ /**
3
+ * ProfileCard — Image-centric profile card with social links and blur effect.
4
+ *
5
+ * @param {string} name - The person's full name.
6
+ * @param {string} role - Their job title or role.
7
+ * @param {string} avatarUrl - Optional URL string pointing to their avatar image.
8
+ */
9
+ interface Props {
10
+ name: string;
11
+ role: string;
12
+ avatarUrl?: string;
13
+ }
14
+
15
+ const { name, role, avatarUrl } = Astro.props;
2
16
  ---
17
+
3
18
  <div class="profile-card">
4
- <div class="banner"></div>
5
- <div class="avatar"></div>
6
- <h3>Sarah Jenkins</h3>
7
- <p>Lead Developer</p>
8
- <div class="socials"><span>🐦</span><span>💼</span><span>🌐</span></div>
19
+ <div class="profile-card__banner"></div>
20
+ <div class="profile-card__avatar" style={avatarUrl ? `background-image: url('${avatarUrl}'); background-size: cover;` : ''}></div>
21
+ <h3 class="profile-card__name">{name}</h3>
22
+ <p class="profile-card__role">{role}</p>
23
+ <div class="profile-card__socials">
24
+ <slot name="socials">
25
+ <!-- Fallback generic icons if no socials slot passed -->
26
+ <span aria-hidden="true">🐦</span>
27
+ <span aria-hidden="true">💼</span>
28
+ <span aria-hidden="true">🌐</span>
29
+ </slot>
30
+ </div>
9
31
  </div>
32
+
10
33
  <style>
11
- .profile-card { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.1); border-radius: 20px; text-align: center; overflow: hidden; padding-bottom: 1.5rem; }
12
- .banner { height: 80px; background: linear-gradient(135deg, #6366f1, #c084fc); }
13
- .avatar { width: 80px; height: 80px; background: #334155; border: 4px solid #080b14; border-radius: 50%; margin: -40px auto 1rem; }
14
- h3 { color: #fff; margin: 0; }
15
- p { font-size: 0.85rem; color: #94a3b8; }
16
- .socials { display: flex; justify-content: center; gap: 1rem; margin-top: 1rem; cursor: pointer; }
34
+ .profile-card {
35
+ background: rgba(255,255,255,0.03);
36
+ border: 1px solid var(--c-border, rgba(255,255,255,0.1));
37
+ border-radius: var(--r-xl, 20px);
38
+ text-align: center;
39
+ overflow: hidden;
40
+ padding-bottom: var(--sp-6, 1.5rem);
41
+ }
42
+ .profile-card__banner {
43
+ height: 80px;
44
+ background: linear-gradient(135deg, var(--c-primary, #6366f1), var(--c-primary-light, #c084fc));
45
+ }
46
+ .profile-card__avatar {
47
+ width: 80px; height: 80px;
48
+ background-color: var(--c-bg-elev, #334155);
49
+ border: 4px solid var(--c-bg, #080b14);
50
+ border-radius: var(--r-full, 50%);
51
+ margin: -40px auto 1rem;
52
+ }
53
+ .profile-card__name { color: var(--c-text-1, #fff); margin: 0; }
54
+ .profile-card__role { font-size: 0.85rem; color: var(--c-text-2, #94a3b8); margin: 4px 0 0; }
55
+ .profile-card__socials { display: flex; justify-content: center; gap: 1rem; margin-top: 1rem; cursor: pointer; }
17
56
  </style>
@@ -1,15 +1,43 @@
1
1
  ---
2
+ /**
3
+ * RetroGameCard — Bold gaming card with scanlines and pixel fonts.
4
+ *
5
+ * @param {string} title - The retro game title.
6
+ * @param {string} level - Current stage or level string.
7
+ * @param {number|string} score - The player's score.
8
+ */
9
+ interface Props {
10
+ title: string;
11
+ level: string;
12
+ score: number | string;
13
+ }
14
+
15
+ const { title, level, score } = Astro.props;
2
16
  ---
17
+
3
18
  <div class="retro-game">
4
- <div class="scanlines"></div>
5
- <div class="screen">LVL 01</div>
6
- <h3>SUPER ASTRO</h3>
7
- <div class="score">SCORE: 004820</div>
19
+ <div class="retro-game__scanlines"></div>
20
+ <div class="retro-game__screen">{level}</div>
21
+ <h3 class="retro-game__title">{title}</h3>
22
+ <div class="retro-game__score">SCORE: {score}</div>
8
23
  </div>
24
+
9
25
  <style>
10
- .retro-game { background: #22c55e; border: 4px solid #000; padding: 1rem; position: relative; box-shadow: 8px 8px 0 #000; font-family: 'Courier New', monospace; }
11
- .screen { background: #000; color: #22c55e; padding: 1rem; text-align: center; font-weight: 900; margin-bottom: 0.5rem; }
12
- .scanlines { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(rgba(0,0,0,0.1) 50%, transparent 50%); background-size: 100% 4px; }
13
- h3 { margin: 0; font-size: 1rem; color: #000; }
14
- .score { font-size: 0.75rem; color: #000; margin-top: 0.5rem; }
26
+ .retro-game {
27
+ background: #22c55e; border: 4px solid #000;
28
+ padding: var(--sp-4, 1rem); position: relative;
29
+ box-shadow: 8px 8px 0 #000;
30
+ font-family: 'Courier New', Courier, monospace;
31
+ }
32
+ .retro-game__screen {
33
+ background: #000; color: #22c55e;
34
+ padding: var(--sp-4, 1rem); text-align: center;
35
+ font-weight: 900; margin-bottom: 0.5rem; text-transform: uppercase;
36
+ }
37
+ .retro-game__scanlines {
38
+ position: absolute; inset: 0; pointer-events: none;
39
+ background: linear-gradient(rgba(0,0,0,0.1) 50%, transparent 50%); background-size: 100% 4px;
40
+ }
41
+ .retro-game__title { margin: 0; font-size: 1.1rem; color: #000; font-weight: 900; text-transform: uppercase; }
42
+ .retro-game__score { font-size: 0.8rem; color: #000; margin-top: 0.5rem; font-weight: bold; }
15
43
  </style>
@@ -1,15 +1,50 @@
1
1
  ---
2
+ /**
3
+ * StatCard — Compact card for displaying key metrics with an icon.
4
+ *
5
+ * @param {string} label - The metric name (e.g., "Total Revenue").
6
+ * @param {string} value - The primary statistic value (e.g., "$124,590").
7
+ * @param {string} icon - The emoji or text character representing the stat.
8
+ */
9
+ interface Props {
10
+ label: string;
11
+ value: string;
12
+ icon: string;
13
+ }
14
+
15
+ const { label, value, icon } = Astro.props;
2
16
  ---
17
+
3
18
  <div class="stat-card">
4
- <div class="icon">📈</div>
5
- <div>
6
- <span class="label">Total Revenue</span>
7
- <span class="value">$124,590</span>
19
+ <div class="stat-card__icon" aria-hidden="true">{icon}</div>
20
+ <div class="stat-card__info">
21
+ <span class="stat-card__label">{label}</span>
22
+ <span class="stat-card__value">{value}</span>
8
23
  </div>
9
24
  </div>
25
+
10
26
  <style>
11
- .stat-card { display: flex; align-items: center; gap: 1.25rem; padding: 1.5rem; background: rgba(99,102,241,0.06); border: 1px solid rgba(99,102,241,0.2); border-radius: 16px; }
12
- .icon { font-size: 1.5rem; background: rgba(99,102,241,0.1); width: 50px; height: 50px; display: grid; place-items: center; border-radius: 12px; }
13
- .label { display: block; font-size: 0.8rem; color: #94a3b8; font-weight: 600; text-transform: uppercase; }
14
- .value { display: block; font-size: 1.4rem; font-weight: 800; color: #fff; }
27
+ .stat-card {
28
+ display: flex; align-items: center; gap: var(--sp-5, 1.25rem);
29
+ padding: var(--sp-6, 1.5rem);
30
+ background: var(--c-bg-elev, rgba(99,102,241,0.06));
31
+ border: 1px solid var(--c-border, rgba(99,102,241,0.2));
32
+ border-radius: var(--r-lg, 16px);
33
+ }
34
+ .stat-card__icon {
35
+ font-size: 1.5rem;
36
+ background: rgba(99,102,241,0.1);
37
+ width: 50px; height: 50px;
38
+ display: grid; place-items: center;
39
+ border-radius: var(--r-md, 12px);
40
+ }
41
+ .stat-card__label {
42
+ display: block; font-size: 0.8rem;
43
+ color: var(--c-text-2, #94a3b8);
44
+ font-weight: 600; text-transform: uppercase;
45
+ }
46
+ .stat-card__value {
47
+ display: block; font-size: 1.4rem;
48
+ font-weight: 800; color: var(--c-text-1, #fff);
49
+ }
15
50
  </style>
@@ -1,18 +1,57 @@
1
1
  ---
2
+ /**
3
+ * TaskKanbanCard — Agile task card with priority labels and due dates.
4
+ *
5
+ * @param {string} task - The description of the task being managed.
6
+ * @param {string} date - Visual date string indicator (e.g. "📅 Oct 24").
7
+ * @param {string} assigneeInitials - Short initials for the user avatar (e.g "MJ").
8
+ * @param {'low'|'med'|'high'} priority - Controls the appearance of the priority tag label. Default is 'low'.
9
+ */
10
+ interface Props {
11
+ task: string;
12
+ date: string;
13
+ assigneeInitials: string;
14
+ priority?: 'low' | 'med' | 'high';
15
+ }
16
+
17
+ const { task, date, assigneeInitials, priority = 'low' } = Astro.props;
18
+
19
+ const priorityLabels = { low: 'Low', med: 'Medium', high: 'High' };
2
20
  ---
21
+
3
22
  <div class="task-card">
4
- <div class="tags"><span class="tag-high">High</span></div>
5
- <p>Implement authentication middleware for the API.</p>
6
- <div class="task-footer">
7
- <span class="date">📅 Oct 24</span>
8
- <div class="assign">MJ</div>
23
+ <div class="task-card__tags">
24
+ <span class={`task-card__tag task-card__tag--${priority}`}>{priorityLabels[priority]}</span>
25
+ </div>
26
+ <p class="task-card__desc">{task}</p>
27
+ <div class="task-card__footer">
28
+ <span class="task-card__date">{date}</span>
29
+ <div class="task-card__assignee">{assigneeInitials}</div>
9
30
  </div>
10
31
  </div>
32
+
11
33
  <style>
12
- .task-card { background: #1e293b; padding: 1rem; border-radius: 10px; border: 1px solid #334155; }
13
- .tag-high { background: rgba(239,68,68,0.1); color: #f87171; font-size: 0.7rem; font-weight: 700; padding: 2px 8px; border-radius: 4px; }
14
- p { font-size: 0.85rem; color: #e2e8f0; margin: 0.75rem 0; font-weight: 500; }
15
- .task-footer { display: flex; justify-content: space-between; align-items: center; }
16
- .date { font-size: 0.75rem; color: #64748b; }
17
- .assign { width: 24px; height: 24px; background: #6366f1; color: #fff; font-size: 0.65rem; border-radius: 50%; display: grid; place-items: center; font-weight: 700; }
34
+ .task-card {
35
+ background: var(--c-bg-elev, #1e293b);
36
+ padding: var(--sp-4, 1rem);
37
+ border-radius: var(--r-md, 10px);
38
+ border: 1px solid var(--c-border, #334155);
39
+ }
40
+ .task-card__tag {
41
+ font-size: 0.7rem; font-weight: 700;
42
+ padding: 2px 8px; border-radius: 4px;
43
+ }
44
+ .task-card__tag--high { background: rgba(239,68,68,0.1); color: #f87171; }
45
+ .task-card__tag--med { background: rgba(245,158,11,0.1); color: #fbbf24; }
46
+ .task-card__tag--low { background: rgba(52,211,153,0.1); color: #34d399; }
47
+
48
+ .task-card__desc { font-size: 0.85rem; color: var(--c-text-1, #e2e8f0); margin: 0.75rem 0; font-weight: 500; }
49
+ .task-card__footer { display: flex; justify-content: space-between; align-items: center; }
50
+ .task-card__date { font-size: 0.75rem; color: var(--c-text-2, #64748b); }
51
+ .task-card__assignee {
52
+ width: 24px; height: 24px;
53
+ background: var(--c-primary, #6366f1); color: #fff;
54
+ font-size: 0.65rem; border-radius: 50%;
55
+ display: grid; place-items: center; font-weight: 700;
56
+ }
18
57
  </style>
@@ -1,20 +1,51 @@
1
1
  ---
2
+ /**
3
+ * TestimonialCardClean — Minimalist card for user quotes and reviews.
4
+ *
5
+ * @param {string} quote - The body of the testimonial review.
6
+ * @param {string} name - The reviewer's full name.
7
+ * @param {string} role - The reviewer's job title or company role.
8
+ * @param {string} avatarUrl - Optional string tracking the avatar headshot URL.
9
+ */
10
+ interface Props {
11
+ quote: string;
12
+ name: string;
13
+ role: string;
14
+ avatarUrl?: string;
15
+ }
16
+
17
+ const { quote, name, role, avatarUrl } = Astro.props;
2
18
  ---
19
+
3
20
  <div class="testi-card">
4
- <div class="quote">"This component library transformed our workflow. The best Astro-first UI kit we've found."</div>
5
- <div class="author">
6
- <div class="pic"></div>
7
- <div>
8
- <h5>Alex Rivera</h5>
9
- <span>CTO at TechFlow</span>
21
+ <blockquote class="testi-card__quote">"{quote}"</blockquote>
22
+ <div class="testi-card__author">
23
+ <div class="testi-card__pic" style={avatarUrl ? `background-image: url('${avatarUrl}'); background-size: cover;` : ''}></div>
24
+ <div class="testi-card__info">
25
+ <h5 class="testi-card__name">{name}</h5>
26
+ <span class="testi-card__role">{role}</span>
10
27
  </div>
11
28
  </div>
12
29
  </div>
30
+
13
31
  <style>
14
- .testi-card { background: rgba(255,255,255,0.03); padding: 2rem; border-radius: 20px; border: 1px solid rgba(255,255,255,0.1); }
15
- .quote { font-size: 1rem; color: #e2e8f0; font-style: italic; line-height: 1.6; margin-bottom: 2rem; }
16
- .author { display: flex; align-items: center; gap: 1rem; }
17
- .pic { width: 40px; height: 40px; background: #334155; border-radius: 50%; }
18
- h5 { margin: 0; color: #fff; }
19
- span { font-size: 0.75rem; color: #64748b; }
32
+ .testi-card {
33
+ background: var(--c-bg-elev, rgba(255,255,255,0.03));
34
+ padding: var(--sp-8, 2rem);
35
+ border-radius: var(--r-xl, 20px);
36
+ border: 1px solid var(--c-border, rgba(255,255,255,0.1));
37
+ }
38
+ .testi-card__quote {
39
+ font-size: 1rem; color: var(--c-text-1, #e2e8f0);
40
+ font-style: italic; line-height: 1.6;
41
+ margin: 0 0 2rem 0;
42
+ }
43
+ .testi-card__author { display: flex; align-items: center; gap: var(--sp-4, 1rem); }
44
+ .testi-card__pic {
45
+ width: 40px; height: 40px;
46
+ background: var(--c-bg, #334155);
47
+ border-radius: var(--r-full, 50%);
48
+ }
49
+ .testi-card__name { margin: 0; color: var(--c-text-1, #fff); font-size: 0.95rem; }
50
+ .testi-card__role { font-size: 0.75rem; color: var(--c-text-2, #64748b); }
20
51
  </style>