Skip to content

Commit 46b7445

Browse files
Copilothotlong
andcommitted
Add TypeScript type definitions for all new component schemas
Added complete TypeScript schema definitions for 14 new components in @object-ui/types package: ComboboxSchema, CommandSchema, ToastSchema (already existed), SpinnerSchema, EmptySchema, SonnerSchema, BreadcrumbSchema (already existed in navigation), KbdSchema, ToggleGroupSchema, ButtonGroupSchema, PaginationSchema (already existed), NavigationMenuSchema, AspectRatioSchema, and MenubarSchema. Fixed type naming conflict in ToggleGroupSchema by renaming 'type' property to 'selectionType'. All 123 static pages build successfully and all 205 tests passing. Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 2d95699 commit 46b7445

File tree

8 files changed

+465
-25
lines changed

8 files changed

+465
-25
lines changed

packages/components/src/renderers/disclosure/toggle-group.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ ComponentRegistry.register('toggle-group',
2121

2222
return (
2323
<ToggleGroup
24-
type={schema.type || 'single'}
24+
type={schema.selectionType || 'single'}
2525
variant={schema.variant}
2626
size={schema.size}
2727
value={schema.value}
@@ -41,11 +41,11 @@ ComponentRegistry.register('toggle-group',
4141
label: 'Toggle Group',
4242
inputs: [
4343
{
44-
name: 'type',
44+
name: 'selectionType',
4545
type: 'enum',
4646
enum: ['single', 'multiple'],
4747
defaultValue: 'single',
48-
label: 'Type'
48+
label: 'Selection Type'
4949
},
5050
{
5151
name: 'variant',
@@ -64,7 +64,7 @@ ComponentRegistry.register('toggle-group',
6464
{ name: 'className', type: 'string', label: 'CSS Class' }
6565
],
6666
defaultProps: {
67-
type: 'single',
67+
selectionType: 'single',
6868
variant: 'default',
6969
size: 'default',
7070
items: [

packages/types/src/data-display.ts

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,51 @@ export interface TimelineSchema extends BaseSchema {
609609
position?: 'left' | 'right' | 'alternate';
610610
}
611611

612+
/**
613+
* Breadcrumb item
614+
*/
615+
export interface BreadcrumbItem {
616+
/**
617+
* Item label
618+
*/
619+
label: string;
620+
/**
621+
* Item href/link
622+
*/
623+
href?: string;
624+
}
625+
626+
/**
627+
* Breadcrumb component
628+
*/
629+
export interface BreadcrumbSchema extends BaseSchema {
630+
type: 'breadcrumb';
631+
/**
632+
* Breadcrumb items
633+
*/
634+
items: BreadcrumbItem[];
635+
/**
636+
* Separator character
637+
* @default '/'
638+
*/
639+
separator?: string;
640+
}
641+
642+
/**
643+
* Keyboard key component
644+
*/
645+
export interface KbdSchema extends BaseSchema {
646+
type: 'kbd';
647+
/**
648+
* Key label (single key)
649+
*/
650+
label?: string;
651+
/**
652+
* Key labels (multiple keys)
653+
*/
654+
keys?: string | string[];
655+
}
656+
612657
/**
613658
* Union type of all data display schemas
614659
*/
@@ -624,7 +669,9 @@ export type DataDisplaySchema =
624669
| ChartSchema
625670
| TimelineSchema
626671
| HtmlSchema
627-
| StatisticSchema;
672+
| StatisticSchema
673+
| BreadcrumbSchema
674+
| KbdSchema;
628675

629676
/**
630677
* Raw HTML component

packages/types/src/disclosure.ts

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,74 @@ export interface CollapsibleSchema extends BaseSchema {
113113
onOpenChange?: (open: boolean) => void;
114114
}
115115

116+
/**
117+
* Toggle group item
118+
*/
119+
export interface ToggleGroupItem {
120+
/**
121+
* Item value
122+
*/
123+
value: string;
124+
/**
125+
* Item label
126+
*/
127+
label: string;
128+
/**
129+
* Item icon
130+
*/
131+
icon?: string;
132+
/**
133+
* Whether item is disabled
134+
*/
135+
disabled?: boolean;
136+
}
137+
138+
/**
139+
* Toggle group component
140+
*/
141+
export interface ToggleGroupSchema extends BaseSchema {
142+
type: 'toggle-group';
143+
/**
144+
* Toggle group selection mode
145+
* @default 'single'
146+
*/
147+
selectionType?: 'single' | 'multiple';
148+
/**
149+
* Toggle group variant
150+
* @default 'default'
151+
*/
152+
variant?: 'default' | 'outline';
153+
/**
154+
* Toggle group size
155+
* @default 'default'
156+
*/
157+
size?: 'default' | 'sm' | 'lg';
158+
/**
159+
* Toggle group items
160+
*/
161+
items?: ToggleGroupItem[];
162+
/**
163+
* Default selected value(s)
164+
*/
165+
defaultValue?: string | string[];
166+
/**
167+
* Controlled selected value(s)
168+
*/
169+
value?: string | string[];
170+
/**
171+
* Whether toggle group is disabled
172+
*/
173+
disabled?: boolean;
174+
/**
175+
* Change handler
176+
*/
177+
onValueChange?: (value: string | string[]) => void;
178+
}
179+
116180
/**
117181
* Union type of all disclosure schemas
118182
*/
119183
export type DisclosureSchema =
120184
| AccordionSchema
121-
| CollapsibleSchema;
185+
| CollapsibleSchema
186+
| ToggleGroupSchema;

packages/types/src/feedback.ts

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,69 @@ export interface ToasterSchema extends BaseSchema {
167167
limit?: number;
168168
}
169169

170+
/**
171+
* Spinner component
172+
*/
173+
export interface SpinnerSchema extends BaseSchema {
174+
type: 'spinner';
175+
/**
176+
* Spinner size
177+
* @default 'md'
178+
*/
179+
size?: 'sm' | 'md' | 'lg' | 'xl';
180+
}
181+
182+
/**
183+
* Empty state component
184+
*/
185+
export interface EmptySchema extends BaseSchema {
186+
type: 'empty';
187+
/**
188+
* Empty state title
189+
*/
190+
title?: string;
191+
/**
192+
* Empty state description
193+
*/
194+
description?: string;
195+
/**
196+
* Icon to display
197+
*/
198+
icon?: string;
199+
}
200+
201+
/**
202+
* Sonner toast component (using sonner library)
203+
*/
204+
export interface SonnerSchema extends BaseSchema {
205+
type: 'sonner';
206+
/**
207+
* Toast message/title
208+
*/
209+
message?: string;
210+
/**
211+
* Toast title (alias for message)
212+
*/
213+
title?: string;
214+
/**
215+
* Toast description
216+
*/
217+
description?: string;
218+
/**
219+
* Toast variant
220+
* @default 'default'
221+
*/
222+
variant?: 'default' | 'success' | 'error' | 'warning' | 'info';
223+
/**
224+
* Button label to trigger toast
225+
*/
226+
buttonLabel?: string;
227+
/**
228+
* Button variant
229+
*/
230+
buttonVariant?: 'default' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'link';
231+
}
232+
170233
/**
171234
* Union type of all feedback schemas
172235
*/
@@ -175,4 +238,7 @@ export type FeedbackSchema =
175238
| ProgressSchema
176239
| SkeletonSchema
177240
| ToastSchema
178-
| ToasterSchema;
241+
| ToasterSchema
242+
| SpinnerSchema
243+
| EmptySchema
244+
| SonnerSchema;

packages/types/src/form.ts

Lines changed: 123 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,126 @@ export interface LabelSchema extends BaseSchema {
940940
htmlFor?: string;
941941
}
942942

943+
/**
944+
* Combobox option
945+
*/
946+
export interface ComboboxOption {
947+
/**
948+
* Option value
949+
*/
950+
value: string;
951+
/**
952+
* Option label (displayed to user)
953+
*/
954+
label: string;
955+
/**
956+
* Whether option is disabled
957+
*/
958+
disabled?: boolean;
959+
}
960+
961+
/**
962+
* Combobox component (searchable select)
963+
*/
964+
export interface ComboboxSchema extends BaseSchema {
965+
type: 'combobox';
966+
/**
967+
* Field name for form submission
968+
*/
969+
name?: string;
970+
/**
971+
* Combobox label
972+
*/
973+
label?: string;
974+
/**
975+
* Placeholder text
976+
*/
977+
placeholder?: string;
978+
/**
979+
* Combobox options
980+
*/
981+
options?: ComboboxOption[];
982+
/**
983+
* Default selected value
984+
*/
985+
defaultValue?: string;
986+
/**
987+
* Controlled value
988+
*/
989+
value?: string;
990+
/**
991+
* Whether field is disabled
992+
*/
993+
disabled?: boolean;
994+
/**
995+
* Help text or description
996+
*/
997+
description?: string;
998+
/**
999+
* Error message
1000+
*/
1001+
error?: string;
1002+
/**
1003+
* Change handler
1004+
*/
1005+
onChange?: (value: string) => void;
1006+
}
1007+
1008+
/**
1009+
* Command menu item
1010+
*/
1011+
export interface CommandItem {
1012+
/**
1013+
* Item value
1014+
*/
1015+
value: string;
1016+
/**
1017+
* Item label (displayed to user)
1018+
*/
1019+
label: string;
1020+
/**
1021+
* Item icon
1022+
*/
1023+
icon?: string;
1024+
}
1025+
1026+
/**
1027+
* Command menu group
1028+
*/
1029+
export interface CommandGroup {
1030+
/**
1031+
* Group heading
1032+
*/
1033+
heading?: string;
1034+
/**
1035+
* Group items
1036+
*/
1037+
items: CommandItem[];
1038+
}
1039+
1040+
/**
1041+
* Command component (command palette)
1042+
*/
1043+
export interface CommandSchema extends BaseSchema {
1044+
type: 'command';
1045+
/**
1046+
* Placeholder text
1047+
*/
1048+
placeholder?: string;
1049+
/**
1050+
* Empty state text
1051+
*/
1052+
emptyText?: string;
1053+
/**
1054+
* Command groups
1055+
*/
1056+
groups?: CommandGroup[];
1057+
/**
1058+
* Change handler
1059+
*/
1060+
onChange?: (value: string) => void;
1061+
}
1062+
9431063
/**
9441064
* Union type of all form schemas
9451065
*/
@@ -958,5 +1078,7 @@ export type FormComponentSchema =
9581078
| CalendarSchema
9591079
| InputOTPSchema
9601080
| FormSchema
961-
| LabelSchema;
1081+
| LabelSchema
1082+
| ComboboxSchema
1083+
| CommandSchema;
9621084

0 commit comments

Comments
 (0)