bynana-ui 1.6.2 → 1.7.0

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 (101) hide show
  1. package/dist/action-search-bar/index.js +17 -0
  2. package/dist/action-search-bar/index.js.map +1 -0
  3. package/dist/action-search-bar/index.mjs +17 -0
  4. package/dist/action-search-bar/index.mjs.map +1 -0
  5. package/dist/ai-bar/index.js +19 -0
  6. package/dist/ai-bar/index.js.map +1 -0
  7. package/dist/ai-bar/index.mjs +19 -0
  8. package/dist/ai-bar/index.mjs.map +1 -0
  9. package/dist/ai-loading/index.js +2 -0
  10. package/dist/ai-loading/index.js.map +1 -0
  11. package/dist/ai-loading/index.mjs +2 -0
  12. package/dist/ai-loading/index.mjs.map +1 -0
  13. package/dist/ai-prompt/index.js +17 -0
  14. package/dist/ai-prompt/index.js.map +1 -0
  15. package/dist/ai-prompt/index.mjs +17 -0
  16. package/dist/ai-prompt/index.mjs.map +1 -0
  17. package/dist/aurora/index.js +2 -0
  18. package/dist/aurora/index.js.map +1 -0
  19. package/dist/aurora/index.mjs +2 -0
  20. package/dist/aurora/index.mjs.map +1 -0
  21. package/dist/elastic-search/index.js +17 -0
  22. package/dist/elastic-search/index.js.map +1 -0
  23. package/dist/elastic-search/index.mjs +17 -0
  24. package/dist/elastic-search/index.mjs.map +1 -0
  25. package/dist/faqs-accordion/index.js +16 -0
  26. package/dist/faqs-accordion/index.js.map +1 -0
  27. package/dist/faqs-accordion/index.mjs +16 -0
  28. package/dist/faqs-accordion/index.mjs.map +1 -0
  29. package/dist/faqs-grid/index.js +2 -0
  30. package/dist/faqs-grid/index.js.map +1 -0
  31. package/dist/faqs-grid/index.mjs +2 -0
  32. package/dist/faqs-grid/index.mjs.map +1 -0
  33. package/dist/footer-complex/index.js +2 -0
  34. package/dist/footer-complex/index.js.map +1 -0
  35. package/dist/footer-complex/index.mjs +2 -0
  36. package/dist/footer-complex/index.mjs.map +1 -0
  37. package/dist/footer-simple/index.js +2 -0
  38. package/dist/footer-simple/index.js.map +1 -0
  39. package/dist/footer-simple/index.mjs +2 -0
  40. package/dist/footer-simple/index.mjs.map +1 -0
  41. package/dist/hero-grid/index.js +16 -0
  42. package/dist/hero-grid/index.js.map +1 -0
  43. package/dist/hero-grid/index.mjs +16 -0
  44. package/dist/hero-grid/index.mjs.map +1 -0
  45. package/dist/hero-showcase/index.js +17 -0
  46. package/dist/hero-showcase/index.js.map +1 -0
  47. package/dist/hero-showcase/index.mjs +17 -0
  48. package/dist/hero-showcase/index.mjs.map +1 -0
  49. package/dist/index.js +55 -13
  50. package/dist/index.js.map +1 -1
  51. package/dist/index.mjs +55 -13
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/job-listing/index.js +19 -0
  54. package/dist/job-listing/index.js.map +1 -0
  55. package/dist/job-listing/index.mjs +19 -0
  56. package/dist/job-listing/index.mjs.map +1 -0
  57. package/dist/logo-cloud/index.js +14 -0
  58. package/dist/logo-cloud/index.js.map +1 -0
  59. package/dist/logo-cloud/index.mjs +14 -0
  60. package/dist/logo-cloud/index.mjs.map +1 -0
  61. package/dist/pricing-modern/index.js +16 -0
  62. package/dist/pricing-modern/index.js.map +1 -0
  63. package/dist/pricing-modern/index.mjs +16 -0
  64. package/dist/pricing-modern/index.mjs.map +1 -0
  65. package/dist/scroll-float/index.js +2 -0
  66. package/dist/scroll-float/index.js.map +1 -0
  67. package/dist/scroll-float/index.mjs +2 -0
  68. package/dist/scroll-float/index.mjs.map +1 -0
  69. package/dist/scroll-reveal/index.js +2 -0
  70. package/dist/scroll-reveal/index.js.map +1 -0
  71. package/dist/scroll-reveal/index.mjs +2 -0
  72. package/dist/scroll-reveal/index.mjs.map +1 -0
  73. package/dist/scroll-stack/index.js +2 -0
  74. package/dist/scroll-stack/index.js.map +1 -0
  75. package/dist/scroll-stack/index.mjs +2 -0
  76. package/dist/scroll-stack/index.mjs.map +1 -0
  77. package/dist/squares/index.js +2 -0
  78. package/dist/squares/index.js.map +1 -0
  79. package/dist/squares/index.mjs +2 -0
  80. package/dist/squares/index.mjs.map +1 -0
  81. package/dist/team-carousel/index.js +17 -0
  82. package/dist/team-carousel/index.js.map +1 -0
  83. package/dist/team-carousel/index.mjs +17 -0
  84. package/dist/team-carousel/index.mjs.map +1 -0
  85. package/dist/testimonials-grid/index.js +17 -0
  86. package/dist/testimonials-grid/index.js.map +1 -0
  87. package/dist/testimonials-grid/index.mjs +17 -0
  88. package/dist/testimonials-grid/index.mjs.map +1 -0
  89. package/dist/testimonials-simple/index.js +3 -0
  90. package/dist/testimonials-simple/index.js.map +1 -0
  91. package/dist/testimonials-simple/index.mjs +3 -0
  92. package/dist/testimonials-simple/index.mjs.map +1 -0
  93. package/dist/threads/index.js +2 -0
  94. package/dist/threads/index.js.map +1 -0
  95. package/dist/threads/index.mjs +2 -0
  96. package/dist/threads/index.mjs.map +1 -0
  97. package/dist/waves/index.js +2 -0
  98. package/dist/waves/index.js.map +1 -0
  99. package/dist/waves/index.mjs +2 -0
  100. package/dist/waves/index.mjs.map +1 -0
  101. package/package.json +26 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/shared/src/utils.ts","../../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../../node_modules/lucide-react/src/Icon.ts","../../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../src/team-carousel/index.tsx"],"names":["toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","classes","className","index","array","hasA11yProp","props","prop","defaultAttributes","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","ChevronLeft","ChevronRight","TeamCarousel","title","subtitle","description","members","currentIndex","setCurrentIndex","useState","isAutoPlaying","setIsAutoPlaying","cardsPerView","useEffect","interval","prev","nextSlide","maxIndex","prevSlide","jsx","jsxs","member","team_carousel_default"],"mappings":"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","file":"index.js","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\r\n\r\ninterface TeamMember {\r\n name: string;\r\n role: string;\r\n experience: string;\r\n avatar: string;\r\n}\r\n\r\ninterface TeamCarouselProps {\r\n title?: string;\r\n subtitle?: string;\r\n description?: string;\r\n members?: TeamMember[];\r\n className?: string;\r\n}\r\n\r\nexport function TeamCarousel({\r\n title = \"Tech Pioneers\",\r\n subtitle = \"building the future\",\r\n description = \"We bring together brilliant developers and innovators.\",\r\n members = [\r\n {\r\n name: \"Emily Rodriguez\",\r\n role: \"Product Manager\",\r\n experience: \"6+ years\",\r\n avatar: \"https://i.pravatar.cc/160?img=1\",\r\n },\r\n {\r\n name: \"Mollie Hall\",\r\n role: \"CTO\",\r\n experience: \"12+ years\",\r\n avatar: \"https://i.pravatar.cc/160?img=2\",\r\n },\r\n {\r\n name: \"Alec Whitten\",\r\n role: \"UX Researcher\",\r\n experience: \"5+ years\",\r\n avatar: \"https://i.pravatar.cc/160?img=3\",\r\n },\r\n ],\r\n className = \"\",\r\n}: TeamCarouselProps) {\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const [isAutoPlaying, setIsAutoPlaying] = useState(true);\r\n const cardsPerView = 3;\r\n\r\n useEffect(() => {\r\n if (!isAutoPlaying) return;\r\n\r\n const interval = setInterval(() => {\r\n setCurrentIndex((prev) => (prev + 1) % Math.max(1, members.length - cardsPerView + 1));\r\n }, 5000);\r\n\r\n return () => clearInterval(interval);\r\n }, [members.length, isAutoPlaying]);\r\n\r\n const nextSlide = () => {\r\n const maxIndex = Math.max(0, members.length - cardsPerView);\r\n if (currentIndex >= maxIndex) return;\r\n setCurrentIndex((prev) => Math.min(prev + 1, maxIndex));\r\n setIsAutoPlaying(false);\r\n setTimeout(() => setIsAutoPlaying(true), 1500);\r\n };\r\n\r\n const prevSlide = () => {\r\n if (currentIndex <= 0) return;\r\n setCurrentIndex((prev) => Math.max(prev - 1, 0));\r\n setIsAutoPlaying(false);\r\n setTimeout(() => setIsAutoPlaying(true), 1500);\r\n };\r\n\r\n return (\r\n <section className={`overflow-hidden py-32 ${className}`}>\r\n <div className=\"mx-auto max-w-5xl px-8 lg:px-0\">\r\n <div>\r\n <h2 className=\"text-5xl font-medium md:text-6xl\">\r\n {title} <br />\r\n <span className=\"text-muted-foreground\">{subtitle}</span>\r\n </h2>\r\n <p className=\"text-muted-foreground mt-6 max-w-md\">{description}</p>\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <div className=\"mt-4 hidden items-center justify-end gap-4 md:flex\">\r\n <button\r\n onClick={prevSlide}\r\n disabled={currentIndex === 0}\r\n className=\"flex h-11 w-11 items-center justify-center rounded-full border hover:bg-accent disabled:opacity-50\"\r\n >\r\n <ChevronLeft className=\"h-5 w-5\" />\r\n </button>\r\n <button\r\n onClick={nextSlide}\r\n disabled={currentIndex >= members.length - cardsPerView}\r\n className=\"flex h-11 w-11 items-center justify-center rounded-full border hover:bg-accent disabled:opacity-50\"\r\n >\r\n <ChevronRight className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"mt-16 overflow-hidden\">\r\n <div\r\n className=\"flex gap-4 transition-transform duration-500\"\r\n style={{ transform: `translateX(-${currentIndex * 304}px)` }}\r\n >\r\n {members.map((member) => (\r\n <div key={member.name} className=\"w-72 flex-shrink-0 rounded-2xl border p-7 text-center\">\r\n <img\r\n src={member.avatar}\r\n alt={member.name}\r\n className=\"mx-auto h-20 w-20 rounded-full border\"\r\n />\r\n <div className=\"mt-6\">\r\n <p className=\"text-lg font-medium\">{member.name}</p>\r\n <p className=\"text-muted-foreground text-sm\">{member.role}</p>\r\n </div>\r\n <div className=\"my-6 h-px bg-border\" />\r\n <p className=\"text-muted-foreground text-sm\">{member.experience}</p>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n\r\nexport default TeamCarousel;\r\n"]}
@@ -0,0 +1,17 @@
1
+ import {forwardRef,createElement,useState,useEffect}from'react';import {jsx,jsxs}from'react/jsx-runtime';var h=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),D=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,l,u)=>u?u.toUpperCase():l.toLowerCase()),S=e=>{let a=D(e);return a.charAt(0).toUpperCase()+a.slice(1)},m=(...e)=>e.filter((a,l,u)=>!!a&&a.trim()!==""&&u.indexOf(a)===l).join(" ").trim(),g=e=>{for(let a in e)if(a.startsWith("aria-")||a==="role"||a==="title")return true};var w={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var P=forwardRef(({color:e="currentColor",size:a=24,strokeWidth:l=2,absoluteStrokeWidth:u,className:s="",children:d,iconNode:i,...c},r)=>createElement("svg",{ref:r,...w,width:a,height:a,stroke:e,strokeWidth:u?Number(l)*24/Number(a):l,className:m("lucide",s),...!d&&!g(c)&&{"aria-hidden":"true"},...c},[...i.map(([n,x])=>createElement(n,x)),...Array.isArray(d)?d:[d]]));var I=(e,a)=>{let l=forwardRef(({className:u,...s},d)=>createElement(P,{ref:d,iconNode:a,className:m(`lucide-${h(S(e))}`,`lucide-${e}`,u),...s}));return l.displayName=S(e),l};var T=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],p=I("chevron-left",T);var q=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],L=I("chevron-right",q);function b({title:e="Tech Pioneers",subtitle:a="building the future",description:l="We bring together brilliant developers and innovators.",members:u=[{name:"Emily Rodriguez",role:"Product Manager",experience:"6+ years",avatar:"https://i.pravatar.cc/160?img=1"},{name:"Mollie Hall",role:"CTO",experience:"12+ years",avatar:"https://i.pravatar.cc/160?img=2"},{name:"Alec Whitten",role:"UX Researcher",experience:"5+ years",avatar:"https://i.pravatar.cc/160?img=3"}],className:s=""}){let[d,i]=useState(0),[c,r]=useState(true),n=3;useEffect(()=>{if(!c)return;let o=setInterval(()=>{i(C=>(C+1)%Math.max(1,u.length-n+1));},5e3);return ()=>clearInterval(o)},[u.length,c]);let x=()=>{let o=Math.max(0,u.length-n);d>=o||(i(C=>Math.min(C+1,o)),r(false),setTimeout(()=>r(true),1500));},B=()=>{d<=0||(i(o=>Math.max(o-1,0)),r(false),setTimeout(()=>r(true),1500));};return jsx("section",{className:`overflow-hidden py-32 ${s}`,children:jsxs("div",{className:"mx-auto max-w-5xl px-8 lg:px-0",children:[jsxs("div",{children:[jsxs("h2",{className:"text-5xl font-medium md:text-6xl",children:[e," ",jsx("br",{}),jsx("span",{className:"text-muted-foreground",children:a})]}),jsx("p",{className:"text-muted-foreground mt-6 max-w-md",children:l})]}),jsxs("div",{className:"relative",children:[jsxs("div",{className:"mt-4 hidden items-center justify-end gap-4 md:flex",children:[jsx("button",{onClick:B,disabled:d===0,className:"flex h-11 w-11 items-center justify-center rounded-full border hover:bg-accent disabled:opacity-50",children:jsx(p,{className:"h-5 w-5"})}),jsx("button",{onClick:x,disabled:d>=u.length-n,className:"flex h-11 w-11 items-center justify-center rounded-full border hover:bg-accent disabled:opacity-50",children:jsx(L,{className:"h-5 w-5"})})]}),jsx("div",{className:"mt-16 overflow-hidden",children:jsx("div",{className:"flex gap-4 transition-transform duration-500",style:{transform:`translateX(-${d*304}px)`},children:u.map(o=>jsxs("div",{className:"w-72 flex-shrink-0 rounded-2xl border p-7 text-center",children:[jsx("img",{src:o.avatar,alt:o.name,className:"mx-auto h-20 w-20 rounded-full border"}),jsxs("div",{className:"mt-6",children:[jsx("p",{className:"text-lg font-medium",children:o.name}),jsx("p",{className:"text-muted-foreground text-sm",children:o.role})]}),jsx("div",{className:"my-6 h-px bg-border"}),jsx("p",{className:"text-muted-foreground text-sm",children:o.experience})]},o.name))})})]})]})})}var aa=b;/*! Bundled license information:
2
+
3
+ lucide-react/dist/esm/shared/src/utils.js:
4
+ lucide-react/dist/esm/defaultAttributes.js:
5
+ lucide-react/dist/esm/Icon.js:
6
+ lucide-react/dist/esm/createLucideIcon.js:
7
+ lucide-react/dist/esm/icons/chevron-left.js:
8
+ lucide-react/dist/esm/icons/chevron-right.js:
9
+ lucide-react/dist/esm/lucide-react.js:
10
+ (**
11
+ * @license lucide-react v0.545.0 - ISC
12
+ *
13
+ * This source code is licensed under the ISC license.
14
+ * See the LICENSE file in the root directory of this source tree.
15
+ *)
16
+ */export{b as TeamCarousel,aa as default};//# sourceMappingURL=index.mjs.map
17
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/shared/src/utils.ts","../../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../../node_modules/lucide-react/src/Icon.ts","../../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../src/team-carousel/index.tsx"],"names":["toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","classes","className","index","array","hasA11yProp","props","prop","defaultAttributes","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","ChevronLeft","ChevronRight","TeamCarousel","title","subtitle","description","members","currentIndex","setCurrentIndex","useState","isAutoPlaying","setIsAutoPlaying","cardsPerView","useEffect","interval","prev","nextSlide","maxIndex","prevSlide","jsx","jsxs","member","team_carousel_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\r\n\r\ninterface TeamMember {\r\n name: string;\r\n role: string;\r\n experience: string;\r\n avatar: string;\r\n}\r\n\r\ninterface TeamCarouselProps {\r\n title?: string;\r\n subtitle?: string;\r\n description?: string;\r\n members?: TeamMember[];\r\n className?: string;\r\n}\r\n\r\nexport function TeamCarousel({\r\n title = \"Tech Pioneers\",\r\n subtitle = \"building the future\",\r\n description = \"We bring together brilliant developers and innovators.\",\r\n members = [\r\n {\r\n name: \"Emily Rodriguez\",\r\n role: \"Product Manager\",\r\n experience: \"6+ years\",\r\n avatar: \"https://i.pravatar.cc/160?img=1\",\r\n },\r\n {\r\n name: \"Mollie Hall\",\r\n role: \"CTO\",\r\n experience: \"12+ years\",\r\n avatar: \"https://i.pravatar.cc/160?img=2\",\r\n },\r\n {\r\n name: \"Alec Whitten\",\r\n role: \"UX Researcher\",\r\n experience: \"5+ years\",\r\n avatar: \"https://i.pravatar.cc/160?img=3\",\r\n },\r\n ],\r\n className = \"\",\r\n}: TeamCarouselProps) {\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n const [isAutoPlaying, setIsAutoPlaying] = useState(true);\r\n const cardsPerView = 3;\r\n\r\n useEffect(() => {\r\n if (!isAutoPlaying) return;\r\n\r\n const interval = setInterval(() => {\r\n setCurrentIndex((prev) => (prev + 1) % Math.max(1, members.length - cardsPerView + 1));\r\n }, 5000);\r\n\r\n return () => clearInterval(interval);\r\n }, [members.length, isAutoPlaying]);\r\n\r\n const nextSlide = () => {\r\n const maxIndex = Math.max(0, members.length - cardsPerView);\r\n if (currentIndex >= maxIndex) return;\r\n setCurrentIndex((prev) => Math.min(prev + 1, maxIndex));\r\n setIsAutoPlaying(false);\r\n setTimeout(() => setIsAutoPlaying(true), 1500);\r\n };\r\n\r\n const prevSlide = () => {\r\n if (currentIndex <= 0) return;\r\n setCurrentIndex((prev) => Math.max(prev - 1, 0));\r\n setIsAutoPlaying(false);\r\n setTimeout(() => setIsAutoPlaying(true), 1500);\r\n };\r\n\r\n return (\r\n <section className={`overflow-hidden py-32 ${className}`}>\r\n <div className=\"mx-auto max-w-5xl px-8 lg:px-0\">\r\n <div>\r\n <h2 className=\"text-5xl font-medium md:text-6xl\">\r\n {title} <br />\r\n <span className=\"text-muted-foreground\">{subtitle}</span>\r\n </h2>\r\n <p className=\"text-muted-foreground mt-6 max-w-md\">{description}</p>\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <div className=\"mt-4 hidden items-center justify-end gap-4 md:flex\">\r\n <button\r\n onClick={prevSlide}\r\n disabled={currentIndex === 0}\r\n className=\"flex h-11 w-11 items-center justify-center rounded-full border hover:bg-accent disabled:opacity-50\"\r\n >\r\n <ChevronLeft className=\"h-5 w-5\" />\r\n </button>\r\n <button\r\n onClick={nextSlide}\r\n disabled={currentIndex >= members.length - cardsPerView}\r\n className=\"flex h-11 w-11 items-center justify-center rounded-full border hover:bg-accent disabled:opacity-50\"\r\n >\r\n <ChevronRight className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"mt-16 overflow-hidden\">\r\n <div\r\n className=\"flex gap-4 transition-transform duration-500\"\r\n style={{ transform: `translateX(-${currentIndex * 304}px)` }}\r\n >\r\n {members.map((member) => (\r\n <div key={member.name} className=\"w-72 flex-shrink-0 rounded-2xl border p-7 text-center\">\r\n <img\r\n src={member.avatar}\r\n alt={member.name}\r\n className=\"mx-auto h-20 w-20 rounded-full border\"\r\n />\r\n <div className=\"mt-6\">\r\n <p className=\"text-lg font-medium\">{member.name}</p>\r\n <p className=\"text-muted-foreground text-sm\">{member.role}</p>\r\n </div>\r\n <div className=\"my-6 h-px bg-border\" />\r\n <p className=\"text-muted-foreground text-sm\">{member.experience}</p>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n}\r\n\r\nexport default TeamCarousel;\r\n"]}
@@ -0,0 +1,17 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),jsxRuntime=require('react/jsx-runtime');var C=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),k=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,t,d)=>d?d.toUpperCase():t.toLowerCase()),x=e=>{let a=k(e);return a.charAt(0).toUpperCase()+a.slice(1)},p=(...e)=>e.filter((a,t,d)=>!!a&&a.trim()!==""&&d.indexOf(a)===t).join(" ").trim(),S=e=>{for(let a in e)if(a.startsWith("aria-")||a==="role"||a==="title")return true};var h={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var w=react.forwardRef(({color:e="currentColor",size:a=24,strokeWidth:t=2,absoluteStrokeWidth:d,className:s="",children:l,iconNode:n,...r},m)=>react.createElement("svg",{ref:m,...h,width:a,height:a,stroke:e,strokeWidth:d?Number(t)*24/Number(a):t,className:p("lucide",s),...!l&&!S(r)&&{"aria-hidden":"true"},...r},[...n.map(([u,I])=>react.createElement(u,I)),...Array.isArray(l)?l:[l]]));var L=(e,a)=>{let t=react.forwardRef(({className:d,...s},l)=>react.createElement(w,{ref:l,iconNode:a,className:p(`lucide-${C(x(e))}`,`lucide-${e}`,d),...s}));return t.displayName=x(e),t};var D=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],i=L("chevron-left",D);var F=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],c=L("chevron-right",F);function q({title:e="What Developers Say",description:a="See what developers are saying about their experience.",testimonials:t=[{content:"This has revolutionized how we build user interfaces.",avatar:"https://i.pravatar.cc/150?img=1",name:"Eduardo Calvo",role:"CEO & Founder"},{content:"The design system is incredibly well thought out.",avatar:"https://i.pravatar.cc/150?img=2",name:"Drew Cano",role:"Head of Design"},{content:"Best UI library I've used. Excellent TypeScript support.",avatar:"https://i.pravatar.cc/150?img=3",name:"Marcus Johnson",role:"Lead Developer"}],autoplay:d=false,className:s=""}){let[l,n]=react.useState(0),r=react.useCallback(()=>{n(u=>(u+1)%t.length);},[t.length]),m=()=>{n(u=>(u-1+t.length)%t.length);};return react.useEffect(()=>{if(d){let u=setInterval(r,5e3);return ()=>clearInterval(u)}},[d,r]),jsxRuntime.jsx("div",{className:`py-24 ${s}`,children:jsxRuntime.jsx("div",{className:"container mx-auto max-w-6xl px-6",children:jsxRuntime.jsxs("div",{className:"grid grid-cols-1 gap-8 lg:grid-cols-2 lg:gap-12",children:[jsxRuntime.jsxs("div",{className:"flex flex-col justify-center",children:[jsxRuntime.jsx("h2",{className:"mb-4 text-4xl font-semibold",children:e}),jsxRuntime.jsx("p",{className:"text-muted-foreground text-lg",children:a})]}),jsxRuntime.jsxs("div",{className:"relative flex flex-col items-end",children:[jsxRuntime.jsxs("div",{className:"mb-4 flex gap-2",children:[jsxRuntime.jsx("button",{onClick:m,className:"flex h-8 w-8 items-center justify-center rounded-full border hover:bg-accent",children:jsxRuntime.jsx(i,{className:"h-5 w-5"})}),jsxRuntime.jsx("button",{onClick:r,className:"flex h-8 w-8 items-center justify-center rounded-full border hover:bg-accent",children:jsxRuntime.jsx(c,{className:"h-5 w-5"})})]}),jsxRuntime.jsx("div",{className:"relative h-full w-full max-w-md",children:t.map((u,I)=>jsxRuntime.jsx("div",{className:`absolute inset-0 transition-all duration-400 ${I===l?"opacity-100 scale-100 z-10":"opacity-0 scale-95 z-0"}`,children:jsxRuntime.jsxs("div",{className:"rounded-2xl border px-6 py-6 shadow-lg",children:[jsxRuntime.jsx("p",{className:"mb-6 text-lg",children:u.content}),jsxRuntime.jsxs("div",{className:"flex items-center gap-3",children:[jsxRuntime.jsx("img",{src:u.avatar,alt:u.name,className:"size-8 rounded-full border object-cover"}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("div",{className:"font-semibold",children:u.name}),jsxRuntime.jsx("span",{className:"text-muted-foreground text-sm",children:u.role})]})]})]})},u.name))})]})]})})})}var $=q;/*! Bundled license information:
2
+
3
+ lucide-react/dist/esm/shared/src/utils.js:
4
+ lucide-react/dist/esm/defaultAttributes.js:
5
+ lucide-react/dist/esm/Icon.js:
6
+ lucide-react/dist/esm/createLucideIcon.js:
7
+ lucide-react/dist/esm/icons/chevron-left.js:
8
+ lucide-react/dist/esm/icons/chevron-right.js:
9
+ lucide-react/dist/esm/lucide-react.js:
10
+ (**
11
+ * @license lucide-react v0.545.0 - ISC
12
+ *
13
+ * This source code is licensed under the ISC license.
14
+ * See the LICENSE file in the root directory of this source tree.
15
+ *)
16
+ */exports.TestimonialsGrid=q;exports.default=$;//# sourceMappingURL=index.js.map
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/shared/src/utils.ts","../../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../../node_modules/lucide-react/src/Icon.ts","../../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../src/testimonials-grid/index.tsx"],"names":["toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","classes","className","index","array","hasA11yProp","props","prop","defaultAttributes","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","ChevronLeft","ChevronRight","TestimonialsGrid","title","description","testimonials","autoplay","active","setActive","useState","handleNext","useCallback","prev","handlePrev","useEffect","interval","jsx","jsxs","testimonial","testimonials_grid_default"],"mappings":"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","file":"index.js","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","\"use client\";\r\n\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\r\n\r\ninterface Testimonial {\r\n content: string;\r\n avatar: string;\r\n name: string;\r\n role: string;\r\n}\r\n\r\ninterface TestimonialsGridProps {\r\n title?: string;\r\n description?: string;\r\n testimonials?: Testimonial[];\r\n autoplay?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function TestimonialsGrid({\r\n title = \"What Developers Say\",\r\n description = \"See what developers are saying about their experience.\",\r\n testimonials = [\r\n {\r\n content: \"This has revolutionized how we build user interfaces.\",\r\n avatar: \"https://i.pravatar.cc/150?img=1\",\r\n name: \"Eduardo Calvo\",\r\n role: \"CEO & Founder\",\r\n },\r\n {\r\n content: \"The design system is incredibly well thought out.\",\r\n avatar: \"https://i.pravatar.cc/150?img=2\",\r\n name: \"Drew Cano\",\r\n role: \"Head of Design\",\r\n },\r\n {\r\n content: \"Best UI library I've used. Excellent TypeScript support.\",\r\n avatar: \"https://i.pravatar.cc/150?img=3\",\r\n name: \"Marcus Johnson\",\r\n role: \"Lead Developer\",\r\n },\r\n ],\r\n autoplay = false,\r\n className = \"\",\r\n}: TestimonialsGridProps) {\r\n const [active, setActive] = useState(0);\r\n\r\n const handleNext = useCallback(() => {\r\n setActive((prev) => (prev + 1) % testimonials.length);\r\n }, [testimonials.length]);\r\n\r\n const handlePrev = () => {\r\n setActive((prev) => (prev - 1 + testimonials.length) % testimonials.length);\r\n };\r\n\r\n useEffect(() => {\r\n if (autoplay) {\r\n const interval = setInterval(handleNext, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [autoplay, handleNext]);\r\n\r\n return (\r\n <div className={`py-24 ${className}`}>\r\n <div className=\"container mx-auto max-w-6xl px-6\">\r\n <div className=\"grid grid-cols-1 gap-8 lg:grid-cols-2 lg:gap-12\">\r\n <div className=\"flex flex-col justify-center\">\r\n <h2 className=\"mb-4 text-4xl font-semibold\">{title}</h2>\r\n <p className=\"text-muted-foreground text-lg\">{description}</p>\r\n </div>\r\n\r\n <div className=\"relative flex flex-col items-end\">\r\n <div className=\"mb-4 flex gap-2\">\r\n <button\r\n onClick={handlePrev}\r\n className=\"flex h-8 w-8 items-center justify-center rounded-full border hover:bg-accent\"\r\n >\r\n <ChevronLeft className=\"h-5 w-5\" />\r\n </button>\r\n <button\r\n onClick={handleNext}\r\n className=\"flex h-8 w-8 items-center justify-center rounded-full border hover:bg-accent\"\r\n >\r\n <ChevronRight className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"relative h-full w-full max-w-md\">\r\n {testimonials.map((testimonial, index) => (\r\n <div\r\n key={testimonial.name}\r\n className={`absolute inset-0 transition-all duration-400 ${\r\n index === active ? \"opacity-100 scale-100 z-10\" : \"opacity-0 scale-95 z-0\"\r\n }`}\r\n >\r\n <div className=\"rounded-2xl border px-6 py-6 shadow-lg\">\r\n <p className=\"mb-6 text-lg\">{testimonial.content}</p>\r\n <div className=\"flex items-center gap-3\">\r\n <img\r\n src={testimonial.avatar}\r\n alt={testimonial.name}\r\n className=\"size-8 rounded-full border object-cover\"\r\n />\r\n <div>\r\n <div className=\"font-semibold\">{testimonial.name}</div>\r\n <span className=\"text-muted-foreground text-sm\">{testimonial.role}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default TestimonialsGrid;\r\n"]}
@@ -0,0 +1,17 @@
1
+ import {forwardRef,createElement,useState,useCallback,useEffect}from'react';import {jsx,jsxs}from'react/jsx-runtime';var C=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),k=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,t,d)=>d?d.toUpperCase():t.toLowerCase()),x=e=>{let a=k(e);return a.charAt(0).toUpperCase()+a.slice(1)},p=(...e)=>e.filter((a,t,d)=>!!a&&a.trim()!==""&&d.indexOf(a)===t).join(" ").trim(),S=e=>{for(let a in e)if(a.startsWith("aria-")||a==="role"||a==="title")return true};var h={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var w=forwardRef(({color:e="currentColor",size:a=24,strokeWidth:t=2,absoluteStrokeWidth:d,className:s="",children:l,iconNode:n,...r},m)=>createElement("svg",{ref:m,...h,width:a,height:a,stroke:e,strokeWidth:d?Number(t)*24/Number(a):t,className:p("lucide",s),...!l&&!S(r)&&{"aria-hidden":"true"},...r},[...n.map(([u,I])=>createElement(u,I)),...Array.isArray(l)?l:[l]]));var L=(e,a)=>{let t=forwardRef(({className:d,...s},l)=>createElement(w,{ref:l,iconNode:a,className:p(`lucide-${C(x(e))}`,`lucide-${e}`,d),...s}));return t.displayName=x(e),t};var D=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],i=L("chevron-left",D);var F=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],c=L("chevron-right",F);function q({title:e="What Developers Say",description:a="See what developers are saying about their experience.",testimonials:t=[{content:"This has revolutionized how we build user interfaces.",avatar:"https://i.pravatar.cc/150?img=1",name:"Eduardo Calvo",role:"CEO & Founder"},{content:"The design system is incredibly well thought out.",avatar:"https://i.pravatar.cc/150?img=2",name:"Drew Cano",role:"Head of Design"},{content:"Best UI library I've used. Excellent TypeScript support.",avatar:"https://i.pravatar.cc/150?img=3",name:"Marcus Johnson",role:"Lead Developer"}],autoplay:d=false,className:s=""}){let[l,n]=useState(0),r=useCallback(()=>{n(u=>(u+1)%t.length);},[t.length]),m=()=>{n(u=>(u-1+t.length)%t.length);};return useEffect(()=>{if(d){let u=setInterval(r,5e3);return ()=>clearInterval(u)}},[d,r]),jsx("div",{className:`py-24 ${s}`,children:jsx("div",{className:"container mx-auto max-w-6xl px-6",children:jsxs("div",{className:"grid grid-cols-1 gap-8 lg:grid-cols-2 lg:gap-12",children:[jsxs("div",{className:"flex flex-col justify-center",children:[jsx("h2",{className:"mb-4 text-4xl font-semibold",children:e}),jsx("p",{className:"text-muted-foreground text-lg",children:a})]}),jsxs("div",{className:"relative flex flex-col items-end",children:[jsxs("div",{className:"mb-4 flex gap-2",children:[jsx("button",{onClick:m,className:"flex h-8 w-8 items-center justify-center rounded-full border hover:bg-accent",children:jsx(i,{className:"h-5 w-5"})}),jsx("button",{onClick:r,className:"flex h-8 w-8 items-center justify-center rounded-full border hover:bg-accent",children:jsx(c,{className:"h-5 w-5"})})]}),jsx("div",{className:"relative h-full w-full max-w-md",children:t.map((u,I)=>jsx("div",{className:`absolute inset-0 transition-all duration-400 ${I===l?"opacity-100 scale-100 z-10":"opacity-0 scale-95 z-0"}`,children:jsxs("div",{className:"rounded-2xl border px-6 py-6 shadow-lg",children:[jsx("p",{className:"mb-6 text-lg",children:u.content}),jsxs("div",{className:"flex items-center gap-3",children:[jsx("img",{src:u.avatar,alt:u.name,className:"size-8 rounded-full border object-cover"}),jsxs("div",{children:[jsx("div",{className:"font-semibold",children:u.name}),jsx("span",{className:"text-muted-foreground text-sm",children:u.role})]})]})]})},u.name))})]})]})})})}var $=q;/*! Bundled license information:
2
+
3
+ lucide-react/dist/esm/shared/src/utils.js:
4
+ lucide-react/dist/esm/defaultAttributes.js:
5
+ lucide-react/dist/esm/Icon.js:
6
+ lucide-react/dist/esm/createLucideIcon.js:
7
+ lucide-react/dist/esm/icons/chevron-left.js:
8
+ lucide-react/dist/esm/icons/chevron-right.js:
9
+ lucide-react/dist/esm/lucide-react.js:
10
+ (**
11
+ * @license lucide-react v0.545.0 - ISC
12
+ *
13
+ * This source code is licensed under the ISC license.
14
+ * See the LICENSE file in the root directory of this source tree.
15
+ *)
16
+ */export{q as TestimonialsGrid,$ as default};//# sourceMappingURL=index.mjs.map
17
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/shared/src/utils.ts","../../../../node_modules/lucide-react/src/defaultAttributes.ts","../../../../node_modules/lucide-react/src/Icon.ts","../../../../node_modules/lucide-react/src/createLucideIcon.ts","../../../../node_modules/lucide-react/src/icons/chevron-left.ts","../../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../src/testimonials-grid/index.tsx"],"names":["toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","classes","className","index","array","hasA11yProp","props","prop","defaultAttributes","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","rest","ref","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","ChevronLeft","ChevronRight","TestimonialsGrid","title","description","testimonials","autoplay","active","setActive","useState","handleNext","useCallback","prev","handlePrev","useEffect","interval","jsx","jsxs","testimonial","testimonials_grid_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }]];\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('chevron-left', __iconNode);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","\"use client\";\r\n\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\r\n\r\ninterface Testimonial {\r\n content: string;\r\n avatar: string;\r\n name: string;\r\n role: string;\r\n}\r\n\r\ninterface TestimonialsGridProps {\r\n title?: string;\r\n description?: string;\r\n testimonials?: Testimonial[];\r\n autoplay?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function TestimonialsGrid({\r\n title = \"What Developers Say\",\r\n description = \"See what developers are saying about their experience.\",\r\n testimonials = [\r\n {\r\n content: \"This has revolutionized how we build user interfaces.\",\r\n avatar: \"https://i.pravatar.cc/150?img=1\",\r\n name: \"Eduardo Calvo\",\r\n role: \"CEO & Founder\",\r\n },\r\n {\r\n content: \"The design system is incredibly well thought out.\",\r\n avatar: \"https://i.pravatar.cc/150?img=2\",\r\n name: \"Drew Cano\",\r\n role: \"Head of Design\",\r\n },\r\n {\r\n content: \"Best UI library I've used. Excellent TypeScript support.\",\r\n avatar: \"https://i.pravatar.cc/150?img=3\",\r\n name: \"Marcus Johnson\",\r\n role: \"Lead Developer\",\r\n },\r\n ],\r\n autoplay = false,\r\n className = \"\",\r\n}: TestimonialsGridProps) {\r\n const [active, setActive] = useState(0);\r\n\r\n const handleNext = useCallback(() => {\r\n setActive((prev) => (prev + 1) % testimonials.length);\r\n }, [testimonials.length]);\r\n\r\n const handlePrev = () => {\r\n setActive((prev) => (prev - 1 + testimonials.length) % testimonials.length);\r\n };\r\n\r\n useEffect(() => {\r\n if (autoplay) {\r\n const interval = setInterval(handleNext, 5000);\r\n return () => clearInterval(interval);\r\n }\r\n }, [autoplay, handleNext]);\r\n\r\n return (\r\n <div className={`py-24 ${className}`}>\r\n <div className=\"container mx-auto max-w-6xl px-6\">\r\n <div className=\"grid grid-cols-1 gap-8 lg:grid-cols-2 lg:gap-12\">\r\n <div className=\"flex flex-col justify-center\">\r\n <h2 className=\"mb-4 text-4xl font-semibold\">{title}</h2>\r\n <p className=\"text-muted-foreground text-lg\">{description}</p>\r\n </div>\r\n\r\n <div className=\"relative flex flex-col items-end\">\r\n <div className=\"mb-4 flex gap-2\">\r\n <button\r\n onClick={handlePrev}\r\n className=\"flex h-8 w-8 items-center justify-center rounded-full border hover:bg-accent\"\r\n >\r\n <ChevronLeft className=\"h-5 w-5\" />\r\n </button>\r\n <button\r\n onClick={handleNext}\r\n className=\"flex h-8 w-8 items-center justify-center rounded-full border hover:bg-accent\"\r\n >\r\n <ChevronRight className=\"h-5 w-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"relative h-full w-full max-w-md\">\r\n {testimonials.map((testimonial, index) => (\r\n <div\r\n key={testimonial.name}\r\n className={`absolute inset-0 transition-all duration-400 ${\r\n index === active ? \"opacity-100 scale-100 z-10\" : \"opacity-0 scale-95 z-0\"\r\n }`}\r\n >\r\n <div className=\"rounded-2xl border px-6 py-6 shadow-lg\">\r\n <p className=\"mb-6 text-lg\">{testimonial.content}</p>\r\n <div className=\"flex items-center gap-3\">\r\n <img\r\n src={testimonial.avatar}\r\n alt={testimonial.name}\r\n className=\"size-8 rounded-full border object-cover\"\r\n />\r\n <div>\r\n <div className=\"font-semibold\">{testimonial.name}</div>\r\n <span className=\"text-muted-foreground text-sm\">{testimonial.role}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default TestimonialsGrid;\r\n"]}
@@ -0,0 +1,3 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),jsxRuntime=require('react/jsx-runtime');function v({testimonials:e=[{quote:"This has revolutionized how we build user interfaces. The animations are buttery smooth.",avatar:"https://i.pravatar.cc/150?img=1",name:"Eduardo Calvo",role:"CEO & Founder"},{quote:"The design system is incredibly well thought out. Every component feels intentional.",avatar:"https://i.pravatar.cc/150?img=2",name:"Drew Cano",role:"Head of Design"},{quote:"Best UI library I've used. The TypeScript support is excellent.",avatar:"https://i.pravatar.cc/150?img=3",name:"Marcus Johnson",role:"Lead Developer"}],duration:l=5e3,className:n=""}){let[t,m]=react.useState(0),i=react.useRef(null);return react.useEffect(()=>(i.current=setTimeout(()=>{m(o=>(o+1)%e.length);},l),()=>{i.current&&clearTimeout(i.current);}),[t,e.length,l]),jsxRuntime.jsx("div",{className:`flex flex-col items-center justify-center py-16 ${n}`,children:jsxRuntime.jsxs("div",{className:"flex w-full max-w-5xl flex-col items-center justify-center px-4",children:[jsxRuntime.jsxs("blockquote",{className:"mb-8 text-center text-2xl leading-tight font-semibold md:text-4xl transition-all duration-500",children:['"',e[t].quote,'"']}),jsxRuntime.jsxs("div",{className:"flex items-center gap-4",children:[jsxRuntime.jsx("img",{src:e[t].avatar,alt:e[t].name,className:"h-12 w-12 rounded-full border object-cover"}),jsxRuntime.jsx("div",{className:"border-l mx-4 h-8"}),jsxRuntime.jsxs("div",{className:"text-left",children:[jsxRuntime.jsx("div",{className:"text-lg font-medium italic",children:e[t].name}),jsxRuntime.jsx("div",{className:"text-muted-foreground text-base",children:e[t].role})]})]}),jsxRuntime.jsx("div",{className:"mx-auto mt-8 flex gap-3",children:e.map((o,s)=>jsxRuntime.jsx("span",{className:`block h-3 rounded-full transition-all duration-400 ${s===t?"w-12 bg-primary":"w-3 bg-muted"}`},s))})]})})}var p=v;
2
+ exports.TestimonialsSimple=v;exports.default=p;//# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/testimonials-simple/index.tsx"],"names":["TestimonialsSimple","testimonials","duration","className","index","setIndex","useState","timeoutRef","useRef","useEffect","prev","jsx","jsxs","_","i","testimonials_simple_default"],"mappings":"yIAiBO,SAASA,EAAmB,CACjC,YAAA,CAAAC,EAAe,CACb,CACE,KAAA,CAAO,0FAAA,CACP,MAAA,CAAQ,iCAAA,CACR,KAAM,eAAA,CACN,IAAA,CAAM,eACR,CAAA,CACA,CACE,MAAO,sFAAA,CACP,MAAA,CAAQ,iCAAA,CACR,IAAA,CAAM,WAAA,CACN,IAAA,CAAM,gBACR,CAAA,CACA,CACE,MAAO,iEAAA,CACP,MAAA,CAAQ,kCACR,IAAA,CAAM,gBAAA,CACN,IAAA,CAAM,gBACR,CACF,CAAA,CACA,SAAAC,CAAAA,CAAW,GAAA,CACX,UAAAC,CAAAA,CAAY,EACd,EAA4B,CAC1B,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,eAAS,CAAC,CAAA,CAC9BC,EAAaC,YAAAA,CAA8B,IAAI,EAErD,OAAAC,eAAAA,CAAU,KACRF,CAAAA,CAAW,OAAA,CAAU,UAAA,CAAW,IAAM,CACpCF,CAAAA,CAAUK,IAAUA,CAAAA,CAAO,CAAA,EAAKT,EAAa,MAAM,EACrD,CAAA,CAAGC,CAAQ,CAAA,CACJ,IAAM,CACPK,CAAAA,CAAW,OAAA,EAAS,YAAA,CAAaA,CAAAA,CAAW,OAAO,EACzD,GACC,CAACH,CAAAA,CAAOH,CAAAA,CAAa,MAAA,CAAQC,CAAQ,CAAC,EAGvCS,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAW,CAAA,gDAAA,EAAmDR,CAAS,GAC1E,QAAA,CAAAS,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iEAAA,CACb,QAAA,CAAA,CAAAA,gBAAC,YAAA,CAAA,CAAW,SAAA,CAAU,gGAAgG,QAAA,CAAA,CAAA,GAAA,CAClHX,CAAAA,CAAaG,CAAK,CAAA,CAAE,KAAA,CAAM,GAAA,CAAA,CAC9B,CAAA,CAEAQ,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAD,eAAC,KAAA,CAAA,CACC,GAAA,CAAKV,EAAaG,CAAK,CAAA,CAAE,MAAA,CACzB,GAAA,CAAKH,CAAAA,CAAaG,CAAK,EAAE,IAAA,CACzB,SAAA,CAAU,6CACZ,CAAA,CACAO,cAAAA,CAAC,OAAI,SAAA,CAAU,mBAAA,CAAoB,CAAA,CACnCC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAAD,cAAAA,CAAC,OAAI,SAAA,CAAU,4BAAA,CAA8B,SAAAV,CAAAA,CAAaG,CAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CACtEO,cAAAA,CAAC,OAAI,SAAA,CAAU,iCAAA,CAAmC,SAAAV,CAAAA,CAAaG,CAAK,EAAE,IAAA,CAAK,CAAA,CAAA,CAC7E,CAAA,CAAA,CACF,CAAA,CAEAO,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACZ,QAAA,CAAAV,EAAa,GAAA,CAAI,CAACY,EAAGC,CAAAA,GACpBH,cAAAA,CAAC,MAAA,CAAA,CAEC,SAAA,CAAW,CAAA,mDAAA,EACTG,CAAAA,GAAMV,EAAQ,iBAAA,CAAoB,cACpC,CAAA,CAAA,CAAA,CAHKU,CAIP,CACD,CAAA,CACH,GACF,CAAA,CACF,CAEJ,CAEA,IAAOC,CAAAA,CAAQf","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\n\r\ninterface Testimonial {\r\n quote: string;\r\n avatar: string;\r\n name: string;\r\n role: string;\r\n}\r\n\r\ninterface TestimonialsSimpleProps {\r\n testimonials?: Testimonial[];\r\n duration?: number;\r\n className?: string;\r\n}\r\n\r\nexport function TestimonialsSimple({\r\n testimonials = [\r\n {\r\n quote: \"This has revolutionized how we build user interfaces. The animations are buttery smooth.\",\r\n avatar: \"https://i.pravatar.cc/150?img=1\",\r\n name: \"Eduardo Calvo\",\r\n role: \"CEO & Founder\",\r\n },\r\n {\r\n quote: \"The design system is incredibly well thought out. Every component feels intentional.\",\r\n avatar: \"https://i.pravatar.cc/150?img=2\",\r\n name: \"Drew Cano\",\r\n role: \"Head of Design\",\r\n },\r\n {\r\n quote: \"Best UI library I've used. The TypeScript support is excellent.\",\r\n avatar: \"https://i.pravatar.cc/150?img=3\",\r\n name: \"Marcus Johnson\",\r\n role: \"Lead Developer\",\r\n },\r\n ],\r\n duration = 5000,\r\n className = \"\",\r\n}: TestimonialsSimpleProps) {\r\n const [index, setIndex] = useState(0);\r\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n useEffect(() => {\r\n timeoutRef.current = setTimeout(() => {\r\n setIndex((prev) => (prev + 1) % testimonials.length);\r\n }, duration);\r\n return () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n };\r\n }, [index, testimonials.length, duration]);\r\n\r\n return (\r\n <div className={`flex flex-col items-center justify-center py-16 ${className}`}>\r\n <div className=\"flex w-full max-w-5xl flex-col items-center justify-center px-4\">\r\n <blockquote className=\"mb-8 text-center text-2xl leading-tight font-semibold md:text-4xl transition-all duration-500\">\r\n \"{testimonials[index].quote}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n <img\r\n src={testimonials[index].avatar}\r\n alt={testimonials[index].name}\r\n className=\"h-12 w-12 rounded-full border object-cover\"\r\n />\r\n <div className=\"border-l mx-4 h-8\" />\r\n <div className=\"text-left\">\r\n <div className=\"text-lg font-medium italic\">{testimonials[index].name}</div>\r\n <div className=\"text-muted-foreground text-base\">{testimonials[index].role}</div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mx-auto mt-8 flex gap-3\">\r\n {testimonials.map((_, i) => (\r\n <span\r\n key={i}\r\n className={`block h-3 rounded-full transition-all duration-400 ${\r\n i === index ? \"w-12 bg-primary\" : \"w-3 bg-muted\"\r\n }`}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default TestimonialsSimple;\r\n"]}
@@ -0,0 +1,3 @@
1
+ import {useState,useRef,useEffect}from'react';import {jsx,jsxs}from'react/jsx-runtime';function v({testimonials:e=[{quote:"This has revolutionized how we build user interfaces. The animations are buttery smooth.",avatar:"https://i.pravatar.cc/150?img=1",name:"Eduardo Calvo",role:"CEO & Founder"},{quote:"The design system is incredibly well thought out. Every component feels intentional.",avatar:"https://i.pravatar.cc/150?img=2",name:"Drew Cano",role:"Head of Design"},{quote:"Best UI library I've used. The TypeScript support is excellent.",avatar:"https://i.pravatar.cc/150?img=3",name:"Marcus Johnson",role:"Lead Developer"}],duration:l=5e3,className:n=""}){let[t,m]=useState(0),i=useRef(null);return useEffect(()=>(i.current=setTimeout(()=>{m(o=>(o+1)%e.length);},l),()=>{i.current&&clearTimeout(i.current);}),[t,e.length,l]),jsx("div",{className:`flex flex-col items-center justify-center py-16 ${n}`,children:jsxs("div",{className:"flex w-full max-w-5xl flex-col items-center justify-center px-4",children:[jsxs("blockquote",{className:"mb-8 text-center text-2xl leading-tight font-semibold md:text-4xl transition-all duration-500",children:['"',e[t].quote,'"']}),jsxs("div",{className:"flex items-center gap-4",children:[jsx("img",{src:e[t].avatar,alt:e[t].name,className:"h-12 w-12 rounded-full border object-cover"}),jsx("div",{className:"border-l mx-4 h-8"}),jsxs("div",{className:"text-left",children:[jsx("div",{className:"text-lg font-medium italic",children:e[t].name}),jsx("div",{className:"text-muted-foreground text-base",children:e[t].role})]})]}),jsx("div",{className:"mx-auto mt-8 flex gap-3",children:e.map((o,s)=>jsx("span",{className:`block h-3 rounded-full transition-all duration-400 ${s===t?"w-12 bg-primary":"w-3 bg-muted"}`},s))})]})})}var p=v;
2
+ export{v as TestimonialsSimple,p as default};//# sourceMappingURL=index.mjs.map
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/testimonials-simple/index.tsx"],"names":["TestimonialsSimple","testimonials","duration","className","index","setIndex","useState","timeoutRef","useRef","useEffect","prev","jsx","jsxs","_","i","testimonials_simple_default"],"mappings":"uFAiBO,SAASA,EAAmB,CACjC,YAAA,CAAAC,EAAe,CACb,CACE,KAAA,CAAO,0FAAA,CACP,MAAA,CAAQ,iCAAA,CACR,KAAM,eAAA,CACN,IAAA,CAAM,eACR,CAAA,CACA,CACE,MAAO,sFAAA,CACP,MAAA,CAAQ,iCAAA,CACR,IAAA,CAAM,WAAA,CACN,IAAA,CAAM,gBACR,CAAA,CACA,CACE,MAAO,iEAAA,CACP,MAAA,CAAQ,kCACR,IAAA,CAAM,gBAAA,CACN,IAAA,CAAM,gBACR,CACF,CAAA,CACA,SAAAC,CAAAA,CAAW,GAAA,CACX,UAAAC,CAAAA,CAAY,EACd,EAA4B,CAC1B,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,SAAS,CAAC,CAAA,CAC9BC,EAAaC,MAAAA,CAA8B,IAAI,EAErD,OAAAC,SAAAA,CAAU,KACRF,CAAAA,CAAW,OAAA,CAAU,UAAA,CAAW,IAAM,CACpCF,CAAAA,CAAUK,IAAUA,CAAAA,CAAO,CAAA,EAAKT,EAAa,MAAM,EACrD,CAAA,CAAGC,CAAQ,CAAA,CACJ,IAAM,CACPK,CAAAA,CAAW,OAAA,EAAS,YAAA,CAAaA,CAAAA,CAAW,OAAO,EACzD,GACC,CAACH,CAAAA,CAAOH,CAAAA,CAAa,MAAA,CAAQC,CAAQ,CAAC,EAGvCS,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAW,CAAA,gDAAA,EAAmDR,CAAS,GAC1E,QAAA,CAAAS,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iEAAA,CACb,QAAA,CAAA,CAAAA,KAAC,YAAA,CAAA,CAAW,SAAA,CAAU,gGAAgG,QAAA,CAAA,CAAA,GAAA,CAClHX,CAAAA,CAAaG,CAAK,CAAA,CAAE,KAAA,CAAM,GAAA,CAAA,CAC9B,CAAA,CAEAQ,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAD,IAAC,KAAA,CAAA,CACC,GAAA,CAAKV,EAAaG,CAAK,CAAA,CAAE,MAAA,CACzB,GAAA,CAAKH,CAAAA,CAAaG,CAAK,EAAE,IAAA,CACzB,SAAA,CAAU,6CACZ,CAAA,CACAO,GAAAA,CAAC,OAAI,SAAA,CAAU,mBAAA,CAAoB,CAAA,CACnCC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAAD,GAAAA,CAAC,OAAI,SAAA,CAAU,4BAAA,CAA8B,SAAAV,CAAAA,CAAaG,CAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CACtEO,GAAAA,CAAC,OAAI,SAAA,CAAU,iCAAA,CAAmC,SAAAV,CAAAA,CAAaG,CAAK,EAAE,IAAA,CAAK,CAAA,CAAA,CAC7E,CAAA,CAAA,CACF,CAAA,CAEAO,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACZ,QAAA,CAAAV,EAAa,GAAA,CAAI,CAACY,EAAGC,CAAAA,GACpBH,GAAAA,CAAC,MAAA,CAAA,CAEC,SAAA,CAAW,CAAA,mDAAA,EACTG,CAAAA,GAAMV,EAAQ,iBAAA,CAAoB,cACpC,CAAA,CAAA,CAAA,CAHKU,CAIP,CACD,CAAA,CACH,GACF,CAAA,CACF,CAEJ,CAEA,IAAOC,CAAAA,CAAQf","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\n\r\ninterface Testimonial {\r\n quote: string;\r\n avatar: string;\r\n name: string;\r\n role: string;\r\n}\r\n\r\ninterface TestimonialsSimpleProps {\r\n testimonials?: Testimonial[];\r\n duration?: number;\r\n className?: string;\r\n}\r\n\r\nexport function TestimonialsSimple({\r\n testimonials = [\r\n {\r\n quote: \"This has revolutionized how we build user interfaces. The animations are buttery smooth.\",\r\n avatar: \"https://i.pravatar.cc/150?img=1\",\r\n name: \"Eduardo Calvo\",\r\n role: \"CEO & Founder\",\r\n },\r\n {\r\n quote: \"The design system is incredibly well thought out. Every component feels intentional.\",\r\n avatar: \"https://i.pravatar.cc/150?img=2\",\r\n name: \"Drew Cano\",\r\n role: \"Head of Design\",\r\n },\r\n {\r\n quote: \"Best UI library I've used. The TypeScript support is excellent.\",\r\n avatar: \"https://i.pravatar.cc/150?img=3\",\r\n name: \"Marcus Johnson\",\r\n role: \"Lead Developer\",\r\n },\r\n ],\r\n duration = 5000,\r\n className = \"\",\r\n}: TestimonialsSimpleProps) {\r\n const [index, setIndex] = useState(0);\r\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n useEffect(() => {\r\n timeoutRef.current = setTimeout(() => {\r\n setIndex((prev) => (prev + 1) % testimonials.length);\r\n }, duration);\r\n return () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n };\r\n }, [index, testimonials.length, duration]);\r\n\r\n return (\r\n <div className={`flex flex-col items-center justify-center py-16 ${className}`}>\r\n <div className=\"flex w-full max-w-5xl flex-col items-center justify-center px-4\">\r\n <blockquote className=\"mb-8 text-center text-2xl leading-tight font-semibold md:text-4xl transition-all duration-500\">\r\n \"{testimonials[index].quote}\"\r\n </blockquote>\r\n\r\n <div className=\"flex items-center gap-4\">\r\n <img\r\n src={testimonials[index].avatar}\r\n alt={testimonials[index].name}\r\n className=\"h-12 w-12 rounded-full border object-cover\"\r\n />\r\n <div className=\"border-l mx-4 h-8\" />\r\n <div className=\"text-left\">\r\n <div className=\"text-lg font-medium italic\">{testimonials[index].name}</div>\r\n <div className=\"text-muted-foreground text-base\">{testimonials[index].role}</div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mx-auto mt-8 flex gap-3\">\r\n {testimonials.map((_, i) => (\r\n <span\r\n key={i}\r\n className={`block h-3 rounded-full transition-all duration-400 ${\r\n i === index ? \"w-12 bg-primary\" : \"w-3 bg-muted\"\r\n }`}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default TestimonialsSimple;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),jsxRuntime=require('react/jsx-runtime');function y({lineCount:s=50,lineColor:o="rgba(255, 255, 255, 0.1)",lineWidth:f=1,speed:c=.5,amplitude:u=100,className:g=""}){let h=react.useRef(null),a=react.useRef(null);return react.useEffect(()=>{let e=h.current;if(!e)return;let t=e.getContext("2d");if(!t)return;let i=()=>{e.width=e.offsetWidth,e.height=e.offsetHeight;};window.addEventListener("resize",i),i();let m=[];for(let n=0;n<s;n++)m.push({y:e.height/s*n,offset:Math.random()*Math.PI*2,speed:.5+Math.random()*c});let l=0,d=()=>{!t||!e||(t.clearRect(0,0,e.width,e.height),t.strokeStyle=o,t.lineWidth=f,m.forEach(n=>{t.beginPath();for(let r=0;r<=e.width;r+=5){let p=Math.sin(r*.01+l*n.speed+n.offset)*u,b=n.y+p;r===0?t.moveTo(r,b):t.lineTo(r,b);}t.stroke();}),l+=.01,a.current=requestAnimationFrame(d));};return d(),()=>{window.removeEventListener("resize",i),a.current&&cancelAnimationFrame(a.current);}},[s,o,f,c,u]),jsxRuntime.jsx("canvas",{ref:h,className:`w-full h-full ${g}`})}var M=y;exports.Threads=y;exports.default=M;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/threads/index.tsx"],"names":["Threads","lineCount","lineColor","lineWidth","speed","amplitude","className","canvasRef","useRef","animationIdRef","useEffect","canvas","ctx","resizeCanvas","lines","i","time","animate","line","x","wave","y","jsx","threads_default"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useRef } from \"react\";\r\n\r\ninterface ThreadsProps {\r\n lineCount?: number;\r\n lineColor?: string;\r\n lineWidth?: number;\r\n speed?: number;\r\n amplitude?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Threads({\r\n lineCount = 50,\r\n lineColor = \"rgba(255, 255, 255, 0.1)\",\r\n lineWidth = 1,\r\n speed = 0.5,\r\n amplitude = 100,\r\n className = \"\",\r\n}: ThreadsProps) {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const animationIdRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n const resizeCanvas = () => {\r\n canvas.width = canvas.offsetWidth;\r\n canvas.height = canvas.offsetHeight;\r\n };\r\n\r\n window.addEventListener(\"resize\", resizeCanvas);\r\n resizeCanvas();\r\n\r\n const lines: Array<{ y: number; offset: number; speed: number }> = [];\r\n\r\n for (let i = 0; i < lineCount; i++) {\r\n lines.push({\r\n y: (canvas.height / lineCount) * i,\r\n offset: Math.random() * Math.PI * 2,\r\n speed: 0.5 + Math.random() * speed,\r\n });\r\n }\r\n\r\n let time = 0;\r\n\r\n const animate = () => {\r\n if (!ctx || !canvas) return;\r\n\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n ctx.strokeStyle = lineColor;\r\n ctx.lineWidth = lineWidth;\r\n\r\n lines.forEach((line) => {\r\n ctx.beginPath();\r\n\r\n for (let x = 0; x <= canvas.width; x += 5) {\r\n const wave = Math.sin(x * 0.01 + time * line.speed + line.offset) * amplitude;\r\n const y = line.y + wave;\r\n\r\n if (x === 0) {\r\n ctx.moveTo(x, y);\r\n } else {\r\n ctx.lineTo(x, y);\r\n }\r\n }\r\n\r\n ctx.stroke();\r\n });\r\n\r\n time += 0.01;\r\n animationIdRef.current = requestAnimationFrame(animate);\r\n };\r\n\r\n animate();\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", resizeCanvas);\r\n if (animationIdRef.current) {\r\n cancelAnimationFrame(animationIdRef.current);\r\n }\r\n };\r\n }, [lineCount, lineColor, lineWidth, speed, amplitude]);\r\n\r\n return <canvas ref={canvasRef} className={`w-full h-full ${className}`} />;\r\n}\r\n\r\nexport default Threads;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useRef,useEffect}from'react';import {jsx}from'react/jsx-runtime';function y({lineCount:s=50,lineColor:o="rgba(255, 255, 255, 0.1)",lineWidth:f=1,speed:c=.5,amplitude:u=100,className:g=""}){let h=useRef(null),a=useRef(null);return useEffect(()=>{let e=h.current;if(!e)return;let t=e.getContext("2d");if(!t)return;let i=()=>{e.width=e.offsetWidth,e.height=e.offsetHeight;};window.addEventListener("resize",i),i();let m=[];for(let n=0;n<s;n++)m.push({y:e.height/s*n,offset:Math.random()*Math.PI*2,speed:.5+Math.random()*c});let l=0,d=()=>{!t||!e||(t.clearRect(0,0,e.width,e.height),t.strokeStyle=o,t.lineWidth=f,m.forEach(n=>{t.beginPath();for(let r=0;r<=e.width;r+=5){let p=Math.sin(r*.01+l*n.speed+n.offset)*u,b=n.y+p;r===0?t.moveTo(r,b):t.lineTo(r,b);}t.stroke();}),l+=.01,a.current=requestAnimationFrame(d));};return d(),()=>{window.removeEventListener("resize",i),a.current&&cancelAnimationFrame(a.current);}},[s,o,f,c,u]),jsx("canvas",{ref:h,className:`w-full h-full ${g}`})}var M=y;export{y as Threads,M as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/threads/index.tsx"],"names":["Threads","lineCount","lineColor","lineWidth","speed","amplitude","className","canvasRef","useRef","animationIdRef","useEffect","canvas","ctx","resizeCanvas","lines","i","time","animate","line","x","wave","y","jsx","threads_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useRef } from \"react\";\r\n\r\ninterface ThreadsProps {\r\n lineCount?: number;\r\n lineColor?: string;\r\n lineWidth?: number;\r\n speed?: number;\r\n amplitude?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Threads({\r\n lineCount = 50,\r\n lineColor = \"rgba(255, 255, 255, 0.1)\",\r\n lineWidth = 1,\r\n speed = 0.5,\r\n amplitude = 100,\r\n className = \"\",\r\n}: ThreadsProps) {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const animationIdRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n const resizeCanvas = () => {\r\n canvas.width = canvas.offsetWidth;\r\n canvas.height = canvas.offsetHeight;\r\n };\r\n\r\n window.addEventListener(\"resize\", resizeCanvas);\r\n resizeCanvas();\r\n\r\n const lines: Array<{ y: number; offset: number; speed: number }> = [];\r\n\r\n for (let i = 0; i < lineCount; i++) {\r\n lines.push({\r\n y: (canvas.height / lineCount) * i,\r\n offset: Math.random() * Math.PI * 2,\r\n speed: 0.5 + Math.random() * speed,\r\n });\r\n }\r\n\r\n let time = 0;\r\n\r\n const animate = () => {\r\n if (!ctx || !canvas) return;\r\n\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n ctx.strokeStyle = lineColor;\r\n ctx.lineWidth = lineWidth;\r\n\r\n lines.forEach((line) => {\r\n ctx.beginPath();\r\n\r\n for (let x = 0; x <= canvas.width; x += 5) {\r\n const wave = Math.sin(x * 0.01 + time * line.speed + line.offset) * amplitude;\r\n const y = line.y + wave;\r\n\r\n if (x === 0) {\r\n ctx.moveTo(x, y);\r\n } else {\r\n ctx.lineTo(x, y);\r\n }\r\n }\r\n\r\n ctx.stroke();\r\n });\r\n\r\n time += 0.01;\r\n animationIdRef.current = requestAnimationFrame(animate);\r\n };\r\n\r\n animate();\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", resizeCanvas);\r\n if (animationIdRef.current) {\r\n cancelAnimationFrame(animationIdRef.current);\r\n }\r\n };\r\n }, [lineCount, lineColor, lineWidth, speed, amplitude]);\r\n\r\n return <canvas ref={canvasRef} className={`w-full h-full ${className}`} />;\r\n}\r\n\r\nexport default Threads;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),jsxRuntime=require('react/jsx-runtime');function W({lineColor:h="black",backgroundColor:P="transparent",waveSpeedX:d=.0125,waveSpeedY:v=.005,waveAmpX:b=32,waveAmpY:w=16,xGap:s=10,yGap:o=32,friction:y=.925,tension:z=.005,maxCursorMove:N=100,style:S={},className:k=""}){let g=react.useRef(null),C=react.useRef(null),i=react.useRef(null);return react.useEffect(()=>{let e=C.current,M=g.current;if(!e||!M)return;let t=e.getContext("2d");if(!t)return;let c=0,a=()=>{let n=M.getBoundingClientRect();e.width=n.width,e.height=n.height;},p=()=>{if(!t||!e)return;t.clearRect(0,0,e.width,e.height),t.strokeStyle=h,t.lineWidth=1;let n=Math.ceil(e.width/s),L=Math.ceil(e.height/o);for(let l=0;l<=n;l++){t.beginPath();for(let r=0;r<=L;r++){let u=l*s,m=r*o,R=Math.sin(m*.01+c*d)*b,x=Math.cos(u*.01+c*v)*w;r===0?t.moveTo(u+R,m+x):t.lineTo(u+R,m+x);}t.stroke();}c+=1,i.current=requestAnimationFrame(p);};return a(),window.addEventListener("resize",a),p(),()=>{window.removeEventListener("resize",a),i.current!==null&&cancelAnimationFrame(i.current);}},[h,d,v,b,w,s,o]),jsxRuntime.jsx("div",{ref:g,className:`absolute inset-0 overflow-hidden ${k}`,style:{backgroundColor:P,...S},children:jsxRuntime.jsx("canvas",{ref:C,className:"w-full h-full"})})}var H=W;exports.Waves=W;exports.default=H;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/waves/index.tsx"],"names":["Waves","lineColor","backgroundColor","waveSpeedX","waveSpeedY","waveAmpX","waveAmpY","xGap","yGap","friction","tension","maxCursorMove","style","className","containerRef","useRef","canvasRef","frameIdRef","useEffect","canvas","container","ctx","time","resize","rect","draw","cols","rows","i","j","x","y","waveX","waveY","jsx","waves_default"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useRef, useEffect, CSSProperties } from \"react\";\r\n\r\ninterface WavesProps {\r\n lineColor?: string;\r\n backgroundColor?: string;\r\n waveSpeedX?: number;\r\n waveSpeedY?: number;\r\n waveAmpX?: number;\r\n waveAmpY?: number;\r\n xGap?: number;\r\n yGap?: number;\r\n friction?: number;\r\n tension?: number;\r\n maxCursorMove?: number;\r\n style?: CSSProperties;\r\n className?: string;\r\n}\r\n\r\nexport function Waves({\r\n lineColor = \"black\",\r\n backgroundColor = \"transparent\",\r\n waveSpeedX = 0.0125,\r\n waveSpeedY = 0.005,\r\n waveAmpX = 32,\r\n waveAmpY = 16,\r\n xGap = 10,\r\n yGap = 32,\r\n friction = 0.925,\r\n tension = 0.005,\r\n maxCursorMove = 100,\r\n style = {},\r\n className = \"\",\r\n}: WavesProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const frameIdRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n const container = containerRef.current;\r\n if (!canvas || !container) return;\r\n\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n let time = 0;\r\n\r\n const resize = () => {\r\n const rect = container.getBoundingClientRect();\r\n canvas.width = rect.width;\r\n canvas.height = rect.height;\r\n };\r\n\r\n const draw = () => {\r\n if (!ctx || !canvas) return;\r\n\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n ctx.strokeStyle = lineColor;\r\n ctx.lineWidth = 1;\r\n\r\n const cols = Math.ceil(canvas.width / xGap);\r\n const rows = Math.ceil(canvas.height / yGap);\r\n\r\n for (let i = 0; i <= cols; i++) {\r\n ctx.beginPath();\r\n for (let j = 0; j <= rows; j++) {\r\n const x = i * xGap;\r\n const y = j * yGap;\r\n const waveX = Math.sin(y * 0.01 + time * waveSpeedX) * waveAmpX;\r\n const waveY = Math.cos(x * 0.01 + time * waveSpeedY) * waveAmpY;\r\n\r\n if (j === 0) {\r\n ctx.moveTo(x + waveX, y + waveY);\r\n } else {\r\n ctx.lineTo(x + waveX, y + waveY);\r\n }\r\n }\r\n ctx.stroke();\r\n }\r\n\r\n time += 1;\r\n frameIdRef.current = requestAnimationFrame(draw);\r\n };\r\n\r\n resize();\r\n window.addEventListener(\"resize\", resize);\r\n draw();\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", resize);\r\n if (frameIdRef.current !== null) {\r\n cancelAnimationFrame(frameIdRef.current);\r\n }\r\n };\r\n }, [lineColor, waveSpeedX, waveSpeedY, waveAmpX, waveAmpY, xGap, yGap]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={`absolute inset-0 overflow-hidden ${className}`}\r\n style={{ backgroundColor, ...style }}\r\n >\r\n <canvas ref={canvasRef} className=\"w-full h-full\" />\r\n </div>\r\n );\r\n}\r\n\r\nexport default Waves;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useRef,useEffect}from'react';import {jsx}from'react/jsx-runtime';function W({lineColor:h="black",backgroundColor:P="transparent",waveSpeedX:d=.0125,waveSpeedY:v=.005,waveAmpX:b=32,waveAmpY:w=16,xGap:s=10,yGap:o=32,friction:y=.925,tension:z=.005,maxCursorMove:N=100,style:S={},className:k=""}){let g=useRef(null),C=useRef(null),i=useRef(null);return useEffect(()=>{let e=C.current,M=g.current;if(!e||!M)return;let t=e.getContext("2d");if(!t)return;let c=0,a=()=>{let n=M.getBoundingClientRect();e.width=n.width,e.height=n.height;},p=()=>{if(!t||!e)return;t.clearRect(0,0,e.width,e.height),t.strokeStyle=h,t.lineWidth=1;let n=Math.ceil(e.width/s),L=Math.ceil(e.height/o);for(let l=0;l<=n;l++){t.beginPath();for(let r=0;r<=L;r++){let u=l*s,m=r*o,R=Math.sin(m*.01+c*d)*b,x=Math.cos(u*.01+c*v)*w;r===0?t.moveTo(u+R,m+x):t.lineTo(u+R,m+x);}t.stroke();}c+=1,i.current=requestAnimationFrame(p);};return a(),window.addEventListener("resize",a),p(),()=>{window.removeEventListener("resize",a),i.current!==null&&cancelAnimationFrame(i.current);}},[h,d,v,b,w,s,o]),jsx("div",{ref:g,className:`absolute inset-0 overflow-hidden ${k}`,style:{backgroundColor:P,...S},children:jsx("canvas",{ref:C,className:"w-full h-full"})})}var H=W;export{W as Waves,H as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/waves/index.tsx"],"names":["Waves","lineColor","backgroundColor","waveSpeedX","waveSpeedY","waveAmpX","waveAmpY","xGap","yGap","friction","tension","maxCursorMove","style","className","containerRef","useRef","canvasRef","frameIdRef","useEffect","canvas","container","ctx","time","resize","rect","draw","cols","rows","i","j","x","y","waveX","waveY","jsx","waves_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useRef, useEffect, CSSProperties } from \"react\";\r\n\r\ninterface WavesProps {\r\n lineColor?: string;\r\n backgroundColor?: string;\r\n waveSpeedX?: number;\r\n waveSpeedY?: number;\r\n waveAmpX?: number;\r\n waveAmpY?: number;\r\n xGap?: number;\r\n yGap?: number;\r\n friction?: number;\r\n tension?: number;\r\n maxCursorMove?: number;\r\n style?: CSSProperties;\r\n className?: string;\r\n}\r\n\r\nexport function Waves({\r\n lineColor = \"black\",\r\n backgroundColor = \"transparent\",\r\n waveSpeedX = 0.0125,\r\n waveSpeedY = 0.005,\r\n waveAmpX = 32,\r\n waveAmpY = 16,\r\n xGap = 10,\r\n yGap = 32,\r\n friction = 0.925,\r\n tension = 0.005,\r\n maxCursorMove = 100,\r\n style = {},\r\n className = \"\",\r\n}: WavesProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const frameIdRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n const container = containerRef.current;\r\n if (!canvas || !container) return;\r\n\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n let time = 0;\r\n\r\n const resize = () => {\r\n const rect = container.getBoundingClientRect();\r\n canvas.width = rect.width;\r\n canvas.height = rect.height;\r\n };\r\n\r\n const draw = () => {\r\n if (!ctx || !canvas) return;\r\n\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n ctx.strokeStyle = lineColor;\r\n ctx.lineWidth = 1;\r\n\r\n const cols = Math.ceil(canvas.width / xGap);\r\n const rows = Math.ceil(canvas.height / yGap);\r\n\r\n for (let i = 0; i <= cols; i++) {\r\n ctx.beginPath();\r\n for (let j = 0; j <= rows; j++) {\r\n const x = i * xGap;\r\n const y = j * yGap;\r\n const waveX = Math.sin(y * 0.01 + time * waveSpeedX) * waveAmpX;\r\n const waveY = Math.cos(x * 0.01 + time * waveSpeedY) * waveAmpY;\r\n\r\n if (j === 0) {\r\n ctx.moveTo(x + waveX, y + waveY);\r\n } else {\r\n ctx.lineTo(x + waveX, y + waveY);\r\n }\r\n }\r\n ctx.stroke();\r\n }\r\n\r\n time += 1;\r\n frameIdRef.current = requestAnimationFrame(draw);\r\n };\r\n\r\n resize();\r\n window.addEventListener(\"resize\", resize);\r\n draw();\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", resize);\r\n if (frameIdRef.current !== null) {\r\n cancelAnimationFrame(frameIdRef.current);\r\n }\r\n };\r\n }, [lineColor, waveSpeedX, waveSpeedY, waveAmpX, waveAmpY, xGap, yGap]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={`absolute inset-0 overflow-hidden ${className}`}\r\n style={{ backgroundColor, ...style }}\r\n >\r\n <canvas ref={canvasRef} className=\"w-full h-full\" />\r\n </div>\r\n );\r\n}\r\n\r\nexport default Waves;\r\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bynana-ui",
3
- "version": "1.6.2",
4
- "description": "120+ Beautiful React UI components built with Tailwind CSS and Framer Motion",
3
+ "version": "1.7.0",
4
+ "description": "150+ Beautiful React UI components built with Tailwind CSS and Framer Motion",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
@@ -144,6 +144,30 @@
144
144
  "./stats-cards": { "import": "./dist/stats-cards/index.mjs", "require": "./dist/stats-cards/index.js", "types": "./dist/stats-cards/index.d.ts" },
145
145
  "./stats-grid": { "import": "./dist/stats-grid/index.mjs", "require": "./dist/stats-grid/index.js", "types": "./dist/stats-grid/index.d.ts" },
146
146
  "./bento-grid": { "import": "./dist/bento-grid/index.mjs", "require": "./dist/bento-grid/index.js", "types": "./dist/bento-grid/index.d.ts" },
147
+ "./aurora": { "import": "./dist/aurora/index.mjs", "require": "./dist/aurora/index.js", "types": "./dist/aurora/index.d.ts" },
148
+ "./threads": { "import": "./dist/threads/index.mjs", "require": "./dist/threads/index.js", "types": "./dist/threads/index.d.ts" },
149
+ "./squares": { "import": "./dist/squares/index.mjs", "require": "./dist/squares/index.js", "types": "./dist/squares/index.d.ts" },
150
+ "./waves": { "import": "./dist/waves/index.mjs", "require": "./dist/waves/index.js", "types": "./dist/waves/index.d.ts" },
151
+ "./hero-grid": { "import": "./dist/hero-grid/index.mjs", "require": "./dist/hero-grid/index.js", "types": "./dist/hero-grid/index.d.ts" },
152
+ "./hero-showcase": { "import": "./dist/hero-showcase/index.mjs", "require": "./dist/hero-showcase/index.js", "types": "./dist/hero-showcase/index.d.ts" },
153
+ "./testimonials-simple": { "import": "./dist/testimonials-simple/index.mjs", "require": "./dist/testimonials-simple/index.js", "types": "./dist/testimonials-simple/index.d.ts" },
154
+ "./testimonials-grid": { "import": "./dist/testimonials-grid/index.mjs", "require": "./dist/testimonials-grid/index.js", "types": "./dist/testimonials-grid/index.d.ts" },
155
+ "./pricing-modern": { "import": "./dist/pricing-modern/index.mjs", "require": "./dist/pricing-modern/index.js", "types": "./dist/pricing-modern/index.d.ts" },
156
+ "./footer-simple": { "import": "./dist/footer-simple/index.mjs", "require": "./dist/footer-simple/index.js", "types": "./dist/footer-simple/index.d.ts" },
157
+ "./footer-complex": { "import": "./dist/footer-complex/index.mjs", "require": "./dist/footer-complex/index.js", "types": "./dist/footer-complex/index.d.ts" },
158
+ "./logo-cloud": { "import": "./dist/logo-cloud/index.mjs", "require": "./dist/logo-cloud/index.js", "types": "./dist/logo-cloud/index.d.ts" },
159
+ "./faqs-accordion": { "import": "./dist/faqs-accordion/index.mjs", "require": "./dist/faqs-accordion/index.js", "types": "./dist/faqs-accordion/index.d.ts" },
160
+ "./faqs-grid": { "import": "./dist/faqs-grid/index.mjs", "require": "./dist/faqs-grid/index.js", "types": "./dist/faqs-grid/index.d.ts" },
161
+ "./team-carousel": { "import": "./dist/team-carousel/index.mjs", "require": "./dist/team-carousel/index.js", "types": "./dist/team-carousel/index.d.ts" },
162
+ "./job-listing": { "import": "./dist/job-listing/index.mjs", "require": "./dist/job-listing/index.js", "types": "./dist/job-listing/index.d.ts" },
163
+ "./elastic-search": { "import": "./dist/elastic-search/index.mjs", "require": "./dist/elastic-search/index.js", "types": "./dist/elastic-search/index.d.ts" },
164
+ "./action-search-bar": { "import": "./dist/action-search-bar/index.mjs", "require": "./dist/action-search-bar/index.js", "types": "./dist/action-search-bar/index.d.ts" },
165
+ "./ai-loading": { "import": "./dist/ai-loading/index.mjs", "require": "./dist/ai-loading/index.js", "types": "./dist/ai-loading/index.d.ts" },
166
+ "./ai-prompt": { "import": "./dist/ai-prompt/index.mjs", "require": "./dist/ai-prompt/index.js", "types": "./dist/ai-prompt/index.d.ts" },
167
+ "./ai-bar": { "import": "./dist/ai-bar/index.mjs", "require": "./dist/ai-bar/index.js", "types": "./dist/ai-bar/index.d.ts" },
168
+ "./scroll-reveal": { "import": "./dist/scroll-reveal/index.mjs", "require": "./dist/scroll-reveal/index.js", "types": "./dist/scroll-reveal/index.d.ts" },
169
+ "./scroll-float": { "import": "./dist/scroll-float/index.mjs", "require": "./dist/scroll-float/index.js", "types": "./dist/scroll-float/index.d.ts" },
170
+ "./scroll-stack": { "import": "./dist/scroll-stack/index.mjs", "require": "./dist/scroll-stack/index.js", "types": "./dist/scroll-stack/index.d.ts" },
147
171
  "./styles.css": "./dist/styles.css"
148
172
  },
149
173
  "files": ["dist", "README.md"],