@alkimi.org/ui-kit 0.13.2 → 0.13.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/COMPONENTS.md +1 -1
  2. package/dist/chunk-24EJLBGD.js.map +1 -1
  3. package/dist/chunk-372VUZFE.js.map +1 -1
  4. package/dist/chunk-3BVMHDYA.js.map +1 -1
  5. package/dist/chunk-3DUPSGEY.js.map +1 -1
  6. package/dist/chunk-3N5K4X23.js.map +1 -1
  7. package/dist/chunk-3PEPOFYU.js.map +1 -1
  8. package/dist/chunk-5L5DM2X5.js.map +1 -1
  9. package/dist/chunk-5X26XR44.js.map +1 -1
  10. package/dist/chunk-73MWZSJI.js.map +1 -1
  11. package/dist/chunk-7SOZ6MOV.js.map +1 -1
  12. package/dist/chunk-ALSJLUSL.js.map +1 -1
  13. package/dist/chunk-C4GUY2JQ.js.map +1 -1
  14. package/dist/chunk-CT2CRYC2.js.map +1 -1
  15. package/dist/{chunk-QOEM7ZRV.mjs → chunk-CXU655N7.mjs} +2 -2
  16. package/dist/chunk-DEWWZMYC.js.map +1 -1
  17. package/dist/chunk-EBNJXPHG.js.map +1 -1
  18. package/dist/chunk-EIM5R7AJ.js.map +1 -1
  19. package/dist/chunk-ETE5IUMO.js.map +1 -1
  20. package/dist/chunk-FUYXCJOQ.js.map +1 -1
  21. package/dist/{chunk-4DRIPZWE.mjs → chunk-GI7CX63V.mjs} +2 -2
  22. package/dist/chunk-I5INE4KG.js.map +1 -1
  23. package/dist/chunk-IJRJBDSO.js.map +1 -1
  24. package/dist/chunk-IJVB2BVO.js.map +1 -1
  25. package/dist/{chunk-53P3PXF7.js → chunk-JFGDGMTA.js} +2 -2
  26. package/dist/chunk-JFGDGMTA.js.map +1 -0
  27. package/dist/chunk-JOEQLSHD.js.map +1 -1
  28. package/dist/chunk-NCBOTFZQ.js.map +1 -1
  29. package/dist/{chunk-RUEPYIWM.mjs → chunk-O5KQEJGL.mjs} +2 -2
  30. package/dist/{chunk-RUEPYIWM.mjs.map → chunk-O5KQEJGL.mjs.map} +1 -1
  31. package/dist/chunk-PLQY2UFN.mjs +3 -0
  32. package/dist/chunk-PLQY2UFN.mjs.map +1 -0
  33. package/dist/chunk-RJMIOBXZ.js.map +1 -1
  34. package/dist/chunk-RRAIGAHU.js.map +1 -1
  35. package/dist/{chunk-SPGHRCUD.js → chunk-S6HVCOPV.js} +2 -2
  36. package/dist/chunk-S6HVCOPV.js.map +1 -0
  37. package/dist/chunk-TDMRUCR6.js.map +1 -1
  38. package/dist/chunk-UJZP6L4S.js.map +1 -1
  39. package/dist/chunk-ULIOO55I.js.map +1 -1
  40. package/dist/chunk-UNR6ATUH.js.map +1 -1
  41. package/dist/chunk-WFD523CV.js.map +1 -1
  42. package/dist/chunk-WKRZIVSX.js.map +1 -1
  43. package/dist/chunk-WN6ZMWXU.js +3 -0
  44. package/dist/chunk-WN6ZMWXU.js.map +1 -0
  45. package/dist/chunk-WYRD4UAK.js.map +1 -1
  46. package/dist/chunk-XUVA7BXG.js.map +1 -1
  47. package/dist/chunk-XVF3OJWZ.js.map +1 -1
  48. package/dist/chunk-XYO4VLMF.js.map +1 -1
  49. package/dist/chunk-YE7OOLWB.js.map +1 -1
  50. package/dist/{chunk-UW73WIQU.js → chunk-Z56XUN4K.js} +2 -2
  51. package/dist/chunk-Z56XUN4K.js.map +1 -0
  52. package/dist/chunk-Z5V4P3EC.js.map +1 -1
  53. package/dist/components/GeometricFluidGrid.js.map +1 -1
  54. package/dist/components/GlitchLink.d.mts +2 -0
  55. package/dist/components/GlitchLink.d.ts +2 -0
  56. package/dist/components/GlitchLink.js +1 -1
  57. package/dist/components/GlitchLink.js.map +1 -1
  58. package/dist/components/GlitchLink.mjs +1 -1
  59. package/dist/components/PixelLoad.js.map +1 -1
  60. package/dist/components/TextDecoder.js.map +1 -1
  61. package/dist/components/accordion.js.map +1 -1
  62. package/dist/components/avatar.js.map +1 -1
  63. package/dist/components/breadcrumb.js.map +1 -1
  64. package/dist/components/button.d.mts +1 -1
  65. package/dist/components/button.d.ts +1 -1
  66. package/dist/components/button.js.map +1 -1
  67. package/dist/components/calendar.js.map +1 -1
  68. package/dist/components/card.js.map +1 -1
  69. package/dist/components/checkbox.js.map +1 -1
  70. package/dist/components/combobox.js +1 -1
  71. package/dist/components/combobox.js.map +1 -1
  72. package/dist/components/combobox.mjs +1 -1
  73. package/dist/components/command.js +1 -1
  74. package/dist/components/command.js.map +1 -1
  75. package/dist/components/command.mjs +1 -1
  76. package/dist/components/date-picker.js.map +1 -1
  77. package/dist/components/date-range-picker.js.map +1 -1
  78. package/dist/components/dialog.js +1 -1
  79. package/dist/components/dialog.js.map +1 -1
  80. package/dist/components/dialog.mjs +1 -1
  81. package/dist/components/drawer.js.map +1 -1
  82. package/dist/components/dropdown-menu.js.map +1 -1
  83. package/dist/components/field.js.map +1 -1
  84. package/dist/components/file-upload.js.map +1 -1
  85. package/dist/components/input.js.map +1 -1
  86. package/dist/components/label.js.map +1 -1
  87. package/dist/components/popover.js.map +1 -1
  88. package/dist/components/progress.js.map +1 -1
  89. package/dist/components/radio-group.js.map +1 -1
  90. package/dist/components/scroll-area.js.map +1 -1
  91. package/dist/components/separator.js.map +1 -1
  92. package/dist/components/sheet.js.map +1 -1
  93. package/dist/components/sidebar.js.map +1 -1
  94. package/dist/components/skeleton.js.map +1 -1
  95. package/dist/components/slider.js.map +1 -1
  96. package/dist/components/switch.js.map +1 -1
  97. package/dist/components/table.js.map +1 -1
  98. package/dist/components/tabs.js.map +1 -1
  99. package/dist/components/textarea.js.map +1 -1
  100. package/dist/components/toast.js.map +1 -1
  101. package/dist/components/tooltip.js.map +1 -1
  102. package/dist/components/tree-select.js.map +1 -1
  103. package/dist/index.css +1 -1
  104. package/dist/index.css.map +1 -1
  105. package/dist/index.js +1 -1
  106. package/dist/index.js.map +1 -1
  107. package/dist/index.mjs +1 -1
  108. package/dist/styles.css +1 -1
  109. package/dist/styles.css.map +1 -1
  110. package/package.json +1 -1
  111. package/dist/chunk-53P3PXF7.js.map +0 -1
  112. package/dist/chunk-AEZ5XKKG.mjs +0 -3
  113. package/dist/chunk-AEZ5XKKG.mjs.map +0 -1
  114. package/dist/chunk-EJTY2ABY.js +0 -3
  115. package/dist/chunk-EJTY2ABY.js.map +0 -1
  116. package/dist/chunk-SPGHRCUD.js.map +0 -1
  117. package/dist/chunk-UW73WIQU.js.map +0 -1
  118. /package/dist/{chunk-QOEM7ZRV.mjs.map → chunk-CXU655N7.mjs.map} +0 -0
  119. /package/dist/{chunk-4DRIPZWE.mjs.map → chunk-GI7CX63V.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alkimi.org/ui-kit",
3
- "version": "0.13.2",
3
+ "version": "0.13.4",
4
4
  "packageManager": "pnpm@10.26.0",
5
5
  "description": "A React component library built with shadcn/ui and Tailwind CSS",
6
6
  "main": "./dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-53P3PXF7.js","../src/components/dialog.tsx"],"names":["DialogContentContext","Dialog","children","controlledOpen","controlledOnOpenChange","props","internalOpen","setInternalOpen","isControlled","open","onOpenChange","newOpen","jsx","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","className","ref","cn","DialogContent","showCloseButton","closeOnOverlayClick","isDesktop","useMediaQuery","context","jsxs","e","Button","X","DrawerPrimitive","DialogHeader","DialogFooter","DialogTitle","DialogDescription"],"mappings":"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","file":"/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-53P3PXF7.js","sourcesContent":[null,"\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"./button\"\nimport { useMediaQuery } from \"@/lib/use-media-query\"\n\ninterface DialogContentContextValue {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nconst DialogContentContext = React.createContext<DialogContentContextValue>({})\n\nconst Dialog = ({\n children,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) => {\n // Use internal state when Dialog is uncontrolled\n const [internalOpen, setInternalOpen] = React.useState(false)\n\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : internalOpen\n const onOpenChange = isControlled\n ? controlledOnOpenChange\n : (newOpen: boolean) => {\n setInternalOpen(newOpen)\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange} {...props}>\n <DialogContentContext.Provider value={{ open, onOpenChange }}>\n {children}\n </DialogContentContext.Provider>\n </DialogPrimitive.Root>\n )\n}\nDialog.displayName = \"Dialog\"\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n closeOnOverlayClick?: boolean\n }\n>(\n (\n {\n className,\n children,\n showCloseButton = true,\n closeOnOverlayClick = true,\n ...props\n },\n ref\n ) => {\n const isDesktop = useMediaQuery(\"md\")\n const context = React.useContext(DialogContentContext)\n\n if (!isDesktop) {\n // Mobile: Render as bottom drawer\n return (\n <DialogPortal>\n <DrawerPrimitive.Root\n open={context.open}\n onOpenChange={context.onOpenChange}\n dismissible={closeOnOverlayClick}\n >\n <DrawerPrimitive.Portal>\n <DrawerPrimitive.Overlay className=\"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm\" />\n <DrawerPrimitive.Content\n ref={ref as any}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 mt-24 flex flex-col rounded-t-3xl border border-border bg-background shadow-lg outline-none\",\n className\n )}\n aria-describedby={undefined}\n onPointerDownOutside={(e) => {\n if (!closeOnOverlayClick) {\n e.preventDefault()\n }\n }}\n onEscapeKeyDown={(e) => {\n if (!closeOnOverlayClick) {\n e.preventDefault()\n }\n }}\n {...props}\n >\n <div className=\"mx-auto mt-2 h-2 w-[100px] rounded-full bg-muted\" />\n {showCloseButton && (\n <Button\n variant=\"secondary\"\n size=\"icon\"\n onClick={() => context.onOpenChange?.(false)}\n className=\"absolute right-4 top-4 rounded-full transition-opacity hover:opacity-100 focus:outline-none\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </Button>\n )}\n <div>{children}</div>\n </DrawerPrimitive.Content>\n </DrawerPrimitive.Portal>\n </DrawerPrimitive.Root>\n </DialogPortal>\n )\n }\n\n // Desktop: Render as centered dialog\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-3xl overflow-auto\",\n className\n )}\n onPointerDownOutside={(e) => {\n if (!closeOnOverlayClick) {\n e.preventDefault()\n }\n }}\n onEscapeKeyDown={(e) => {\n if (!closeOnOverlayClick) {\n e.preventDefault()\n }\n }}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button\n variant=\"secondary\"\n size=\"icon\"\n className=\"absolute right-4 top-4 rounded-full transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n }\n)\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-left md:text-center\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n"]}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a as k}from"./chunk-S5TKCF6T.mjs";import S from"next/link";import w,{useState as b,useEffect as x,useRef as _,isValidElement as L,useMemo as A}from"react";import{Slot as T}from"@radix-ui/react-slot";import{jsx as r,jsxs as G}from"react/jsx-runtime";var q="!<>-_\\/[]{}\u2014=+*^?#________",C=({href:f,children:a,symbols:m=q,className:N,asChild:R=!1,duration:p=40,...E})=>{let[i,h]=b(!1),[g,c]=b(0),s=_(null),d=_([]),y=t=>{if(typeof t=="string"||typeof t=="number")return String(t);if(L(t)){let e=t.props.children;if(e)return y(e)}return""},o=A(()=>y(a),[a]),v=()=>{let t=[];for(let e=0;e<o.length;e++){let n=o[e],M=Math.floor(Math.random()*(p*.5)),F=M+Math.floor(Math.random()*(p*.5));t.push({to:n,start:M,end:F})}d.current=t,c(0)};x(()=>{if(i&&o){v();let t=()=>{c(e=>e+1),s.current=requestAnimationFrame(t)};s.current=requestAnimationFrame(t)}else s.current&&cancelAnimationFrame(s.current),c(0);return()=>{s.current&&cancelAnimationFrame(s.current)}},[i,o]);let u=()=>i?o.split("").map((t,e)=>{let n=d.current[e];return!n||g>=n.end?r("span",{children:t},e):g>=n.start?t===" "?r("span",{children:" "},e):((!n.char||Math.random()<.28)&&(n.char=m[Math.floor(Math.random()*m.length)]),G("span",{className:"relative inline-block",children:[r("span",{className:"invisible opacity-0","aria-hidden":"true",children:t}),r("span",{className:"absolute inset-0 flex items-center justify-center font-mono opacity-50",children:n.char})]},e)):r("span",{children:t},e)}):a,l={className:k("inline-block whitespace-nowrap",N),onMouseEnter:t=>{let e=t.currentTarget;e&&!e.style.width&&(e.style.width=`${e.offsetWidth}px`),h(!0)},onMouseLeave:()=>h(!1),...E};return R&&L(a)?r(T,{...l,children:w.cloneElement(a,{},u())}):f?r(S,{href:f,...l,children:u()}):r("span",{...l,children:u()})},I=C;export{q as a,I as b};
3
- //# sourceMappingURL=chunk-AEZ5XKKG.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/GlitchLink.tsx"],"sourcesContent":["\"use client\"\nimport Link from \"next/link\"\nimport React, {\n useState,\n useEffect,\n useRef,\n ReactNode,\n isValidElement,\n useMemo,\n} from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cn } from \"@/lib/utils\"\n\nexport const DEFAULT_SYMBOLS = \"!<>-_\\\\/[]{}—=+*^?#________\"\n\ntype GlitchLinkProps = {\n href?: string\n children: ReactNode\n symbols?: string\n className?: string\n asChild?: boolean\n duration?: number\n}\n\nconst GlitchLink = ({\n href,\n children,\n symbols = DEFAULT_SYMBOLS,\n className,\n asChild = false,\n duration = 40,\n ...props\n}: GlitchLinkProps) => {\n const [isHovering, setIsHovering] = useState(false)\n const [frame, setFrame] = useState(0)\n const rafRef = useRef<number | null>(null)\n const queueRef = useRef<\n { to: string; start: number; end: number; char?: string }[]\n >([])\n\n const getTextContent = (node: ReactNode): string => {\n if (typeof node === \"string\" || typeof node === \"number\")\n return String(node)\n if (isValidElement(node)) {\n const children = (node.props as any).children\n if (children) return getTextContent(children)\n }\n return \"\"\n }\n\n const originalText = useMemo(() => getTextContent(children), [children])\n\n const setupQueue = () => {\n const newQueue = []\n for (let i = 0; i < originalText.length; i++) {\n const to = originalText[i]\n const start = Math.floor(Math.random() * (duration * 0.5))\n const end = start + Math.floor(Math.random() * (duration * 0.5))\n newQueue.push({ to, start, end })\n }\n queueRef.current = newQueue\n setFrame(0)\n }\n\n useEffect(() => {\n if (isHovering && originalText) {\n setupQueue()\n const update = () => {\n setFrame((prev) => prev + 1)\n rafRef.current = requestAnimationFrame(update)\n }\n rafRef.current = requestAnimationFrame(update)\n } else {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n setFrame(0)\n }\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [isHovering, originalText])\n\n const renderContent = () => {\n // When not hovering, just render children as-is\n if (!isHovering) {\n return children\n }\n\n // When hovering, apply glitch effect to the text\n return originalText.split(\"\").map((char, i) => {\n const item = queueRef.current[i]\n\n // If animation for this char hasn't started, or it's finished\n if (!item || frame >= item.end) {\n return <span key={i}>{char}</span>\n }\n\n // If we are in the scrambling phase for this specific character\n if (frame >= item.start) {\n // Don't scramble spaces, just render them\n if (char === \" \") {\n return <span key={i}> </span>\n }\n\n if (!item.char || Math.random() < 0.28) {\n item.char = symbols[Math.floor(Math.random() * symbols.length)]\n }\n return (\n <span key={i} className=\"relative inline-block\">\n {/* The invisible real character preserves the exact width */}\n <span className=\"invisible opacity-0\" aria-hidden=\"true\">\n {char}\n </span>\n {/* The absolute symbol sits exactly on top of that width */}\n <span className=\"absolute inset-0 flex items-center justify-center font-mono opacity-50\">\n {item.char}\n </span>\n </span>\n )\n }\n\n // Default: show original character\n return <span key={i}>{char}</span>\n })\n }\n\n const commonProps = {\n className: cn(\"inline-block whitespace-nowrap\", className),\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => {\n const target = e.currentTarget\n if (target && !target.style.width) {\n target.style.width = `${target.offsetWidth}px`\n }\n setIsHovering(true)\n },\n onMouseLeave: () => setIsHovering(false),\n ...props,\n }\n\n if (asChild && isValidElement(children)) {\n return (\n <Slot {...commonProps}>\n {React.cloneElement(children as any, {}, renderContent())}\n </Slot>\n )\n }\n\n // If no href is provided, render as a span instead of a Link\n if (!href) {\n return <span {...commonProps}>{renderContent()}</span>\n }\n\n return (\n <Link href={href} {...commonProps}>\n {renderContent()}\n </Link>\n )\n}\n\nexport default GlitchLink\n"],"mappings":"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","names":["Link","React","useState","useEffect","useRef","isValidElement","useMemo","Slot","jsx","jsxs","DEFAULT_SYMBOLS","GlitchLink","href","children","symbols","className","asChild","duration","props","isHovering","setIsHovering","useState","frame","setFrame","rafRef","useRef","queueRef","getTextContent","node","isValidElement","originalText","useMemo","setupQueue","newQueue","i","to","start","end","useEffect","update","prev","renderContent","char","item","commonProps","cn","e","target","Slot","React","Link","GlitchLink_default"]}
@@ -1,3 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }"use client";
2
- var _chunkFUYXCJOQjs = require('./chunk-FUYXCJOQ.js');var _link = require('next/link'); var _link2 = _interopRequireDefault(_link);var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _reactslot = require('@radix-ui/react-slot');var _jsxruntime = require('react/jsx-runtime');var q="!<>-_\\/[]{}\u2014=+*^?#________",C=({href:f,children:a,symbols:m=q,className:N,asChild:R=!1,duration:p=40,...E})=>{let[i,h]=_react.useState.call(void 0, !1),[g,c]=_react.useState.call(void 0, 0),s=_react.useRef.call(void 0, null),d=_react.useRef.call(void 0, []),y=t=>{if(typeof t=="string"||typeof t=="number")return String(t);if(_react.isValidElement.call(void 0, t)){let e=t.props.children;if(e)return y(e)}return""},o=_react.useMemo.call(void 0, ()=>y(a),[a]),v=()=>{let t=[];for(let e=0;e<o.length;e++){let n=o[e],M=Math.floor(Math.random()*(p*.5)),F=M+Math.floor(Math.random()*(p*.5));t.push({to:n,start:M,end:F})}d.current=t,c(0)};_react.useEffect.call(void 0, ()=>{if(i&&o){v();let t=()=>{c(e=>e+1),s.current=requestAnimationFrame(t)};s.current=requestAnimationFrame(t)}else s.current&&cancelAnimationFrame(s.current),c(0);return()=>{s.current&&cancelAnimationFrame(s.current)}},[i,o]);let u=()=>i?o.split("").map((t,e)=>{let n=d.current[e];return!n||g>=n.end?_jsxruntime.jsx.call(void 0, "span",{children:t},e):g>=n.start?t===" "?_jsxruntime.jsx.call(void 0, "span",{children:" "},e):((!n.char||Math.random()<.28)&&(n.char=m[Math.floor(Math.random()*m.length)]),_jsxruntime.jsxs.call(void 0, "span",{className:"relative inline-block",children:[_jsxruntime.jsx.call(void 0, "span",{className:"invisible opacity-0","aria-hidden":"true",children:t}),_jsxruntime.jsx.call(void 0, "span",{className:"absolute inset-0 flex items-center justify-center font-mono opacity-50",children:n.char})]},e)):_jsxruntime.jsx.call(void 0, "span",{children:t},e)}):a,l={className:_chunkFUYXCJOQjs.a.call(void 0, "inline-block whitespace-nowrap",N),onMouseEnter:t=>{let e=t.currentTarget;e&&!e.style.width&&(e.style.width=`${e.offsetWidth}px`),h(!0)},onMouseLeave:()=>h(!1),...E};return R&&_react.isValidElement.call(void 0, a)?_jsxruntime.jsx.call(void 0, _reactslot.Slot,{...l,children:_react2.default.cloneElement(a,{},u())}):f?_jsxruntime.jsx.call(void 0, _link2.default,{href:f,...l,children:u()}):_jsxruntime.jsx.call(void 0, "span",{...l,children:u()})},I= exports.b =C;exports.a = q; exports.b = I;
3
- //# sourceMappingURL=chunk-EJTY2ABY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-EJTY2ABY.js","../src/components/GlitchLink.tsx"],"names":["DEFAULT_SYMBOLS","GlitchLink","href","children","symbols","className","asChild","duration","props","isHovering","setIsHovering","useState","frame","setFrame","rafRef","useRef","queueRef","getTextContent","node","isValidElement","originalText","useMemo","setupQueue","newQueue","i","to","start","end","useEffect","update","prev","renderContent","char","item","jsx","jsxs","commonProps","cn","e","target"],"mappings":"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","file":"/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-EJTY2ABY.js","sourcesContent":[null,"\"use client\"\nimport Link from \"next/link\"\nimport React, {\n useState,\n useEffect,\n useRef,\n ReactNode,\n isValidElement,\n useMemo,\n} from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cn } from \"@/lib/utils\"\n\nexport const DEFAULT_SYMBOLS = \"!<>-_\\\\/[]{}—=+*^?#________\"\n\ntype GlitchLinkProps = {\n href?: string\n children: ReactNode\n symbols?: string\n className?: string\n asChild?: boolean\n duration?: number\n}\n\nconst GlitchLink = ({\n href,\n children,\n symbols = DEFAULT_SYMBOLS,\n className,\n asChild = false,\n duration = 40,\n ...props\n}: GlitchLinkProps) => {\n const [isHovering, setIsHovering] = useState(false)\n const [frame, setFrame] = useState(0)\n const rafRef = useRef<number | null>(null)\n const queueRef = useRef<\n { to: string; start: number; end: number; char?: string }[]\n >([])\n\n const getTextContent = (node: ReactNode): string => {\n if (typeof node === \"string\" || typeof node === \"number\")\n return String(node)\n if (isValidElement(node)) {\n const children = (node.props as any).children\n if (children) return getTextContent(children)\n }\n return \"\"\n }\n\n const originalText = useMemo(() => getTextContent(children), [children])\n\n const setupQueue = () => {\n const newQueue = []\n for (let i = 0; i < originalText.length; i++) {\n const to = originalText[i]\n const start = Math.floor(Math.random() * (duration * 0.5))\n const end = start + Math.floor(Math.random() * (duration * 0.5))\n newQueue.push({ to, start, end })\n }\n queueRef.current = newQueue\n setFrame(0)\n }\n\n useEffect(() => {\n if (isHovering && originalText) {\n setupQueue()\n const update = () => {\n setFrame((prev) => prev + 1)\n rafRef.current = requestAnimationFrame(update)\n }\n rafRef.current = requestAnimationFrame(update)\n } else {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n setFrame(0)\n }\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [isHovering, originalText])\n\n const renderContent = () => {\n // When not hovering, just render children as-is\n if (!isHovering) {\n return children\n }\n\n // When hovering, apply glitch effect to the text\n return originalText.split(\"\").map((char, i) => {\n const item = queueRef.current[i]\n\n // If animation for this char hasn't started, or it's finished\n if (!item || frame >= item.end) {\n return <span key={i}>{char}</span>\n }\n\n // If we are in the scrambling phase for this specific character\n if (frame >= item.start) {\n // Don't scramble spaces, just render them\n if (char === \" \") {\n return <span key={i}> </span>\n }\n\n if (!item.char || Math.random() < 0.28) {\n item.char = symbols[Math.floor(Math.random() * symbols.length)]\n }\n return (\n <span key={i} className=\"relative inline-block\">\n {/* The invisible real character preserves the exact width */}\n <span className=\"invisible opacity-0\" aria-hidden=\"true\">\n {char}\n </span>\n {/* The absolute symbol sits exactly on top of that width */}\n <span className=\"absolute inset-0 flex items-center justify-center font-mono opacity-50\">\n {item.char}\n </span>\n </span>\n )\n }\n\n // Default: show original character\n return <span key={i}>{char}</span>\n })\n }\n\n const commonProps = {\n className: cn(\"inline-block whitespace-nowrap\", className),\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => {\n const target = e.currentTarget\n if (target && !target.style.width) {\n target.style.width = `${target.offsetWidth}px`\n }\n setIsHovering(true)\n },\n onMouseLeave: () => setIsHovering(false),\n ...props,\n }\n\n if (asChild && isValidElement(children)) {\n return (\n <Slot {...commonProps}>\n {React.cloneElement(children as any, {}, renderContent())}\n </Slot>\n )\n }\n\n // If no href is provided, render as a span instead of a Link\n if (!href) {\n return <span {...commonProps}>{renderContent()}</span>\n }\n\n return (\n <Link href={href} {...commonProps}>\n {renderContent()}\n </Link>\n )\n}\n\nexport default GlitchLink\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-SPGHRCUD.js","../src/components/command.tsx"],"names":["Command","className","props","ref","jsx","CommandPrimitive","cn","CommandDialog","children","Dialog","DialogContent","CommandInput","jsxs","Search","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut"],"mappings":"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","file":"/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-SPGHRCUD.js","sourcesContent":[null,"import * as React from \"react\"\nimport { type DialogProps } from \"@radix-ui/react-dialog\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { Search } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Dialog, DialogContent } from \"@/components/dialog\"\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n))\nCommand.displayName = CommandPrimitive.displayName\n\ninterface CommandDialogProps extends DialogProps {}\n\nconst CommandDialog = ({ children, ...props }: CommandDialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0 shadow-lg\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n))\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-muted aria-selected:text-secondary-foreground active:opacity-50 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 truncate\",\n className\n )}\n {...props}\n />\n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\nCommandShortcut.displayName = \"CommandShortcut\"\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-UW73WIQU.js","../src/components/combobox.tsx"],"names":["ComboboxChips","selectedOptions","onRemove","showRemoveIcon","disabled","className","chipClassName","handleRemove","value","e","jsx","Fragment","option","jsxs","cn","X","Combobox","options","groups","onValueChange","placeholder","searchPlaceholder","emptyMessage","disableLabelControls","error","multiple","values","onValuesChange","variant","searchable","onTriggerClick","showChipRemoveIcon","triggerProps","externalChipsOnly","open","setOpen","isMetrics","effectiveMultiple","allOptions","g","selectedOption","handleSelect","currentValue","newValues","v","handleRemoveValue","valueToRemove","getDisplayText"],"mappings":"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","file":"/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-UW73WIQU.js","sourcesContent":[null,"import * as React from \"react\"\nimport { Check, ChevronDown, Plus, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/components/command\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/popover\"\n\nexport interface ComboboxOption {\n value: string\n label: string\n color?: string\n}\n\nexport interface ComboboxGroup {\n label: string\n options: ComboboxOption[]\n}\n\nexport interface ComboboxProps {\n options?: ComboboxOption[]\n groups?: ComboboxGroup[]\n value?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n searchPlaceholder?: string\n emptyMessage?: string\n disabled?: boolean\n disableLabelControls?: boolean\n className?: string\n error?: boolean\n multiple?: boolean\n values?: string[]\n onValuesChange?: (values: string[]) => void\n variant?: \"default\" | \"metrics\"\n searchable?: boolean\n onTriggerClick?: () => void\n showChipRemoveIcon?: boolean\n triggerProps?: React.ButtonHTMLAttributes<HTMLButtonElement>\n /** When true, external chips are not rendered inside the Combobox. Use ComboboxChips to render them externally. */\n externalChipsOnly?: boolean\n}\n\nexport interface ComboboxChipsProps {\n /** The selected options to display as chips */\n selectedOptions: ComboboxOption[]\n /** Callback when a chip is removed */\n onRemove?: (value: string) => void\n /** Whether to show the remove icon on chips */\n showRemoveIcon?: boolean\n /** Whether the chips are disabled */\n disabled?: boolean\n /** Additional class name for the chip container */\n className?: string\n /** Additional class name for individual chips */\n chipClassName?: string\n}\n\nexport function ComboboxChips({\n selectedOptions,\n onRemove,\n showRemoveIcon = true,\n disabled = false,\n className,\n chipClassName,\n}: ComboboxChipsProps) {\n if (selectedOptions.length === 0) return null\n\n const handleRemove = (value: string, e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n onRemove?.(value)\n }\n\n return (\n <>\n {selectedOptions.map((option) => (\n <div\n key={option.value}\n className={cn(\n \"inline-flex items-center gap-2 rounded-3xl border bg-transparent px-2 lg:px-3 py-1.5 text-sm\",\n disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n className,\n chipClassName\n )}\n style={{ borderColor: option.color || \"var(--border)\" }}\n >\n <span\n className=\"truncate text-xs font-medium\"\n style={{ color: option.color }}\n >\n {option.label}\n </span>\n {showRemoveIcon && !disabled && onRemove && (\n <button\n type=\"button\"\n onClick={(e) => handleRemove(option.value, e)}\n >\n <X\n className=\"size-3.5 cursor-pointer opacity-70 hover:opacity-100\"\n style={{ color: option.color }}\n />\n </button>\n )}\n </div>\n ))}\n </>\n )\n}\n\nexport function Combobox({\n options = [],\n groups,\n value,\n onValueChange,\n placeholder = \"Select option...\",\n searchPlaceholder = \"Search...\",\n emptyMessage = \"No option found.\",\n disabled = false,\n disableLabelControls = false,\n className,\n error = false,\n multiple = false,\n values = [],\n onValuesChange,\n variant = \"default\",\n searchable = true,\n onTriggerClick,\n showChipRemoveIcon = true,\n triggerProps,\n externalChipsOnly = false,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false)\n const isMetrics = variant === \"metrics\"\n const effectiveMultiple = isMetrics ? true : multiple\n\n const allOptions = React.useMemo(() => {\n if (groups) return groups.flatMap((g) => g.options)\n return options\n }, [groups, options])\n\n const selectedOption = allOptions.find((option) => option.value === value)\n const selectedOptions = allOptions.filter((option) =>\n values.includes(option.value)\n )\n\n const handleSelect = (currentValue: string) => {\n if (effectiveMultiple) {\n const newValues = values.includes(currentValue)\n ? values.filter((v) => v !== currentValue)\n : [...values, currentValue]\n onValuesChange?.(newValues)\n } else {\n onValueChange?.(currentValue === value ? \"\" : currentValue)\n setOpen(false)\n }\n }\n\n const handleRemoveValue = (valueToRemove: string, e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n const newValues = values.filter((v) => v !== valueToRemove)\n onValuesChange?.(newValues)\n }\n\n const getDisplayText = () => {\n if (isMetrics) return placeholder\n if (effectiveMultiple) {\n if (selectedOptions.length === 0) return placeholder\n if (selectedOptions.length === 1) return selectedOptions[0].label\n return `${selectedOptions.length} selected`\n }\n return selectedOption ? selectedOption.label : placeholder\n }\n\n const renderOption = (option: ComboboxOption) => {\n const isSelected = effectiveMultiple\n ? values.includes(option.value)\n : value === option.value\n\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n onSelect={handleSelect}\n className=\"rounded-[12px]\"\n >\n <span className=\"truncate\">{option.label}</span>\n <Check\n className={cn(\n \"ml-auto h-4 w-4 shrink-0\",\n isSelected ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n </CommandItem>\n )\n }\n\n const renderSelectedChips = () => {\n if (isMetrics || !effectiveMultiple || selectedOptions.length === 0)\n return null\n\n return (\n <div className=\"px-2 py-1.5\">\n <div className=\"flex flex-wrap gap-1\">\n {selectedOptions.map((option) => (\n <div\n key={option.value}\n className=\"inline-flex items-center gap-1 rounded-md bg-secondary px-2 py-0.5 text-xs\"\n >\n <span className=\"truncate\">{option.label}</span>\n <X\n className=\"h-3 w-3 cursor-pointer\"\n onClick={(e) => handleRemoveValue(option.value, e)}\n />\n </div>\n ))}\n </div>\n </div>\n )\n }\n\n const renderExternalChips = () => {\n if (!isMetrics || externalChipsOnly || selectedOptions.length === 0)\n return null\n\n const canRemove = showChipRemoveIcon && !disabled && !disableLabelControls\n\n return (\n <ComboboxChips\n selectedOptions={selectedOptions}\n onRemove={canRemove ? handleRemoveChip : undefined}\n showRemoveIcon={canRemove}\n disabled={disabled || disableLabelControls}\n />\n )\n }\n\n const handleRemoveChip = (valueToRemove: string) => {\n const newValues = values.filter((v) => v !== valueToRemove)\n onValuesChange?.(newValues)\n }\n\n const popover = (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n {...triggerProps}\n onClick={\n onTriggerClick\n ? (e) => {\n e.preventDefault()\n onTriggerClick()\n }\n : undefined\n }\n className={cn(\n \"cursor-pointer flex h-8 lg:h-9 items-center justify-between rounded-3xl border border-border bg-background hover:bg-secondary px-2 lg:px-4 py-2 text-sm text-primary-accent ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 active:opacity-50 disabled:cursor-not-allowed disabled:opacity-50\",\n !isMetrics && \"my-2 w-full\",\n isMetrics && \"w-auto gap-2\",\n !value && !values.length && \"text-secondary-text\",\n error &&\n \"border-destructive-foreground focus-visible:ring-destructive-foreground\",\n isMetrics &&\n \"bg-muted text-primary-accent hover:bg-muted/20 border-muted text-xs font-medium\",\n className\n )}\n >\n {isMetrics && <Plus className=\"h-4 w-4 shrink-0\" />}\n <span className=\"truncate\">{getDisplayText()}</span>\n {!isMetrics && (\n <ChevronDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"overflow-hidden rounded-xl p-0\"\n align=\"start\"\n style={\n isMetrics\n ? { minWidth: 200 }\n : { width: \"var(--radix-popover-trigger-width)\" }\n }\n >\n <Command>\n {searchable && <CommandInput placeholder={searchPlaceholder} />}\n <CommandList>\n <CommandEmpty>{emptyMessage}</CommandEmpty>\n {groups ? (\n <>\n {renderSelectedChips()}\n {groups.map((group) => (\n <CommandGroup key={group.label} heading={group.label}>\n {group.options.map(renderOption)}\n </CommandGroup>\n ))}\n </>\n ) : (\n <CommandGroup>\n {renderSelectedChips()}\n {options.map(renderOption)}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n\n if (isMetrics) {\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n {popover}\n {renderExternalChips()}\n </div>\n )\n }\n\n return popover\n}\n"]}