@humain/ui 2.1.63 → 2.1.65
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/components/organisms/ai/AIToolCall/AIToolCall.d.ts +9 -3
- package/dist/components/organisms/ai/AIToolRun/index.d.ts +1 -1
- package/dist/components/organisms/ai/AIToolRun/validation.d.ts +24 -3
- package/dist/components/organisms/ai/_shared/format-ai-duration.d.ts +1 -0
- package/dist/components/organisms/ai/_shared/workflow-step-renderer.d.ts +1 -0
- package/dist/index.js +52 -52
- package/dist/index151.js +1 -1
- package/dist/index174.js +7 -339
- package/dist/index174.js.map +1 -1
- package/dist/index175.js +310 -137
- package/dist/index175.js.map +1 -1
- package/dist/index176.js +148 -174
- package/dist/index176.js.map +1 -1
- package/dist/index177.js +186 -78
- package/dist/index177.js.map +1 -1
- package/dist/index178.js +74 -124
- package/dist/index178.js.map +1 -1
- package/dist/index179.js +133 -1
- package/dist/index179.js.map +1 -0
- package/dist/index180.js +2 -201
- package/dist/index181.js +201 -0
- package/dist/{index180.js.map → index181.js.map} +1 -1
- package/dist/index183.js +130 -166
- package/dist/index183.js.map +1 -1
- package/dist/index184.js +195 -983
- package/dist/index184.js.map +1 -1
- package/dist/index185.js +1069 -369
- package/dist/index185.js.map +1 -1
- package/dist/index186.js +395 -197
- package/dist/index186.js.map +1 -1
- package/dist/index187.js +198 -243
- package/dist/index187.js.map +1 -1
- package/dist/index188.js +263 -3
- package/dist/index188.js.map +1 -1
- package/dist/index189.js +3 -209
- package/dist/index189.js.map +1 -1
- package/dist/index190.js +190 -777
- package/dist/index190.js.map +1 -1
- package/dist/index191.js +771 -252
- package/dist/index191.js.map +1 -1
- package/dist/index192.js +250 -65
- package/dist/index192.js.map +1 -1
- package/dist/index193.js +72 -523
- package/dist/index193.js.map +1 -1
- package/dist/index194.js +537 -144
- package/dist/index194.js.map +1 -1
- package/dist/index195.js +139 -720
- package/dist/index195.js.map +1 -1
- package/dist/index196.js +707 -167
- package/dist/index196.js.map +1 -1
- package/dist/index197.js +175 -151
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +152 -487
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +472 -225
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +236 -260
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +265 -215
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +207 -307
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +302 -135
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +140 -271
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +263 -253
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +244 -137
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +100 -238
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +278 -74
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +56 -97
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +142 -47
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +38 -84
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +72 -252
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +274 -26
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +29 -94
- package/dist/index214.js.map +1 -1
- package/dist/index215.js +98 -25
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +20 -565
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +564 -17
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +20 -23
- package/dist/index218.js.map +1 -1
- package/dist/index219.js +20 -95
- package/dist/index219.js.map +1 -1
- package/dist/index220.js +92 -88
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +97 -29
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +24 -470
- package/dist/index222.js.map +1 -1
- package/dist/index223.js +446 -196
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +199 -729
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +750 -61
- package/dist/index225.js.map +1 -1
- package/dist/index226.js +58 -181
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +175 -259
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +246 -172
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +195 -32
- package/dist/index229.js.map +1 -1
- package/dist/index230.js +12 -40
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +23 -26
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +45 -22
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +27 -48
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +52 -26
- package/dist/index234.js.map +1 -1
- package/dist/index235.js +40 -225
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +217 -39
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +50 -0
- package/dist/index237.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/wc/AIToolCall.js +218 -0
- package/dist/wc/AIToolCall.js.map +1 -0
- package/dist/wc/hf-ai-tool-call.js +34 -219
- package/dist/wc/hf-ai-tool-call.js.map +1 -1
- package/dist/wc/hf-ai-tool-run.js +673 -576
- package/dist/wc/hf-ai-tool-run.js.map +1 -1
- package/dist/wc/workflow-step-renderer.js +79 -78
- package/dist/wc/workflow-step-renderer.js.map +1 -1
- package/dist/wc-react/AIToolCall.js +218 -0
- package/dist/wc-react/AIToolCall.js.map +1 -0
- package/dist/wc-react/hf-ai-tool-call.js +32 -217
- package/dist/wc-react/hf-ai-tool-call.js.map +1 -1
- package/dist/wc-react/hf-ai-tool-run.js +698 -601
- package/dist/wc-react/hf-ai-tool-run.js.map +1 -1
- package/dist/wc-react/workflow-step-renderer.js +58 -57
- package/dist/wc-react/workflow-step-renderer.js.map +1 -1
- package/package.json +1 -1
- package/skills/humain-ui/SKILL.md +1 -1
- package/skills/humain-ui-wc/SKILL.md +1 -1
- package/skills/humain-ui-wc.skill +0 -0
- package/skills/humain-ui.skill +0 -0
- package/dist/index182.js +0 -143
- package/dist/index182.js.map +0 -1
- package/dist/wc/wrench.js +0 -10
- package/dist/wc/wrench.js.map +0 -1
- package/dist/wc-react/wrench.js +0 -10
- package/dist/wc-react/wrench.js.map +0 -1
package/dist/index192.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index192.js","names":[],"sources":["../src/components/organisms/content/DataTable/DataTableToolbar.tsx"],"sourcesContent":["import { MoreVertical, Search } from 'lucide-react';\nimport type * as React from 'react';\nimport { Button } from '@/components/atoms/buttons/Button';\nimport { Input } from '@/components/atoms/forms/Input';\nimport { DropdownMenu } from '@/components/organisms/menus/DropdownMenu';\nimport { cn } from '@/lib/utils';\nimport { dataTableTouchTargetClassName } from './DataTableHitArea';\n\nexport type DataTableToolbarProps = React.ComponentPropsWithoutRef<'div'>;\n\nfunction DataTableToolbarRoot({\n className,\n children,\n ...props\n}: DataTableToolbarProps): React.JSX.Element {\n return (\n <div\n data-slot=\"data-table-toolbar\"\n className={cn(\n 'grid grid-cols-[minmax(0,1fr)_auto] items-start gap-x-4 gap-y-1 border-b border-border px-6 py-4',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\nDataTableToolbarRoot.displayName = 'DataTableToolbar';\n\nexport interface DataTableToolbarTitleProps\n extends React.ComponentPropsWithoutRef<'h3'> {\n icon?: React.ReactNode;\n}\n\nfunction Title({\n className,\n icon,\n children,\n ...props\n}: DataTableToolbarTitleProps): React.JSX.Element {\n return (\n <h3\n data-slot=\"data-table-toolbar\"\n className={cn(\n 'col-start-1 row-start-1 flex min-w-0 items-center gap-2 text-lg font-semibold text-foreground',\n className,\n )}\n {...props}\n >\n {icon && (\n <span className=\"flex size-10 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary [&>svg]:size-5\">\n {icon}\n </span>\n )}\n {children}\n </h3>\n );\n}\nTitle.displayName = 'DataTableToolbar.Title';\n\nexport type DataTableToolbarDescriptionProps =\n React.ComponentPropsWithoutRef<'p'>;\n\nfunction Description({\n className,\n children,\n ...props\n}: DataTableToolbarDescriptionProps): React.JSX.Element {\n return (\n <p\n data-slot=\"data-table-toolbar\"\n className={cn(\n 'col-start-1 row-start-2 min-w-0 text-sm text-muted-foreground',\n className,\n )}\n {...props}\n >\n {children}\n </p>\n );\n}\nDescription.displayName = 'DataTableToolbar.Description';\n\nexport type DataTableToolbarActionsProps =\n React.ComponentPropsWithoutRef<'div'>;\n\nfunction Actions({\n className,\n children,\n ...props\n}: DataTableToolbarActionsProps): React.JSX.Element {\n return (\n <div\n data-slot=\"data-table-toolbar\"\n className={cn(\n 'col-start-2 row-span-2 row-start-1 ms-auto flex flex-wrap items-center justify-end gap-2',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\nActions.displayName = 'DataTableToolbar.Actions';\n\nexport interface DataTableToolbarKebabProps\n extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n}\n\nfunction Kebab({\n className,\n children,\n ...props\n}: DataTableToolbarKebabProps): React.JSX.Element {\n return (\n <div data-slot=\"data-table-toolbar\" className={className} {...props}>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button\n appearance=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"More options\"\n className={dataTableTouchTargetClassName}\n >\n <MoreVertical />\n </Button>\n }\n />\n <DropdownMenu.Portal>\n <DropdownMenu.Popup>{children}</DropdownMenu.Popup>\n </DropdownMenu.Portal>\n </DropdownMenu>\n </div>\n );\n}\nKebab.displayName = 'DataTableToolbar.Kebab';\n\nexport type DataTableToolbarFiltersProps =\n React.ComponentPropsWithoutRef<'div'>;\n\nfunction Filters({\n className,\n children,\n ...props\n}: DataTableToolbarFiltersProps): React.JSX.Element {\n return (\n <div\n data-slot=\"data-table-toolbar\"\n className={cn(\n 'col-span-full mt-3 flex w-full flex-wrap items-center gap-3',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\nFilters.displayName = 'DataTableToolbar.Filters';\n\nexport type DataTableToolbarSearchProps = Omit<\n React.ComponentPropsWithoutRef<typeof Input>,\n 'size' | 'startIcon'\n>;\n\nfunction SearchInput({\n className,\n ...props\n}: DataTableToolbarSearchProps): React.JSX.Element {\n return (\n <Input\n data-slot=\"data-table-toolbar\"\n size=\"sm\"\n startIcon={<Search />}\n className={cn('w-56', className)}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n {...props}\n />\n );\n}\nSearchInput.displayName = 'DataTableToolbar.Search';\n\nexport const DataTableToolbar = Object.assign(DataTableToolbarRoot, {\n Title,\n Description,\n Actions,\n Kebab,\n Filters,\n Search: SearchInput,\n});\n"],"mappings":";;;;;;;;AAUA,SAAS,qBAAqB,EAC5B,WACA,UACA,GAAG,SACwC;CAC3C,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,oGACA,SACF;EACA,GAAI;EAEH;CACE,CAAA;AAET;AACA,qBAAqB,cAAc;AAOnC,SAAS,MAAM,EACb,WACA,MACA,UACA,GAAG,SAC6C;CAChD,OACE,qBAAC,MAAD;EACE,aAAU;EACV,WAAW,GACT,iGACA,SACF;EACA,GAAI;YANN,CAQG,QACC,oBAAC,QAAD;GAAM,WAAU;aACb;EACG,CAAA,GAEP,QACC;;AAER;AACA,MAAM,cAAc;AAKpB,SAAS,YAAY,EACnB,WACA,UACA,GAAG,SACmD;CACtD,OACE,oBAAC,KAAD;EACE,aAAU;EACV,WAAW,GACT,iEACA,SACF;EACA,GAAI;EAEH;CACA,CAAA;AAEP;AACA,YAAY,cAAc;AAK1B,SAAS,QAAQ,EACf,WACA,UACA,GAAG,SAC+C;CAClD,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,4FACA,SACF;EACA,GAAI;EAEH;CACE,CAAA;AAET;AACA,QAAQ,cAAc;AAOtB,SAAS,MAAM,EACb,WACA,UACA,GAAG,SAC6C;CAChD,OACE,oBAAC,OAAD;EAAK,aAAU;EAAgC;EAAW,GAAI;YAC5D,qBAAC,cAAD,EAAA,UAAA,CACE,oBAAC,aAAa,SAAd,EACE,QACE,oBAAC,QAAD;GACE,YAAW;GACX,MAAK;GACL,cAAW;GACX,WAAW;aAEX,oBAAC,cAAD,CAAe,CAAA;EACT,CAAA,EAEX,CAAA,GACD,oBAAC,aAAa,QAAd,EAAA,UACE,oBAAC,aAAa,OAAd,EAAqB,SAA6B,CAAA,EAC/B,CAAA,CACT,EAAA,CAAA;CACX,CAAA;AAET;AACA,MAAM,cAAc;AAKpB,SAAS,QAAQ,EACf,WACA,UACA,GAAG,SAC+C;CAClD,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,+DACA,SACF;EACA,GAAI;EAEH;CACE,CAAA;AAET;AACA,QAAQ,cAAc;AAOtB,SAAS,YAAY,EACnB,WACA,GAAG,SAC8C;CACjD,OACE,oBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,WAAW,oBAAC,QAAD,CAAS,CAAA;EACpB,WAAW,GAAG,QAAQ,SAAS;EAC/B,aAAY;EACZ,cAAW;EACX,GAAI;CACL,CAAA;AAEL;AACA,YAAY,cAAc;AAE1B,IAAa,mBAAmB,OAAO,OAAO,sBAAsB;CAClE;CACA;CACA;CACA;CACA;CACA,QAAQ;AACV,CAAC"}
|
|
1
|
+
{"version":3,"file":"index192.js","names":[],"sources":["../src/components/organisms/menus/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["'use client';\n\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport { Check, ChevronRight } from 'lucide-react';\nimport type * as React from 'react';\nimport { Kbd } from '@/components/molecules/data/Kbd';\nimport { cn } from '@/lib/utils';\n\n// ============================================================================\n// Base Primitives\n// ============================================================================\n\nfunction DropdownMenuRoot({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu-root\" {...props} />;\n}\nDropdownMenuRoot.displayName = 'DropdownMenu.Root';\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\nDropdownMenuPortal.displayName = 'DropdownMenu.Portal';\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\nDropdownMenuTrigger.displayName = 'DropdownMenu.Trigger';\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\nDropdownMenuGroup.displayName = 'DropdownMenu.Group';\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />;\n}\nDropdownMenuSub.displayName = 'DropdownMenu.Sub';\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-2 text-sm [&_svg:not([class*='size-'])]:size-4 group/dd-sub flex cursor-default items-center outline-hidden select-none data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 transition-[color,background-color,transform] duration-150 active:scale-[0.99]\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ms-auto rtl:rotate-180 transition-transform duration-150 group-data-open/dd-sub:translate-x-0.5\" />\n </MenuPrimitive.SubmenuTrigger>\n );\n}\nDropdownMenuSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n );\n}\nDropdownMenuRadioGroup.displayName = 'DropdownMenu.RadioGroup';\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-sm py-2 pe-8 ps-2 text-sm [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 transition-colors duration-150\",\n className,\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute end-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator className=\"animate-in zoom-in-75 duration-150 motion-reduce:animate-none\">\n <Check />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n );\n}\nDropdownMenuRadioItem.displayName = 'DropdownMenu.RadioItem';\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-sm py-2 pe-8 ps-2 text-sm [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 transition-colors duration-150\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute end-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator className=\"animate-in zoom-in-75 duration-150 motion-reduce:animate-none\">\n <Check />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n );\n}\nDropdownMenuCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n 'text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ms-auto text-xs tracking-widest',\n className,\n )}\n {...props}\n />\n );\n}\nDropdownMenuShortcut.displayName = 'DropdownMenu.Shortcut';\n\n// ============================================================================\n// Enhanced Components\n// ============================================================================\n\n// Width variant classes for popup\nconst popupWidthClasses = {\n auto: '',\n sm: 'w-48',\n md: 'w-56',\n lg: 'w-64',\n};\n\n/**\n * Enhanced DropdownMenuPopup with HumainOS styling\n */\nexport interface DropdownMenuPopupProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Menu content */\n children?: React.ReactNode;\n /** Width of the dropdown menu */\n width?: 'auto' | 'sm' | 'md' | 'lg';\n /** Side offset from the trigger */\n sideOffset?: number;\n /** Side to show the menu on */\n side?: 'top' | 'right' | 'bottom' | 'left';\n /** Alignment of the menu */\n align?: 'start' | 'center' | 'end';\n /** Align offset */\n alignOffset?: number;\n}\n\nfunction DropdownMenuPopup({\n align = 'start',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = 4,\n width = 'auto',\n className,\n ...props\n}: DropdownMenuPopupProps) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-popup\"\n className={cn(\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n 'border border-border bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-sm z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto outline-none data-closed:overflow-hidden',\n 'duration-200 motion-reduce:animate-none',\n popupWidthClasses[width],\n className,\n )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n}\nDropdownMenuPopup.displayName = 'DropdownMenu.Popup';\n\nfunction DropdownMenuSubPopup({\n align = 'start',\n alignOffset = -3,\n side = 'right',\n sideOffset = 0,\n className,\n ...props\n}: DropdownMenuPopupProps) {\n return (\n <DropdownMenuPopup\n data-slot=\"dropdown-menu-sub-popup\"\n className={cn('min-w-[96px] w-auto', className)}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n );\n}\nDropdownMenuSubPopup.displayName = 'DropdownMenu.SubPopup';\n\n/**\n * Header section for dropdown menu with avatar and user info\n */\nexport interface DropdownMenuHeaderProps extends React.ComponentProps<'div'> {\n /** Avatar element to display */\n avatar?: React.ReactNode;\n /** Primary text (e.g., user name) */\n title?: string;\n /** Secondary text (e.g., email) */\n subtitle?: string;\n}\n\nfunction DropdownMenuHeader({\n className,\n avatar,\n title,\n subtitle,\n children,\n ...props\n}: DropdownMenuHeaderProps) {\n if (children) {\n return (\n <div\n data-slot=\"dropdown-menu-header\"\n className={cn('border-b border-border px-4 py-3', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"dropdown-menu-header\"\n className={cn('border-b border-border px-4 py-3', className)}\n {...props}\n >\n <div className=\"flex items-center gap-3\">\n {avatar}\n <div className=\"flex flex-col min-w-0\">\n {title && (\n <span className=\"text-sm font-semibold text-foreground truncate\">\n {title}\n </span>\n )}\n {subtitle && (\n <span className=\"text-sm text-muted-foreground truncate\">\n {subtitle}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n}\nDropdownMenuHeader.displayName = 'DropdownMenu.Header';\n\nexport interface DropdownMenuLabelProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether the label is inset */\n inset?: boolean;\n}\n\n/**\n * Enhanced DropdownMenuLabel\n */\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: DropdownMenuLabelProps) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n 'px-4 py-2 text-xs font-medium text-text-quaternary uppercase tracking-wider',\n 'data-[inset]:ps-8',\n className,\n )}\n {...props}\n />\n );\n}\nDropdownMenuLabel.displayName = 'DropdownMenu.Label';\n\n/**\n * Enhanced DropdownMenuItem with icon and shortcut support\n */\nexport interface DropdownMenuItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** Item content */\n children?: React.ReactNode;\n /** Icon displayed before the label */\n icon?: React.ReactNode;\n /** Keyboard shortcut displayed on the right */\n shortcut?: string;\n /** Makes the item destructive (red text) */\n destructive?: boolean;\n /** Whether the item is disabled */\n disabled?: boolean;\n /**\n * Render as a different element (Base UI pattern).\n * Use this to render as a custom component like Link or anchor.\n * @example render={<Link to=\"/profile\" />}\n */\n render?: React.ReactElement;\n /** Whether the item is inset */\n inset?: boolean;\n /** Variant for styling */\n variant?: 'default' | 'destructive';\n}\n\nfunction DropdownMenuItem({\n className,\n icon,\n shortcut,\n destructive = false,\n render,\n inset,\n variant = 'default',\n children,\n ...props\n}: DropdownMenuItemProps) {\n const isDestructive = destructive || variant === 'destructive';\n\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={isDestructive ? 'destructive' : variant}\n className={cn(\n 'group/dropdown-menu-item relative flex items-center gap-2 mx-1.5 px-2.5 py-2 rounded-md cursor-pointer outline-none',\n 'text-sm font-semibold text-secondary-foreground',\n 'focus:bg-muted focus:text-secondary-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n 'data-[inset]:ps-8',\n \"[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n 'transition-[color,background-color,transform] duration-150 active:scale-[0.99]',\n isDestructive &&\n 'text-destructive focus:text-destructive focus:bg-destructive/10',\n className,\n )}\n render={render}\n {...props}\n >\n {icon && (\n <span\n className={cn(\n 'size-4 shrink-0 transition-colors duration-150',\n isDestructive\n ? 'text-destructive'\n : 'text-text-quaternary group-focus/dropdown-menu-item:text-secondary-foreground',\n )}\n >\n {icon}\n </span>\n )}\n <span className=\"flex-1\">{children}</span>\n {shortcut && (\n <DropdownMenuShortcutBadge className=\"transition-colors duration-150 group-focus/dropdown-menu-item:bg-primary/10 group-focus/dropdown-menu-item:text-primary\">\n {shortcut}\n </DropdownMenuShortcutBadge>\n )}\n </MenuPrimitive.Item>\n );\n}\nDropdownMenuItem.displayName = 'DropdownMenu.Item';\n\nexport interface DropdownMenuSeparatorProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Enhanced DropdownMenuSeparator\n */\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: DropdownMenuSeparatorProps) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('my-1 h-px bg-surface-2', className)}\n {...props}\n />\n );\n}\nDropdownMenuSeparator.displayName = 'DropdownMenu.Separator';\n\nexport interface DropdownMenuItemsProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for menu items with proper padding\n */\nfunction DropdownMenuItems({\n className,\n children,\n ...props\n}: DropdownMenuItemsProps) {\n return (\n <div\n data-slot=\"dropdown-menu-items\"\n className={cn('py-1', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\nDropdownMenuItems.displayName = 'DropdownMenu.Items';\n\n/**\n * Styled shortcut badge that matches Figma design (uses Kbd wrapper)\n */\nfunction DropdownMenuShortcutBadge({\n className,\n children,\n ...props\n}: React.ComponentProps<'kbd'>) {\n return (\n <Kbd variant=\"outline\" size=\"xs\" className={className} {...props}>\n {children}\n </Kbd>\n );\n}\nDropdownMenuShortcutBadge.displayName = 'DropdownMenu.ShortcutBadge';\n\n// ============================================================================\n// SimpleDropdownMenu (with trigger prop pattern)\n// ============================================================================\n\nexport interface SimpleDropdownMenuProps {\n /** The element that triggers the dropdown (required) */\n trigger: React.ReactElement;\n /** Dropdown content (typically DropdownMenu.Popup component) */\n children?: React.ReactNode;\n /** Controlled open state. When provided, component is controlled. */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n}\n\n/**\n * Simplified DropdownMenu component with explicit trigger prop.\n * Prevents nested button hydration errors by using base-ui's render prop.\n *\n * @example\n * <SimpleDropdownMenu trigger={<Button>Menu</Button>}>\n * <DropdownMenu.Popup>\n * <DropdownMenu.Items>\n * <DropdownMenu.Item>Option 1</DropdownMenu.Item>\n * </DropdownMenu.Items>\n * </DropdownMenu.Popup>\n * </SimpleDropdownMenu>\n */\nfunction SimpleDropdownMenu({\n trigger,\n open,\n onOpenChange,\n children,\n}: SimpleDropdownMenuProps) {\n return (\n <DropdownMenuRoot open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger render={trigger} />\n {children}\n </DropdownMenuRoot>\n );\n}\nSimpleDropdownMenu.displayName = 'DropdownMenu.Simple';\n\n// ============================================================================\n// Compound Export (Dot Notation Pattern)\n// ============================================================================\n\nexport const DropdownMenu = Object.assign(DropdownMenuRoot, {\n Root: DropdownMenuRoot,\n Portal: DropdownMenuPortal,\n Trigger: DropdownMenuTrigger,\n Popup: DropdownMenuPopup,\n Group: DropdownMenuGroup,\n Label: DropdownMenuLabel,\n Item: DropdownMenuItem,\n CheckboxItem: DropdownMenuCheckboxItem,\n RadioGroup: DropdownMenuRadioGroup,\n RadioItem: DropdownMenuRadioItem,\n Separator: DropdownMenuSeparator,\n Shortcut: DropdownMenuShortcut,\n ShortcutBadge: DropdownMenuShortcutBadge,\n Sub: DropdownMenuSub,\n SubTrigger: DropdownMenuSubTrigger,\n SubPopup: DropdownMenuSubPopup,\n Header: DropdownMenuHeader,\n Items: DropdownMenuItems,\n Simple: SimpleDropdownMenu,\n});\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type DropdownMenuPopupWrapperProps = DropdownMenuPopupProps;\nexport type DropdownMenuItemWrapperProps = DropdownMenuItemProps;\nexport type DropdownMenuHeaderWrapperProps = DropdownMenuHeaderProps;\n"],"mappings":"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"}
|