{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "console-data-view", "title": "Console Data View", "description": "Composable data workspaces with resource side panels, operations metrics, attention queues, typed inventory tables, selection, and pagination", "dependencies": ["daisyui", "lucide-react"], "files": [ { "path": "registry/default/blocks/console-data-view/console-data-view.tsx", "content": "import { ChevronLeft, ChevronRight, Grid2X2, List, Maximize2, Search, X } from 'lucide-react';\nimport type { ComponentPropsWithRef, CSSProperties, ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\ntype DataViewSidePanelLayoutStyle = CSSProperties & {\n\t'--data-view-summary-width'?: string;\n\t'--data-view-details-width'?: string;\n};\n\nexport type DataViewProps = ComponentPropsWithRef<'section'> & {\n\theader?: ReactNode;\n\ttoolbar?: ReactNode;\n\tfooter?: ReactNode;\n\tdetail?: ReactNode;\n};\n\nexport function DataView({ header, toolbar, footer, detail, children, className, ...props }: DataViewProps) {\n\treturn (\n\t\t\n\t\t\t{header}\n\t\t\t{toolbar}\n\t\t\t
\n\t\t\t\t
{children}
\n\t\t\t\t{detail ? (\n\t\t\t\t\t
{detail}
\n\t\t\t\t) : null}\n\t\t\t
\n\t\t\t{footer}\n\t\t\n\t);\n}\n\nexport type DataViewHeaderProps = Omit, 'title'> & {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tstatus?: ReactNode;\n\tactions?: ReactNode;\n};\n\nexport function DataViewHeader({\n\ttitle,\n\tdescription,\n\tstatus,\n\tactions,\n\tchildren,\n\tclassName,\n\t...props\n}: DataViewHeaderProps) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{title ?

{title}

: null}\n\t\t\t\t\t{status}\n\t\t\t\t
\n\t\t\t\t{description ?
{description}
: null}\n\t\t\t
\n\t\t\t{children}\n\t\t\t{actions ?
{actions}
: null}\n\t\t\n\t);\n}\n\nexport type DataViewToolbarProps = ComponentPropsWithRef<'div'>;\n\nexport function DataViewToolbar({ className, ...props }: DataViewToolbarProps) {\n\treturn (\n\t\t\n\t);\n}\n\nexport type DataViewViewHeaderProps = Omit, 'title'> & {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tmeta?: ReactNode;\n\tcontrols?: ReactNode;\n\tactions?: ReactNode;\n};\n\nexport function DataViewViewHeader({\n\ttitle,\n\tdescription,\n\tmeta,\n\tcontrols,\n\tactions,\n\tchildren,\n\tclassName,\n\t...props\n}: DataViewViewHeaderProps) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{title ?

{title}

: null}\n\t\t\t\t\t{meta ?
{meta}
: null}\n\t\t\t\t
\n\t\t\t\t{description ?
{description}
: null}\n\t\t\t
\n\t\t\t{children}\n\t\t\t{controls ?
{controls}
: null}\n\t\t\t{actions ?
{actions}
: null}\n\t\t\n\t);\n}\n\nexport type DataViewActionBarProps = ComponentPropsWithRef<'div'> & {\n\tleading?: ReactNode;\n\tprimary?: ReactNode;\n\tsecondary?: ReactNode;\n\toverflow?: ReactNode;\n};\n\nexport function DataViewActionBar({\n\tleading,\n\tprimary,\n\tsecondary,\n\toverflow,\n\tchildren,\n\tclassName,\n\t...props\n}: DataViewActionBarProps) {\n\treturn (\n\t\t\n\t\t\t{leading ?
{leading}
: null}\n\t\t\t{children}\n\t\t\t
\n\t\t\t{secondary ?
{secondary}
: null}\n\t\t\t{primary ?
{primary}
: null}\n\t\t\t{overflow}\n\t\t
\n\t);\n}\n\nexport type DataViewSidePanelLayoutProps = ComponentPropsWithRef<'div'> & {\n\tsummary?: ReactNode;\n\tdetails?: ReactNode;\n\tsummaryOpen?: boolean;\n\tdetailsOpen?: boolean;\n\tsummaryWidth?: string;\n\tdetailsWidth?: string;\n\tmainClassName?: string;\n\tsummaryClassName?: string;\n\tdetailsClassName?: string;\n};\n\nexport function DataViewSidePanelLayout({\n\tsummary,\n\tdetails,\n\tsummaryOpen = true,\n\tdetailsOpen = true,\n\tsummaryWidth = '20rem',\n\tdetailsWidth = '24rem',\n\tmainClassName,\n\tsummaryClassName,\n\tdetailsClassName,\n\tchildren,\n\tclassName,\n\tstyle,\n\t...props\n}: DataViewSidePanelLayoutProps) {\n\tconst hasSummary = Boolean(summary && summaryOpen);\n\tconst hasDetails = Boolean(details && detailsOpen);\n\tconst layoutStyle: DataViewSidePanelLayoutStyle = {\n\t\t'--data-view-summary-width': summaryWidth,\n\t\t'--data-view-details-width': detailsWidth,\n\t\t...style,\n\t};\n\n\treturn (\n\t\t\n\t\t\t
{children}
\n\t\t\t{hasSummary ? (\n\t\t\t\t\n\t\t\t\t\t{summary}\n\t\t\t\t\n\t\t\t) : null}\n\t\t\t{hasDetails ? (\n\t\t\t\t\n\t\t\t\t\t{details}\n\t\t\t\t\n\t\t\t) : null}\n\t\t\n\t);\n}\n\nexport type DataViewSummaryPanelProps = Omit, 'title'> & {\n\teyebrow?: ReactNode;\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tstatus?: ReactNode;\n\tactions?: ReactNode;\n\tfooter?: ReactNode;\n\tonClose?: () => void;\n\tonExpand?: () => void;\n\tcloseLabel?: string;\n\texpandLabel?: string;\n\tcontentClassName?: string;\n};\n\nexport function DataViewSummaryPanel({\n\teyebrow,\n\ttitle,\n\tdescription,\n\tstatus,\n\tactions,\n\tfooter,\n\tonClose,\n\tonExpand,\n\tcloseLabel = '关闭概要',\n\texpandLabel = '展开详情',\n\tcontentClassName,\n\tchildren,\n\tclassName,\n\t'aria-label': ariaLabel,\n\t...props\n}: DataViewSummaryPanelProps) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{eyebrow ? (\n\t\t\t\t\t\t\t
{eyebrow}
\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{title ?

{title}

: null}\n\t\t\t\t\t\t\t{status}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{description ?
{description}
: null}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t{onExpand ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{onClose ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
{children}
\n\t\t\t{footer ?
{footer}
: null}\n\t\t\n\t);\n}\n\nexport type DataViewDetailsPanelProps = Omit, 'title'> & {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tstatus?: ReactNode;\n\tactions?: ReactNode;\n\tfooter?: ReactNode;\n\tonClose?: () => void;\n\tcloseLabel?: string;\n\tcontentClassName?: string;\n};\n\nexport function DataViewDetailsPanel({\n\ttitle,\n\tdescription,\n\tstatus,\n\tactions,\n\tfooter,\n\tonClose,\n\tcloseLabel = '关闭详情',\n\tcontentClassName,\n\tchildren,\n\tclassName,\n\t'aria-label': ariaLabel,\n\t...props\n}: DataViewDetailsPanelProps) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{title ?

{title}

: null}\n\t\t\t\t\t\t\t{status}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{description ?
{description}
: null}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t{onClose ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
{children}
\n\t\t\t{footer ?
{footer}
: null}\n\t\t\n\t);\n}\n\nexport type DataViewSummarySectionProps = Omit, 'title'> & {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tmeta?: ReactNode;\n\tcontentClassName?: string;\n};\n\nexport function DataViewSummarySection({\n\ttitle,\n\tdescription,\n\tmeta,\n\tcontentClassName,\n\tchildren,\n\tclassName,\n\t...props\n}: DataViewSummarySectionProps) {\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{title ? {title} : null}\n\t\t\t\t\t\t{meta ? {meta} : null}\n\t\t\t\t\t\n\t\t\t\t\t{description ? (\n\t\t\t\t\t\t{description}\n\t\t\t\t\t) : null}\n\t\t\t\t\n\t\t\t\n\t\t\t
{children}
\n\t\t
\n\t);\n}\n\nexport type DataViewDetailGridProps = ComponentPropsWithRef<'div'> & {\n\tcolumns?: 1 | 2 | 3;\n};\n\nexport function DataViewDetailGrid({ columns = 2, className, ...props }: DataViewDetailGridProps) {\n\tconst columnClass = {\n\t\t1: 'grid-cols-1',\n\t\t2: 'grid-cols-1 md:grid-cols-2',\n\t\t3: 'grid-cols-1 md:grid-cols-2 xl:grid-cols-3',\n\t}[columns];\n\treturn
;\n}\n\nexport type DataViewSearchProps = ComponentPropsWithRef<'input'> & {\n\tcontainerClassName?: string;\n\tonClear?: () => void;\n};\n\nexport function DataViewSearch({\n\tcontainerClassName,\n\tclassName,\n\tvalue,\n\tonClear,\n\t'aria-label': ariaLabel,\n\t...props\n}: DataViewSearchProps) {\n\tconst hasValue = typeof value === 'string' ? value.length > 0 : typeof value === 'number';\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t{hasValue && onClear ? (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : null}\n\t\t\n\t);\n}\n\nexport type DataViewMode = 'table' | 'grid';\n\nexport type DataViewModeToggleProps = Omit, 'onChange'> & {\n\tvalue: DataViewMode;\n\tonValueChange: (value: DataViewMode) => void;\n};\n\nexport function DataViewModeToggle({ value, onValueChange, className, ...props }: DataViewModeToggleProps) {\n\treturn (\n\t\t\n\t\t\t onValueChange('table')}\n\t\t\t>\n\t\t\t\t\n\t\t\t\n\t\t\t onValueChange('grid')}\n\t\t\t>\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n}\n\nexport type DataViewTableProps = ComponentPropsWithRef<'table'> & {\n\tcontainerClassName?: string;\n};\n\nexport function DataViewTable({ containerClassName, className, ...props }: DataViewTableProps) {\n\treturn (\n\t\t
\n\t\t\t\n\t\t\n\t);\n}\n\nexport type DataViewGridProps = ComponentPropsWithRef<'div'>;\n\nexport function DataViewGrid({ className, ...props }: DataViewGridProps) {\n\treturn
;\n}\n\nexport type DataViewListItemProps = Omit, 'title'> & {\n\tselected?: boolean;\n\ticon?: ReactNode;\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\tmeta?: ReactNode;\n\ttrailing?: ReactNode;\n};\n\nexport function DataViewListItem({\n\tselected,\n\ticon,\n\ttitle,\n\tdescription,\n\tmeta,\n\ttrailing,\n\tclassName,\n\t...props\n}: DataViewListItemProps) {\n\treturn (\n\t\t\n\t\t\t{icon ? (\n\t\t\t\t\n\t\t\t\t\t{icon}\n\t\t\t\t\n\t\t\t) : null}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{title}\n\t\t\t\t\t{trailing}\n\t\t\t\t\n\t\t\t\t{description ? (\n\t\t\t\t\t{description}\n\t\t\t\t) : null}\n\t\t\t\t{meta ? {meta} : null}\n\t\t\t\n\t\t\n\t);\n}\n\nexport type DataViewDetailProps = Omit, 'title'> & {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tactions?: ReactNode;\n};\n\nexport function DataViewDetail({\n\ttitle,\n\tdescription,\n\tactions,\n\tchildren,\n\tclassName,\n\t'aria-label': ariaLabel,\n\t...props\n}: DataViewDetailProps) {\n\treturn (\n\t\t\n\t);\n}\n\nexport type DataViewFooterProps = ComponentPropsWithRef<'footer'> & {\n\tinfo?: ReactNode;\n\tpagination?: ReactNode;\n\tactions?: ReactNode;\n};\n\nexport function DataViewFooter({ info, pagination, actions, children, className, ...props }: DataViewFooterProps) {\n\treturn (\n\t\t\n\t\t\t{info ?
{info}
: null}\n\t\t\t{children}\n\t\t\t
\n\t\t\t{actions}\n\t\t\t{pagination}\n\t\t\n\t);\n}\n\nexport type DataViewPaginationProps = Omit, 'onChange'> & {\n\tpage: number;\n\tpageCount: number;\n\tonPageChange: (page: number) => void;\n};\n\nexport function DataViewPagination({ page, pageCount, onPageChange, className, ...props }: DataViewPaginationProps) {\n\tconst safePageCount = Math.max(1, pageCount);\n\treturn (\n\t\t\n\t);\n}\n\nexport type DataViewEmptyProps = Omit, 'title'> & {\n\ticon?: ReactNode;\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\taction?: ReactNode;\n};\n\nexport function DataViewEmpty({\n\ticon,\n\ttitle = '没有数据',\n\tdescription,\n\taction,\n\tclassName,\n\t...props\n}: DataViewEmptyProps) {\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t{icon ?
{icon}
: null}\n\t\t\t\t
{title}
\n\t\t\t\t{description ?
{description}
: null}\n\t\t\t\t{action ?
{action}
: null}\n\t\t\t
\n\t\t
\n\t);\n}\n\nexport type DataViewSelectionBarProps = ComponentPropsWithRef<'div'> & {\n\tcount: number;\n\tactions?: ReactNode;\n};\n\nexport function DataViewSelectionBar({ count, actions, children, className, ...props }: DataViewSelectionBarProps) {\n\treturn (\n\t\t\n\t\t\t已选择 {count} 项\n\t\t\t{children}\n\t\t\t
\n\t\t\t{actions}\n\t\t
\n\t);\n}\n", "type": "registry:component", "target": "@components/console-data-view/console-data-view.tsx" }, { "path": "registry/default/blocks/console-data-view/console-data-view-ops.tsx", "content": "import type { ComponentPropsWithRef, Key, ReactNode } from 'react';\nimport { Children } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataViewOpsTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\nexport type DataViewHeadingLevel = 2 | 3 | 4 | 5 | 6;\n\nconst headingTag: Record = {\n\t2: 'h2',\n\t3: 'h3',\n\t4: 'h4',\n\t5: 'h5',\n\t6: 'h6',\n};\n\nfunction hasRenderableNode(value: ReactNode) {\n\treturn Children.toArray(value).length > 0;\n}\n\nconst toneSurfaceClass: Record = {\n\tneutral: 'border-base-300 bg-base-200/45',\n\tinfo: 'border-info/35 bg-info/4',\n\tsuccess: 'border-success/35 bg-success/4',\n\twarning: 'border-warning/40 bg-warning/4',\n\tdanger: 'border-error/35 bg-error/4',\n};\n\nconst toneIndicatorClass: Record = {\n\tneutral: 'bg-base-content/45',\n\tinfo: 'bg-info',\n\tsuccess: 'bg-success',\n\twarning: 'bg-warning',\n\tdanger: 'bg-error',\n};\n\nexport type DataViewMetricCardProps = ComponentPropsWithRef<'article'> & {\n\tlabel: ReactNode;\n\tvalue: ReactNode;\n\ticon?: ReactNode;\n\tstatus?: ReactNode;\n\thint?: ReactNode;\n\ttrend?: ReactNode;\n\tactions?: ReactNode;\n\ttone?: DataViewOpsTone;\n};\n\nexport function DataViewMetricCard({\n\tlabel,\n\tvalue,\n\ticon,\n\tstatus,\n\thint,\n\ttrend,\n\tactions,\n\ttone = 'neutral',\n\tclassName,\n\t...props\n}: DataViewMetricCardProps) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{hasRenderableNode(icon) ? (\n\t\t\t\t\t\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t
\n\t\t\t\t) : null}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{label}
\n\t\t\t\t\t\t{hasRenderableNode(status) ?
{status}
: null}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
{value}
\n\t\t\t\t\t\t{hasRenderableNode(trend) ?
{trend}
: null}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t{hasRenderableNode(actions) ?
{actions}
: null}\n\t\t\t
\n\t\t\t{hasRenderableNode(hint) ?
{hint}
: null}\n\t\t\n\t);\n}\n\nexport type DataViewPanelProps = Omit, 'title'> & {\n\teyebrow?: ReactNode;\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\ticon?: ReactNode;\n\tstatus?: ReactNode;\n\tmeta?: ReactNode;\n\tactions?: ReactNode;\n\tfooter?: ReactNode;\n\ttone?: DataViewOpsTone;\n\theadingLevel?: DataViewHeadingLevel;\n\tcontentClassName?: string;\n};\n\nexport function DataViewPanel({\n\teyebrow,\n\ttitle,\n\tdescription,\n\ticon,\n\tstatus,\n\tmeta,\n\tactions,\n\tfooter,\n\ttone = 'neutral',\n\theadingLevel = 2,\n\tcontentClassName,\n\tchildren,\n\tclassName,\n\t...props\n}: DataViewPanelProps) {\n\tconst hasHeader = [eyebrow, title, description, icon, status, meta, actions].some(hasRenderableNode);\n\tconst Heading = headingTag[headingLevel];\n\n\treturn (\n\t\t\n\t\t\t{hasHeader ? (\n\t\t\t\t
\n\t\t\t\t\t{hasRenderableNode(icon) ? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t
\n\t\t\t\t\t) : null}\n\t\t\t\t\t
\n\t\t\t\t\t\t{hasRenderableNode(eyebrow) ? (\n\t\t\t\t\t\t\t
{eyebrow}
\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{hasRenderableNode(title) ? (\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{status}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{hasRenderableNode(description) ? (\n\t\t\t\t\t\t\t
{description}
\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{hasRenderableNode(meta) ?
{meta}
: null}\n\t\t\t\t\t
\n\t\t\t\t\t{hasRenderableNode(actions) ? (\n\t\t\t\t\t\t
{actions}
\n\t\t\t\t\t) : null}\n\t\t\t\t\n\t\t\t) : null}\n\t\t\t
{children}
\n\t\t\t{hasRenderableNode(footer) ?
{footer}
: null}\n\t\t\n\t);\n}\n\nexport type DataViewAttentionListProps = Omit, 'title'> & {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\tstatus?: ReactNode;\n\tempty?: ReactNode;\n\theadingLevel?: DataViewHeadingLevel;\n\tlistClassName?: string;\n};\n\nexport function DataViewAttentionList({\n\ttitle,\n\tdescription,\n\tstatus,\n\tempty = '暂无需要关注的事项',\n\theadingLevel = 3,\n\tlistClassName,\n\tchildren,\n\tclassName,\n\t'aria-label': ariaLabel,\n\t...props\n}: DataViewAttentionListProps) {\n\tconst items = Children.toArray(children);\n\tconst Heading = headingTag[headingLevel];\n\tconst defaultAriaLabel = typeof title === 'string' && title.trim().length > 0 ? title : '关注事项';\n\tconst hasHeader = [title, description, status].some(hasRenderableNode);\n\n\treturn (\n\t\t\n\t\t\t{hasHeader ? (\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{hasRenderableNode(title) ? {title} : null}\n\t\t\t\t\t\t\t{status}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{hasRenderableNode(description) ? (\n\t\t\t\t\t\t\t
{description}
\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t) : null}\n\t\t\t{items.length > 0 ? (\n\t\t\t\t
    {items}
\n\t\t\t) : (\n\t\t\t\t\n\t\t\t\t\t{empty}\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n}\n\nexport type DataViewAttentionItemProps = Omit, 'title'> & {\n\ttitle: ReactNode;\n\tdescription?: ReactNode;\n\tmeta?: ReactNode;\n\ticon?: ReactNode;\n\tstatus?: ReactNode;\n\tactions?: ReactNode;\n\ttone?: DataViewOpsTone;\n};\n\nexport function DataViewAttentionItem({\n\ttitle,\n\tdescription,\n\tmeta,\n\ticon,\n\tstatus,\n\tactions,\n\ttone = 'warning',\n\tclassName,\n\t...props\n}: DataViewAttentionItemProps) {\n\treturn (\n\t\t\n\t\t\t{hasRenderableNode(icon) ? (\n\t\t\t\t
{icon}
\n\t\t\t) : (\n\t\t\t\t
: null}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{column.header}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{rows.length > 0 && columns.length > 0 ? (\n\t\t\t\t\t\trows.map((row, rowIndex) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{column.cell(row, rowIndex)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t
{caption}
\n\t\t\t\t\t\t\t\t{empty}\n\t\t\t\t\t\t\t
\n\t\t
\n\t);\n}\n", "type": "registry:component", "target": "@components/console-data-view/console-data-view-ops.tsx" }, { "path": "registry/default/blocks/console-data-view/index.ts", "content": "export * from './console-data-view';\nexport * from './console-data-view-ops';\n", "type": "registry:component", "target": "@components/console-data-view/index.ts" } ], "type": "registry:block" }