@humain/ui 2.1.62 → 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 +10 -333
- 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 +94 -86
- 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 +76 -68
- 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/index194.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index194.js","names":[],"sources":["../src/components/organisms/content/GroupingControls/GroupingControls.tsx"],"sourcesContent":["'use client';\n\nimport type { Column, Table } from '@tanstack/react-table';\nimport { Check, ChevronDown, Plus } from 'lucide-react';\nimport * as React from 'react';\nimport { Tag } from '@/components/molecules/data/Tag';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport { Popover, PopoverPopup, PopoverTrigger } from '@/components/ui/popover';\nimport { cn } from '@/lib/utils';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface GroupingControlsProps<TData> {\n /** The TanStack Table instance */\n table: Table<TData>;\n /** List of column IDs that can be grouped. If not provided, uses columns with enableGrouping: true */\n groupableColumns?: string[];\n /** Placeholder text when no grouping is selected */\n placeholder?: string;\n /** Maximum number of grouping levels allowed */\n maxLevels?: number;\n /** Visual variant of the control */\n variant: 'dropdown' | 'chips';\n /** Size variant */\n size?: 'sm' | 'md';\n /** Additional class name */\n className?: string;\n}\n\ninterface GroupableColumn {\n id: string;\n label: string;\n}\n\n// ============================================\n// GroupingControls Component\n// ============================================\n\nfunction GroupingControls<TData>({\n table,\n groupableColumns: groupableColumnsProp,\n placeholder = 'Group by...',\n maxLevels,\n variant,\n size = 'md',\n className,\n}: GroupingControlsProps<TData>) {\n const [open, setOpen] = React.useState(false);\n\n // Get current grouping state from table\n const grouping = table.getState().grouping;\n\n // Get all groupable columns from the table\n const allGroupableColumns = React.useMemo((): GroupableColumn[] => {\n const columns = table.getAllColumns();\n\n // Filter to columns that can be grouped\n const groupable = columns.filter((col: Column<TData, unknown>) => {\n // If groupableColumns prop is provided, use that\n if (groupableColumnsProp) {\n return groupableColumnsProp.includes(col.id);\n }\n // Otherwise, use column's enableGrouping setting\n return col.getCanGroup();\n });\n\n return groupable.map((col: Column<TData, unknown>) => ({\n id: col.id,\n label:\n typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id.charAt(0).toUpperCase() + col.id.slice(1),\n }));\n }, [table, groupableColumnsProp]);\n\n // Check if max levels reached\n const isMaxLevelsReached =\n maxLevels !== undefined && grouping.length >= maxLevels;\n\n // Get display label for selected columns\n const displayLabel = React.useMemo(() => {\n if (grouping.length === 0) return placeholder;\n\n return grouping\n .map((id) => {\n const col = allGroupableColumns.find((c) => c.id === id);\n return col?.label || id;\n })\n .join(', ');\n }, [grouping, allGroupableColumns, placeholder]);\n\n // Handle column selection/deselection\n const handleSelect = React.useCallback(\n (columnId: string) => {\n const currentIndex = grouping.indexOf(columnId);\n\n if (currentIndex >= 0) {\n // Deselect: remove from grouping\n const newGrouping = grouping.filter((id) => id !== columnId);\n table.setGrouping(newGrouping);\n } else {\n // Select: add to grouping (respecting maxLevels)\n if (maxLevels !== undefined && grouping.length >= maxLevels) {\n return; // Don't add if max levels reached\n }\n const newGrouping = [...grouping, columnId];\n table.setGrouping(newGrouping);\n }\n },\n [grouping, table, maxLevels],\n );\n\n // Get selection order for a column (1-indexed)\n const getSelectionOrder = (columnId: string): number | null => {\n const index = grouping.indexOf(columnId);\n return index >= 0 ? index + 1 : null;\n };\n\n // Get available columns (not yet in grouping)\n const availableColumns = React.useMemo(() => {\n return allGroupableColumns.filter((col) => !grouping.includes(col.id));\n }, [allGroupableColumns, grouping]);\n\n // Handle removing a column from grouping\n const handleRemove = React.useCallback(\n (columnId: string) => {\n const newGrouping = grouping.filter((id) => id !== columnId);\n table.setGrouping(newGrouping);\n },\n [grouping, table],\n );\n\n // Handle adding a column via the add button dropdown\n const handleAddColumn = React.useCallback(\n (columnId: string) => {\n if (maxLevels !== undefined && grouping.length >= maxLevels) {\n return;\n }\n const newGrouping = [...grouping, columnId];\n table.setGrouping(newGrouping);\n setOpen(false);\n },\n [grouping, table, maxLevels],\n );\n\n if (variant === 'chips') {\n const showAddButton = availableColumns.length > 0 && !isMaxLevelsReached;\n\n const addColumnPopover = showAddButton ? (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n className={cn(\n 'inline-flex items-center justify-center rounded-md',\n 'border border-dashed border-input bg-background',\n 'hover:bg-accent hover:border-solid',\n 'transition-[background-color,border-color] duration-150 ease-out motion-reduce:transition-none',\n size === 'sm' ? 'h-6 px-2 text-xs' : 'h-7 px-2 text-sm',\n )}\n aria-label=\"Add grouping\"\n >\n <Plus\n className={cn(\n 'size-3.5 transition-transform duration-200 motion-reduce:transition-none',\n open && 'rotate-45',\n )}\n />\n </PopoverTrigger>\n <PopoverPopup\n side=\"bottom\"\n align=\"start\"\n className=\"min-w-[180px] w-max max-w-[280px] p-0\"\n >\n <Command>\n <CommandList>\n <CommandEmpty>No columns available</CommandEmpty>\n <CommandGroup>\n {availableColumns.map((column) => (\n <CommandItem\n key={column.id}\n value={column.id}\n onSelect={() => handleAddColumn(column.id)}\n className=\"cursor-pointer\"\n >\n {column.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverPopup>\n </Popover>\n ) : null;\n\n return (\n <div\n data-slot=\"grouping-controls\"\n role=\"toolbar\"\n aria-label=\"Grouping controls\"\n className={cn('flex flex-wrap items-center gap-2', className)}\n >\n {grouping.length === 0 ? (\n <span className=\"text-sm text-muted-foreground\">{placeholder}</span>\n ) : (\n grouping.map((columnId) => {\n const column = allGroupableColumns.find((c) => c.id === columnId);\n if (!column) return null;\n\n return (\n <Tag\n key={columnId}\n size={size === 'sm' ? 'sm' : 'md'}\n removable\n onRemove={() => handleRemove(columnId)}\n >\n {column.label}\n </Tag>\n );\n })\n )}\n {addColumnPopover}\n </div>\n );\n }\n\n // Dropdown variant\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n data-slot=\"grouping-controls\"\n aria-label=\"Group by column\"\n className={cn(\n 'inline-flex items-center justify-between gap-2 whitespace-nowrap',\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n 'rounded-md font-medium',\n 'transition-[color,background-color,border-color,transform] duration-150 ease-out motion-reduce:transition-none',\n 'active:translate-y-px',\n size === 'sm' ? 'h-8 px-3 text-sm' : 'h-9 px-3.5 py-2.5 text-sm',\n className,\n )}\n >\n <span\n className={cn(\n 'truncate',\n grouping.length === 0 && 'text-muted-foreground',\n )}\n >\n {displayLabel}\n </span>\n <ChevronDown\n className={cn(\n 'size-4 shrink-0 opacity-50 transition-transform duration-200 motion-reduce:transition-none',\n open && 'rotate-180',\n )}\n />\n </PopoverTrigger>\n <PopoverPopup\n side=\"bottom\"\n align=\"start\"\n className=\"min-w-[200px] w-max max-w-[300px] p-0\"\n >\n <Command>\n <CommandList>\n <CommandEmpty>No groupable columns</CommandEmpty>\n <CommandGroup>\n {allGroupableColumns.map((column) => {\n const isSelected = grouping.includes(column.id);\n const order = getSelectionOrder(column.id);\n const isDisabled = !isSelected && isMaxLevelsReached;\n\n return (\n <CommandItem\n key={column.id}\n value={column.id}\n onSelect={() => handleSelect(column.id)}\n disabled={isDisabled}\n data-disabled={isDisabled}\n data-slot=\"combobox-item\"\n className={cn(\n 'flex items-center justify-between gap-2 px-2 py-1.5 cursor-pointer',\n isSelected && 'bg-accent',\n )}\n >\n <div className=\"flex items-center gap-2\">\n {isSelected && (\n <Check\n className=\"size-4 text-primary motion-safe:animate-in motion-safe:zoom-in-75 motion-safe:duration-150\"\n aria-hidden=\"true\"\n />\n )}\n <span>{column.label}</span>\n </div>\n {order !== null && (\n <span className=\"inline-flex size-5 items-center justify-center rounded-full bg-primary/10 text-[11px] font-semibold text-primary motion-safe:animate-in motion-safe:zoom-in-75 motion-safe:duration-150\">\n {order}\n </span>\n )}\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverPopup>\n </Popover>\n );\n}\n\nGroupingControls.displayName = 'GroupingControls';\n\nexport type { GroupableColumn };\nexport { GroupingControls };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index194.js","names":[],"sources":["../src/components/organisms/content/EmptyState/EmptyState.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport { Heart, Search } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from '@/components/atoms/buttons/Button';\nimport { FeaturedIcon } from '@/components/molecules/data/FeaturedIcon';\nimport {\n type FileExtension,\n FileTypeIcon,\n type SimpleFileType,\n} from '@/components/molecules/files/FileTypeIcon';\nimport { cn } from '@/lib/utils';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type EmptyStateSize = 'sm' | 'md' | 'lg';\nexport type EmptyStateMedia =\n | 'featured-icon'\n | 'illustration'\n | 'file-type-icon'\n | 'none';\nexport type EmptyStateBackgroundPatternVariant =\n | 'circles'\n | 'grid'\n | 'grid-dot'\n | 'squares'\n | 'none';\nexport type EmptyStateIllustrationVariant =\n | 'cloud'\n | 'box'\n | 'documents'\n | 'credit-card';\nexport type EmptyStateTone = 'primary' | 'gray';\n\nexport interface EmptyStateActionConfig {\n label: React.ReactNode;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n startIcon?: React.ReactNode;\n disabled?: boolean;\n loading?: boolean;\n 'aria-label'?: string;\n}\n\n// ============================================================================\n// Shared maps\n// ============================================================================\n\nconst patternSizeClass: Record<EmptyStateSize, string> = {\n sm: 'size-[336px]',\n md: 'size-[480px]',\n lg: 'size-[768px]',\n};\n\nconst patternGridSize: Record<EmptyStateSize, string> = {\n sm: '24px 24px',\n md: '32px 32px',\n lg: '48px 48px',\n};\n\nconst illustrationSizeClass: Record<\n EmptyStateSize,\n Record<EmptyStateIllustrationVariant, string>\n> = {\n sm: {\n cloud: 'h-[118px] w-[152px]',\n box: 'h-[124px] w-[152px]',\n documents: 'h-[118px] w-[152px]',\n 'credit-card': 'h-[118px] w-[152px]',\n },\n md: {\n cloud: 'h-32 w-[172px]',\n box: 'h-[136px] w-[172px]',\n documents: 'h-32 w-[172px]',\n 'credit-card': 'h-[134px] w-[172px]',\n },\n lg: {\n cloud: 'h-40 w-[220px]',\n box: 'h-[168px] w-[220px]',\n documents: 'h-40 w-[220px]',\n 'credit-card': 'h-40 w-[220px]',\n },\n};\n\nconst illustrationIconSizeClass: Record<EmptyStateSize, string> = {\n sm: 'p-2',\n md: 'p-2.5',\n lg: 'p-2.5',\n};\n\nconst iconGlyphSizeClass: Record<EmptyStateSize, string> = {\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n};\n\nconst illustrationIconCenterClass: Record<\n EmptyStateIllustrationVariant,\n string\n> = {\n cloud: 'top-[58%]',\n box: 'top-[58%]',\n documents: 'top-[60%]',\n 'credit-card': 'top-[60%]',\n};\n\nconst illustrationCircleSizeClass: Record<EmptyStateSize, string> = {\n sm: 'size-[104px]',\n md: 'size-32',\n lg: 'size-40',\n};\n\nconst fileIconWrapSizeClass: Record<EmptyStateSize, string> = {\n sm: 'size-20',\n md: 'size-24',\n lg: 'size-28',\n};\n\nconst textGapClass: Record<EmptyStateSize, string> = {\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-2',\n};\n\nconst mediaGapClass: Record<EmptyStateSize, string> = {\n sm: 'gap-4',\n md: 'gap-5',\n lg: 'gap-5',\n};\n\nconst contentGapClass: Record<EmptyStateSize, string> = {\n sm: 'gap-6',\n md: 'gap-8',\n lg: 'gap-8',\n};\n\nconst featuredIconSize: Record<EmptyStateSize, 'sm' | 'md' | 'lg'> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n};\n\nconst fileIconSize: Record<EmptyStateSize, 'sm' | 'md' | 'lg'> = {\n sm: 'md',\n md: 'md',\n lg: 'md',\n};\n\nconst headingTag = {\n 2: 'h2',\n 3: 'h3',\n 4: 'h4',\n} as const;\n\nfunction EmptyStateIconGlyph({\n icon,\n size,\n}: {\n icon: React.ReactNode;\n size: EmptyStateSize;\n}) {\n return (\n <span\n data-slot=\"empty-state-icon-glyph\"\n data-testid=\"empty-state-icon-glyph\"\n data-centered=\"true\"\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex shrink-0 items-center justify-center leading-none [line-height:0] [&>svg]:block [&>svg]:size-full [&>svg]:shrink-0',\n iconGlyphSizeClass[size],\n )}\n >\n {icon}\n </span>\n );\n}\n\n// ============================================================================\n// Background Pattern\n// ============================================================================\n\nexport interface EmptyStateBackgroundPatternProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n size?: EmptyStateSize;\n variant?: EmptyStateBackgroundPatternVariant;\n}\n\nconst gridPatternStyle = (\n size: EmptyStateSize,\n dot = false,\n): React.CSSProperties => ({\n backgroundImage: dot\n ? 'radial-gradient(circle, color-mix(in oklch, var(--border) 70%, transparent) 1px, transparent 1px)'\n : [\n 'linear-gradient(to right, color-mix(in oklch, var(--border) 54%, transparent) 1px, transparent 1px)',\n 'linear-gradient(to bottom, color-mix(in oklch, var(--border) 54%, transparent) 1px, transparent 1px)',\n ].join(', '),\n backgroundSize: patternGridSize[size],\n});\n\nconst squaresBySize: Record<EmptyStateSize, number[]> = {\n sm: [96, 144, 192, 240, 288, 336],\n md: [96, 160, 224, 288, 352, 416, 480],\n lg: [96, 192, 288, 384, 480, 576, 672, 768],\n};\n\nexport const EmptyStateBackgroundPattern = React.forwardRef<\n HTMLDivElement,\n EmptyStateBackgroundPatternProps\n>(({ className, size = 'sm', variant = 'circles', style, ...props }, ref) => {\n if (variant === 'none') {\n return null;\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"empty-state-background-pattern\"\n data-testid=\"empty-state-pattern\"\n data-size={size}\n data-variant={variant}\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 overflow-hidden opacity-75',\n patternSizeClass[size],\n className,\n )}\n style={style}\n {...props}\n >\n <div className=\"absolute inset-0 bg-[radial-gradient(circle_at_center,var(--background)_0%,transparent_68%)]\" />\n\n {variant === 'circles' && (\n <div className=\"absolute inset-0\">\n {Array.from({ length: 7 }, (_, index) => (\n <span\n key={index}\n className=\"absolute left-1/2 top-1/2 rounded-full border border-border/60\"\n style={{\n width: `${(index + 1) * 14}%`,\n height: `${(index + 1) * 14}%`,\n transform: 'translate(-50%, -50%)',\n }}\n />\n ))}\n </div>\n )}\n\n {(variant === 'grid' || variant === 'grid-dot') && (\n <div\n className=\"absolute inset-0 opacity-70 [mask-image:radial-gradient(circle_at_center,black_0%,black_48%,transparent_76%)]\"\n style={gridPatternStyle(size, variant === 'grid-dot')}\n />\n )}\n\n {variant === 'squares' && (\n <div className=\"absolute inset-0\">\n {squaresBySize[size].map((squareSize) => (\n <span\n key={squareSize}\n className=\"absolute left-1/2 top-1/2 rounded-xl border border-border/55\"\n style={{\n width: squareSize,\n height: squareSize,\n transform: 'translate(-50%, -50%) rotate(-12.5deg)',\n }}\n />\n ))}\n </div>\n )}\n </div>\n );\n});\n\nEmptyStateBackgroundPattern.displayName = 'EmptyStateBackgroundPattern';\n\n// ============================================================================\n// Illustration\n// ============================================================================\n\nexport interface EmptyStateIllustrationProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n size?: EmptyStateSize;\n variant?: EmptyStateIllustrationVariant;\n tone?: EmptyStateTone;\n icon?: React.ReactNode;\n}\n\nfunction DecorativeDots({ tone }: { tone: EmptyStateTone }) {\n const dotClassName =\n tone === 'primary' ? 'bg-primary/70' : 'bg-muted-foreground/10';\n\n return (\n <>\n <span\n className={cn(\n 'absolute left-[7%] top-[8%] size-2 rounded-full',\n dotClassName,\n )}\n />\n <span\n className={cn(\n 'absolute right-[6%] top-[18%] size-3 rounded-full',\n dotClassName,\n )}\n />\n <span\n className={cn(\n 'absolute bottom-[10%] left-[8%] size-3 rounded-full',\n dotClassName,\n )}\n />\n <span\n className={cn(\n 'absolute bottom-[18%] right-[13%] size-2 rounded-full',\n dotClassName,\n )}\n />\n </>\n );\n}\n\nfunction CloudShape({\n accentId,\n shadeId,\n tone,\n}: {\n accentId: string;\n shadeId: string;\n tone: EmptyStateTone;\n}) {\n return (\n <g className=\"drop-shadow-[0_8px_16px_var(--shadow-soft-3-color)]\">\n <path\n d=\"M54 110c-21 0-38-14-38-32 0-16 14-30 33-32 8-19 27-31 49-31 27 0 50 19 55 43 17 3 30 16 30 32 0 19-18 34-40 34H55c-1 0-1-14-1-14Z\"\n fill={`url(#${shadeId})`}\n />\n <path\n d=\"M68 106c-18 0-32-12-32-27 0-13 11-24 27-26 7-16 23-26 42-26 23 0 42 16 46 36 15 3 26 14 26 28 0 16-15 29-34 29H68v-14Z\"\n fill={`url(#${accentId})`}\n opacity={tone === 'primary' ? 0.78 : 0.36}\n />\n </g>\n );\n}\n\nfunction BoxShape({\n accentId,\n shadeId,\n}: {\n accentId: string;\n shadeId: string;\n}) {\n return (\n <g className=\"drop-shadow-[0_8px_16px_var(--shadow-soft-3-color)]\">\n <path d=\"M72 42 132 20l55 31-62 24-53-33Z\" fill={`url(#${accentId})`} />\n <path d=\"M72 42v72l53 34V75L72 42Z\" fill={`url(#${shadeId})`} />\n <path d=\"M125 75v73l62-35V51l-62 24Z\" fill=\"var(--card)\" />\n <path\n d=\"M132 20v33l24 14V34l-24-14Z\"\n fill=\"currentColor\"\n opacity=\"0.34\"\n />\n <path\n d=\"M72 42 132 20l55 31-62 24-53-33Z\"\n fill=\"none\"\n stroke=\"var(--border)\"\n />\n </g>\n );\n}\n\nfunction DocumentsShape({\n accentId,\n shadeId,\n}: {\n accentId: string;\n shadeId: string;\n}) {\n return (\n <g className=\"drop-shadow-[0_8px_16px_var(--shadow-soft-3-color)]\">\n <g transform=\"translate(44 48) rotate(-18)\">\n <rect\n width=\"58\"\n height=\"78\"\n rx=\"7\"\n fill={`url(#${shadeId})`}\n stroke=\"var(--border)\"\n />\n <path\n d=\"M15 21h28M15 35h21M15 49h28\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.28\"\n />\n </g>\n <g transform=\"translate(83 32)\">\n <rect\n width=\"58\"\n height=\"88\"\n rx=\"7\"\n fill=\"var(--card)\"\n stroke=\"var(--border)\"\n />\n <path\n d=\"M16 26h28M16 41h22M16 56h28\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.32\"\n />\n </g>\n <g transform=\"translate(121 47) rotate(18)\">\n <rect\n width=\"58\"\n height=\"78\"\n rx=\"7\"\n fill={`url(#${accentId})`}\n stroke=\"var(--border)\"\n />\n <path\n d=\"M15 21h28M15 35h21M15 49h28\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.32\"\n />\n </g>\n </g>\n );\n}\n\nfunction CreditCardShape({\n accentId,\n shadeId,\n}: {\n accentId: string;\n shadeId: string;\n}) {\n return (\n <g className=\"drop-shadow-[0_8px_16px_var(--shadow-soft-3-color)]\">\n <rect\n x=\"42\"\n y=\"48\"\n width=\"136\"\n height=\"82\"\n rx=\"12\"\n fill={`url(#${shadeId})`}\n stroke=\"var(--border)\"\n />\n <rect\n x=\"42\"\n y=\"70\"\n width=\"136\"\n height=\"16\"\n fill={`url(#${accentId})`}\n opacity=\"0.72\"\n />\n <rect\n x=\"58\"\n y=\"104\"\n width=\"28\"\n height=\"8\"\n rx=\"2\"\n fill=\"currentColor\"\n opacity=\"0.28\"\n />\n <rect\n x=\"58\"\n y=\"116\"\n width=\"58\"\n height=\"5\"\n rx=\"2.5\"\n fill=\"currentColor\"\n opacity=\"0.18\"\n />\n <circle cx=\"146\" cy=\"112\" r=\"10\" fill=\"currentColor\" opacity=\"0.24\" />\n <circle cx=\"158\" cy=\"112\" r=\"10\" fill=\"currentColor\" opacity=\"0.38\" />\n </g>\n );\n}\n\nexport const EmptyStateIllustration = React.forwardRef<\n HTMLDivElement,\n EmptyStateIllustrationProps\n>(\n (\n {\n className,\n size = 'sm',\n variant = 'cloud',\n tone = 'primary',\n icon = <Heart aria-hidden=\"true\" />,\n ...props\n },\n ref,\n ) => {\n const accentId = React.useId();\n const shadeId = React.useId();\n const isPrimary = tone === 'primary';\n\n return (\n <div\n ref={ref}\n data-slot=\"empty-state-illustration\"\n data-testid=\"empty-state-illustration\"\n data-size={size}\n data-variant={variant}\n data-tone={tone}\n aria-hidden=\"true\"\n className={cn(\n 'relative shrink-0 text-primary',\n !isPrimary && 'text-muted-foreground',\n illustrationSizeClass[size][variant],\n className,\n )}\n {...props}\n >\n <div\n data-slot=\"empty-state-illustration-background\"\n data-testid=\"empty-state-illustration-background\"\n data-centered=\"true\"\n className={cn(\n 'absolute left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full',\n isPrimary ? 'bg-primary/20' : 'bg-muted/80',\n illustrationCircleSizeClass[size],\n illustrationIconCenterClass[variant],\n )}\n />\n <DecorativeDots tone={tone} />\n <svg\n viewBox=\"0 0 220 168\"\n className=\"absolute inset-0 size-full overflow-visible\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient id={accentId} x1=\"25\" y1=\"12\" x2=\"190\" y2=\"148\">\n <stop\n stopColor={isPrimary ? 'var(--primary)' : 'var(--muted)'}\n stopOpacity={isPrimary ? 0.34 : 0.74}\n />\n <stop stopColor=\"var(--card)\" stopOpacity={0.95} />\n </linearGradient>\n <linearGradient id={shadeId} x1=\"54\" y1=\"18\" x2=\"165\" y2=\"140\">\n <stop stopColor=\"var(--card)\" />\n <stop\n stopColor={\n isPrimary ? 'var(--primary)' : 'var(--muted-foreground)'\n }\n stopOpacity={isPrimary ? 0.18 : 0.14}\n />\n </linearGradient>\n </defs>\n\n {variant === 'cloud' && (\n <CloudShape accentId={accentId} shadeId={shadeId} tone={tone} />\n )}\n {variant === 'box' && (\n <BoxShape accentId={accentId} shadeId={shadeId} />\n )}\n {variant === 'documents' && (\n <DocumentsShape accentId={accentId} shadeId={shadeId} />\n )}\n {variant === 'credit-card' && (\n <CreditCardShape accentId={accentId} shadeId={shadeId} />\n )}\n </svg>\n <div\n data-slot=\"empty-state-illustration-icon\"\n data-testid=\"empty-state-illustration-icon\"\n data-centered=\"true\"\n className={cn(\n 'absolute left-1/2 flex -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-xl bg-primary/10 text-primary shadow-xs backdrop-blur-md supports-backdrop-filter:backdrop-blur-md [&>svg]:shrink-0',\n !isPrimary && 'bg-muted text-muted-foreground',\n illustrationIconSizeClass[size],\n illustrationIconCenterClass[variant],\n )}\n >\n <EmptyStateIconGlyph icon={icon} size={size} />\n </div>\n </div>\n );\n },\n);\n\nEmptyStateIllustration.displayName = 'EmptyStateIllustration';\n\n// ============================================================================\n// EmptyState\n// ============================================================================\n\nconst emptyStateVariants = cva(\n 'relative isolate mx-auto flex w-full max-w-[512px] items-center justify-center overflow-visible py-8 text-center',\n {\n variants: {\n size: {\n sm: 'min-h-[212px]',\n md: 'min-h-[280px]',\n lg: 'min-h-[360px]',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\nexport interface EmptyStateProps\n extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {\n title: React.ReactNode;\n description?: React.ReactNode;\n size?: EmptyStateSize;\n media?: EmptyStateMedia;\n pattern?: EmptyStateBackgroundPatternVariant | 'auto';\n icon?: React.ReactNode;\n iconLabel?: string;\n illustrationVariant?: EmptyStateIllustrationVariant;\n illustrationTone?: EmptyStateTone;\n fileExtension?: FileExtension;\n fileType?: SimpleFileType;\n primaryAction?: EmptyStateActionConfig;\n secondaryAction?: EmptyStateActionConfig;\n actions?: React.ReactNode;\n headingLevel?: 2 | 3 | 4;\n}\n\nfunction resolvePattern(\n pattern: EmptyStateProps['pattern'],\n media: EmptyStateMedia,\n): EmptyStateBackgroundPatternVariant {\n if (!pattern || pattern === 'auto') {\n if (media === 'illustration') return 'grid';\n if (media === 'none') return 'none';\n return 'circles';\n }\n return pattern;\n}\n\nfunction renderEmptyStateAction(\n action: EmptyStateActionConfig,\n intent: 'primary' | 'secondary',\n) {\n const {\n label,\n onClick,\n startIcon,\n disabled,\n loading,\n 'aria-label': ariaLabel,\n } = action;\n\n return (\n <Button\n appearance={intent === 'primary' ? 'solid' : 'outline'}\n variant={intent === 'primary' ? 'primary' : 'secondary'}\n size=\"sm\"\n shape=\"rounded\"\n onClick={onClick}\n disabled={disabled}\n loading={loading}\n startIcon={startIcon}\n aria-label={ariaLabel}\n type=\"button\"\n >\n {label}\n </Button>\n );\n}\n\nexport const EmptyState = React.forwardRef<HTMLElement, EmptyStateProps>(\n (\n {\n className,\n title,\n description,\n size = 'sm',\n media = 'featured-icon',\n pattern = 'auto',\n icon,\n iconLabel,\n illustrationVariant = 'cloud',\n illustrationTone = 'gray',\n fileExtension,\n fileType = 'document',\n primaryAction,\n secondaryAction,\n actions,\n headingLevel = 3,\n ...props\n },\n ref,\n ) => {\n const Heading = headingTag[headingLevel];\n const resolvedPattern = resolvePattern(pattern, media);\n const defaultIcon = icon ?? <Search aria-hidden=\"true\" />;\n const hasActions = actions || primaryAction || secondaryAction;\n\n return (\n <section\n ref={ref}\n data-slot=\"empty-state\"\n aria-label={typeof title === 'string' ? title : 'Empty state'}\n className={cn(emptyStateVariants({ size }), className)}\n {...props}\n >\n <div\n data-slot=\"empty-state-content\"\n className={cn(\n 'relative z-10 flex min-w-0 flex-1 flex-col items-center',\n contentGapClass[size],\n )}\n >\n <div\n data-slot=\"empty-state-body\"\n className={cn(\n 'flex w-full flex-col items-center',\n mediaGapClass[size],\n )}\n >\n {media !== 'none' && (\n <div\n data-slot=\"empty-state-media\"\n data-testid=\"empty-state-media\"\n data-media={media}\n data-centered=\"true\"\n className=\"relative flex w-full min-w-0 justify-center\"\n >\n <EmptyStateBackgroundPattern\n size={size}\n variant={resolvedPattern}\n data-centered=\"true\"\n className=\"z-0\"\n />\n\n {media === 'featured-icon' && (\n <FeaturedIcon\n data-slot=\"empty-state-featured-icon\"\n size={featuredIconSize[size]}\n shape=\"rounded\"\n intent=\"default\"\n icon={\n <EmptyStateIconGlyph icon={defaultIcon} size={size} />\n }\n aria-label={iconLabel}\n className=\"relative z-10 delight-stagger motion-reduce:animate-none\"\n />\n )}\n\n {media === 'illustration' && (\n <EmptyStateIllustration\n size={size}\n variant={illustrationVariant}\n tone={illustrationTone}\n icon={defaultIcon}\n className=\"relative z-10 delight-stagger motion-reduce:animate-none\"\n />\n )}\n\n {media === 'file-type-icon' && (\n <div\n data-slot=\"empty-state-file-icon-wrap\"\n data-testid=\"empty-state-file-icon-wrap\"\n data-centered=\"true\"\n className={cn(\n 'relative z-10 flex items-center justify-center rounded-full bg-linear-[104deg,color-mix(in_oklch,var(--card)_60%,transparent),color-mix(in_oklch,var(--muted)_55%,transparent)] delight-stagger motion-reduce:animate-none',\n fileIconWrapSizeClass[size],\n )}\n >\n <div\n data-slot=\"empty-state-file-icon-optical-center\"\n data-testid=\"empty-state-file-icon-optical-center\"\n data-centered=\"true\"\n >\n <FileTypeIcon\n extension={fileExtension}\n fileType={fileExtension ? undefined : fileType}\n size={fileIconSize[size]}\n className=\"drop-shadow-[0_1px_2px_var(--shadow-xs-1-color)]\"\n />\n </div>\n </div>\n )}\n </div>\n )}\n\n <div\n data-slot=\"empty-state-text\"\n className={cn(\n 'flex w-full max-w-[352px] flex-col items-center text-center',\n textGapClass[size],\n )}\n >\n <Heading className=\"w-full text-base font-semibold leading-6 text-foreground\">\n {title}\n </Heading>\n {description && (\n <p className=\"w-full text-sm leading-5 text-secondary-foreground\">\n {description}\n </p>\n )}\n </div>\n </div>\n\n {hasActions && (\n <div\n data-slot=\"empty-state-actions\"\n className=\"flex flex-wrap items-center justify-center gap-3\"\n >\n {actions ?? (\n <>\n {secondaryAction &&\n renderEmptyStateAction(secondaryAction, 'secondary')}\n {primaryAction &&\n renderEmptyStateAction(primaryAction, 'primary')}\n </>\n )}\n </div>\n )}\n </div>\n </section>\n );\n },\n);\n\nEmptyState.displayName = 'EmptyState';\n"],"mappings":"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"}
|