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.
- package/dist/action-search-bar/index.js +17 -0
- package/dist/action-search-bar/index.js.map +1 -0
- package/dist/action-search-bar/index.mjs +17 -0
- package/dist/action-search-bar/index.mjs.map +1 -0
- package/dist/ai-bar/index.js +19 -0
- package/dist/ai-bar/index.js.map +1 -0
- package/dist/ai-bar/index.mjs +19 -0
- package/dist/ai-bar/index.mjs.map +1 -0
- package/dist/ai-loading/index.js +2 -0
- package/dist/ai-loading/index.js.map +1 -0
- package/dist/ai-loading/index.mjs +2 -0
- package/dist/ai-loading/index.mjs.map +1 -0
- package/dist/ai-prompt/index.js +17 -0
- package/dist/ai-prompt/index.js.map +1 -0
- package/dist/ai-prompt/index.mjs +17 -0
- package/dist/ai-prompt/index.mjs.map +1 -0
- package/dist/aurora/index.js +2 -0
- package/dist/aurora/index.js.map +1 -0
- package/dist/aurora/index.mjs +2 -0
- package/dist/aurora/index.mjs.map +1 -0
- package/dist/elastic-search/index.js +17 -0
- package/dist/elastic-search/index.js.map +1 -0
- package/dist/elastic-search/index.mjs +17 -0
- package/dist/elastic-search/index.mjs.map +1 -0
- package/dist/faqs-accordion/index.js +16 -0
- package/dist/faqs-accordion/index.js.map +1 -0
- package/dist/faqs-accordion/index.mjs +16 -0
- package/dist/faqs-accordion/index.mjs.map +1 -0
- package/dist/faqs-grid/index.js +2 -0
- package/dist/faqs-grid/index.js.map +1 -0
- package/dist/faqs-grid/index.mjs +2 -0
- package/dist/faqs-grid/index.mjs.map +1 -0
- package/dist/footer-complex/index.js +2 -0
- package/dist/footer-complex/index.js.map +1 -0
- package/dist/footer-complex/index.mjs +2 -0
- package/dist/footer-complex/index.mjs.map +1 -0
- package/dist/footer-simple/index.js +2 -0
- package/dist/footer-simple/index.js.map +1 -0
- package/dist/footer-simple/index.mjs +2 -0
- package/dist/footer-simple/index.mjs.map +1 -0
- package/dist/hero-grid/index.js +16 -0
- package/dist/hero-grid/index.js.map +1 -0
- package/dist/hero-grid/index.mjs +16 -0
- package/dist/hero-grid/index.mjs.map +1 -0
- package/dist/hero-showcase/index.js +17 -0
- package/dist/hero-showcase/index.js.map +1 -0
- package/dist/hero-showcase/index.mjs +17 -0
- package/dist/hero-showcase/index.mjs.map +1 -0
- package/dist/index.js +55 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +55 -13
- package/dist/index.mjs.map +1 -1
- package/dist/job-listing/index.js +19 -0
- package/dist/job-listing/index.js.map +1 -0
- package/dist/job-listing/index.mjs +19 -0
- package/dist/job-listing/index.mjs.map +1 -0
- package/dist/logo-cloud/index.js +14 -0
- package/dist/logo-cloud/index.js.map +1 -0
- package/dist/logo-cloud/index.mjs +14 -0
- package/dist/logo-cloud/index.mjs.map +1 -0
- package/dist/pricing-modern/index.js +16 -0
- package/dist/pricing-modern/index.js.map +1 -0
- package/dist/pricing-modern/index.mjs +16 -0
- package/dist/pricing-modern/index.mjs.map +1 -0
- package/dist/scroll-float/index.js +2 -0
- package/dist/scroll-float/index.js.map +1 -0
- package/dist/scroll-float/index.mjs +2 -0
- package/dist/scroll-float/index.mjs.map +1 -0
- package/dist/scroll-reveal/index.js +2 -0
- package/dist/scroll-reveal/index.js.map +1 -0
- package/dist/scroll-reveal/index.mjs +2 -0
- package/dist/scroll-reveal/index.mjs.map +1 -0
- package/dist/scroll-stack/index.js +2 -0
- package/dist/scroll-stack/index.js.map +1 -0
- package/dist/scroll-stack/index.mjs +2 -0
- package/dist/scroll-stack/index.mjs.map +1 -0
- package/dist/squares/index.js +2 -0
- package/dist/squares/index.js.map +1 -0
- package/dist/squares/index.mjs +2 -0
- package/dist/squares/index.mjs.map +1 -0
- package/dist/team-carousel/index.js +17 -0
- package/dist/team-carousel/index.js.map +1 -0
- package/dist/team-carousel/index.mjs +17 -0
- package/dist/team-carousel/index.mjs.map +1 -0
- package/dist/testimonials-grid/index.js +17 -0
- package/dist/testimonials-grid/index.js.map +1 -0
- package/dist/testimonials-grid/index.mjs +17 -0
- package/dist/testimonials-grid/index.mjs.map +1 -0
- package/dist/testimonials-simple/index.js +3 -0
- package/dist/testimonials-simple/index.js.map +1 -0
- package/dist/testimonials-simple/index.mjs +3 -0
- package/dist/testimonials-simple/index.mjs.map +1 -0
- package/dist/threads/index.js +2 -0
- package/dist/threads/index.js.map +1 -0
- package/dist/threads/index.mjs +2 -0
- package/dist/threads/index.mjs.map +1 -0
- package/dist/waves/index.js +2 -0
- package/dist/waves/index.js.map +1 -0
- package/dist/waves/index.mjs +2 -0
- package/dist/waves/index.mjs.map +1 -0
- package/package.json +26 -2
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),jsxRuntime=require('react/jsx-runtime');var k=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),F=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,u,o)=>o?o.toUpperCase():u.toLowerCase()),h=t=>{let e=F(t);return e.charAt(0).toUpperCase()+e.slice(1)},x=(...t)=>t.filter((e,u,o)=>!!e&&e.trim()!==""&&o.indexOf(e)===u).join(" ").trim(),w=t=>{for(let e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return true};var P={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 B=react.forwardRef(({color:t="currentColor",size:e=24,strokeWidth:u=2,absoluteStrokeWidth:o,className:s="",children:d,iconNode:S,...f},i)=>react.createElement("svg",{ref:i,...P,width:e,height:e,stroke:t,strokeWidth:o?Number(u)*24/Number(e):u,className:x("lucide",s),...!d&&!w(f)&&{"aria-hidden":"true"},...f},[...S.map(([c,I])=>react.createElement(c,I)),...Array.isArray(d)?d:[d]]));var C=(t,e)=>{let u=react.forwardRef(({className:o,...s},d)=>react.createElement(B,{ref:d,iconNode:e,className:x(`lucide-${k(h(t))}`,`lucide-${t}`,o),...s}));return u.displayName=h(t),u};var q=[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]],p=C("command",q);var y=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],L=C("search",y);function O({placeholder:t="Type a command or search...",actions:e=[],onSearch:u,className:o=""}){let[s,d]=react.useState(""),[S,f]=react.useState(false),[i,c]=react.useState(0),I=react.useRef(null),n=e.filter(a=>a.label.toLowerCase().includes(s.toLowerCase()));react.useEffect(()=>{let a=l=>{(l.metaKey||l.ctrlKey)&&l.key==="k"&&(l.preventDefault(),f(true),I.current?.focus());};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);let D=a=>{a.key==="ArrowDown"?(a.preventDefault(),c(l=>Math.min(l+1,n.length-1))):a.key==="ArrowUp"?(a.preventDefault(),c(l=>Math.max(l-1,0))):a.key==="Enter"&&n[i]?(a.preventDefault(),n[i].onSelect?.(),f(false),d("")):a.key==="Escape"&&f(false);};return jsxRuntime.jsxs("div",{className:`relative w-full max-w-lg ${o}`,children:[jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx(L,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),jsxRuntime.jsx("input",{ref:I,type:"text",value:s,onChange:a=>{d(a.target.value),f(true),c(0),u?.(a.target.value);},onFocus:()=>f(true),onKeyDown:D,placeholder:t,className:"w-full rounded-lg border bg-background py-2 pl-10 pr-16 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20"}),jsxRuntime.jsxs("div",{className:"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1 text-xs text-muted-foreground",children:[jsxRuntime.jsx(p,{className:"h-3 w-3"}),jsxRuntime.jsx("span",{children:"K"})]})]}),S&&n.length>0&&jsxRuntime.jsx("div",{className:"absolute top-full left-0 right-0 mt-2 rounded-lg border bg-background shadow-lg z-50 overflow-hidden",children:n.map((a,l)=>jsxRuntime.jsxs("button",{onClick:()=>{a.onSelect?.(),f(false),d("");},className:`w-full px-4 py-3 text-left flex items-center justify-between hover:bg-accent ${l===i?"bg-accent":""}`,children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-3",children:[a.icon,jsxRuntime.jsx("span",{children:a.label})]}),a.shortcut&&jsxRuntime.jsx("span",{className:"text-xs text-muted-foreground",children:a.shortcut})]},a.id))})]})}var ua=O;/*! 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/command.js:
|
|
8
|
+
lucide-react/dist/esm/icons/search.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.ActionSearchBar=O;exports.default=ua;//# 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/command.ts","../../../../node_modules/lucide-react/src/icons/search.ts","../../src/action-search-bar/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","Command","Search","ActionSearchBar","placeholder","actions","onSearch","query","setQuery","useState","isOpen","setIsOpen","selectedIndex","setSelectedIndex","inputRef","useRef","filteredActions","action","useEffect","handleKeyDown","e","prev","jsxs","jsx","action_search_bar_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 = [\n [\n 'path',\n { d: 'M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3', key: '11bfej' },\n ],\n];\n\n/**\n * @component @name Command\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/command\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 Command = createLucideIcon('command', __iconNode);\n\nexport default Command;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm21 21-4.34-4.34', key: '14j7rj' }],\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n];\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/search\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 Search = createLucideIcon('search', __iconNode);\n\nexport default Search;\n","\"use client\";\r\n\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport { Search, Command, ArrowRight } from \"lucide-react\";\r\n\r\ninterface Action {\r\n id: string;\r\n label: string;\r\n shortcut?: string;\r\n icon?: React.ReactNode;\r\n onSelect?: () => void;\r\n}\r\n\r\ninterface ActionSearchBarProps {\r\n placeholder?: string;\r\n actions?: Action[];\r\n onSearch?: (query: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function ActionSearchBar({\r\n placeholder = \"Type a command or search...\",\r\n actions = [],\r\n onSearch,\r\n className = \"\",\r\n}: ActionSearchBarProps) {\r\n const [query, setQuery] = useState(\"\");\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const filteredActions = actions.filter((action) =>\r\n action.label.toLowerCase().includes(query.toLowerCase())\r\n );\r\n\r\n useEffect(() => {\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\r\n e.preventDefault();\r\n setIsOpen(true);\r\n inputRef.current?.focus();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleKeyDown);\r\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\r\n }, []);\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n setSelectedIndex((prev) => Math.min(prev + 1, filteredActions.length - 1));\r\n } else if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n setSelectedIndex((prev) => Math.max(prev - 1, 0));\r\n } else if (e.key === \"Enter\" && filteredActions[selectedIndex]) {\r\n e.preventDefault();\r\n filteredActions[selectedIndex].onSelect?.();\r\n setIsOpen(false);\r\n setQuery(\"\");\r\n } else if (e.key === \"Escape\") {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`relative w-full max-w-lg ${className}`}>\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n value={query}\r\n onChange={(e) => {\r\n setQuery(e.target.value);\r\n setIsOpen(true);\r\n setSelectedIndex(0);\r\n onSearch?.(e.target.value);\r\n }}\r\n onFocus={() => setIsOpen(true)}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n className=\"w-full rounded-lg border bg-background py-2 pl-10 pr-16 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20\"\r\n />\r\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1 text-xs text-muted-foreground\">\r\n <Command className=\"h-3 w-3\" />\r\n <span>K</span>\r\n </div>\r\n </div>\r\n\r\n {isOpen && filteredActions.length > 0 && (\r\n <div className=\"absolute top-full left-0 right-0 mt-2 rounded-lg border bg-background shadow-lg z-50 overflow-hidden\">\r\n {filteredActions.map((action, index) => (\r\n <button\r\n key={action.id}\r\n onClick={() => {\r\n action.onSelect?.();\r\n setIsOpen(false);\r\n setQuery(\"\");\r\n }}\r\n className={`w-full px-4 py-3 text-left flex items-center justify-between hover:bg-accent ${\r\n index === selectedIndex ? \"bg-accent\" : \"\"\r\n }`}\r\n >\r\n <div className=\"flex items-center gap-3\">\r\n {action.icon}\r\n <span>{action.label}</span>\r\n </div>\r\n {action.shortcut && (\r\n <span className=\"text-xs text-muted-foreground\">{action.shortcut}</span>\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ActionSearchBar;\r\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {forwardRef,createElement,useState,useRef,useEffect}from'react';import {jsxs,jsx}from'react/jsx-runtime';var k=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),F=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,u,o)=>o?o.toUpperCase():u.toLowerCase()),h=t=>{let e=F(t);return e.charAt(0).toUpperCase()+e.slice(1)},x=(...t)=>t.filter((e,u,o)=>!!e&&e.trim()!==""&&o.indexOf(e)===u).join(" ").trim(),w=t=>{for(let e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return true};var P={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 B=forwardRef(({color:t="currentColor",size:e=24,strokeWidth:u=2,absoluteStrokeWidth:o,className:s="",children:d,iconNode:S,...f},i)=>createElement("svg",{ref:i,...P,width:e,height:e,stroke:t,strokeWidth:o?Number(u)*24/Number(e):u,className:x("lucide",s),...!d&&!w(f)&&{"aria-hidden":"true"},...f},[...S.map(([c,I])=>createElement(c,I)),...Array.isArray(d)?d:[d]]));var C=(t,e)=>{let u=forwardRef(({className:o,...s},d)=>createElement(B,{ref:d,iconNode:e,className:x(`lucide-${k(h(t))}`,`lucide-${t}`,o),...s}));return u.displayName=h(t),u};var q=[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]],p=C("command",q);var y=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],L=C("search",y);function O({placeholder:t="Type a command or search...",actions:e=[],onSearch:u,className:o=""}){let[s,d]=useState(""),[S,f]=useState(false),[i,c]=useState(0),I=useRef(null),n=e.filter(a=>a.label.toLowerCase().includes(s.toLowerCase()));useEffect(()=>{let a=l=>{(l.metaKey||l.ctrlKey)&&l.key==="k"&&(l.preventDefault(),f(true),I.current?.focus());};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[]);let D=a=>{a.key==="ArrowDown"?(a.preventDefault(),c(l=>Math.min(l+1,n.length-1))):a.key==="ArrowUp"?(a.preventDefault(),c(l=>Math.max(l-1,0))):a.key==="Enter"&&n[i]?(a.preventDefault(),n[i].onSelect?.(),f(false),d("")):a.key==="Escape"&&f(false);};return jsxs("div",{className:`relative w-full max-w-lg ${o}`,children:[jsxs("div",{className:"relative",children:[jsx(L,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),jsx("input",{ref:I,type:"text",value:s,onChange:a=>{d(a.target.value),f(true),c(0),u?.(a.target.value);},onFocus:()=>f(true),onKeyDown:D,placeholder:t,className:"w-full rounded-lg border bg-background py-2 pl-10 pr-16 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20"}),jsxs("div",{className:"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1 text-xs text-muted-foreground",children:[jsx(p,{className:"h-3 w-3"}),jsx("span",{children:"K"})]})]}),S&&n.length>0&&jsx("div",{className:"absolute top-full left-0 right-0 mt-2 rounded-lg border bg-background shadow-lg z-50 overflow-hidden",children:n.map((a,l)=>jsxs("button",{onClick:()=>{a.onSelect?.(),f(false),d("");},className:`w-full px-4 py-3 text-left flex items-center justify-between hover:bg-accent ${l===i?"bg-accent":""}`,children:[jsxs("div",{className:"flex items-center gap-3",children:[a.icon,jsx("span",{children:a.label})]}),a.shortcut&&jsx("span",{className:"text-xs text-muted-foreground",children:a.shortcut})]},a.id))})]})}var ua=O;/*! 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/command.js:
|
|
8
|
+
lucide-react/dist/esm/icons/search.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{O as ActionSearchBar,ua 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/command.ts","../../../../node_modules/lucide-react/src/icons/search.ts","../../src/action-search-bar/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","Command","Search","ActionSearchBar","placeholder","actions","onSearch","query","setQuery","useState","isOpen","setIsOpen","selectedIndex","setSelectedIndex","inputRef","useRef","filteredActions","action","useEffect","handleKeyDown","e","prev","jsxs","jsx","action_search_bar_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 = [\n [\n 'path',\n { d: 'M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3', key: '11bfej' },\n ],\n];\n\n/**\n * @component @name Command\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/command\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 Command = createLucideIcon('command', __iconNode);\n\nexport default Command;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm21 21-4.34-4.34', key: '14j7rj' }],\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n];\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/search\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 Search = createLucideIcon('search', __iconNode);\n\nexport default Search;\n","\"use client\";\r\n\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport { Search, Command, ArrowRight } from \"lucide-react\";\r\n\r\ninterface Action {\r\n id: string;\r\n label: string;\r\n shortcut?: string;\r\n icon?: React.ReactNode;\r\n onSelect?: () => void;\r\n}\r\n\r\ninterface ActionSearchBarProps {\r\n placeholder?: string;\r\n actions?: Action[];\r\n onSearch?: (query: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function ActionSearchBar({\r\n placeholder = \"Type a command or search...\",\r\n actions = [],\r\n onSearch,\r\n className = \"\",\r\n}: ActionSearchBarProps) {\r\n const [query, setQuery] = useState(\"\");\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const filteredActions = actions.filter((action) =>\r\n action.label.toLowerCase().includes(query.toLowerCase())\r\n );\r\n\r\n useEffect(() => {\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\r\n e.preventDefault();\r\n setIsOpen(true);\r\n inputRef.current?.focus();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleKeyDown);\r\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\r\n }, []);\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n setSelectedIndex((prev) => Math.min(prev + 1, filteredActions.length - 1));\r\n } else if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n setSelectedIndex((prev) => Math.max(prev - 1, 0));\r\n } else if (e.key === \"Enter\" && filteredActions[selectedIndex]) {\r\n e.preventDefault();\r\n filteredActions[selectedIndex].onSelect?.();\r\n setIsOpen(false);\r\n setQuery(\"\");\r\n } else if (e.key === \"Escape\") {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`relative w-full max-w-lg ${className}`}>\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n value={query}\r\n onChange={(e) => {\r\n setQuery(e.target.value);\r\n setIsOpen(true);\r\n setSelectedIndex(0);\r\n onSearch?.(e.target.value);\r\n }}\r\n onFocus={() => setIsOpen(true)}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n className=\"w-full rounded-lg border bg-background py-2 pl-10 pr-16 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20\"\r\n />\r\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1 text-xs text-muted-foreground\">\r\n <Command className=\"h-3 w-3\" />\r\n <span>K</span>\r\n </div>\r\n </div>\r\n\r\n {isOpen && filteredActions.length > 0 && (\r\n <div className=\"absolute top-full left-0 right-0 mt-2 rounded-lg border bg-background shadow-lg z-50 overflow-hidden\">\r\n {filteredActions.map((action, index) => (\r\n <button\r\n key={action.id}\r\n onClick={() => {\r\n action.onSelect?.();\r\n setIsOpen(false);\r\n setQuery(\"\");\r\n }}\r\n className={`w-full px-4 py-3 text-left flex items-center justify-between hover:bg-accent ${\r\n index === selectedIndex ? \"bg-accent\" : \"\"\r\n }`}\r\n >\r\n <div className=\"flex items-center gap-3\">\r\n {action.icon}\r\n <span>{action.label}</span>\r\n </div>\r\n {action.shortcut && (\r\n <span className=\"text-xs text-muted-foreground\">{action.shortcut}</span>\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ActionSearchBar;\r\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),jsxRuntime=require('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,t,o)=>o?o.toUpperCase():t.toLowerCase()),C=e=>{let a=D(e);return a.charAt(0).toUpperCase()+a.slice(1)},m=(...e)=>e.filter((a,t,o)=>!!a&&a.trim()!==""&&o.indexOf(a)===t).join(" ").trim(),g=e=>{for(let a in e)if(a.startsWith("aria-")||a==="role"||a==="title")return true};var k={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=react.forwardRef(({color:e="currentColor",size:a=24,strokeWidth:t=2,absoluteStrokeWidth:o,className:r="",children:u,iconNode:n,...p},L)=>react.createElement("svg",{ref:L,...k,width:a,height:a,stroke:e,strokeWidth:o?Number(t)*24/Number(a):t,className:m("lucide",r),...!u&&!g(p)&&{"aria-hidden":"true"},...p},[...n.map(([I,S])=>react.createElement(I,S)),...Array.isArray(u)?u:[u]]));var d=(e,a)=>{let t=react.forwardRef(({className:o,...r},u)=>react.createElement(P,{ref:u,iconNode:a,className:m(`lucide-${h(C(e))}`,`lucide-${e}`,o),...r}));return t.displayName=C(e),t};var T=[["path",{d:"M12 19v3",key:"npa21l"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3",key:"s6n7sd"}]],s=d("mic",T);var q=[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",key:"1miecu"}]],i=d("paperclip",q);var y=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],c=d("send",y);var b=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],l=d("sparkles",b);function H({placeholder:e="Ask me anything...",onSubmit:a,showMic:t=true,showAttach:o=true,className:r=""}){let[u,n]=react.useState(""),[p,L]=react.useState(false),I=react.useRef(null);return jsxRuntime.jsxs("form",{onSubmit:x=>{x.preventDefault(),u.trim()&&a&&(a(u.trim()),n(""));},className:`relative flex items-center gap-2 rounded-full border bg-background px-4 py-2 transition-all ${p?"border-primary ring-2 ring-primary/20":""} ${r}`,children:[jsxRuntime.jsx(l,{className:"h-5 w-5 text-primary"}),jsxRuntime.jsx("input",{ref:I,type:"text",value:u,onChange:x=>n(x.target.value),onFocus:()=>L(true),onBlur:()=>L(false),placeholder:e,className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"}),jsxRuntime.jsxs("div",{className:"flex items-center gap-1",children:[o&&jsxRuntime.jsx("button",{type:"button",className:"rounded-full p-2 hover:bg-accent text-muted-foreground hover:text-foreground",children:jsxRuntime.jsx(i,{className:"h-4 w-4"})}),t&&jsxRuntime.jsx("button",{type:"button",className:"rounded-full p-2 hover:bg-accent text-muted-foreground hover:text-foreground",children:jsxRuntime.jsx(s,{className:"h-4 w-4"})}),jsxRuntime.jsx("button",{type:"submit",disabled:!u.trim(),className:"rounded-full bg-primary p-2 text-primary-foreground hover:bg-primary/90 disabled:opacity-50",children:jsxRuntime.jsx(c,{className:"h-4 w-4"})})]})]})}var sa=H;/*! 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/mic.js:
|
|
8
|
+
lucide-react/dist/esm/icons/paperclip.js:
|
|
9
|
+
lucide-react/dist/esm/icons/send.js:
|
|
10
|
+
lucide-react/dist/esm/icons/sparkles.js:
|
|
11
|
+
lucide-react/dist/esm/lucide-react.js:
|
|
12
|
+
(**
|
|
13
|
+
* @license lucide-react v0.545.0 - ISC
|
|
14
|
+
*
|
|
15
|
+
* This source code is licensed under the ISC license.
|
|
16
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
17
|
+
*)
|
|
18
|
+
*/exports.AIBar=H;exports.default=sa;//# sourceMappingURL=index.js.map
|
|
19
|
+
//# 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/mic.ts","../../../../node_modules/lucide-react/src/icons/paperclip.ts","../../../../node_modules/lucide-react/src/icons/send.ts","../../../../node_modules/lucide-react/src/icons/sparkles.ts","../../src/ai-bar/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","Mic","Paperclip","Send","Sparkles","AIBar","placeholder","onSubmit","showMic","showAttach","value","setValue","useState","isFocused","setIsFocused","inputRef","useRef","jsxs","e","jsx","ai_bar_default"],"mappings":"yIAQO,IAAMA,CAAAA,CAAeC,CAAAA,EAC1BA,CAAAA,CAAO,OAAA,CAAQ,oBAAA,CAAsB,OAAO,EAAE,WAAA,EAAA,CAQnCC,CAAAA,CAAiCD,CAAAA,EAC5CA,CAAAA,CAAO,OAAA,CAAQ,uBAAA,CAAyB,CAACE,EAAOC,CAAAA,CAAIC,CAAAA,GAClDA,CAAAA,CAAKA,CAAAA,CAAG,WAAA,EAAA,CAAgBD,CAAAA,CAAG,WAAA,EAC7B,CAAA,CAQWE,CAAAA,CAAkCL,CAAAA,EAAgC,CAC7E,IAAMM,CAAAA,CAAYL,CAAAA,CAAYD,CAAM,EAEpC,OAAQM,CAAAA,CAAU,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAA,CAAgBA,CAAAA,CAAU,MAAM,CAAC,CAC/D,CAAA,CAQaC,CAAAA,CAAe,CAAA,GAA2CC,CAAAA,GACrEA,CAAAA,CACG,MAAA,CAAO,CAACC,CAAAA,CAAWC,CAAAA,CAAOC,CAAAA,GAEvB,CAAA,CAAQF,CAAAA,EACPA,CAAAA,CAAqB,IAAA,EAAA,GAAW,IACjCE,CAAAA,CAAM,OAAA,CAAQF,CAAS,CAAA,GAAMC,CAEhC,CAAA,CACA,IAAA,CAAK,GAAG,EACR,IAAA,EAAA,CAgBQE,CAAAA,CAAeC,CAAAA,EAA+B,CACzD,IAAA,IAAWC,CAAAA,IAAQD,CAAAA,CACjB,GAAIC,CAAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAKA,CAAAA,GAAS,MAAA,EAAUA,CAAAA,GAAS,OAAA,CAC1D,OAAO,KAGb,CAAA,CCxEA,IAAAC,CAAAA,CAAe,CACb,KAAA,CAAO,4BAAA,CACP,MAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,OAAA,CAAS,WAAA,CACT,IAAA,CAAM,MAAA,CACN,MAAA,CAAQ,eACR,WAAA,CAAa,CAAA,CACb,aAAA,CAAe,OAAA,CACf,cAAA,CAAgB,OAClB,CAAA,CCcA,IAAMC,EAAOC,gBAAAA,CACX,CACE,CACE,KAAA,CAAAC,CAAAA,CAAQ,cAAA,CACR,IAAA,CAAAC,CAAAA,CAAO,GACP,WAAA,CAAAC,CAAAA,CAAc,CAAA,CACd,mBAAA,CAAAC,CAAAA,CACA,SAAA,CAAAZ,CAAAA,CAAY,EAAA,CACZ,SAAAa,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,GAAGC,CAAA,CAAA,CAELC,CAAAA,GAEAC,mBAAAA,CACE,MACA,CACE,GAAA,CAAAD,CAAAA,CACA,GAAGV,CAAAA,CACH,KAAA,CAAOI,CAAAA,CACP,MAAA,CAAQA,EACR,MAAA,CAAQD,CAAAA,CACR,WAAA,CAAaG,CAAAA,CAAuB,MAAA,CAAOD,CAAW,CAAA,CAAI,EAAA,CAAM,OAAOD,CAAI,CAAA,CAAIC,CAAAA,CAC/E,SAAA,CAAWb,CAAAA,CAAa,QAAA,CAAUE,CAAS,CAAA,CAC3C,GAAI,CAACa,CAAAA,EAAY,CAACV,CAAAA,CAAYY,CAAI,CAAA,EAAK,CAAE,aAAA,CAAe,MAAA,CAAA,CACxD,GAAGA,CAAA,CAAA,CAEL,CACE,GAAGD,CAAAA,CAAS,GAAA,CAAI,CAAC,CAACI,CAAAA,CAAKC,CAAK,CAAA,GAAMF,mBAAAA,CAAcC,CAAAA,CAAKC,CAAK,CAAC,EAC3D,GAAI,KAAA,CAAM,OAAA,CAAQN,CAAQ,CAAA,CAAIA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CACpD,CAEN,CAAA,CC7CA,IAAMO,CAAAA,CAAmB,CAACC,CAAAA,CAAkBP,CAAAA,GAAuB,CACjE,IAAMQ,CAAAA,CAAYd,gBAAAA,CAAuC,CAAC,CAAE,SAAA,CAAAR,CAAAA,CAAW,GAAGI,CAAA,CAAA,CAASY,CAAAA,GACjFC,mBAAAA,CAAcV,CAAAA,CAAM,CAClB,GAAA,CAAAS,CAAAA,CACA,QAAA,CAAAF,EACA,SAAA,CAAWhB,CAAAA,CACT,CAAA,OAAA,EAAUR,CAAAA,CAAYM,CAAAA,CAAayB,CAAQ,CAAC,CAAC,GAC7C,CAAA,OAAA,EAAUA,CAAQ,CAAA,CAAA,CAClBrB,CAAA,CAAA,CAEF,GAAGI,CAAA,CACJ,CAAA,CAAA,CAGH,OAAAkB,CAAAA,CAAU,WAAA,CAAc1B,CAAAA,CAAayB,CAAQ,CAAA,CAEtCC,CACT,ECzBO,IAAMC,CAAAA,CAAuB,CAClC,CAAC,MAAA,CAAQ,CAAE,CAAA,CAAG,UAAA,CAAY,IAAK,QAAA,CAAU,CAAA,CACzC,CAAC,MAAA,CAAQ,CAAE,CAAA,CAAG,4BAAA,CAA8B,IAAK,QAAA,CAAU,CAAA,CAC3D,CAAC,MAAA,CAAQ,CAAE,CAAA,CAAG,GAAA,CAAK,EAAG,GAAA,CAAK,KAAA,CAAO,GAAA,CAAK,MAAA,CAAQ,IAAA,CAAM,EAAA,CAAI,GAAA,CAAK,GAAA,CAAK,QAAA,CAAU,CAC/E,CAAA,CAaMC,CAAAA,CAAMJ,CAAAA,CAAiB,KAAA,CAAOG,CAAU,CAAA,CCjBvC,IAAMA,CAAAA,CAAuB,CAClC,CACE,MAAA,CACA,CACE,CAAA,CAAG,0HAAA,CACH,GAAA,CAAK,QAAA,CACP,CAEJ,CAAA,CAaME,CAAAA,CAAYL,CAAAA,CAAiB,WAAA,CAAaG,CAAU,CAAA,CCrBnD,IAAMA,CAAAA,CAAuB,CAClC,CACE,MAAA,CACA,CACE,CAAA,CAAG,iIAAA,CACH,GAAA,CAAK,QAAA,CACP,CAAA,CAEF,CAAC,MAAA,CAAQ,CAAE,CAAA,CAAG,4BAAA,CAA8B,GAAA,CAAK,QAAA,CAAU,CAC7D,CAAA,CAaMG,CAAAA,CAAON,CAAAA,CAAiB,MAAA,CAAQG,CAAU,CAAA,CCtBzC,IAAMA,CAAAA,CAAuB,CAClC,CACE,MAAA,CACA,CACE,CAAA,CAAG,wQAAA,CACH,GAAA,CAAK,QAAA,CACP,CAAA,CAEF,CAAC,MAAA,CAAQ,CAAE,CAAA,CAAG,SAAA,CAAW,GAAA,CAAK,QAAA,CAAU,CAAA,CACxC,CAAC,MAAA,CAAQ,CAAE,CAAA,CAAG,UAAA,CAAY,GAAA,CAAK,QAAA,CAAU,CAAA,CACzC,CAAC,QAAA,CAAU,CAAE,EAAA,CAAI,GAAA,CAAK,EAAA,CAAI,KAAM,CAAA,CAAG,GAAA,CAAK,GAAA,CAAK,QAAA,CAAU,CACzD,CAAA,CAaMI,CAAAA,CAAWP,EAAiB,UAAA,CAAYG,CAAU,CAAA,CCdjD,SAASK,CAAAA,CAAM,CACpB,WAAA,CAAAC,CAAAA,CAAc,oBAAA,CACd,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,EAAU,IAAA,CACV,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,SAAA,CAAAhC,CAAAA,CAAY,EACd,CAAA,CAAe,CACb,GAAM,CAACiC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,cAAAA,CAAS,EAAE,CAAA,CAC/B,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIF,cAAAA,CAAS,KAAK,CAAA,CAC1CG,CAAAA,CAAWC,YAAAA,CAAyB,IAAI,CAAA,CAU9C,OACEC,eAAAA,CAAC,MAAA,CAAA,CACC,QAAA,CAVkBC,CAAAA,EAAuB,CAC3CA,CAAAA,CAAE,gBAAe,CACbR,CAAAA,CAAM,IAAA,EAAK,EAAKH,CAAAA,GAClBA,CAAAA,CAASG,CAAAA,CAAM,IAAA,EAAM,CAAA,CACrBC,CAAAA,CAAS,EAAE,CAAA,EAEf,CAAA,CAKI,SAAA,CAAW,CAAA,4FAAA,EACTE,CAAAA,CAAY,wCAA0C,EACxD,CAAA,CAAA,EAAIpC,CAAS,CAAA,CAAA,CAEb,QAAA,CAAA,CAAA0C,cAAAA,CAACf,CAAAA,CAAA,CAAS,UAAU,sBAAA,CAAuB,CAAA,CAE3Ce,cAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKJ,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,MAAOL,CAAAA,CACP,QAAA,CAAWQ,CAAAA,EAAMP,CAAAA,CAASO,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACxC,QAAS,IAAMJ,CAAAA,CAAa,IAAI,CAAA,CAChC,MAAA,CAAQ,IAAMA,CAAAA,CAAa,KAAK,EAChC,WAAA,CAAaR,CAAAA,CACb,SAAA,CAAU,8EAAA,CACZ,CAAA,CAEAW,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACZ,QAAA,CAAA,CAAAR,CAAAA,EACCU,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,SAAA,CAAU,8EAAA,CAEV,SAAAA,cAAAA,CAACjB,CAAAA,CAAA,CAAU,SAAA,CAAU,SAAA,CAAU,CAAA,CACjC,CAAA,CAGDM,CAAAA,EACCW,eAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,SAAA,CAAU,8EAAA,CAEV,QAAA,CAAAA,cAAAA,CAAClB,CAAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,CAAA,CAC3B,CAAA,CAGFkB,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,SAAU,CAACT,CAAAA,CAAM,IAAA,EAAK,CACtB,SAAA,CAAU,6FAAA,CAEV,QAAA,CAAAS,cAAAA,CAAChB,EAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAA,CAC5B,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,KAEOiB,EAAAA,CAAQf","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 = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2', key: '1vc78b' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3', key: 's6n7sd' }],\n];\n\n/**\n * @component @name Mic\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/mic\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 Mic = createLucideIcon('mic', __iconNode);\n\nexport default Mic;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551',\n key: '1miecu',\n },\n ],\n];\n\n/**\n * @component @name Paperclip\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/paperclip\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 Paperclip = createLucideIcon('paperclip', __iconNode);\n\nexport default Paperclip;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z',\n key: '1ffxy3',\n },\n ],\n ['path', { d: 'm21.854 2.147-10.94 10.939', key: '12cjpa' }],\n];\n\n/**\n * @component @name Send\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/send\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 Send = createLucideIcon('send', __iconNode);\n\nexport default Send;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z',\n key: '1s2grr',\n },\n ],\n ['path', { d: 'M20 2v4', key: '1rf3ol' }],\n ['path', { d: 'M22 4h-4', key: 'gwowj6' }],\n ['circle', { cx: '4', cy: '20', r: '2', key: '6kqj1y' }],\n];\n\n/**\n * @component @name Sparkles\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sparkles\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 Sparkles = createLucideIcon('sparkles', __iconNode);\n\nexport default Sparkles;\n","\"use client\";\r\n\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { Send, Mic, Paperclip, Sparkles } from \"lucide-react\";\r\n\r\ninterface AIBarProps {\r\n placeholder?: string;\r\n onSubmit?: (message: string) => void;\r\n showMic?: boolean;\r\n showAttach?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function AIBar({\r\n placeholder = \"Ask me anything...\",\r\n onSubmit,\r\n showMic = true,\r\n showAttach = true,\r\n className = \"\",\r\n}: AIBarProps) {\r\n const [value, setValue] = useState(\"\");\r\n const [isFocused, setIsFocused] = useState(false);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (value.trim() && onSubmit) {\r\n onSubmit(value.trim());\r\n setValue(\"\");\r\n }\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit}\r\n className={`relative flex items-center gap-2 rounded-full border bg-background px-4 py-2 transition-all ${\r\n isFocused ? \"border-primary ring-2 ring-primary/20\" : \"\"\r\n } ${className}`}\r\n >\r\n <Sparkles className=\"h-5 w-5 text-primary\" />\r\n\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) => setValue(e.target.value)}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n placeholder={placeholder}\r\n className=\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\r\n />\r\n\r\n <div className=\"flex items-center gap-1\">\r\n {showAttach && (\r\n <button\r\n type=\"button\"\r\n className=\"rounded-full p-2 hover:bg-accent text-muted-foreground hover:text-foreground\"\r\n >\r\n <Paperclip className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n\r\n {showMic && (\r\n <button\r\n type=\"button\"\r\n className=\"rounded-full p-2 hover:bg-accent text-muted-foreground hover:text-foreground\"\r\n >\r\n <Mic className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={!value.trim()}\r\n className=\"rounded-full bg-primary p-2 text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\r\n >\r\n <Send className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nexport default AIBar;\r\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {forwardRef,createElement,useState,useRef}from'react';import {jsxs,jsx}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,t,o)=>o?o.toUpperCase():t.toLowerCase()),C=e=>{let a=D(e);return a.charAt(0).toUpperCase()+a.slice(1)},m=(...e)=>e.filter((a,t,o)=>!!a&&a.trim()!==""&&o.indexOf(a)===t).join(" ").trim(),g=e=>{for(let a in e)if(a.startsWith("aria-")||a==="role"||a==="title")return true};var k={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:t=2,absoluteStrokeWidth:o,className:r="",children:u,iconNode:n,...p},L)=>createElement("svg",{ref:L,...k,width:a,height:a,stroke:e,strokeWidth:o?Number(t)*24/Number(a):t,className:m("lucide",r),...!u&&!g(p)&&{"aria-hidden":"true"},...p},[...n.map(([I,S])=>createElement(I,S)),...Array.isArray(u)?u:[u]]));var d=(e,a)=>{let t=forwardRef(({className:o,...r},u)=>createElement(P,{ref:u,iconNode:a,className:m(`lucide-${h(C(e))}`,`lucide-${e}`,o),...r}));return t.displayName=C(e),t};var T=[["path",{d:"M12 19v3",key:"npa21l"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3",key:"s6n7sd"}]],s=d("mic",T);var q=[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",key:"1miecu"}]],i=d("paperclip",q);var y=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],c=d("send",y);var b=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],l=d("sparkles",b);function H({placeholder:e="Ask me anything...",onSubmit:a,showMic:t=true,showAttach:o=true,className:r=""}){let[u,n]=useState(""),[p,L]=useState(false),I=useRef(null);return jsxs("form",{onSubmit:x=>{x.preventDefault(),u.trim()&&a&&(a(u.trim()),n(""));},className:`relative flex items-center gap-2 rounded-full border bg-background px-4 py-2 transition-all ${p?"border-primary ring-2 ring-primary/20":""} ${r}`,children:[jsx(l,{className:"h-5 w-5 text-primary"}),jsx("input",{ref:I,type:"text",value:u,onChange:x=>n(x.target.value),onFocus:()=>L(true),onBlur:()=>L(false),placeholder:e,className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"}),jsxs("div",{className:"flex items-center gap-1",children:[o&&jsx("button",{type:"button",className:"rounded-full p-2 hover:bg-accent text-muted-foreground hover:text-foreground",children:jsx(i,{className:"h-4 w-4"})}),t&&jsx("button",{type:"button",className:"rounded-full p-2 hover:bg-accent text-muted-foreground hover:text-foreground",children:jsx(s,{className:"h-4 w-4"})}),jsx("button",{type:"submit",disabled:!u.trim(),className:"rounded-full bg-primary p-2 text-primary-foreground hover:bg-primary/90 disabled:opacity-50",children:jsx(c,{className:"h-4 w-4"})})]})]})}var sa=H;/*! 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/mic.js:
|
|
8
|
+
lucide-react/dist/esm/icons/paperclip.js:
|
|
9
|
+
lucide-react/dist/esm/icons/send.js:
|
|
10
|
+
lucide-react/dist/esm/icons/sparkles.js:
|
|
11
|
+
lucide-react/dist/esm/lucide-react.js:
|
|
12
|
+
(**
|
|
13
|
+
* @license lucide-react v0.545.0 - ISC
|
|
14
|
+
*
|
|
15
|
+
* This source code is licensed under the ISC license.
|
|
16
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
17
|
+
*)
|
|
18
|
+
*/export{H as AIBar,sa as default};//# sourceMappingURL=index.mjs.map
|
|
19
|
+
//# 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/mic.ts","../../../../node_modules/lucide-react/src/icons/paperclip.ts","../../../../node_modules/lucide-react/src/icons/send.ts","../../../../node_modules/lucide-react/src/icons/sparkles.ts","../../src/ai-bar/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","Mic","Paperclip","Send","Sparkles","AIBar","placeholder","onSubmit","showMic","showAttach","value","setValue","useState","isFocused","setIsFocused","inputRef","useRef","jsxs","e","jsx","ai_bar_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 = [\n ['path', { d: 'M12 19v3', key: 'npa21l' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2', key: '1vc78b' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3', key: 's6n7sd' }],\n];\n\n/**\n * @component @name Mic\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/mic\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 Mic = createLucideIcon('mic', __iconNode);\n\nexport default Mic;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551',\n key: '1miecu',\n },\n ],\n];\n\n/**\n * @component @name Paperclip\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/paperclip\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 Paperclip = createLucideIcon('paperclip', __iconNode);\n\nexport default Paperclip;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z',\n key: '1ffxy3',\n },\n ],\n ['path', { d: 'm21.854 2.147-10.94 10.939', key: '12cjpa' }],\n];\n\n/**\n * @component @name Send\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/send\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 Send = createLucideIcon('send', __iconNode);\n\nexport default Send;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z',\n key: '1s2grr',\n },\n ],\n ['path', { d: 'M20 2v4', key: '1rf3ol' }],\n ['path', { d: 'M22 4h-4', key: 'gwowj6' }],\n ['circle', { cx: '4', cy: '20', r: '2', key: '6kqj1y' }],\n];\n\n/**\n * @component @name Sparkles\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sparkles\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 Sparkles = createLucideIcon('sparkles', __iconNode);\n\nexport default Sparkles;\n","\"use client\";\r\n\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { Send, Mic, Paperclip, Sparkles } from \"lucide-react\";\r\n\r\ninterface AIBarProps {\r\n placeholder?: string;\r\n onSubmit?: (message: string) => void;\r\n showMic?: boolean;\r\n showAttach?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function AIBar({\r\n placeholder = \"Ask me anything...\",\r\n onSubmit,\r\n showMic = true,\r\n showAttach = true,\r\n className = \"\",\r\n}: AIBarProps) {\r\n const [value, setValue] = useState(\"\");\r\n const [isFocused, setIsFocused] = useState(false);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (value.trim() && onSubmit) {\r\n onSubmit(value.trim());\r\n setValue(\"\");\r\n }\r\n };\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit}\r\n className={`relative flex items-center gap-2 rounded-full border bg-background px-4 py-2 transition-all ${\r\n isFocused ? \"border-primary ring-2 ring-primary/20\" : \"\"\r\n } ${className}`}\r\n >\r\n <Sparkles className=\"h-5 w-5 text-primary\" />\r\n\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n value={value}\r\n onChange={(e) => setValue(e.target.value)}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n placeholder={placeholder}\r\n className=\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\r\n />\r\n\r\n <div className=\"flex items-center gap-1\">\r\n {showAttach && (\r\n <button\r\n type=\"button\"\r\n className=\"rounded-full p-2 hover:bg-accent text-muted-foreground hover:text-foreground\"\r\n >\r\n <Paperclip className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n\r\n {showMic && (\r\n <button\r\n type=\"button\"\r\n className=\"rounded-full p-2 hover:bg-accent text-muted-foreground hover:text-foreground\"\r\n >\r\n <Mic className=\"h-4 w-4\" />\r\n </button>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={!value.trim()}\r\n className=\"rounded-full bg-primary p-2 text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\r\n >\r\n <Send className=\"h-4 w-4\" />\r\n </button>\r\n </div>\r\n </form>\r\n );\r\n}\r\n\r\nexport default AIBar;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var jsxRuntime=require('react/jsx-runtime');function i({text:n="Thinking...",className:s=""}){return jsxRuntime.jsxs("div",{className:`flex items-center gap-3 ${s}`,children:[jsxRuntime.jsxs("div",{className:"flex gap-1",children:[jsxRuntime.jsx("span",{className:"h-2 w-2 rounded-full bg-primary animate-bounce",style:{animationDelay:"0ms"}}),jsxRuntime.jsx("span",{className:"h-2 w-2 rounded-full bg-primary animate-bounce",style:{animationDelay:"150ms"}}),jsxRuntime.jsx("span",{className:"h-2 w-2 rounded-full bg-primary animate-bounce",style:{animationDelay:"300ms"}})]}),jsxRuntime.jsx("span",{className:"text-sm text-muted-foreground",children:n})]})}var t=i;exports.AILoading=i;exports.default=t;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ai-loading/index.tsx"],"names":["AILoading","text","className","jsxs","jsx","ai_loading_default"],"mappings":"kHAOO,SAASA,CAAAA,CAAU,CAAE,IAAA,CAAAC,CAAAA,CAAO,aAAA,CAAe,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAmB,CAClF,OACEC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAW,CAAA,wBAAA,EAA2BD,CAAS,GAClD,QAAA,CAAA,CAAAC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aACb,QAAA,CAAA,CAAAC,cAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,iDACV,KAAA,CAAO,CAAE,cAAA,CAAgB,KAAM,CAAA,CACjC,CAAA,CACAA,cAAAA,CAAC,MAAA,CAAA,CACC,UAAU,gDAAA,CACV,KAAA,CAAO,CAAE,cAAA,CAAgB,OAAQ,CAAA,CACnC,CAAA,CACAA,cAAAA,CAAC,QACC,SAAA,CAAU,gDAAA,CACV,KAAA,CAAO,CAAE,cAAA,CAAgB,OAAQ,CAAA,CACnC,CAAA,CAAA,CACF,EACAA,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+BAAA,CAAiC,SAAAH,CAAAA,CAAK,CAAA,CAAA,CACxD,CAEJ,KAEOI,CAAAA,CAAQL","file":"index.js","sourcesContent":["\"use client\";\r\n\r\ninterface AILoadingProps {\r\n text?: string;\r\n className?: string;\r\n}\r\n\r\nexport function AILoading({ text = \"Thinking...\", className = \"\" }: AILoadingProps) {\r\n return (\r\n <div className={`flex items-center gap-3 ${className}`}>\r\n <div className=\"flex gap-1\">\r\n <span\r\n className=\"h-2 w-2 rounded-full bg-primary animate-bounce\"\r\n style={{ animationDelay: \"0ms\" }}\r\n />\r\n <span\r\n className=\"h-2 w-2 rounded-full bg-primary animate-bounce\"\r\n style={{ animationDelay: \"150ms\" }}\r\n />\r\n <span\r\n className=\"h-2 w-2 rounded-full bg-primary animate-bounce\"\r\n style={{ animationDelay: \"300ms\" }}\r\n />\r\n </div>\r\n <span className=\"text-sm text-muted-foreground\">{text}</span>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AILoading;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';function i({text:n="Thinking...",className:s=""}){return jsxs("div",{className:`flex items-center gap-3 ${s}`,children:[jsxs("div",{className:"flex gap-1",children:[jsx("span",{className:"h-2 w-2 rounded-full bg-primary animate-bounce",style:{animationDelay:"0ms"}}),jsx("span",{className:"h-2 w-2 rounded-full bg-primary animate-bounce",style:{animationDelay:"150ms"}}),jsx("span",{className:"h-2 w-2 rounded-full bg-primary animate-bounce",style:{animationDelay:"300ms"}})]}),jsx("span",{className:"text-sm text-muted-foreground",children:n})]})}var t=i;export{i as AILoading,t as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ai-loading/index.tsx"],"names":["AILoading","text","className","jsxs","jsx","ai_loading_default"],"mappings":"yCAOO,SAASA,CAAAA,CAAU,CAAE,IAAA,CAAAC,CAAAA,CAAO,aAAA,CAAe,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAmB,CAClF,OACEC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAW,CAAA,wBAAA,EAA2BD,CAAS,GAClD,QAAA,CAAA,CAAAC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,iDACV,KAAA,CAAO,CAAE,cAAA,CAAgB,KAAM,CAAA,CACjC,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,UAAU,gDAAA,CACV,KAAA,CAAO,CAAE,cAAA,CAAgB,OAAQ,CAAA,CACnC,CAAA,CACAA,GAAAA,CAAC,QACC,SAAA,CAAU,gDAAA,CACV,KAAA,CAAO,CAAE,cAAA,CAAgB,OAAQ,CAAA,CACnC,CAAA,CAAA,CACF,EACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+BAAA,CAAiC,SAAAH,CAAAA,CAAK,CAAA,CAAA,CACxD,CAEJ,KAEOI,CAAAA,CAAQL","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\ninterface AILoadingProps {\r\n text?: string;\r\n className?: string;\r\n}\r\n\r\nexport function AILoading({ text = \"Thinking...\", className = \"\" }: AILoadingProps) {\r\n return (\r\n <div className={`flex items-center gap-3 ${className}`}>\r\n <div className=\"flex gap-1\">\r\n <span\r\n className=\"h-2 w-2 rounded-full bg-primary animate-bounce\"\r\n style={{ animationDelay: \"0ms\" }}\r\n />\r\n <span\r\n className=\"h-2 w-2 rounded-full bg-primary animate-bounce\"\r\n style={{ animationDelay: \"150ms\" }}\r\n />\r\n <span\r\n className=\"h-2 w-2 rounded-full bg-primary animate-bounce\"\r\n style={{ animationDelay: \"300ms\" }}\r\n />\r\n </div>\r\n <span className=\"text-sm text-muted-foreground\">{text}</span>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AILoading;\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(),w=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,u,t)=>t?t.toUpperCase():u.toLowerCase()),I=e=>{let a=w(e);return a.charAt(0).toUpperCase()+a.slice(1)},n=(...e)=>e.filter((a,u,t)=>!!a&&a.trim()!==""&&t.indexOf(a)===u).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 k=react.forwardRef(({color:e="currentColor",size:a=24,strokeWidth:u=2,absoluteStrokeWidth:t,className:r="",children:o,iconNode:s,...c},L)=>react.createElement("svg",{ref:L,...h,width:a,height:a,stroke:e,strokeWidth:t?Number(u)*24/Number(a):u,className:n("lucide",r),...!o&&!S(c)&&{"aria-hidden":"true"},...c},[...s.map(([d,m])=>react.createElement(d,m)),...Array.isArray(o)?o:[o]]));var p=(e,a)=>{let u=react.forwardRef(({className:t,...r},o)=>react.createElement(k,{ref:o,iconNode:a,className:n(`lucide-${C(I(e))}`,`lucide-${e}`,t),...r}));return u.displayName=I(e),u};var D=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],i=p("send",D);var F=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],l=p("sparkles",F);function R({title:e="How can I help you today?",placeholder:a="Type your message...",suggestions:u=["Write a blog post","Generate code","Explain a concept","Create a summary"],onSubmit:t,className:r=""}){let[o,s]=react.useState(""),c=d=>{d.preventDefault(),o.trim()&&t&&(t(o.trim()),s(""));},L=d=>{s(d),t&&t(d);};return jsxRuntime.jsxs("div",{className:`w-full max-w-2xl mx-auto ${r}`,children:[jsxRuntime.jsxs("div",{className:"text-center mb-8",children:[jsxRuntime.jsx("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-full bg-primary/10 mb-4",children:jsxRuntime.jsx(l,{className:"h-6 w-6 text-primary"})}),jsxRuntime.jsx("h2",{className:"text-2xl font-bold",children:e})]}),jsxRuntime.jsxs("form",{onSubmit:c,className:"relative mb-6",children:[jsxRuntime.jsx("textarea",{value:o,onChange:d=>s(d.target.value),placeholder:a,rows:3,className:"w-full rounded-xl border bg-background px-4 py-3 pr-12 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 resize-none"}),jsxRuntime.jsx("button",{type:"submit",disabled:!o.trim(),className:"absolute right-3 bottom-3 rounded-lg bg-primary p-2 text-primary-foreground hover:bg-primary/90 disabled:opacity-50",children:jsxRuntime.jsx(i,{className:"h-4 w-4"})})]}),jsxRuntime.jsx("div",{className:"flex flex-wrap gap-2 justify-center",children:u.map((d,m)=>jsxRuntime.jsx("button",{onClick:()=>L(d),className:"rounded-full border px-4 py-2 text-sm hover:bg-accent transition-colors",children:d},m))})]})}var Y=R;/*! 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/send.js:
|
|
8
|
+
lucide-react/dist/esm/icons/sparkles.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.AIPrompt=R;exports.default=Y;//# 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/send.ts","../../../../node_modules/lucide-react/src/icons/sparkles.ts","../../src/ai-prompt/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","Send","Sparkles","AIPrompt","title","placeholder","suggestions","onSubmit","value","setValue","useState","handleSubmit","e","handleSuggestion","suggestion","jsxs","jsx","ai_prompt_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 = [\n [\n 'path',\n {\n d: 'M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z',\n key: '1ffxy3',\n },\n ],\n ['path', { d: 'm21.854 2.147-10.94 10.939', key: '12cjpa' }],\n];\n\n/**\n * @component @name Send\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/send\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 Send = createLucideIcon('send', __iconNode);\n\nexport default Send;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z',\n key: '1s2grr',\n },\n ],\n ['path', { d: 'M20 2v4', key: '1rf3ol' }],\n ['path', { d: 'M22 4h-4', key: 'gwowj6' }],\n ['circle', { cx: '4', cy: '20', r: '2', key: '6kqj1y' }],\n];\n\n/**\n * @component @name Sparkles\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sparkles\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 Sparkles = createLucideIcon('sparkles', __iconNode);\n\nexport default Sparkles;\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { Send, Sparkles } from \"lucide-react\";\r\n\r\ninterface AIPromptProps {\r\n title?: string;\r\n placeholder?: string;\r\n suggestions?: string[];\r\n onSubmit?: (message: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function AIPrompt({\r\n title = \"How can I help you today?\",\r\n placeholder = \"Type your message...\",\r\n suggestions = [\"Write a blog post\", \"Generate code\", \"Explain a concept\", \"Create a summary\"],\r\n onSubmit,\r\n className = \"\",\r\n}: AIPromptProps) {\r\n const [value, setValue] = useState(\"\");\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (value.trim() && onSubmit) {\r\n onSubmit(value.trim());\r\n setValue(\"\");\r\n }\r\n };\r\n\r\n const handleSuggestion = (suggestion: string) => {\r\n setValue(suggestion);\r\n if (onSubmit) {\r\n onSubmit(suggestion);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`w-full max-w-2xl mx-auto ${className}`}>\r\n <div className=\"text-center mb-8\">\r\n <div className=\"inline-flex items-center justify-center w-12 h-12 rounded-full bg-primary/10 mb-4\">\r\n <Sparkles className=\"h-6 w-6 text-primary\" />\r\n </div>\r\n <h2 className=\"text-2xl font-bold\">{title}</h2>\r\n </div>\r\n\r\n <form onSubmit={handleSubmit} className=\"relative mb-6\">\r\n <textarea\r\n value={value}\r\n onChange={(e) => setValue(e.target.value)}\r\n placeholder={placeholder}\r\n rows={3}\r\n className=\"w-full rounded-xl border bg-background px-4 py-3 pr-12 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 resize-none\"\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!value.trim()}\r\n className=\"absolute right-3 bottom-3 rounded-lg bg-primary p-2 text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\r\n >\r\n <Send className=\"h-4 w-4\" />\r\n </button>\r\n </form>\r\n\r\n <div className=\"flex flex-wrap gap-2 justify-center\">\r\n {suggestions.map((suggestion, index) => (\r\n <button\r\n key={index}\r\n onClick={() => handleSuggestion(suggestion)}\r\n className=\"rounded-full border px-4 py-2 text-sm hover:bg-accent transition-colors\"\r\n >\r\n {suggestion}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AIPrompt;\r\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {forwardRef,createElement,useState}from'react';import {jsxs,jsx}from'react/jsx-runtime';var C=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),w=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,u,t)=>t?t.toUpperCase():u.toLowerCase()),I=e=>{let a=w(e);return a.charAt(0).toUpperCase()+a.slice(1)},n=(...e)=>e.filter((a,u,t)=>!!a&&a.trim()!==""&&t.indexOf(a)===u).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 k=forwardRef(({color:e="currentColor",size:a=24,strokeWidth:u=2,absoluteStrokeWidth:t,className:r="",children:o,iconNode:s,...c},L)=>createElement("svg",{ref:L,...h,width:a,height:a,stroke:e,strokeWidth:t?Number(u)*24/Number(a):u,className:n("lucide",r),...!o&&!S(c)&&{"aria-hidden":"true"},...c},[...s.map(([d,m])=>createElement(d,m)),...Array.isArray(o)?o:[o]]));var p=(e,a)=>{let u=forwardRef(({className:t,...r},o)=>createElement(k,{ref:o,iconNode:a,className:n(`lucide-${C(I(e))}`,`lucide-${e}`,t),...r}));return u.displayName=I(e),u};var D=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],i=p("send",D);var F=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],l=p("sparkles",F);function R({title:e="How can I help you today?",placeholder:a="Type your message...",suggestions:u=["Write a blog post","Generate code","Explain a concept","Create a summary"],onSubmit:t,className:r=""}){let[o,s]=useState(""),c=d=>{d.preventDefault(),o.trim()&&t&&(t(o.trim()),s(""));},L=d=>{s(d),t&&t(d);};return jsxs("div",{className:`w-full max-w-2xl mx-auto ${r}`,children:[jsxs("div",{className:"text-center mb-8",children:[jsx("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-full bg-primary/10 mb-4",children:jsx(l,{className:"h-6 w-6 text-primary"})}),jsx("h2",{className:"text-2xl font-bold",children:e})]}),jsxs("form",{onSubmit:c,className:"relative mb-6",children:[jsx("textarea",{value:o,onChange:d=>s(d.target.value),placeholder:a,rows:3,className:"w-full rounded-xl border bg-background px-4 py-3 pr-12 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 resize-none"}),jsx("button",{type:"submit",disabled:!o.trim(),className:"absolute right-3 bottom-3 rounded-lg bg-primary p-2 text-primary-foreground hover:bg-primary/90 disabled:opacity-50",children:jsx(i,{className:"h-4 w-4"})})]}),jsx("div",{className:"flex flex-wrap gap-2 justify-center",children:u.map((d,m)=>jsx("button",{onClick:()=>L(d),className:"rounded-full border px-4 py-2 text-sm hover:bg-accent transition-colors",children:d},m))})]})}var Y=R;/*! 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/send.js:
|
|
8
|
+
lucide-react/dist/esm/icons/sparkles.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{R as AIPrompt,Y 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/send.ts","../../../../node_modules/lucide-react/src/icons/sparkles.ts","../../src/ai-prompt/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","Send","Sparkles","AIPrompt","title","placeholder","suggestions","onSubmit","value","setValue","useState","handleSubmit","e","handleSuggestion","suggestion","jsxs","jsx","ai_prompt_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 = [\n [\n 'path',\n {\n d: 'M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z',\n key: '1ffxy3',\n },\n ],\n ['path', { d: 'm21.854 2.147-10.94 10.939', key: '12cjpa' }],\n];\n\n/**\n * @component @name Send\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/send\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 Send = createLucideIcon('send', __iconNode);\n\nexport default Send;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z',\n key: '1s2grr',\n },\n ],\n ['path', { d: 'M20 2v4', key: '1rf3ol' }],\n ['path', { d: 'M22 4h-4', key: 'gwowj6' }],\n ['circle', { cx: '4', cy: '20', r: '2', key: '6kqj1y' }],\n];\n\n/**\n * @component @name Sparkles\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sparkles\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 Sparkles = createLucideIcon('sparkles', __iconNode);\n\nexport default Sparkles;\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { Send, Sparkles } from \"lucide-react\";\r\n\r\ninterface AIPromptProps {\r\n title?: string;\r\n placeholder?: string;\r\n suggestions?: string[];\r\n onSubmit?: (message: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function AIPrompt({\r\n title = \"How can I help you today?\",\r\n placeholder = \"Type your message...\",\r\n suggestions = [\"Write a blog post\", \"Generate code\", \"Explain a concept\", \"Create a summary\"],\r\n onSubmit,\r\n className = \"\",\r\n}: AIPromptProps) {\r\n const [value, setValue] = useState(\"\");\r\n\r\n const handleSubmit = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (value.trim() && onSubmit) {\r\n onSubmit(value.trim());\r\n setValue(\"\");\r\n }\r\n };\r\n\r\n const handleSuggestion = (suggestion: string) => {\r\n setValue(suggestion);\r\n if (onSubmit) {\r\n onSubmit(suggestion);\r\n }\r\n };\r\n\r\n return (\r\n <div className={`w-full max-w-2xl mx-auto ${className}`}>\r\n <div className=\"text-center mb-8\">\r\n <div className=\"inline-flex items-center justify-center w-12 h-12 rounded-full bg-primary/10 mb-4\">\r\n <Sparkles className=\"h-6 w-6 text-primary\" />\r\n </div>\r\n <h2 className=\"text-2xl font-bold\">{title}</h2>\r\n </div>\r\n\r\n <form onSubmit={handleSubmit} className=\"relative mb-6\">\r\n <textarea\r\n value={value}\r\n onChange={(e) => setValue(e.target.value)}\r\n placeholder={placeholder}\r\n rows={3}\r\n className=\"w-full rounded-xl border bg-background px-4 py-3 pr-12 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 resize-none\"\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={!value.trim()}\r\n className=\"absolute right-3 bottom-3 rounded-lg bg-primary p-2 text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\r\n >\r\n <Send className=\"h-4 w-4\" />\r\n </button>\r\n </form>\r\n\r\n <div className=\"flex flex-wrap gap-2 justify-center\">\r\n {suggestions.map((suggestion, index) => (\r\n <button\r\n key={index}\r\n onClick={() => handleSuggestion(suggestion)}\r\n className=\"rounded-full border px-4 py-2 text-sm hover:bg-accent transition-colors\"\r\n >\r\n {suggestion}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AIPrompt;\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({colorStops:a=["#5227FF","#7cff67","#5227FF"],amplitude:o=1,blend:l=.5,speed:c=1,className:m=""}){let f=react.useRef(null);return react.useEffect(()=>{let e=f.current;if(!e)return;let n=e.getContext("2d");if(!n)return;let h,u=0,i=()=>{e.width=e.offsetWidth,e.height=e.offsetHeight;},d=()=>{if(!n||!e)return;n.clearRect(0,0,e.width,e.height);let r=n.createLinearGradient(0,0,e.width,0);a.forEach((t,s)=>{r.addColorStop(s/(a.length-1),t);});for(let t=0;t<e.height;t++){let s=Math.sin(t*.02+u*c*.1)*o*50,g=Math.max(0,Math.min(1,t/e.height*l+s*.01));n.fillStyle=r,n.globalAlpha=g*.3,n.fillRect(0,t,e.width,1);}n.globalAlpha=1,u+=1,h=requestAnimationFrame(d);};return i(),window.addEventListener("resize",i),d(),()=>{window.removeEventListener("resize",i),cancelAnimationFrame(h);}},[a,o,l,c]),jsxRuntime.jsx("canvas",{ref:f,className:`absolute inset-0 w-full h-full ${m}`})}var F=w;exports.Aurora=w;exports.default=F;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/aurora/index.tsx"],"names":["Aurora","colorStops","amplitude","blend","speed","className","canvasRef","useRef","useEffect","canvas","ctx","animationId","time","resize","draw","gradient","color","i","y","noise","alpha","jsx","aurora_default"],"mappings":"yIAYO,SAASA,CAAAA,CAAO,CACrB,UAAA,CAAAC,CAAAA,CAAa,CAAC,SAAA,CAAW,SAAA,CAAW,SAAS,CAAA,CAC7C,SAAA,CAAAC,CAAAA,CAAY,CAAA,CACZ,KAAA,CAAAC,CAAAA,CAAQ,EAAA,CACR,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,SAAA,CAAAC,EAAY,EACd,CAAA,CAAgB,CACd,IAAMC,CAAAA,CAAYC,YAAAA,CAA0B,IAAI,CAAA,CAEhD,OAAAC,eAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAASH,CAAAA,CAAU,OAAA,CACzB,GAAI,CAACG,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAAMD,CAAAA,CAAO,UAAA,CAAW,IAAI,CAAA,CAClC,GAAI,CAACC,CAAAA,CAAK,OAEV,IAAIC,CAAAA,CACAC,EAAO,CAAA,CAELC,CAAAA,CAAS,IAAM,CACnBJ,CAAAA,CAAO,KAAA,CAAQA,CAAAA,CAAO,WAAA,CACtBA,CAAAA,CAAO,MAAA,CAASA,CAAAA,CAAO,aACzB,CAAA,CAaMK,CAAAA,CAAO,IAAM,CACjB,GAAI,CAACJ,CAAAA,EAAO,CAACD,CAAAA,CAAQ,OAErBC,CAAAA,CAAI,UAAU,CAAA,CAAG,CAAA,CAAGD,CAAAA,CAAO,KAAA,CAAOA,CAAAA,CAAO,MAAM,CAAA,CAE/C,IAAMM,CAAAA,CAAWL,CAAAA,CAAI,oBAAA,CAAqB,CAAA,CAAG,CAAA,CAAGD,CAAAA,CAAO,KAAA,CAAO,CAAC,CAAA,CAC/DR,CAAAA,CAAW,OAAA,CAAQ,CAACe,CAAAA,CAAOC,CAAAA,GAAM,CAC/BF,CAAAA,CAAS,YAAA,CAAaE,CAAAA,EAAKhB,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAA,CAAIe,CAAK,EAC1D,CAAC,EAED,IAAA,IAASE,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIT,CAAAA,CAAO,MAAA,CAAQS,CAAAA,EAAAA,CAAK,CACtC,IAAMC,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAI,GAAA,CAAON,CAAAA,CAAOR,CAAAA,CAAQ,EAAG,CAAA,CAAIF,CAAAA,CAAY,EAAA,CAC9DkB,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAIF,CAAAA,CAAIT,CAAAA,CAAO,MAAA,CAAUN,CAAAA,CAAQgB,CAAAA,CAAQ,GAAI,CAAC,CAAA,CAEjFT,CAAAA,CAAI,SAAA,CAAYK,CAAAA,CAChBL,CAAAA,CAAI,WAAA,CAAcU,CAAAA,CAAQ,EAAA,CAC1BV,CAAAA,CAAI,QAAA,CAAS,CAAA,CAAGQ,CAAAA,CAAGT,CAAAA,CAAO,KAAA,CAAO,CAAC,EACpC,CAEAC,CAAAA,CAAI,WAAA,CAAc,CAAA,CAClBE,CAAAA,EAAQ,CAAA,CACRD,CAAAA,CAAc,qBAAA,CAAsBG,CAAI,EAC1C,EAEA,OAAAD,CAAAA,EAAO,CACP,MAAA,CAAO,gBAAA,CAAiB,SAAUA,CAAM,CAAA,CACxCC,CAAAA,EAAK,CAEE,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUD,CAAM,CAAA,CAC3C,oBAAA,CAAqBF,CAAW,EAClC,CACF,CAAA,CAAG,CAACV,CAAAA,CAAYC,CAAAA,CAAWC,CAAAA,CAAOC,CAAK,CAAC,CAAA,CAGtCiB,cAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKf,CAAAA,CACL,SAAA,CAAW,CAAA,+BAAA,EAAkCD,CAAS,CAAA,CAAA,CACxD,CAEJ,KAEOiB,CAAAA,CAAQtB","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useRef } from \"react\";\r\n\r\ninterface AuroraProps {\r\n colorStops?: string[];\r\n amplitude?: number;\r\n blend?: number;\r\n speed?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Aurora({\r\n colorStops = [\"#5227FF\", \"#7cff67\", \"#5227FF\"],\r\n amplitude = 1.0,\r\n blend = 0.5,\r\n speed = 1.0,\r\n className = \"\",\r\n}: AuroraProps) {\r\n const canvasRef = useRef<HTMLCanvasElement>(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 let animationId: number;\r\n let time = 0;\r\n\r\n const resize = () => {\r\n canvas.width = canvas.offsetWidth;\r\n canvas.height = canvas.offsetHeight;\r\n };\r\n\r\n const hexToRgb = (hex: string) => {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : { r: 0, g: 0, b: 0 };\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\r\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\r\n colorStops.forEach((color, i) => {\r\n gradient.addColorStop(i / (colorStops.length - 1), color);\r\n });\r\n\r\n for (let y = 0; y < canvas.height; y++) {\r\n const noise = Math.sin(y * 0.02 + time * speed * 0.1) * amplitude * 50;\r\n const alpha = Math.max(0, Math.min(1, (y / canvas.height) * blend + noise * 0.01));\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.globalAlpha = alpha * 0.3;\r\n ctx.fillRect(0, y, canvas.width, 1);\r\n }\r\n\r\n ctx.globalAlpha = 1;\r\n time += 1;\r\n animationId = 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 cancelAnimationFrame(animationId);\r\n };\r\n }, [colorStops, amplitude, blend, speed]);\r\n\r\n return (\r\n <canvas\r\n ref={canvasRef}\r\n className={`absolute inset-0 w-full h-full ${className}`}\r\n />\r\n );\r\n}\r\n\r\nexport default Aurora;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useRef,useEffect}from'react';import {jsx}from'react/jsx-runtime';function w({colorStops:a=["#5227FF","#7cff67","#5227FF"],amplitude:o=1,blend:l=.5,speed:c=1,className:m=""}){let f=useRef(null);return useEffect(()=>{let e=f.current;if(!e)return;let n=e.getContext("2d");if(!n)return;let h,u=0,i=()=>{e.width=e.offsetWidth,e.height=e.offsetHeight;},d=()=>{if(!n||!e)return;n.clearRect(0,0,e.width,e.height);let r=n.createLinearGradient(0,0,e.width,0);a.forEach((t,s)=>{r.addColorStop(s/(a.length-1),t);});for(let t=0;t<e.height;t++){let s=Math.sin(t*.02+u*c*.1)*o*50,g=Math.max(0,Math.min(1,t/e.height*l+s*.01));n.fillStyle=r,n.globalAlpha=g*.3,n.fillRect(0,t,e.width,1);}n.globalAlpha=1,u+=1,h=requestAnimationFrame(d);};return i(),window.addEventListener("resize",i),d(),()=>{window.removeEventListener("resize",i),cancelAnimationFrame(h);}},[a,o,l,c]),jsx("canvas",{ref:f,className:`absolute inset-0 w-full h-full ${m}`})}var F=w;export{w as Aurora,F as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/aurora/index.tsx"],"names":["Aurora","colorStops","amplitude","blend","speed","className","canvasRef","useRef","useEffect","canvas","ctx","animationId","time","resize","draw","gradient","color","i","y","noise","alpha","jsx","aurora_default"],"mappings":"yEAYO,SAASA,CAAAA,CAAO,CACrB,UAAA,CAAAC,CAAAA,CAAa,CAAC,SAAA,CAAW,SAAA,CAAW,SAAS,CAAA,CAC7C,SAAA,CAAAC,CAAAA,CAAY,CAAA,CACZ,KAAA,CAAAC,CAAAA,CAAQ,EAAA,CACR,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,SAAA,CAAAC,EAAY,EACd,CAAA,CAAgB,CACd,IAAMC,CAAAA,CAAYC,MAAAA,CAA0B,IAAI,CAAA,CAEhD,OAAAC,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAASH,CAAAA,CAAU,OAAA,CACzB,GAAI,CAACG,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAAMD,CAAAA,CAAO,UAAA,CAAW,IAAI,CAAA,CAClC,GAAI,CAACC,CAAAA,CAAK,OAEV,IAAIC,CAAAA,CACAC,EAAO,CAAA,CAELC,CAAAA,CAAS,IAAM,CACnBJ,CAAAA,CAAO,KAAA,CAAQA,CAAAA,CAAO,WAAA,CACtBA,CAAAA,CAAO,MAAA,CAASA,CAAAA,CAAO,aACzB,CAAA,CAaMK,CAAAA,CAAO,IAAM,CACjB,GAAI,CAACJ,CAAAA,EAAO,CAACD,CAAAA,CAAQ,OAErBC,CAAAA,CAAI,UAAU,CAAA,CAAG,CAAA,CAAGD,CAAAA,CAAO,KAAA,CAAOA,CAAAA,CAAO,MAAM,CAAA,CAE/C,IAAMM,CAAAA,CAAWL,CAAAA,CAAI,oBAAA,CAAqB,CAAA,CAAG,CAAA,CAAGD,CAAAA,CAAO,KAAA,CAAO,CAAC,CAAA,CAC/DR,CAAAA,CAAW,OAAA,CAAQ,CAACe,CAAAA,CAAOC,CAAAA,GAAM,CAC/BF,CAAAA,CAAS,YAAA,CAAaE,CAAAA,EAAKhB,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAA,CAAIe,CAAK,EAC1D,CAAC,EAED,IAAA,IAASE,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIT,CAAAA,CAAO,MAAA,CAAQS,CAAAA,EAAAA,CAAK,CACtC,IAAMC,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAI,GAAA,CAAON,CAAAA,CAAOR,CAAAA,CAAQ,EAAG,CAAA,CAAIF,CAAAA,CAAY,EAAA,CAC9DkB,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAIF,CAAAA,CAAIT,CAAAA,CAAO,MAAA,CAAUN,CAAAA,CAAQgB,CAAAA,CAAQ,GAAI,CAAC,CAAA,CAEjFT,CAAAA,CAAI,SAAA,CAAYK,CAAAA,CAChBL,CAAAA,CAAI,WAAA,CAAcU,CAAAA,CAAQ,EAAA,CAC1BV,CAAAA,CAAI,QAAA,CAAS,CAAA,CAAGQ,CAAAA,CAAGT,CAAAA,CAAO,KAAA,CAAO,CAAC,EACpC,CAEAC,CAAAA,CAAI,WAAA,CAAc,CAAA,CAClBE,CAAAA,EAAQ,CAAA,CACRD,CAAAA,CAAc,qBAAA,CAAsBG,CAAI,EAC1C,EAEA,OAAAD,CAAAA,EAAO,CACP,MAAA,CAAO,gBAAA,CAAiB,SAAUA,CAAM,CAAA,CACxCC,CAAAA,EAAK,CAEE,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUD,CAAM,CAAA,CAC3C,oBAAA,CAAqBF,CAAW,EAClC,CACF,CAAA,CAAG,CAACV,CAAAA,CAAYC,CAAAA,CAAWC,CAAAA,CAAOC,CAAK,CAAC,CAAA,CAGtCiB,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKf,CAAAA,CACL,SAAA,CAAW,CAAA,+BAAA,EAAkCD,CAAS,CAAA,CAAA,CACxD,CAEJ,KAEOiB,CAAAA,CAAQtB","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useRef } from \"react\";\r\n\r\ninterface AuroraProps {\r\n colorStops?: string[];\r\n amplitude?: number;\r\n blend?: number;\r\n speed?: number;\r\n className?: string;\r\n}\r\n\r\nexport function Aurora({\r\n colorStops = [\"#5227FF\", \"#7cff67\", \"#5227FF\"],\r\n amplitude = 1.0,\r\n blend = 0.5,\r\n speed = 1.0,\r\n className = \"\",\r\n}: AuroraProps) {\r\n const canvasRef = useRef<HTMLCanvasElement>(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 let animationId: number;\r\n let time = 0;\r\n\r\n const resize = () => {\r\n canvas.width = canvas.offsetWidth;\r\n canvas.height = canvas.offsetHeight;\r\n };\r\n\r\n const hexToRgb = (hex: string) => {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : { r: 0, g: 0, b: 0 };\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\r\n const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\r\n colorStops.forEach((color, i) => {\r\n gradient.addColorStop(i / (colorStops.length - 1), color);\r\n });\r\n\r\n for (let y = 0; y < canvas.height; y++) {\r\n const noise = Math.sin(y * 0.02 + time * speed * 0.1) * amplitude * 50;\r\n const alpha = Math.max(0, Math.min(1, (y / canvas.height) * blend + noise * 0.01));\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.globalAlpha = alpha * 0.3;\r\n ctx.fillRect(0, y, canvas.width, 1);\r\n }\r\n\r\n ctx.globalAlpha = 1;\r\n time += 1;\r\n animationId = 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 cancelAnimationFrame(animationId);\r\n };\r\n }, [colorStops, amplitude, blend, speed]);\r\n\r\n return (\r\n <canvas\r\n ref={canvasRef}\r\n className={`absolute inset-0 w-full h-full ${className}`}\r\n />\r\n );\r\n}\r\n\r\nexport default Aurora;\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 k=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),F=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,u,d)=>d?d.toUpperCase():u.toLowerCase()),C=e=>{let a=F(e);return a.charAt(0).toUpperCase()+a.slice(1)},I=(...e)=>e.filter((a,u,d)=>!!a&&a.trim()!==""&&d.indexOf(a)===u).join(" ").trim(),w=e=>{for(let a in e)if(a.startsWith("aria-")||a==="role"||a==="title")return true};var P={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 B=react.forwardRef(({color:e="currentColor",size:a=24,strokeWidth:u=2,absoluteStrokeWidth:d,className:r="",children:o,iconNode:L,...m},l)=>react.createElement("svg",{ref:l,...P,width:a,height:a,stroke:e,strokeWidth:d?Number(u)*24/Number(a):u,className:I("lucide",r),...!o&&!w(m)&&{"aria-hidden":"true"},...m},[...L.map(([s,i])=>react.createElement(s,i)),...Array.isArray(o)?o:[o]]));var x=(e,a)=>{let u=react.forwardRef(({className:d,...r},o)=>react.createElement(B,{ref:o,iconNode:a,className:I(`lucide-${k(C(e))}`,`lucide-${e}`,d),...r}));return u.displayName=C(e),u};var q=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],n=x("search",q);var y=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],p=x("x",y);function O({placeholder:e="Search...",results:a=[],onSearch:u,onSelect:d,className:r=""}){let[o,L]=react.useState(""),[m,l]=react.useState(false),[s,i]=react.useState(0),g=react.useRef(null);react.useEffect(()=>{o&&u&&u(o);},[o,u]);let D=t=>{t.key==="ArrowDown"?(t.preventDefault(),i(c=>Math.min(c+1,a.length-1))):t.key==="ArrowUp"?(t.preventDefault(),i(c=>Math.max(c-1,0))):t.key==="Enter"&&a[s]?(t.preventDefault(),d?.(a[s]),l(false)):t.key==="Escape"&&l(false);};return jsxRuntime.jsxs("div",{className:`relative w-full max-w-lg ${r}`,children:[jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx(n,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),jsxRuntime.jsx("input",{ref:g,type:"text",value:o,onChange:t=>{L(t.target.value),l(true),i(0);},onFocus:()=>l(true),onKeyDown:D,placeholder:e,className:"w-full rounded-lg border bg-background py-2 pl-10 pr-10 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/20"}),o&&jsxRuntime.jsx("button",{onClick:()=>{L(""),g.current?.focus();},className:"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",children:jsxRuntime.jsx(p,{className:"h-4 w-4"})})]}),m&&a.length>0&&jsxRuntime.jsx("div",{className:"absolute top-full left-0 right-0 mt-2 rounded-lg border bg-background shadow-lg z-50",children:a.map((t,c)=>jsxRuntime.jsxs("button",{onClick:()=>{d?.(t),l(false);},className:`w-full px-4 py-3 text-left hover:bg-accent ${c===s?"bg-accent":""}`,children:[jsxRuntime.jsx("div",{className:"font-medium",children:t.title}),t.description&&jsxRuntime.jsx("div",{className:"text-sm text-muted-foreground",children:t.description})]},t.id))})]})}var ua=O;/*! 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/search.js:
|
|
8
|
+
lucide-react/dist/esm/icons/x.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.ElasticSearch=O;exports.default=ua;//# sourceMappingURL=index.js.map
|
|
17
|
+
//# sourceMappingURL=index.js.map
|