fancy-ui-svelte 0.2.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 (418) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +198 -0
  3. package/dist/fancy-ui/_template/Component.svelte +110 -0
  4. package/dist/fancy-ui/_template/Component.svelte.d.ts +16 -0
  5. package/dist/fancy-ui/_template/README.md +279 -0
  6. package/dist/fancy-ui/_template/index.d.ts +13 -0
  7. package/dist/fancy-ui/_template/index.js +27 -0
  8. package/dist/fancy-ui/_template/types.d.ts +53 -0
  9. package/dist/fancy-ui/_template/types.js +12 -0
  10. package/dist/fancy-ui/animated-beam/AnimatedBeam.svelte +166 -0
  11. package/dist/fancy-ui/animated-beam/AnimatedBeam.svelte.d.ts +4 -0
  12. package/dist/fancy-ui/animated-beam/AnimatedBeam.test.d.ts +1 -0
  13. package/dist/fancy-ui/animated-beam/AnimatedBeam.test.js +49 -0
  14. package/dist/fancy-ui/animated-beam/README.md +38 -0
  15. package/dist/fancy-ui/animated-beam/index.d.ts +2 -0
  16. package/dist/fancy-ui/animated-beam/index.js +1 -0
  17. package/dist/fancy-ui/animated-beam/types.d.ts +19 -0
  18. package/dist/fancy-ui/animated-beam/types.js +1 -0
  19. package/dist/fancy-ui/animated-testimonials/AnimatedTestimonials.svelte +196 -0
  20. package/dist/fancy-ui/animated-testimonials/AnimatedTestimonials.svelte.d.ts +29 -0
  21. package/dist/fancy-ui/animated-testimonials/AnimatedTestimonials.test.d.ts +1 -0
  22. package/dist/fancy-ui/animated-testimonials/AnimatedTestimonials.test.js +92 -0
  23. package/dist/fancy-ui/animated-testimonials/index.d.ts +2 -0
  24. package/dist/fancy-ui/animated-testimonials/index.js +1 -0
  25. package/dist/fancy-ui/animated-tooltip/AnimatedTooltip.svelte +97 -0
  26. package/dist/fancy-ui/animated-tooltip/AnimatedTooltip.svelte.d.ts +15 -0
  27. package/dist/fancy-ui/animated-tooltip/AnimatedTooltip.test.d.ts +1 -0
  28. package/dist/fancy-ui/animated-tooltip/AnimatedTooltip.test.js +67 -0
  29. package/dist/fancy-ui/animated-tooltip/index.d.ts +2 -0
  30. package/dist/fancy-ui/animated-tooltip/index.js +1 -0
  31. package/dist/fancy-ui/apple-card-carousel/AppleCard.svelte +226 -0
  32. package/dist/fancy-ui/apple-card-carousel/AppleCard.svelte.d.ts +27 -0
  33. package/dist/fancy-ui/apple-card-carousel/AppleCardCarousel.svelte +49 -0
  34. package/dist/fancy-ui/apple-card-carousel/AppleCardCarousel.svelte.d.ts +11 -0
  35. package/dist/fancy-ui/apple-card-carousel/AppleCardCarousel.test.d.ts +1 -0
  36. package/dist/fancy-ui/apple-card-carousel/AppleCardCarousel.test.js +85 -0
  37. package/dist/fancy-ui/apple-card-carousel/index.d.ts +3 -0
  38. package/dist/fancy-ui/apple-card-carousel/index.js +2 -0
  39. package/dist/fancy-ui/bento-grid/BentoGrid.svelte +21 -0
  40. package/dist/fancy-ui/bento-grid/BentoGrid.svelte.d.ts +7 -0
  41. package/dist/fancy-ui/bento-grid/BentoGridCard.svelte +70 -0
  42. package/dist/fancy-ui/bento-grid/BentoGridCard.svelte.d.ts +12 -0
  43. package/dist/fancy-ui/bento-grid/BentoGridItem.svelte +39 -0
  44. package/dist/fancy-ui/bento-grid/BentoGridItem.svelte.d.ts +10 -0
  45. package/dist/fancy-ui/bento-grid/README.md +51 -0
  46. package/dist/fancy-ui/bento-grid/index.d.ts +3 -0
  47. package/dist/fancy-ui/bento-grid/index.js +3 -0
  48. package/dist/fancy-ui/bg-falling-stars/FallingStarsBg.svelte +163 -0
  49. package/dist/fancy-ui/bg-falling-stars/FallingStarsBg.svelte.d.ts +11 -0
  50. package/dist/fancy-ui/bg-falling-stars/FallingStarsBg.test.d.ts +1 -0
  51. package/dist/fancy-ui/bg-falling-stars/FallingStarsBg.test.js +50 -0
  52. package/dist/fancy-ui/bg-falling-stars/README.md +22 -0
  53. package/dist/fancy-ui/bg-falling-stars/index.d.ts +2 -0
  54. package/dist/fancy-ui/bg-falling-stars/index.js +1 -0
  55. package/dist/fancy-ui/bg-stars/README.md +41 -0
  56. package/dist/fancy-ui/bg-stars/StarsBackground.svelte +205 -0
  57. package/dist/fancy-ui/bg-stars/StarsBackground.svelte.d.ts +33 -0
  58. package/dist/fancy-ui/bg-stars/StarsBackground.test.d.ts +1 -0
  59. package/dist/fancy-ui/bg-stars/StarsBackground.test.js +46 -0
  60. package/dist/fancy-ui/bg-stars/index.d.ts +1 -0
  61. package/dist/fancy-ui/bg-stars/index.js +1 -0
  62. package/dist/fancy-ui/blur-reveal/BlurReveal.svelte +126 -0
  63. package/dist/fancy-ui/blur-reveal/BlurReveal.svelte.d.ts +18 -0
  64. package/dist/fancy-ui/blur-reveal/BlurReveal.test.d.ts +1 -0
  65. package/dist/fancy-ui/blur-reveal/BlurReveal.test.js +47 -0
  66. package/dist/fancy-ui/blur-reveal/README.md +41 -0
  67. package/dist/fancy-ui/blur-reveal/index.d.ts +2 -0
  68. package/dist/fancy-ui/blur-reveal/index.js +2 -0
  69. package/dist/fancy-ui/book/Book.svelte +89 -0
  70. package/dist/fancy-ui/book/Book.svelte.d.ts +15 -0
  71. package/dist/fancy-ui/book/Book.test.d.ts +1 -0
  72. package/dist/fancy-ui/book/Book.test.js +47 -0
  73. package/dist/fancy-ui/book/BookDescription.svelte +17 -0
  74. package/dist/fancy-ui/book/BookDescription.svelte.d.ts +8 -0
  75. package/dist/fancy-ui/book/BookHeader.svelte +17 -0
  76. package/dist/fancy-ui/book/BookHeader.svelte.d.ts +8 -0
  77. package/dist/fancy-ui/book/BookTitle.svelte +17 -0
  78. package/dist/fancy-ui/book/BookTitle.svelte.d.ts +8 -0
  79. package/dist/fancy-ui/book/README.md +34 -0
  80. package/dist/fancy-ui/book/index.d.ts +128 -0
  81. package/dist/fancy-ui/book/index.js +46 -0
  82. package/dist/fancy-ui/border-beam/BorderBeam.svelte +85 -0
  83. package/dist/fancy-ui/border-beam/BorderBeam.svelte.d.ts +27 -0
  84. package/dist/fancy-ui/border-beam/BorderBeam.test.d.ts +1 -0
  85. package/dist/fancy-ui/border-beam/BorderBeam.test.js +64 -0
  86. package/dist/fancy-ui/border-beam/index.d.ts +2 -0
  87. package/dist/fancy-ui/border-beam/index.js +2 -0
  88. package/dist/fancy-ui/box-reveal/BoxReveal.svelte +73 -0
  89. package/dist/fancy-ui/box-reveal/BoxReveal.svelte.d.ts +24 -0
  90. package/dist/fancy-ui/box-reveal/BoxReveal.test.d.ts +1 -0
  91. package/dist/fancy-ui/box-reveal/BoxReveal.test.js +66 -0
  92. package/dist/fancy-ui/box-reveal/README.md +24 -0
  93. package/dist/fancy-ui/box-reveal/index.d.ts +2 -0
  94. package/dist/fancy-ui/box-reveal/index.js +2 -0
  95. package/dist/fancy-ui/card-3d/CardBody.svelte +16 -0
  96. package/dist/fancy-ui/card-3d/CardBody.svelte.d.ts +7 -0
  97. package/dist/fancy-ui/card-3d/CardContainer.svelte +53 -0
  98. package/dist/fancy-ui/card-3d/CardContainer.svelte.d.ts +8 -0
  99. package/dist/fancy-ui/card-3d/CardItem.svelte +49 -0
  100. package/dist/fancy-ui/card-3d/CardItem.svelte.d.ts +14 -0
  101. package/dist/fancy-ui/card-3d/README.md +52 -0
  102. package/dist/fancy-ui/card-3d/index.d.ts +3 -0
  103. package/dist/fancy-ui/card-3d/index.js +3 -0
  104. package/dist/fancy-ui/card-spotlight/CardSpotlight.svelte +59 -0
  105. package/dist/fancy-ui/card-spotlight/CardSpotlight.svelte.d.ts +11 -0
  106. package/dist/fancy-ui/card-spotlight/README.md +24 -0
  107. package/dist/fancy-ui/card-spotlight/index.d.ts +1 -0
  108. package/dist/fancy-ui/card-spotlight/index.js +1 -0
  109. package/dist/fancy-ui/colourful-text/ColourfulText.svelte +78 -0
  110. package/dist/fancy-ui/colourful-text/ColourfulText.svelte.d.ts +22 -0
  111. package/dist/fancy-ui/colourful-text/ColourfulText.test.d.ts +1 -0
  112. package/dist/fancy-ui/colourful-text/ColourfulText.test.js +53 -0
  113. package/dist/fancy-ui/colourful-text/README.md +21 -0
  114. package/dist/fancy-ui/colourful-text/index.d.ts +2 -0
  115. package/dist/fancy-ui/colourful-text/index.js +2 -0
  116. package/dist/fancy-ui/compare/Compare.svelte +304 -0
  117. package/dist/fancy-ui/compare/Compare.svelte.d.ts +25 -0
  118. package/dist/fancy-ui/compare/Compare.test.d.ts +1 -0
  119. package/dist/fancy-ui/compare/Compare.test.js +57 -0
  120. package/dist/fancy-ui/compare/README.md +97 -0
  121. package/dist/fancy-ui/compare/StarField.svelte +108 -0
  122. package/dist/fancy-ui/compare/StarField.svelte.d.ts +7 -0
  123. package/dist/fancy-ui/compare/index.d.ts +2 -0
  124. package/dist/fancy-ui/compare/index.js +2 -0
  125. package/dist/fancy-ui/confetti/Confetti.svelte +60 -0
  126. package/dist/fancy-ui/confetti/Confetti.svelte.d.ts +14 -0
  127. package/dist/fancy-ui/confetti/Confetti.test.d.ts +1 -0
  128. package/dist/fancy-ui/confetti/Confetti.test.js +39 -0
  129. package/dist/fancy-ui/confetti/ConfettiButton.svelte +41 -0
  130. package/dist/fancy-ui/confetti/ConfettiButton.svelte.d.ts +9 -0
  131. package/dist/fancy-ui/confetti/README.md +22 -0
  132. package/dist/fancy-ui/confetti/index.d.ts +2 -0
  133. package/dist/fancy-ui/confetti/index.js +2 -0
  134. package/dist/fancy-ui/container-scroll/ContainerScroll.svelte +82 -0
  135. package/dist/fancy-ui/container-scroll/ContainerScroll.svelte.d.ts +9 -0
  136. package/dist/fancy-ui/container-scroll/ContainerScroll.test.d.ts +1 -0
  137. package/dist/fancy-ui/container-scroll/ContainerScroll.test.js +34 -0
  138. package/dist/fancy-ui/container-scroll/README.md +28 -0
  139. package/dist/fancy-ui/container-scroll/index.d.ts +1 -0
  140. package/dist/fancy-ui/container-scroll/index.js +1 -0
  141. package/dist/fancy-ui/container-text-flip/ContainerTextFlip.svelte +78 -0
  142. package/dist/fancy-ui/container-text-flip/ContainerTextFlip.svelte.d.ts +10 -0
  143. package/dist/fancy-ui/container-text-flip/ContainerTextFlip.test.d.ts +1 -0
  144. package/dist/fancy-ui/container-text-flip/ContainerTextFlip.test.js +46 -0
  145. package/dist/fancy-ui/container-text-flip/README.md +22 -0
  146. package/dist/fancy-ui/container-text-flip/index.d.ts +1 -0
  147. package/dist/fancy-ui/container-text-flip/index.js +1 -0
  148. package/dist/fancy-ui/direction-aware-hover/DirectionAwareHover.svelte +232 -0
  149. package/dist/fancy-ui/direction-aware-hover/DirectionAwareHover.svelte.d.ts +11 -0
  150. package/dist/fancy-ui/direction-aware-hover/DirectionAwareHover.test.d.ts +1 -0
  151. package/dist/fancy-ui/direction-aware-hover/DirectionAwareHover.test.js +78 -0
  152. package/dist/fancy-ui/direction-aware-hover/README.md +47 -0
  153. package/dist/fancy-ui/direction-aware-hover/index.d.ts +1 -0
  154. package/dist/fancy-ui/direction-aware-hover/index.js +1 -0
  155. package/dist/fancy-ui/displacement-text/DisplacementText.svelte +224 -0
  156. package/dist/fancy-ui/displacement-text/DisplacementText.svelte.d.ts +19 -0
  157. package/dist/fancy-ui/displacement-text/DisplacementText.test.d.ts +1 -0
  158. package/dist/fancy-ui/displacement-text/DisplacementText.test.js +144 -0
  159. package/dist/fancy-ui/displacement-text/index.d.ts +2 -0
  160. package/dist/fancy-ui/displacement-text/index.js +1 -0
  161. package/dist/fancy-ui/dock/Dock.svelte +87 -0
  162. package/dist/fancy-ui/dock/Dock.svelte.d.ts +12 -0
  163. package/dist/fancy-ui/dock/Dock.test.d.ts +1 -0
  164. package/dist/fancy-ui/dock/Dock.test.js +51 -0
  165. package/dist/fancy-ui/dock/DockIcon.svelte +50 -0
  166. package/dist/fancy-ui/dock/DockIcon.svelte.d.ts +7 -0
  167. package/dist/fancy-ui/dock/DockSeparator.svelte +21 -0
  168. package/dist/fancy-ui/dock/DockSeparator.svelte.d.ts +6 -0
  169. package/dist/fancy-ui/dock/README.md +57 -0
  170. package/dist/fancy-ui/dock/index.d.ts +4 -0
  171. package/dist/fancy-ui/dock/index.js +4 -0
  172. package/dist/fancy-ui/dock/types.d.ts +14 -0
  173. package/dist/fancy-ui/dock/types.js +1 -0
  174. package/dist/fancy-ui/flickering-grid/FlickeringGrid.svelte +154 -0
  175. package/dist/fancy-ui/flickering-grid/FlickeringGrid.svelte.d.ts +27 -0
  176. package/dist/fancy-ui/flickering-grid/FlickeringGrid.test.d.ts +1 -0
  177. package/dist/fancy-ui/flickering-grid/FlickeringGrid.test.js +34 -0
  178. package/dist/fancy-ui/flickering-grid/README.md +24 -0
  179. package/dist/fancy-ui/flickering-grid/index.d.ts +2 -0
  180. package/dist/fancy-ui/flickering-grid/index.js +2 -0
  181. package/dist/fancy-ui/flip-card/FlipCard.svelte +48 -0
  182. package/dist/fancy-ui/flip-card/FlipCard.svelte.d.ts +10 -0
  183. package/dist/fancy-ui/flip-card/FlipCard.test.d.ts +1 -0
  184. package/dist/fancy-ui/flip-card/FlipCard.test.js +36 -0
  185. package/dist/fancy-ui/flip-card/README.md +26 -0
  186. package/dist/fancy-ui/flip-card/index.d.ts +1 -0
  187. package/dist/fancy-ui/flip-card/index.js +1 -0
  188. package/dist/fancy-ui/flip-words/FlipWords.svelte +135 -0
  189. package/dist/fancy-ui/flip-words/FlipWords.svelte.d.ts +18 -0
  190. package/dist/fancy-ui/flip-words/FlipWords.test.d.ts +1 -0
  191. package/dist/fancy-ui/flip-words/FlipWords.test.js +50 -0
  192. package/dist/fancy-ui/flip-words/README.md +17 -0
  193. package/dist/fancy-ui/flip-words/index.d.ts +2 -0
  194. package/dist/fancy-ui/flip-words/index.js +2 -0
  195. package/dist/fancy-ui/fluid-cursor/FluidCursor.svelte +1378 -0
  196. package/dist/fancy-ui/fluid-cursor/FluidCursor.svelte.d.ts +25 -0
  197. package/dist/fancy-ui/fluid-cursor/FluidCursor.test.d.ts +1 -0
  198. package/dist/fancy-ui/fluid-cursor/FluidCursor.test.js +41 -0
  199. package/dist/fancy-ui/fluid-cursor/README.md +34 -0
  200. package/dist/fancy-ui/fluid-cursor/index.d.ts +1 -0
  201. package/dist/fancy-ui/fluid-cursor/index.js +1 -0
  202. package/dist/fancy-ui/focus/Focus.svelte +177 -0
  203. package/dist/fancy-ui/focus/Focus.svelte.d.ts +12 -0
  204. package/dist/fancy-ui/focus/Focus.test.d.ts +1 -0
  205. package/dist/fancy-ui/focus/Focus.test.js +48 -0
  206. package/dist/fancy-ui/focus/README.md +21 -0
  207. package/dist/fancy-ui/focus/index.d.ts +1 -0
  208. package/dist/fancy-ui/focus/index.js +1 -0
  209. package/dist/fancy-ui/glare-card/GlareCard.svelte +133 -0
  210. package/dist/fancy-ui/glare-card/GlareCard.svelte.d.ts +8 -0
  211. package/dist/fancy-ui/glare-card/GlareCard.test.d.ts +1 -0
  212. package/dist/fancy-ui/glare-card/GlareCard.test.js +40 -0
  213. package/dist/fancy-ui/glare-card/README.md +24 -0
  214. package/dist/fancy-ui/glare-card/index.d.ts +1 -0
  215. package/dist/fancy-ui/glare-card/index.js +1 -0
  216. package/dist/fancy-ui/glow-border/GlowBorder.svelte +67 -0
  217. package/dist/fancy-ui/glow-border/GlowBorder.svelte.d.ts +10 -0
  218. package/dist/fancy-ui/glow-border/GlowBorder.test.d.ts +1 -0
  219. package/dist/fancy-ui/glow-border/GlowBorder.test.js +57 -0
  220. package/dist/fancy-ui/glow-border/README.md +54 -0
  221. package/dist/fancy-ui/glow-border/index.d.ts +1 -0
  222. package/dist/fancy-ui/glow-border/index.js +1 -0
  223. package/dist/fancy-ui/glowing-effect/GlowingEffect.svelte +182 -0
  224. package/dist/fancy-ui/glowing-effect/GlowingEffect.svelte.d.ts +15 -0
  225. package/dist/fancy-ui/glowing-effect/GlowingEffect.test.d.ts +1 -0
  226. package/dist/fancy-ui/glowing-effect/GlowingEffect.test.js +68 -0
  227. package/dist/fancy-ui/glowing-effect/README.md +29 -0
  228. package/dist/fancy-ui/glowing-effect/index.d.ts +1 -0
  229. package/dist/fancy-ui/glowing-effect/index.js +1 -0
  230. package/dist/fancy-ui/gradient-button/GradientButton.svelte +103 -0
  231. package/dist/fancy-ui/gradient-button/GradientButton.svelte.d.ts +24 -0
  232. package/dist/fancy-ui/gradient-button/GradientButton.test.d.ts +1 -0
  233. package/dist/fancy-ui/gradient-button/GradientButton.test.js +65 -0
  234. package/dist/fancy-ui/gradient-button/README.md +10 -0
  235. package/dist/fancy-ui/gradient-button/index.d.ts +2 -0
  236. package/dist/fancy-ui/gradient-button/index.js +2 -0
  237. package/dist/fancy-ui/hyper-text/HyperText.svelte +112 -0
  238. package/dist/fancy-ui/hyper-text/HyperText.svelte.d.ts +20 -0
  239. package/dist/fancy-ui/hyper-text/HyperText.test.d.ts +1 -0
  240. package/dist/fancy-ui/hyper-text/HyperText.test.js +39 -0
  241. package/dist/fancy-ui/hyper-text/README.md +19 -0
  242. package/dist/fancy-ui/hyper-text/index.d.ts +2 -0
  243. package/dist/fancy-ui/hyper-text/index.js +2 -0
  244. package/dist/fancy-ui/image-trail-cursor/ImageTrailCursor.svelte +89 -0
  245. package/dist/fancy-ui/image-trail-cursor/ImageTrailCursor.svelte.d.ts +9 -0
  246. package/dist/fancy-ui/image-trail-cursor/ImageTrailCursor.test.d.ts +1 -0
  247. package/dist/fancy-ui/image-trail-cursor/ImageTrailCursor.test.js +60 -0
  248. package/dist/fancy-ui/image-trail-cursor/README.md +36 -0
  249. package/dist/fancy-ui/image-trail-cursor/index.d.ts +3 -0
  250. package/dist/fancy-ui/image-trail-cursor/index.js +1 -0
  251. package/dist/fancy-ui/image-trail-cursor/trail-variants.d.ts +107 -0
  252. package/dist/fancy-ui/image-trail-cursor/trail-variants.js +703 -0
  253. package/dist/fancy-ui/index.d.ts +52 -0
  254. package/dist/fancy-ui/index.js +64 -0
  255. package/dist/fancy-ui/interactive-grid-pattern/InteractiveGridPattern.svelte +71 -0
  256. package/dist/fancy-ui/interactive-grid-pattern/InteractiveGridPattern.svelte.d.ts +15 -0
  257. package/dist/fancy-ui/interactive-grid-pattern/InteractiveGridPattern.test.d.ts +1 -0
  258. package/dist/fancy-ui/interactive-grid-pattern/InteractiveGridPattern.test.js +47 -0
  259. package/dist/fancy-ui/interactive-grid-pattern/README.md +30 -0
  260. package/dist/fancy-ui/interactive-grid-pattern/index.d.ts +2 -0
  261. package/dist/fancy-ui/interactive-grid-pattern/index.js +2 -0
  262. package/dist/fancy-ui/interactive-hover-button/InteractiveHoverButton.svelte +75 -0
  263. package/dist/fancy-ui/interactive-hover-button/InteractiveHoverButton.svelte.d.ts +14 -0
  264. package/dist/fancy-ui/interactive-hover-button/InteractiveHoverButton.test.d.ts +1 -0
  265. package/dist/fancy-ui/interactive-hover-button/InteractiveHoverButton.test.js +64 -0
  266. package/dist/fancy-ui/interactive-hover-button/README.md +28 -0
  267. package/dist/fancy-ui/interactive-hover-button/index.d.ts +2 -0
  268. package/dist/fancy-ui/interactive-hover-button/index.js +2 -0
  269. package/dist/fancy-ui/letter-pullup/LetterPullup.svelte +58 -0
  270. package/dist/fancy-ui/letter-pullup/LetterPullup.svelte.d.ts +17 -0
  271. package/dist/fancy-ui/letter-pullup/LetterPullup.test.d.ts +1 -0
  272. package/dist/fancy-ui/letter-pullup/LetterPullup.test.js +49 -0
  273. package/dist/fancy-ui/letter-pullup/README.md +18 -0
  274. package/dist/fancy-ui/letter-pullup/index.d.ts +2 -0
  275. package/dist/fancy-ui/letter-pullup/index.js +2 -0
  276. package/dist/fancy-ui/line-hover-link/LineHoverLink.svelte +450 -0
  277. package/dist/fancy-ui/line-hover-link/LineHoverLink.svelte.d.ts +35 -0
  278. package/dist/fancy-ui/line-hover-link/LineHoverLink.test.d.ts +1 -0
  279. package/dist/fancy-ui/line-hover-link/LineHoverLink.test.js +55 -0
  280. package/dist/fancy-ui/line-hover-link/index.d.ts +2 -0
  281. package/dist/fancy-ui/line-hover-link/index.js +1 -0
  282. package/dist/fancy-ui/line-shadow-text/LineShadowText.svelte +63 -0
  283. package/dist/fancy-ui/line-shadow-text/LineShadowText.svelte.d.ts +9 -0
  284. package/dist/fancy-ui/line-shadow-text/LineShadowText.test.d.ts +1 -0
  285. package/dist/fancy-ui/line-shadow-text/LineShadowText.test.js +59 -0
  286. package/dist/fancy-ui/line-shadow-text/README.md +12 -0
  287. package/dist/fancy-ui/line-shadow-text/index.d.ts +2 -0
  288. package/dist/fancy-ui/line-shadow-text/index.js +1 -0
  289. package/dist/fancy-ui/liquid-glass/LiquidGlass.svelte +204 -0
  290. package/dist/fancy-ui/liquid-glass/LiquidGlass.svelte.d.ts +23 -0
  291. package/dist/fancy-ui/liquid-glass/LiquidGlass.test.d.ts +1 -0
  292. package/dist/fancy-ui/liquid-glass/LiquidGlass.test.js +48 -0
  293. package/dist/fancy-ui/liquid-glass/README.md +34 -0
  294. package/dist/fancy-ui/liquid-glass/index.d.ts +1 -0
  295. package/dist/fancy-ui/liquid-glass/index.js +1 -0
  296. package/dist/fancy-ui/logo-cloud/AnimatedLogoCloud.svelte +61 -0
  297. package/dist/fancy-ui/logo-cloud/AnimatedLogoCloud.svelte.d.ts +15 -0
  298. package/dist/fancy-ui/logo-cloud/AnimatedLogoCloud.test.d.ts +1 -0
  299. package/dist/fancy-ui/logo-cloud/AnimatedLogoCloud.test.js +59 -0
  300. package/dist/fancy-ui/logo-cloud/IconLogoCloud.svelte +31 -0
  301. package/dist/fancy-ui/logo-cloud/IconLogoCloud.svelte.d.ts +11 -0
  302. package/dist/fancy-ui/logo-cloud/README.md +41 -0
  303. package/dist/fancy-ui/logo-cloud/StaticLogoCloud.svelte +31 -0
  304. package/dist/fancy-ui/logo-cloud/StaticLogoCloud.svelte.d.ts +11 -0
  305. package/dist/fancy-ui/logo-cloud/index.d.ts +4 -0
  306. package/dist/fancy-ui/logo-cloud/index.js +4 -0
  307. package/dist/fancy-ui/marquee/Marquee.svelte +70 -0
  308. package/dist/fancy-ui/marquee/Marquee.svelte.d.ts +11 -0
  309. package/dist/fancy-ui/marquee/Marquee.test.d.ts +1 -0
  310. package/dist/fancy-ui/marquee/Marquee.test.js +46 -0
  311. package/dist/fancy-ui/marquee/ReviewCard.svelte +25 -0
  312. package/dist/fancy-ui/marquee/ReviewCard.svelte.d.ts +9 -0
  313. package/dist/fancy-ui/marquee/index.d.ts +2 -0
  314. package/dist/fancy-ui/marquee/index.js +2 -0
  315. package/dist/fancy-ui/meteors/Meteors.svelte +59 -0
  316. package/dist/fancy-ui/meteors/Meteors.svelte.d.ts +15 -0
  317. package/dist/fancy-ui/meteors/Meteors.test.d.ts +1 -0
  318. package/dist/fancy-ui/meteors/Meteors.test.js +48 -0
  319. package/dist/fancy-ui/meteors/README.md +18 -0
  320. package/dist/fancy-ui/meteors/index.d.ts +2 -0
  321. package/dist/fancy-ui/meteors/index.js +2 -0
  322. package/dist/fancy-ui/neon-border/NeonBorder.svelte +135 -0
  323. package/dist/fancy-ui/neon-border/NeonBorder.svelte.d.ts +24 -0
  324. package/dist/fancy-ui/neon-border/NeonBorder.test.d.ts +1 -0
  325. package/dist/fancy-ui/neon-border/NeonBorder.test.js +80 -0
  326. package/dist/fancy-ui/neon-border/README.md +27 -0
  327. package/dist/fancy-ui/neon-border/index.d.ts +2 -0
  328. package/dist/fancy-ui/neon-border/index.js +2 -0
  329. package/dist/fancy-ui/number-ticker/NumberTicker.svelte +126 -0
  330. package/dist/fancy-ui/number-ticker/NumberTicker.svelte.d.ts +24 -0
  331. package/dist/fancy-ui/number-ticker/NumberTicker.test.d.ts +1 -0
  332. package/dist/fancy-ui/number-ticker/NumberTicker.test.js +64 -0
  333. package/dist/fancy-ui/number-ticker/README.md +22 -0
  334. package/dist/fancy-ui/number-ticker/index.d.ts +2 -0
  335. package/dist/fancy-ui/number-ticker/index.js +2 -0
  336. package/dist/fancy-ui/rainbow-button/RainbowButton.svelte +96 -0
  337. package/dist/fancy-ui/rainbow-button/RainbowButton.svelte.d.ts +18 -0
  338. package/dist/fancy-ui/rainbow-button/RainbowButton.test.d.ts +1 -0
  339. package/dist/fancy-ui/rainbow-button/RainbowButton.test.js +51 -0
  340. package/dist/fancy-ui/rainbow-button/index.d.ts +2 -0
  341. package/dist/fancy-ui/rainbow-button/index.js +2 -0
  342. package/dist/fancy-ui/registry.d.ts +72 -0
  343. package/dist/fancy-ui/registry.js +643 -0
  344. package/dist/fancy-ui/ripple/README.md +16 -0
  345. package/dist/fancy-ui/ripple/Ripple.svelte +64 -0
  346. package/dist/fancy-ui/ripple/Ripple.svelte.d.ts +13 -0
  347. package/dist/fancy-ui/ripple/Ripple.test.d.ts +1 -0
  348. package/dist/fancy-ui/ripple/Ripple.test.js +81 -0
  349. package/dist/fancy-ui/ripple/index.d.ts +1 -0
  350. package/dist/fancy-ui/ripple/index.js +1 -0
  351. package/dist/fancy-ui/ripple-button/RippleButton.svelte +111 -0
  352. package/dist/fancy-ui/ripple-button/RippleButton.svelte.d.ts +15 -0
  353. package/dist/fancy-ui/ripple-button/RippleButton.test.d.ts +1 -0
  354. package/dist/fancy-ui/ripple-button/RippleButton.test.js +44 -0
  355. package/dist/fancy-ui/ripple-button/index.d.ts +2 -0
  356. package/dist/fancy-ui/ripple-button/index.js +2 -0
  357. package/dist/fancy-ui/shimmer-button/README.md +10 -0
  358. package/dist/fancy-ui/shimmer-button/ShimmerButton.svelte +115 -0
  359. package/dist/fancy-ui/shimmer-button/ShimmerButton.svelte.d.ts +22 -0
  360. package/dist/fancy-ui/shimmer-button/ShimmerButton.test.d.ts +1 -0
  361. package/dist/fancy-ui/shimmer-button/ShimmerButton.test.js +69 -0
  362. package/dist/fancy-ui/shimmer-button/index.d.ts +2 -0
  363. package/dist/fancy-ui/shimmer-button/index.js +2 -0
  364. package/dist/fancy-ui/smooth-cursor/README.md +23 -0
  365. package/dist/fancy-ui/smooth-cursor/SmoothCursor.svelte +224 -0
  366. package/dist/fancy-ui/smooth-cursor/SmoothCursor.svelte.d.ts +20 -0
  367. package/dist/fancy-ui/smooth-cursor/index.d.ts +2 -0
  368. package/dist/fancy-ui/smooth-cursor/index.js +1 -0
  369. package/dist/fancy-ui/sparkles/README.md +15 -0
  370. package/dist/fancy-ui/sparkles/Sparkles.svelte +123 -0
  371. package/dist/fancy-ui/sparkles/Sparkles.svelte.d.ts +12 -0
  372. package/dist/fancy-ui/sparkles/Sparkles.test.d.ts +1 -0
  373. package/dist/fancy-ui/sparkles/Sparkles.test.js +66 -0
  374. package/dist/fancy-ui/sparkles/index.d.ts +1 -0
  375. package/dist/fancy-ui/sparkles/index.js +1 -0
  376. package/dist/fancy-ui/sparkles-text/README.md +19 -0
  377. package/dist/fancy-ui/sparkles-text/SparklesText.svelte +112 -0
  378. package/dist/fancy-ui/sparkles-text/SparklesText.svelte.d.ts +22 -0
  379. package/dist/fancy-ui/sparkles-text/SparklesText.test.d.ts +1 -0
  380. package/dist/fancy-ui/sparkles-text/SparklesText.test.js +54 -0
  381. package/dist/fancy-ui/sparkles-text/index.d.ts +2 -0
  382. package/dist/fancy-ui/sparkles-text/index.js +2 -0
  383. package/dist/fancy-ui/tailwind.css +3 -0
  384. package/dist/fancy-ui/text-generate-effect/README.md +14 -0
  385. package/dist/fancy-ui/text-generate-effect/TextGenerateEffect.svelte +66 -0
  386. package/dist/fancy-ui/text-generate-effect/TextGenerateEffect.svelte.d.ts +11 -0
  387. package/dist/fancy-ui/text-generate-effect/TextGenerateEffect.test.d.ts +1 -0
  388. package/dist/fancy-ui/text-generate-effect/TextGenerateEffect.test.js +73 -0
  389. package/dist/fancy-ui/text-generate-effect/index.d.ts +2 -0
  390. package/dist/fancy-ui/text-generate-effect/index.js +1 -0
  391. package/dist/fancy-ui/text-reveal-card/README.md +36 -0
  392. package/dist/fancy-ui/text-reveal-card/TextRevealCard.svelte +112 -0
  393. package/dist/fancy-ui/text-reveal-card/TextRevealCard.svelte.d.ts +12 -0
  394. package/dist/fancy-ui/text-reveal-card/TextRevealCard.test.d.ts +1 -0
  395. package/dist/fancy-ui/text-reveal-card/TextRevealCard.test.js +34 -0
  396. package/dist/fancy-ui/text-reveal-card/TextRevealStars.svelte +76 -0
  397. package/dist/fancy-ui/text-reveal-card/TextRevealStars.svelte.d.ts +7 -0
  398. package/dist/fancy-ui/text-reveal-card/index.d.ts +2 -0
  399. package/dist/fancy-ui/text-reveal-card/index.js +2 -0
  400. package/dist/fancy-ui/timeline/README.md +56 -0
  401. package/dist/fancy-ui/timeline/Timeline.svelte +141 -0
  402. package/dist/fancy-ui/timeline/Timeline.svelte.d.ts +20 -0
  403. package/dist/fancy-ui/timeline/Timeline.test.d.ts +1 -0
  404. package/dist/fancy-ui/timeline/Timeline.test.js +63 -0
  405. package/dist/fancy-ui/timeline/index.d.ts +2 -0
  406. package/dist/fancy-ui/timeline/index.js +2 -0
  407. package/dist/fancy-ui/tracing-beam/README.md +24 -0
  408. package/dist/fancy-ui/tracing-beam/TracingBeam.svelte +156 -0
  409. package/dist/fancy-ui/tracing-beam/TracingBeam.svelte.d.ts +8 -0
  410. package/dist/fancy-ui/tracing-beam/TracingBeam.test.d.ts +1 -0
  411. package/dist/fancy-ui/tracing-beam/TracingBeam.test.js +61 -0
  412. package/dist/fancy-ui/tracing-beam/index.d.ts +1 -0
  413. package/dist/fancy-ui/tracing-beam/index.js +1 -0
  414. package/dist/types.d.ts +87 -0
  415. package/dist/types.js +6 -0
  416. package/dist/utils.d.ts +12 -0
  417. package/dist/utils.js +5 -0
  418. package/package.json +105 -0
@@ -0,0 +1,450 @@
1
+ <script lang="ts" module>
2
+ import type { Snippet } from "svelte";
3
+
4
+ /**
5
+ * Line Hover Link Variants
6
+ *
7
+ * slide - Line slides in from right to left
8
+ * double - Two lines animate with different timings
9
+ * grow - Line grows thicker on hover
10
+ * strike - Strikethrough effect with text scale
11
+ * fade - Lines fade up with stagger delay
12
+ * pulse - Line pulses up and down
13
+ * swap - Two lines go opposite directions
14
+ * sweep - Full background cover sweep
15
+ * bounce - Bouncy squish animation
16
+ * arc - SVG arc stroke draws in
17
+ * scribble - SVG scribble stroke draws in
18
+ */
19
+ export type LineHoverVariant =
20
+ | "slide"
21
+ | "double"
22
+ | "grow"
23
+ | "strike"
24
+ | "fade"
25
+ | "pulse"
26
+ | "swap"
27
+ | "sweep"
28
+ | "bounce"
29
+ | "arc"
30
+ | "scribble";
31
+
32
+ export interface LineHoverLinkProps {
33
+ /** The animation variant */
34
+ variant?: LineHoverVariant;
35
+ /** Link href */
36
+ href?: string;
37
+ /** Link target */
38
+ target?: string;
39
+ /** Link rel */
40
+ rel?: string;
41
+ /** Accessible label */
42
+ "aria-label"?: string;
43
+ /** Additional CSS classes */
44
+ class?: string;
45
+ children?: Snippet;
46
+ }
47
+ </script>
48
+
49
+ <script lang="ts">
50
+ import { cn } from "../../utils.js";
51
+
52
+ let {
53
+ variant = "slide",
54
+ href = "#",
55
+ target,
56
+ rel,
57
+ "aria-label": ariaLabel,
58
+ class: className = "",
59
+ children,
60
+ }: LineHoverLinkProps = $props();
61
+
62
+ const needsSpan = $derived(["strike", "bounce", "arc", "scribble"].includes(variant));
63
+ const relValue = $derived(target === "_blank" ? (rel ?? "noopener noreferrer") : rel);
64
+ </script>
65
+
66
+ <a
67
+ {href}
68
+ {target}
69
+ aria-label={ariaLabel}
70
+ rel={relValue}
71
+ class={cn("link-hover", `link-hover--${variant}`, className)}
72
+ >
73
+ {#if needsSpan}
74
+ <span
75
+ >{#if children}{@render children()}{/if}</span
76
+ >
77
+ {:else if children}
78
+ {@render children()}
79
+ {/if}
80
+
81
+ {#if variant === "arc"}
82
+ <svg
83
+ class="link-hover__graphic link-hover__graphic--stroke link-hover__graphic--arc"
84
+ width="100%"
85
+ height="18"
86
+ viewBox="0 0 59 18"
87
+ aria-hidden="true"
88
+ >
89
+ <path d="M.945.149C12.3 16.142 43.573 22.572 58.785 10.842" pathLength="1" />
90
+ </svg>
91
+ {:else if variant === "scribble"}
92
+ <svg
93
+ class="link-hover__graphic link-hover__graphic--stroke link-hover__graphic--scribble"
94
+ width="100%"
95
+ height="9"
96
+ viewBox="0 0 101 9"
97
+ aria-hidden="true"
98
+ >
99
+ <path
100
+ d="M.426 1.973C4.144 1.567 17.77-.514 21.443 1.48 24.296 3.026 24.844 4.627 27.5 7c3.075 2.748 6.642-4.141 10.066-4.688 7.517-1.2 13.237 5.425 17.59 2.745C58.5 3 60.464-1.786 66 2c1.996 1.365 3.174 3.737 5.286 4.41 5.423 1.727 25.34-7.981 29.14-1.294"
101
+ pathLength="1"
102
+ />
103
+ </svg>
104
+ {/if}
105
+ </a>
106
+
107
+ <style>
108
+ .link-hover {
109
+ cursor: pointer;
110
+ position: relative;
111
+ white-space: nowrap;
112
+ color: currentColor;
113
+ text-decoration: none;
114
+ }
115
+
116
+ .link-hover::before,
117
+ .link-hover::after {
118
+ position: absolute;
119
+ width: 100%;
120
+ height: 1px;
121
+ background: currentColor;
122
+ top: 100%;
123
+ left: 0;
124
+ pointer-events: none;
125
+ }
126
+
127
+ .link-hover::before {
128
+ content: "";
129
+ }
130
+
131
+ /* Slide */
132
+ .link-hover--slide::before {
133
+ transform-origin: 100% 50%;
134
+ transform: scale3d(0, 1, 1);
135
+ transition: transform 0.3s;
136
+ }
137
+
138
+ .link-hover--slide:is(:hover, :focus-visible)::before {
139
+ transform-origin: 0% 50%;
140
+ transform: scale3d(1, 1, 1);
141
+ }
142
+
143
+ /* Double */
144
+ .link-hover--double::before {
145
+ transform-origin: 100% 50%;
146
+ transform: scale3d(0, 1, 1);
147
+ transition: transform 0.3s cubic-bezier(0.7, 0, 0.2, 1);
148
+ }
149
+
150
+ .link-hover--double:is(:hover, :focus-visible)::before {
151
+ transform-origin: 0% 50%;
152
+ transform: scale3d(1, 1, 1);
153
+ transition-timing-function: cubic-bezier(0.4, 1, 0.8, 1);
154
+ }
155
+
156
+ .link-hover--double::after {
157
+ content: "";
158
+ top: calc(100% + 4px);
159
+ transform-origin: 0% 50%;
160
+ transform: scale3d(0, 1, 1);
161
+ transition: transform 0.3s cubic-bezier(0.7, 0, 0.2, 1);
162
+ }
163
+
164
+ .link-hover--double:is(:hover, :focus-visible)::after {
165
+ transform-origin: 100% 50%;
166
+ transform: scale3d(1, 1, 1);
167
+ transition-timing-function: cubic-bezier(0.4, 1, 0.8, 1);
168
+ }
169
+
170
+ /* Grow */
171
+ .link-hover--grow::before {
172
+ transform-origin: 100% 50%;
173
+ transform: scale3d(0, 1, 1);
174
+ transition: transform 0.3s cubic-bezier(0.2, 1, 0.8, 1);
175
+ }
176
+
177
+ .link-hover--grow:is(:hover, :focus-visible)::before {
178
+ transform-origin: 0% 50%;
179
+ transform: scale3d(1, 2, 1);
180
+ transition-timing-function: cubic-bezier(0.7, 0, 0.2, 1);
181
+ }
182
+
183
+ .link-hover--grow::after {
184
+ content: "";
185
+ top: calc(100% + 4px);
186
+ transform-origin: 100% 50%;
187
+ transform: scale3d(0, 1, 1);
188
+ transition: transform 0.4s 0.1s cubic-bezier(0.2, 1, 0.8, 1);
189
+ }
190
+
191
+ .link-hover--grow:is(:hover, :focus-visible)::after {
192
+ transform-origin: 0% 50%;
193
+ transform: scale3d(1, 1, 1);
194
+ transition-timing-function: cubic-bezier(0.7, 0, 0.2, 1);
195
+ }
196
+
197
+ /* Strike */
198
+ .link-hover--strike {
199
+ padding: 0 10px;
200
+ }
201
+
202
+ .link-hover--strike::before {
203
+ top: 50%;
204
+ height: 2px;
205
+ transform-origin: 100% 50%;
206
+ transform: scale3d(0, 1, 1);
207
+ transition: transform 0.3s cubic-bezier(0.4, 1, 0.8, 1);
208
+ }
209
+
210
+ .link-hover--strike:is(:hover, :focus-visible)::before {
211
+ transform-origin: 0% 50%;
212
+ transform: scale3d(1, 1, 1);
213
+ }
214
+
215
+ .link-hover--strike span {
216
+ display: inline-block;
217
+ transition: transform 0.3s cubic-bezier(0.4, 1, 0.8, 1);
218
+ }
219
+
220
+ .link-hover--strike:is(:hover, :focus-visible) span {
221
+ transform: scale3d(1.1, 1.1, 1.1);
222
+ }
223
+
224
+ /* Fade */
225
+ .link-hover--fade::before,
226
+ .link-hover--fade::after {
227
+ opacity: 0;
228
+ transform-origin: 50% 0%;
229
+ transform: translate3d(0, 3px, 0);
230
+ transition-property: transform, opacity;
231
+ transition-duration: 0.3s;
232
+ transition-timing-function: cubic-bezier(0.2, 1, 0.8, 1);
233
+ }
234
+
235
+ .link-hover--fade:is(:hover, :focus-visible)::before,
236
+ .link-hover--fade:is(:hover, :focus-visible)::after {
237
+ opacity: 1;
238
+ transform: translate3d(0, 0, 0);
239
+ transition-timing-function: cubic-bezier(0.2, 0, 0.3, 1);
240
+ }
241
+
242
+ .link-hover--fade::after {
243
+ content: "";
244
+ top: calc(100% + 4px);
245
+ width: 70%;
246
+ left: 15%;
247
+ }
248
+
249
+ .link-hover--fade::before,
250
+ .link-hover--fade:is(:hover, :focus-visible)::after {
251
+ transition-delay: 0.1s;
252
+ }
253
+
254
+ .link-hover--fade:is(:hover, :focus-visible)::before {
255
+ transition-delay: 0s;
256
+ }
257
+
258
+ /* Pulse */
259
+ .link-hover--pulse::before {
260
+ height: 10px;
261
+ top: 100%;
262
+ opacity: 0;
263
+ }
264
+
265
+ .link-hover--pulse:is(:hover, :focus-visible)::before {
266
+ opacity: 1;
267
+ animation: lineUp 0.3s ease forwards;
268
+ }
269
+
270
+ @keyframes lineUp {
271
+ 0% {
272
+ transform-origin: 50% 100%;
273
+ transform: scale3d(1, 0.045, 1);
274
+ }
275
+ 50% {
276
+ transform-origin: 50% 100%;
277
+ transform: scale3d(1, 1, 1);
278
+ }
279
+ 51% {
280
+ transform-origin: 50% 0%;
281
+ transform: scale3d(1, 1, 1);
282
+ }
283
+ 100% {
284
+ transform-origin: 50% 0%;
285
+ transform: scale3d(1, 0.045, 1);
286
+ }
287
+ }
288
+
289
+ .link-hover--pulse::after {
290
+ content: "";
291
+ transition: opacity 0.3s;
292
+ opacity: 0;
293
+ transition-delay: 0s;
294
+ }
295
+
296
+ .link-hover--pulse:is(:hover, :focus-visible)::after {
297
+ opacity: 1;
298
+ transition-delay: 0.3s;
299
+ }
300
+
301
+ /* Swap */
302
+ .link-hover--swap::before {
303
+ transform-origin: 0% 50%;
304
+ transform: scale3d(0, 1, 1);
305
+ transition: transform 0.3s;
306
+ }
307
+
308
+ .link-hover--swap:is(:hover, :focus-visible)::before {
309
+ transform: scale3d(1, 1, 1);
310
+ }
311
+
312
+ .link-hover--swap::after {
313
+ content: "";
314
+ top: calc(100% + 4px);
315
+ transition: transform 0.3s;
316
+ transform-origin: 100% 50%;
317
+ }
318
+
319
+ .link-hover--swap:is(:hover, :focus-visible)::after {
320
+ transform: scale3d(0, 1, 1);
321
+ }
322
+
323
+ /* Sweep */
324
+ .link-hover--sweep::before {
325
+ height: 100%;
326
+ top: 0;
327
+ opacity: 0;
328
+ }
329
+
330
+ .link-hover--sweep:is(:hover, :focus-visible)::before {
331
+ opacity: 1;
332
+ animation: coverUp 0.3s ease forwards;
333
+ }
334
+
335
+ @keyframes coverUp {
336
+ 0% {
337
+ transform-origin: 50% 100%;
338
+ transform: scale3d(1, 0.045, 1);
339
+ }
340
+ 50% {
341
+ transform-origin: 50% 100%;
342
+ transform: scale3d(1, 1, 1);
343
+ }
344
+ 51% {
345
+ transform-origin: 50% 0%;
346
+ transform: scale3d(1, 1, 1);
347
+ }
348
+ 100% {
349
+ transform-origin: 50% 0%;
350
+ transform: scale3d(1, 0.045, 1);
351
+ }
352
+ }
353
+
354
+ .link-hover--sweep::after {
355
+ content: "";
356
+ transition: opacity 0.3s;
357
+ }
358
+
359
+ .link-hover--sweep:is(:hover, :focus-visible)::after {
360
+ opacity: 0;
361
+ }
362
+
363
+ /* Bounce */
364
+ .link-hover--bounce::before {
365
+ height: 7px;
366
+ border-radius: 20px;
367
+ transform: scale3d(1, 1, 1);
368
+ transition:
369
+ transform 0.2s,
370
+ opacity 0.2s;
371
+ transition-timing-function: cubic-bezier(0.2, 0.57, 0.67, 1.53);
372
+ }
373
+
374
+ .link-hover--bounce:is(:hover, :focus-visible)::before {
375
+ transition-timing-function: cubic-bezier(0.8, 0, 0.1, 1);
376
+ transition-duration: 0.4s;
377
+ opacity: 1;
378
+ transform: scale3d(1.2, 0.1, 1);
379
+ }
380
+
381
+ .link-hover--bounce span {
382
+ transform: translate3d(0, -4px, 0);
383
+ display: inline-block;
384
+ transition: transform 0.2s 0.05s cubic-bezier(0.2, 0.57, 0.67, 1.53);
385
+ }
386
+
387
+ .link-hover--bounce:is(:hover, :focus-visible) span {
388
+ transform: translate3d(0, 0, 0);
389
+ transition-timing-function: cubic-bezier(0.8, 0, 0.1, 1);
390
+ transition-duration: 0.4s;
391
+ transition-delay: 0s;
392
+ }
393
+
394
+ /* SVG Graphics Base */
395
+ .link-hover__graphic {
396
+ position: absolute;
397
+ top: 0;
398
+ left: 0;
399
+ pointer-events: none;
400
+ fill: none;
401
+ stroke: currentColor;
402
+ stroke-width: 1px;
403
+ }
404
+
405
+ .link-hover__graphic--stroke :global(path) {
406
+ stroke-dasharray: 1;
407
+ stroke-dashoffset: 1;
408
+ }
409
+
410
+ .link-hover:is(:hover, :focus-visible) .link-hover__graphic--stroke :global(path) {
411
+ stroke-dashoffset: 0;
412
+ }
413
+
414
+ /* Arc */
415
+ .link-hover--arc::before {
416
+ display: none;
417
+ }
418
+
419
+ .link-hover__graphic--arc {
420
+ top: 73%;
421
+ left: -23%;
422
+ }
423
+
424
+ .link-hover__graphic--arc :global(path) {
425
+ transition: stroke-dashoffset 0.4s cubic-bezier(0.7, 0, 0.3, 1);
426
+ }
427
+
428
+ .link-hover:is(:hover, :focus-visible) .link-hover__graphic--arc :global(path) {
429
+ transition-timing-function: cubic-bezier(0.8, 1, 0.7, 1);
430
+ transition-duration: 0.3s;
431
+ }
432
+
433
+ /* Scribble */
434
+ .link-hover--scribble::before {
435
+ display: none;
436
+ }
437
+
438
+ .link-hover__graphic--scribble {
439
+ top: 100%;
440
+ }
441
+
442
+ .link-hover__graphic--scribble :global(path) {
443
+ transition: stroke-dashoffset 0.6s cubic-bezier(0.7, 0, 0.3, 1);
444
+ }
445
+
446
+ .link-hover:is(:hover, :focus-visible) .link-hover__graphic--scribble :global(path) {
447
+ transition-timing-function: cubic-bezier(0.8, 1, 0.7, 1);
448
+ transition-duration: 0.3s;
449
+ }
450
+ </style>
@@ -0,0 +1,35 @@
1
+ import type { Snippet } from "svelte";
2
+ /**
3
+ * Line Hover Link Variants
4
+ *
5
+ * slide - Line slides in from right to left
6
+ * double - Two lines animate with different timings
7
+ * grow - Line grows thicker on hover
8
+ * strike - Strikethrough effect with text scale
9
+ * fade - Lines fade up with stagger delay
10
+ * pulse - Line pulses up and down
11
+ * swap - Two lines go opposite directions
12
+ * sweep - Full background cover sweep
13
+ * bounce - Bouncy squish animation
14
+ * arc - SVG arc stroke draws in
15
+ * scribble - SVG scribble stroke draws in
16
+ */
17
+ export type LineHoverVariant = "slide" | "double" | "grow" | "strike" | "fade" | "pulse" | "swap" | "sweep" | "bounce" | "arc" | "scribble";
18
+ export interface LineHoverLinkProps {
19
+ /** The animation variant */
20
+ variant?: LineHoverVariant;
21
+ /** Link href */
22
+ href?: string;
23
+ /** Link target */
24
+ target?: string;
25
+ /** Link rel */
26
+ rel?: string;
27
+ /** Accessible label */
28
+ "aria-label"?: string;
29
+ /** Additional CSS classes */
30
+ class?: string;
31
+ children?: Snippet;
32
+ }
33
+ declare const LineHoverLink: import("svelte").Component<LineHoverLinkProps, {}, "">;
34
+ type LineHoverLink = ReturnType<typeof LineHoverLink>;
35
+ export default LineHoverLink;
@@ -0,0 +1,55 @@
1
+ import { render, cleanup } from "@testing-library/svelte";
2
+ import { afterEach, describe, it, expect } from "vitest";
3
+ import LineHoverLink from "./LineHoverLink.svelte";
4
+ describe("LineHoverLink", () => {
5
+ afterEach(() => {
6
+ cleanup();
7
+ });
8
+ it("renders an anchor element", () => {
9
+ const { container } = render(LineHoverLink, {
10
+ props: { href: "/about" },
11
+ context: new Map(),
12
+ });
13
+ expect(container.querySelector("a")).toBeTruthy();
14
+ });
15
+ it("applies the variant class", () => {
16
+ const { container } = render(LineHoverLink, {
17
+ props: { variant: "slide", href: "#" },
18
+ });
19
+ expect(container.querySelector("a.link-hover--slide")).toBeTruthy();
20
+ });
21
+ it("defaults to slide variant", () => {
22
+ const { container } = render(LineHoverLink, { props: { href: "#" } });
23
+ expect(container.querySelector("a.link-hover--slide")).toBeTruthy();
24
+ });
25
+ it("wraps children in a span for strike variant", () => {
26
+ const { container } = render(LineHoverLink, { props: { variant: "strike", href: "#" } });
27
+ expect(container.querySelector("a.link-hover--strike span")).toBeTruthy();
28
+ });
29
+ it("wraps children in a span for bounce variant", () => {
30
+ const { container } = render(LineHoverLink, { props: { variant: "bounce", href: "#" } });
31
+ expect(container.querySelector("a.link-hover--bounce span")).toBeTruthy();
32
+ });
33
+ it("renders arc SVG for arc variant", () => {
34
+ const { container } = render(LineHoverLink, { props: { variant: "arc", href: "#" } });
35
+ expect(container.querySelector("svg.link-hover__graphic--arc")).toBeTruthy();
36
+ });
37
+ it("renders scribble SVG for scribble variant", () => {
38
+ const { container } = render(LineHoverLink, { props: { variant: "scribble", href: "#" } });
39
+ expect(container.querySelector("svg.link-hover__graphic--scribble")).toBeTruthy();
40
+ });
41
+ it("does not render SVG for non-svg variants", () => {
42
+ const { container } = render(LineHoverLink, { props: { variant: "slide", href: "#" } });
43
+ expect(container.querySelector("svg")).toBeNull();
44
+ });
45
+ it("forwards href to the anchor", () => {
46
+ const { container } = render(LineHoverLink, { props: { href: "/contact" } });
47
+ expect(container.querySelector("a")?.getAttribute("href")).toBe("/contact");
48
+ });
49
+ it("applies additional class", () => {
50
+ const { container } = render(LineHoverLink, {
51
+ props: { class: "text-xl font-bold", href: "#" },
52
+ });
53
+ expect(container.querySelector("a.text-xl")).toBeTruthy();
54
+ });
55
+ });
@@ -0,0 +1,2 @@
1
+ export { default as LineHoverLink } from "./LineHoverLink.svelte";
2
+ export type { LineHoverLinkProps, LineHoverVariant } from "./LineHoverLink.svelte";
@@ -0,0 +1 @@
1
+ export { default as LineHoverLink } from "./LineHoverLink.svelte";
@@ -0,0 +1,63 @@
1
+ <script lang="ts" module>
2
+ export interface LineShadowTextProps {
3
+ text: string;
4
+ shadowColor?: string;
5
+ as?: "span" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "div";
6
+ class?: string;
7
+ }
8
+ </script>
9
+
10
+ <script lang="ts">
11
+ import { cn } from "../../utils.js";
12
+
13
+ let {
14
+ text,
15
+ shadowColor = "black",
16
+ as = "span",
17
+ class: className,
18
+ }: LineShadowTextProps = $props();
19
+
20
+ let style = $derived(`--shadow-color: ${shadowColor}`);
21
+ </script>
22
+
23
+ <svelte:element
24
+ this={as}
25
+ class={cn("line-shadow-text relative z-0 inline-block", className)}
26
+ {style}
27
+ data-text={text}
28
+ >
29
+ {text}
30
+ </svelte:element>
31
+
32
+ <style>
33
+ :global {
34
+ @keyframes line-shadow {
35
+ 0% {
36
+ background-position: 0 0;
37
+ }
38
+ 100% {
39
+ background-position: 100% -100%;
40
+ }
41
+ }
42
+ }
43
+
44
+ .line-shadow-text::after {
45
+ content: attr(data-text);
46
+ position: absolute;
47
+ top: 0.04em;
48
+ left: 0.04em;
49
+ z-index: -10;
50
+ background-image: linear-gradient(
51
+ 45deg,
52
+ transparent 45%,
53
+ var(--shadow-color) 45%,
54
+ var(--shadow-color) 55%,
55
+ transparent 0
56
+ );
57
+ background-size: 0.06em 0.06em;
58
+ -webkit-background-clip: text;
59
+ background-clip: text;
60
+ color: transparent;
61
+ animation: line-shadow 15s linear infinite;
62
+ }
63
+ </style>
@@ -0,0 +1,9 @@
1
+ export interface LineShadowTextProps {
2
+ text: string;
3
+ shadowColor?: string;
4
+ as?: "span" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "div";
5
+ class?: string;
6
+ }
7
+ declare const LineShadowText: import("svelte").Component<LineShadowTextProps, {}, "">;
8
+ type LineShadowText = ReturnType<typeof LineShadowText>;
9
+ export default LineShadowText;
@@ -0,0 +1,59 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { render } from "@testing-library/svelte";
3
+ import LineShadowText from "./LineShadowText.svelte";
4
+ describe("LineShadowText", () => {
5
+ it("renders text content", () => {
6
+ const { container } = render(LineShadowText, {
7
+ props: { text: "Hello" },
8
+ });
9
+ expect(container.textContent).toContain("Hello");
10
+ });
11
+ it("sets data-text attribute for ::after content", () => {
12
+ const { container } = render(LineShadowText, {
13
+ props: { text: "Shadow" },
14
+ });
15
+ const el = container.firstElementChild;
16
+ expect(el.dataset.text).toBe("Shadow");
17
+ });
18
+ it("renders as span by default", () => {
19
+ const { container } = render(LineShadowText, {
20
+ props: { text: "Default" },
21
+ });
22
+ expect(container.querySelector("span")).toBeTruthy();
23
+ });
24
+ it("renders as custom element", () => {
25
+ const { container } = render(LineShadowText, {
26
+ props: { text: "Heading", as: "h1" },
27
+ });
28
+ expect(container.querySelector("h1")).toBeTruthy();
29
+ });
30
+ it("sets shadow color CSS variable", () => {
31
+ const { container } = render(LineShadowText, {
32
+ props: { text: "Colored", shadowColor: "red" },
33
+ });
34
+ const el = container.firstElementChild;
35
+ expect(el.style.getPropertyValue("--shadow-color")).toBe("red");
36
+ });
37
+ it("defaults shadow color to black", () => {
38
+ const { container } = render(LineShadowText, {
39
+ props: { text: "Default color" },
40
+ });
41
+ const el = container.firstElementChild;
42
+ expect(el.style.getPropertyValue("--shadow-color")).toBe("black");
43
+ });
44
+ it("applies custom class", () => {
45
+ const { container } = render(LineShadowText, {
46
+ props: { text: "Styled", class: "text-4xl font-bold" },
47
+ });
48
+ const el = container.firstElementChild;
49
+ expect(el.className).toContain("text-4xl");
50
+ expect(el.className).toContain("font-bold");
51
+ });
52
+ it("has line-shadow-text class for animation", () => {
53
+ const { container } = render(LineShadowText, {
54
+ props: { text: "Animated" },
55
+ });
56
+ const el = container.firstElementChild;
57
+ expect(el.className).toContain("line-shadow-text");
58
+ });
59
+ });
@@ -0,0 +1,12 @@
1
+ # LineShadowText
2
+
3
+ Text with an animated diagonal line shadow pattern that scrolls continuously behind the text.
4
+
5
+ ## Props
6
+
7
+ | Prop | Type | Default | Description |
8
+ |------|------|---------|-------------|
9
+ | `text` | `string` | required | Text content to display |
10
+ | `shadowColor` | `string` | `'black'` | Color of the line shadow |
11
+ | `as` | `string` | `'span'` | HTML element to render as |
12
+ | `class` | `string` | — | Additional CSS classes |
@@ -0,0 +1,2 @@
1
+ export { default as LineShadowText } from "./LineShadowText.svelte";
2
+ export type { LineShadowTextProps } from "./LineShadowText.svelte";
@@ -0,0 +1 @@
1
+ export { default as LineShadowText } from "./LineShadowText.svelte";