diff --git a/packages/components/package.json b/packages/components/package.json index f0f14a07a..9131f689d 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -25,6 +25,7 @@ "@dnd-kit/utilities": "^3.2.2", "@object-ui/core": "workspace:*", "@object-ui/react": "workspace:*", + "@object-ui/types": "workspace:*", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-aspect-ratio": "^1.1.8", diff --git a/packages/components/src/renderers/basic/div.tsx b/packages/components/src/renderers/basic/div.tsx index d0b1ee00e..8b5c96cc1 100644 --- a/packages/components/src/renderers/basic/div.tsx +++ b/packages/components/src/renderers/basic/div.tsx @@ -1,8 +1,9 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { DivSchema } from '@object-ui/types'; import { renderChildren } from '../../lib/utils'; ComponentRegistry.register('div', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: DivSchema; className?: string; [key: string]: any }) => (
{renderChildren(schema.body)}
diff --git a/packages/components/src/renderers/basic/icon.tsx b/packages/components/src/renderers/basic/icon.tsx index 1f3c83e68..5e4dfd540 100644 --- a/packages/components/src/renderers/basic/icon.tsx +++ b/packages/components/src/renderers/basic/icon.tsx @@ -1,8 +1,9 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { IconSchema } from '@object-ui/types'; import { icons } from 'lucide-react'; ComponentRegistry.register('icon', - ({ schema, className, ...props }) => { + ({ schema, className, ...props }: { schema: IconSchema; className?: string; [key: string]: any }) => { const Icon = (icons as any)[schema.name || schema.icon]; if (!Icon) return null; return ; diff --git a/packages/components/src/renderers/basic/image.tsx b/packages/components/src/renderers/basic/image.tsx index c7b739674..01b277aac 100644 --- a/packages/components/src/renderers/basic/image.tsx +++ b/packages/components/src/renderers/basic/image.tsx @@ -1,7 +1,8 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { ImageSchema } from '@object-ui/types'; ComponentRegistry.register('image', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: ImageSchema; className?: string; [key: string]: any }) => ( {schema.alt ( - + ({ schema, className, ...props }: { schema: SeparatorSchema; className?: string; [key: string]: any }) => ( + ), { label: 'Separator', diff --git a/packages/components/src/renderers/basic/span.tsx b/packages/components/src/renderers/basic/span.tsx index 64f54fbeb..5aff830b2 100644 --- a/packages/components/src/renderers/basic/span.tsx +++ b/packages/components/src/renderers/basic/span.tsx @@ -1,8 +1,9 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { SpanSchema } from '@object-ui/types'; import { renderChildren } from '../../lib/utils'; ComponentRegistry.register('span', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: SpanSchema; className?: string; [key: string]: any }) => ( {renderChildren(schema.body)} diff --git a/packages/components/src/renderers/basic/text.tsx b/packages/components/src/renderers/basic/text.tsx index 8063db362..236f84c93 100644 --- a/packages/components/src/renderers/basic/text.tsx +++ b/packages/components/src/renderers/basic/text.tsx @@ -1,7 +1,8 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { TextSchema } from '@object-ui/types'; ComponentRegistry.register('text', - ({ schema }) => ( + ({ schema }: { schema: TextSchema }) => ( <>{schema.content} ), { diff --git a/packages/components/src/renderers/complex/calendar-view.tsx b/packages/components/src/renderers/complex/calendar-view.tsx index b620c9956..b8acf7bdd 100644 --- a/packages/components/src/renderers/complex/calendar-view.tsx +++ b/packages/components/src/renderers/complex/calendar-view.tsx @@ -1,10 +1,11 @@ import { ComponentRegistry } from '@object-ui/core'; -import { CalendarView, type CalendarEvent } from '@/ui'; +import type { CalendarViewSchema, CalendarEvent } from '@object-ui/types'; +import { CalendarView } from '@/ui'; import React from 'react'; // Calendar View Renderer - Airtable-style calendar for displaying records as events ComponentRegistry.register('calendar-view', - ({ schema, className, onAction, ...props }) => { + ({ schema, className, onAction, ...props }: { schema: CalendarViewSchema; className?: string; onAction?: (action: any) => void; [key: string]: any }) => { // Transform schema data to CalendarEvent format const events: CalendarEvent[] = React.useMemo(() => { if (!schema.data || !Array.isArray(schema.data)) return []; diff --git a/packages/components/src/renderers/complex/carousel.tsx b/packages/components/src/renderers/complex/carousel.tsx index 7947b6dc7..09942122b 100644 --- a/packages/components/src/renderers/complex/carousel.tsx +++ b/packages/components/src/renderers/complex/carousel.tsx @@ -1,4 +1,5 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { CarouselSchema } from '@object-ui/types'; import { Carousel, CarouselContent, @@ -9,7 +10,7 @@ import { import { renderChildren } from '../../lib/utils'; ComponentRegistry.register('carousel', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: CarouselSchema; className?: string; [key: string]: any }) => ( void; - /** Callback function triggered when the delete button is clicked */ - onRowDelete?: (row: any) => void; - /** Callback function triggered when row selection changes, receives array of selected rows */ - onSelectionChange?: (selectedRows: any[]) => void; - /** Callback function triggered when columns are reordered */ - onColumnsReorder?: (columns: Column[]) => void; - /** Optional CSS classes for the table container */ - className?: string; -} - /** * Enterprise-level data table component with Airtable-like features. * diff --git a/packages/components/src/renderers/complex/filter-builder.tsx b/packages/components/src/renderers/complex/filter-builder.tsx index 0518d2f84..ddef9e4e9 100644 --- a/packages/components/src/renderers/complex/filter-builder.tsx +++ b/packages/components/src/renderers/complex/filter-builder.tsx @@ -1,8 +1,9 @@ import { ComponentRegistry } from '@object-ui/core'; -import { FilterBuilder, type FilterGroup } from '@/ui/filter-builder'; +import type { FilterBuilderSchema, FilterGroup } from '@object-ui/types'; +import { FilterBuilder } from '@/ui/filter-builder'; ComponentRegistry.register('filter-builder', - ({ schema, className, onChange, ...props }) => { + ({ schema, className, onChange, ...props }: { schema: FilterBuilderSchema; className?: string; onChange?: (event: any) => void; [key: string]: any }) => { const handleChange = (value: FilterGroup) => { if (onChange) { onChange({ diff --git a/packages/components/src/renderers/complex/kanban.tsx b/packages/components/src/renderers/complex/kanban.tsx index 51f2fa929..b65929b15 100644 --- a/packages/components/src/renderers/complex/kanban.tsx +++ b/packages/components/src/renderers/complex/kanban.tsx @@ -1,9 +1,10 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { KanbanSchema } from '@object-ui/types'; import { KanbanBoard, type KanbanColumn, type KanbanCard } from '@/ui'; import React from 'react'; ComponentRegistry.register('kanban', - ({ schema, className, ...props }) => { + ({ schema, className, ...props }: { schema: KanbanSchema; className?: string; [key: string]: any }) => { return ( ( + ({ schema, className, ...props }: { schema: ResizableSchema; className?: string; [key: string]: any }) => ( ( + ({ schema, className, ...props }: { schema: ScrollAreaSchema; className?: string; [key: string]: any }) => ( {renderChildren(schema.content || schema.children)} {schema.orientation === 'horizontal' && } diff --git a/packages/components/src/renderers/complex/table.tsx b/packages/components/src/renderers/complex/table.tsx index 6c4e8dff3..c7fdfd257 100644 --- a/packages/components/src/renderers/complex/table.tsx +++ b/packages/components/src/renderers/complex/table.tsx @@ -1,5 +1,6 @@ // table.tsx implementation import { ComponentRegistry } from '@object-ui/core'; +import type { TableSchema } from '@object-ui/types'; import { Table, TableHeader, @@ -13,7 +14,7 @@ import { // A simple data-driven table ComponentRegistry.register('table', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: TableSchema; className?: string; [key: string]: any }) => ( {schema.caption && {schema.caption}} diff --git a/packages/components/src/renderers/complex/timeline.tsx b/packages/components/src/renderers/complex/timeline.tsx index 6652f780e..0add7fe19 100644 --- a/packages/components/src/renderers/complex/timeline.tsx +++ b/packages/components/src/renderers/complex/timeline.tsx @@ -1,4 +1,5 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { TimelineSchema } from '@object-ui/types'; import { Timeline, TimelineItem, @@ -78,7 +79,7 @@ function formatDate(dateString: string, format?: string): string { ComponentRegistry.register( 'timeline', - ({ schema, className, ...props }) => { + ({ schema, className, ...props }: { schema: TimelineSchema; className?: string; [key: string]: any }) => { const { variant = 'vertical', items = [], diff --git a/packages/components/src/renderers/data-display/alert.tsx b/packages/components/src/renderers/data-display/alert.tsx index 949281432..8bcbec400 100644 --- a/packages/components/src/renderers/data-display/alert.tsx +++ b/packages/components/src/renderers/data-display/alert.tsx @@ -1,4 +1,5 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { AlertSchema } from '@object-ui/types'; import { renderChildren } from '../../lib/utils'; import { Alert, @@ -7,7 +8,7 @@ import { } from '@/ui'; ComponentRegistry.register('alert', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: AlertSchema; className?: string; [key: string]: any }) => ( {schema.title} {schema.description || renderChildren(schema.body)} diff --git a/packages/components/src/renderers/data-display/avatar.tsx b/packages/components/src/renderers/data-display/avatar.tsx index e2da09943..1302f5b6a 100644 --- a/packages/components/src/renderers/data-display/avatar.tsx +++ b/packages/components/src/renderers/data-display/avatar.tsx @@ -1,4 +1,5 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { AvatarSchema } from '@object-ui/types'; import { Avatar, AvatarImage, @@ -6,7 +7,7 @@ import { } from '@/ui'; ComponentRegistry.register('avatar', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: AvatarSchema; className?: string; [key: string]: any }) => ( {schema.fallback} diff --git a/packages/components/src/renderers/data-display/badge.tsx b/packages/components/src/renderers/data-display/badge.tsx index 0b77ff25f..a2b085fe9 100644 --- a/packages/components/src/renderers/data-display/badge.tsx +++ b/packages/components/src/renderers/data-display/badge.tsx @@ -1,9 +1,10 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { BadgeSchema } from '@object-ui/types'; import { Badge } from '@/ui'; import { renderChildren } from '../../lib/utils'; ComponentRegistry.register('badge', - ({ schema, ...props }) => ( + ({ schema, ...props }: { schema: BadgeSchema; [key: string]: any }) => ( {schema.label || renderChildren(schema.body)} diff --git a/packages/components/src/renderers/data-display/chart.tsx b/packages/components/src/renderers/data-display/chart.tsx index 32788452c..b897d0f7c 100644 --- a/packages/components/src/renderers/data-display/chart.tsx +++ b/packages/components/src/renderers/data-display/chart.tsx @@ -1,4 +1,5 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { ChartSchema } from '@object-ui/types'; import { ChartContainer, ChartTooltip, @@ -20,7 +21,7 @@ import { } from 'recharts'; ComponentRegistry.register('chart', - ({ schema, className }) => { + ({ schema, className }: { schema: ChartSchema; className?: string }) => { const { chartType = 'bar', data = [], config = {}, xAxisKey, series = [] } = schema; const ChartComponent = { diff --git a/packages/components/src/renderers/data-display/list.tsx b/packages/components/src/renderers/data-display/list.tsx index 08bd0fd5b..0f2cdd3ca 100644 --- a/packages/components/src/renderers/data-display/list.tsx +++ b/packages/components/src/renderers/data-display/list.tsx @@ -1,9 +1,10 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { ListSchema } from '@object-ui/types'; import { renderChildren } from '../../lib/utils'; import { cn } from '@/lib/utils'; ComponentRegistry.register('list', - ({ schema, className, ...props }) => { + ({ schema, className, ...props }: { schema: ListSchema; className?: string; [key: string]: any }) => { const ListTag = schema.ordered ? 'ol' : 'ul'; return ( diff --git a/packages/components/src/renderers/data-display/markdown.tsx b/packages/components/src/renderers/data-display/markdown.tsx index b700114f4..dab1d4da2 100644 --- a/packages/components/src/renderers/data-display/markdown.tsx +++ b/packages/components/src/renderers/data-display/markdown.tsx @@ -1,4 +1,5 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { MarkdownSchema } from '@object-ui/types'; import { Markdown } from '@/ui'; /** @@ -23,7 +24,7 @@ import { Markdown } from '@/ui'; * - Tailwind CSS prose styling */ ComponentRegistry.register('markdown', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: MarkdownSchema; className?: string; [key: string]: any }) => ( ( + ({ schema, className, ...props }: { schema: AccordionSchema; className?: string; [key: string]: any }) => ( - {schema.items?.map((item: any, index: number) => ( + {schema.items?.map((item, index: number) => ( - {item.trigger || item.label} + {item.title} {renderChildren(item.content)} diff --git a/packages/components/src/renderers/disclosure/collapsible.tsx b/packages/components/src/renderers/disclosure/collapsible.tsx index 340149345..b3a4a0570 100644 --- a/packages/components/src/renderers/disclosure/collapsible.tsx +++ b/packages/components/src/renderers/disclosure/collapsible.tsx @@ -1,4 +1,5 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { CollapsibleSchema } from '@object-ui/types'; import { Collapsible, CollapsibleTrigger, @@ -7,7 +8,7 @@ import { import { renderChildren } from '../../lib/utils'; ComponentRegistry.register('collapsible', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: CollapsibleSchema; className?: string; [key: string]: any }) => ( {renderChildren(schema.trigger)} diff --git a/packages/components/src/renderers/feedback/loading.tsx b/packages/components/src/renderers/feedback/loading.tsx index 45c91f048..5928f77dc 100644 --- a/packages/components/src/renderers/feedback/loading.tsx +++ b/packages/components/src/renderers/feedback/loading.tsx @@ -1,9 +1,10 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { LoadingSchema } from '@object-ui/types'; import { Spinner } from '@/ui'; import { cn } from '@/lib/utils'; ComponentRegistry.register('loading', - ({ schema, className, ...props }) => { + ({ schema, className, ...props }: { schema: LoadingSchema; className?: string; [key: string]: any }) => { const size = schema.size || 'md'; const fullscreen = schema.fullscreen || false; diff --git a/packages/components/src/renderers/feedback/progress.tsx b/packages/components/src/renderers/feedback/progress.tsx index 133d4641d..d2a3489d8 100644 --- a/packages/components/src/renderers/feedback/progress.tsx +++ b/packages/components/src/renderers/feedback/progress.tsx @@ -1,8 +1,9 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { ProgressSchema } from '@object-ui/types'; import { Progress } from '@/ui'; ComponentRegistry.register('progress', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: ProgressSchema; className?: string; [key: string]: any }) => ( ), { diff --git a/packages/components/src/renderers/feedback/skeleton.tsx b/packages/components/src/renderers/feedback/skeleton.tsx index ae2a9c96c..4c798dab9 100644 --- a/packages/components/src/renderers/feedback/skeleton.tsx +++ b/packages/components/src/renderers/feedback/skeleton.tsx @@ -1,8 +1,9 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { SkeletonSchema } from '@object-ui/types'; import { Skeleton } from '@/ui'; ComponentRegistry.register('skeleton', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: SkeletonSchema; className?: string; [key: string]: any }) => ( ), { diff --git a/packages/components/src/renderers/feedback/toaster.tsx b/packages/components/src/renderers/feedback/toaster.tsx index 6fe8e3945..398daac1d 100644 --- a/packages/components/src/renderers/feedback/toaster.tsx +++ b/packages/components/src/renderers/feedback/toaster.tsx @@ -1,4 +1,5 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { ToasterSchema } from '@object-ui/types'; import { Toaster as SonnerToaster } from '@/ui'; import { Toaster as DefaultToaster } from '@/ui'; // Note: In shadcn/ui typical setup, Toaster is exported from 'components/ui/toaster' and 'components/ui/sonner'. @@ -7,7 +8,7 @@ import { Toaster as DefaultToaster } from '@/ui'; // Let's assume standard exports. ComponentRegistry.register('toaster', - ({ schema }) => { + ({ schema }: { schema: ToasterSchema }) => { if (schema.provider === 'sonner') { return ; } diff --git a/packages/components/src/renderers/form/button.tsx b/packages/components/src/renderers/form/button.tsx index 1ad51607d..0b6f5b4c5 100644 --- a/packages/components/src/renderers/form/button.tsx +++ b/packages/components/src/renderers/form/button.tsx @@ -1,9 +1,10 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { ButtonSchema } from '@object-ui/types'; import { Button } from '@/ui'; import { renderChildren } from '../../lib/utils'; ComponentRegistry.register('button', - ({ schema, ...props }) => ( + ({ schema, ...props }: { schema: ButtonSchema; [key: string]: any }) => ( diff --git a/packages/components/src/renderers/form/calendar.tsx b/packages/components/src/renderers/form/calendar.tsx index bd86e25c2..36595f174 100644 --- a/packages/components/src/renderers/form/calendar.tsx +++ b/packages/components/src/renderers/form/calendar.tsx @@ -1,11 +1,12 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { CalendarSchema } from '@object-ui/types'; import { Calendar } from '@/ui'; ComponentRegistry.register('calendar', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: CalendarSchema; className?: string; [key: string]: any }) => ( diff --git a/packages/components/src/renderers/form/checkbox.tsx b/packages/components/src/renderers/form/checkbox.tsx index 6167e7889..fde46c03e 100644 --- a/packages/components/src/renderers/form/checkbox.tsx +++ b/packages/components/src/renderers/form/checkbox.tsx @@ -1,8 +1,9 @@ import { ComponentRegistry } from '@object-ui/core'; +import type { CheckboxSchema } from '@object-ui/types'; import { Checkbox, Label } from '@/ui'; ComponentRegistry.register('checkbox', - ({ schema, className, ...props }) => ( + ({ schema, className, ...props }: { schema: CheckboxSchema; className?: string; [key: string]: any }) => (