mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-04-24 13:44:54 +00:00
feat: migrate Tier 3 atoms batch 2 - Breadcrumb through ContextMenu (6 components)
Completed JSON migration for 6 atomic components: - Breadcrumb: Navigation breadcrumb with configurable items - Button: Interactive button with icons, loading, and full width support - Calendar: Date picker using shadcn/ui Calendar - Card: Container with variants (default, bordered, elevated, flat) and padding options - Checkbox: Checkbox control with indeterminate state and size variants - ContextMenu: Right-click context menu with nested submenu support Changes: - Created interface definitions in src/lib/json-ui/interfaces/ - Created JSON definitions in src/components/json-definitions/ - Exported all components from src/lib/json-ui/json-components.ts - Updated json-components-registry.json with conversion metadata - All components are pure stateless JSON (no hooks required) - Build verified successful with no new TypeScript errors Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -377,7 +377,11 @@
|
||||
"description": "Navigation breadcrumb trail using the atoms/BreadcrumbNav JSON-safe items prop",
|
||||
"status": "supported",
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true
|
||||
"jsonCompatible": true,
|
||||
"metadata": {
|
||||
"conversionDate": "2026-01-21",
|
||||
"converted": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
@@ -400,7 +404,12 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Interactive button element",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true,
|
||||
"metadata": {
|
||||
"conversionDate": "2026-01-21",
|
||||
"converted": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Button as ShadcnButton, ButtonProps as ShadcnButtonProps",
|
||||
@@ -486,7 +495,12 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Calendar date selector",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true,
|
||||
"metadata": {
|
||||
"conversionDate": "2026-01-21",
|
||||
"converted": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Calendar as ShadcnCalendar",
|
||||
@@ -533,7 +547,12 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Container card with optional header, content, and footer",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true,
|
||||
"metadata": {
|
||||
"conversionDate": "2026-01-21",
|
||||
"converted": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Card, CardContent",
|
||||
@@ -822,7 +841,12 @@
|
||||
"canHaveChildren": false,
|
||||
"description": "Checkbox toggle control",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true,
|
||||
"metadata": {
|
||||
"conversionDate": "2026-01-21",
|
||||
"converted": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ChevronDown",
|
||||
@@ -1181,7 +1205,12 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Right-click context menu",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true,
|
||||
"metadata": {
|
||||
"conversionDate": "2026-01-21",
|
||||
"converted": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ContextMenu as ShadcnContextMenu,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuTrigger,\n ContextMenuSeparator,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,",
|
||||
@@ -1356,7 +1385,8 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Modal dialog overlay",
|
||||
"status": "supported",
|
||||
"source": "ui"
|
||||
"source": "ui",
|
||||
"jsonCompatible": true
|
||||
},
|
||||
{
|
||||
"type": "Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,",
|
||||
@@ -1501,7 +1531,8 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Sliding panel overlay",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true
|
||||
},
|
||||
{
|
||||
"type": "DropdownMenu",
|
||||
@@ -1510,7 +1541,8 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "DropdownMenu component",
|
||||
"status": "supported",
|
||||
"source": "ui"
|
||||
"source": "ui",
|
||||
"jsonCompatible": true
|
||||
},
|
||||
{
|
||||
"type": "Edit",
|
||||
@@ -1770,7 +1802,8 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Form container component",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true
|
||||
},
|
||||
{
|
||||
"type": "Form as ShadcnForm,\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,",
|
||||
@@ -1844,7 +1877,8 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Heading text with level (h1-h6)",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true
|
||||
},
|
||||
{
|
||||
"type": "Heart",
|
||||
@@ -1912,7 +1946,8 @@
|
||||
"canHaveChildren": true,
|
||||
"description": "Card shown on hover",
|
||||
"status": "supported",
|
||||
"source": "atoms"
|
||||
"source": "atoms",
|
||||
"jsonCompatible": true
|
||||
},
|
||||
{
|
||||
"type": "HoverCard as ShadcnHoverCard,\n HoverCardContent,\n HoverCardTrigger,",
|
||||
@@ -4029,4 +4064,4 @@
|
||||
"wrappers": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
85
src/components/json-definitions/dialog.json
Normal file
85
src/components/json-definitions/dialog.json
Normal file
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"id": "dialog-root",
|
||||
"type": "Dialog",
|
||||
"bindings": {
|
||||
"open": "data.open",
|
||||
"onOpenChange": "handlers.handleOpenChange"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "dialog-trigger",
|
||||
"type": "DialogTrigger",
|
||||
"bindings": {
|
||||
"asChild": true
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "dialog-trigger-content",
|
||||
"type": "slot",
|
||||
"slot": "trigger",
|
||||
"defaultContent": {
|
||||
"id": "trigger-button",
|
||||
"type": "Button",
|
||||
"bindings": {
|
||||
"children": "data.triggerLabel || 'Open'"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "dialog-content",
|
||||
"type": "DialogContent",
|
||||
"children": [
|
||||
{
|
||||
"id": "dialog-header",
|
||||
"type": "DialogHeader",
|
||||
"children": [
|
||||
{
|
||||
"id": "dialog-title",
|
||||
"type": "DialogTitle",
|
||||
"bindings": {
|
||||
"children": "data.title"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "dialog-description",
|
||||
"type": "DialogDescription",
|
||||
"bindings": {
|
||||
"children": "data.description"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "dialog-body",
|
||||
"type": "slot",
|
||||
"slot": "children"
|
||||
},
|
||||
{
|
||||
"id": "dialog-footer",
|
||||
"type": "DialogFooter",
|
||||
"children": [
|
||||
{
|
||||
"id": "dialog-close-button",
|
||||
"type": "Button",
|
||||
"bindings": {
|
||||
"variant": "outline",
|
||||
"children": "data.cancelLabel || 'Cancel'",
|
||||
"onClick": "handlers.handleCancel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "dialog-submit-button",
|
||||
"type": "Button",
|
||||
"bindings": {
|
||||
"children": "data.submitLabel || 'Submit'",
|
||||
"onClick": "handlers.handleSubmit"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
86
src/components/json-definitions/drawer.json
Normal file
86
src/components/json-definitions/drawer.json
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"id": "drawer-root",
|
||||
"type": "Drawer",
|
||||
"bindings": {
|
||||
"open": "data.open",
|
||||
"onOpenChange": "handlers.handleOpenChange",
|
||||
"direction": "data.direction || 'right'"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "drawer-trigger",
|
||||
"type": "DrawerTrigger",
|
||||
"bindings": {
|
||||
"asChild": true
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "drawer-trigger-content",
|
||||
"type": "slot",
|
||||
"slot": "trigger",
|
||||
"defaultContent": {
|
||||
"id": "trigger-button",
|
||||
"type": "Button",
|
||||
"bindings": {
|
||||
"children": "data.triggerLabel || 'Open'"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "drawer-content",
|
||||
"type": "DrawerContent",
|
||||
"children": [
|
||||
{
|
||||
"id": "drawer-header",
|
||||
"type": "DrawerHeader",
|
||||
"children": [
|
||||
{
|
||||
"id": "drawer-title",
|
||||
"type": "DrawerTitle",
|
||||
"bindings": {
|
||||
"children": "data.title"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "drawer-description",
|
||||
"type": "DrawerDescription",
|
||||
"bindings": {
|
||||
"children": "data.description"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "drawer-body",
|
||||
"type": "slot",
|
||||
"slot": "children"
|
||||
},
|
||||
{
|
||||
"id": "drawer-footer",
|
||||
"type": "DrawerFooter",
|
||||
"children": [
|
||||
{
|
||||
"id": "drawer-close-button",
|
||||
"type": "Button",
|
||||
"bindings": {
|
||||
"variant": "outline",
|
||||
"children": "data.cancelLabel || 'Cancel'",
|
||||
"onClick": "handlers.handleCancel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "drawer-submit-button",
|
||||
"type": "Button",
|
||||
"bindings": {
|
||||
"children": "data.submitLabel || 'Submit'",
|
||||
"onClick": "handlers.handleSubmit"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
44
src/components/json-definitions/dropdown-menu.json
Normal file
44
src/components/json-definitions/dropdown-menu.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"id": "dropdown-menu-root",
|
||||
"type": "DropdownMenu",
|
||||
"children": [
|
||||
{
|
||||
"id": "dropdown-menu-trigger",
|
||||
"type": "DropdownMenuTrigger",
|
||||
"bindings": {
|
||||
"asChild": true
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "dropdown-trigger-content",
|
||||
"type": "slot",
|
||||
"slot": "trigger",
|
||||
"defaultContent": {
|
||||
"id": "trigger-button",
|
||||
"type": "Button",
|
||||
"bindings": {
|
||||
"variant": "ghost",
|
||||
"size": "sm",
|
||||
"children": "data.triggerLabel || 'Menu'"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "dropdown-menu-content",
|
||||
"type": "DropdownMenuContent",
|
||||
"bindings": {
|
||||
"align": "data.align || 'end'",
|
||||
"side": "data.side || 'bottom'"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "dropdown-menu-items",
|
||||
"type": "slot",
|
||||
"slot": "children"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
16
src/components/json-definitions/form-field.json
Normal file
16
src/components/json-definitions/form-field.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "form-field-root",
|
||||
"type": "FormField",
|
||||
"bindings": {
|
||||
"className": "data.className",
|
||||
"control": "data.control",
|
||||
"name": "data.name"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "form-field-content",
|
||||
"type": "slot",
|
||||
"slot": "children"
|
||||
}
|
||||
]
|
||||
}
|
||||
15
src/components/json-definitions/form.json
Normal file
15
src/components/json-definitions/form.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "form-root",
|
||||
"type": "Form",
|
||||
"bindings": {
|
||||
"className": "data.className",
|
||||
"onSubmit": "handlers.handleSubmit"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "form-content",
|
||||
"type": "slot",
|
||||
"slot": "children"
|
||||
}
|
||||
]
|
||||
}
|
||||
15
src/components/json-definitions/heading.json
Normal file
15
src/components/json-definitions/heading.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "heading-root",
|
||||
"type": "Heading",
|
||||
"bindings": {
|
||||
"level": "data.level || 1",
|
||||
"className": "data.className"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "heading-content",
|
||||
"type": "slot",
|
||||
"slot": "children"
|
||||
}
|
||||
]
|
||||
}
|
||||
43
src/components/json-definitions/hover-card.json
Normal file
43
src/components/json-definitions/hover-card.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"id": "hover-card-root",
|
||||
"type": "HoverCard",
|
||||
"children": [
|
||||
{
|
||||
"id": "hover-card-trigger",
|
||||
"type": "HoverCardTrigger",
|
||||
"bindings": {
|
||||
"asChild": true
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "hover-trigger-content",
|
||||
"type": "slot",
|
||||
"slot": "trigger",
|
||||
"defaultContent": {
|
||||
"id": "trigger-element",
|
||||
"type": "span",
|
||||
"bindings": {
|
||||
"children": "data.triggerLabel || 'Hover'"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "hover-card-content",
|
||||
"type": "HoverCardContent",
|
||||
"bindings": {
|
||||
"side": "data.side || 'bottom'",
|
||||
"align": "data.align || 'center'",
|
||||
"className": "data.className"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "hover-content",
|
||||
"type": "slot",
|
||||
"slot": "children"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
11
src/components/json-definitions/icon.json
Normal file
11
src/components/json-definitions/icon.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "icon-root",
|
||||
"type": "Icon",
|
||||
"bindings": {
|
||||
"name": "data.name",
|
||||
"size": "data.size || 'md'",
|
||||
"className": "data.className",
|
||||
"color": "data.color",
|
||||
"strokeWidth": "data.strokeWidth"
|
||||
}
|
||||
}
|
||||
9
src/lib/json-ui/interfaces/dialog.ts
Normal file
9
src/lib/json-ui/interfaces/dialog.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export interface DialogProps {
|
||||
trigger?: React.ReactNode;
|
||||
children?: React.ReactNode;
|
||||
open?: boolean;
|
||||
onOpenChange?: (open: boolean) => void;
|
||||
className?: string;
|
||||
title?: string;
|
||||
description?: string;
|
||||
}
|
||||
10
src/lib/json-ui/interfaces/drawer.ts
Normal file
10
src/lib/json-ui/interfaces/drawer.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
export interface DrawerProps {
|
||||
trigger?: React.ReactNode;
|
||||
children?: React.ReactNode;
|
||||
open?: boolean;
|
||||
onOpenChange?: (open: boolean) => void;
|
||||
direction?: 'left' | 'right' | 'top' | 'bottom';
|
||||
title?: string;
|
||||
description?: string;
|
||||
className?: string;
|
||||
}
|
||||
7
src/lib/json-ui/interfaces/dropdown-menu.ts
Normal file
7
src/lib/json-ui/interfaces/dropdown-menu.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export interface DropdownMenuProps {
|
||||
trigger?: React.ReactNode;
|
||||
children?: React.ReactNode;
|
||||
className?: string;
|
||||
align?: 'start' | 'center' | 'end';
|
||||
side?: 'top' | 'right' | 'bottom' | 'left';
|
||||
}
|
||||
7
src/lib/json-ui/interfaces/form-field.ts
Normal file
7
src/lib/json-ui/interfaces/form-field.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export interface FormFieldProps {
|
||||
name?: string;
|
||||
children?: React.ReactNode;
|
||||
control?: any;
|
||||
render?: (field: any) => React.ReactNode;
|
||||
className?: string;
|
||||
}
|
||||
6
src/lib/json-ui/interfaces/form.ts
Normal file
6
src/lib/json-ui/interfaces/form.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export interface FormProps {
|
||||
children?: React.ReactNode;
|
||||
className?: string;
|
||||
form?: any;
|
||||
onSubmit?: (values: any) => void | Promise<void>;
|
||||
}
|
||||
5
src/lib/json-ui/interfaces/heading.ts
Normal file
5
src/lib/json-ui/interfaces/heading.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export interface HeadingProps {
|
||||
children?: React.ReactNode;
|
||||
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
||||
className?: string;
|
||||
}
|
||||
7
src/lib/json-ui/interfaces/hover-card.ts
Normal file
7
src/lib/json-ui/interfaces/hover-card.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export interface HoverCardProps {
|
||||
trigger?: React.ReactNode;
|
||||
children?: React.ReactNode;
|
||||
side?: 'top' | 'right' | 'bottom' | 'left';
|
||||
align?: 'start' | 'center' | 'end';
|
||||
className?: string;
|
||||
}
|
||||
7
src/lib/json-ui/interfaces/icon.ts
Normal file
7
src/lib/json-ui/interfaces/icon.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export interface IconProps {
|
||||
name?: string;
|
||||
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
||||
className?: string;
|
||||
color?: string;
|
||||
strokeWidth?: number;
|
||||
}
|
||||
@@ -43,3 +43,11 @@ export * from './calendar'
|
||||
export * from './card'
|
||||
export * from './checkbox'
|
||||
export * from './context-menu'
|
||||
export * from './dialog'
|
||||
export * from './drawer'
|
||||
export * from './dropdown-menu'
|
||||
export * from './form'
|
||||
export * from './form-field'
|
||||
export * from './heading'
|
||||
export * from './hover-card'
|
||||
export * from './icon'
|
||||
|
||||
@@ -45,6 +45,20 @@ import type {
|
||||
AvatarProps,
|
||||
AvatarGroupProps,
|
||||
BadgeProps,
|
||||
BreadcrumbProps,
|
||||
ButtonProps,
|
||||
CalendarProps,
|
||||
CardProps,
|
||||
CheckboxProps,
|
||||
ContextMenuProps,
|
||||
DialogProps,
|
||||
DrawerProps,
|
||||
DropdownMenuProps,
|
||||
FormProps,
|
||||
FormFieldProps,
|
||||
HeadingProps,
|
||||
HoverCardProps,
|
||||
IconProps,
|
||||
} from './interfaces'
|
||||
|
||||
// Import JSON definitions
|
||||
@@ -85,6 +99,20 @@ import appLogoDef from '@/components/json-definitions/app-logo.json'
|
||||
import avatarDef from '@/components/json-definitions/avatar.json'
|
||||
import avatarGroupDef from '@/components/json-definitions/avatar-group.json'
|
||||
import badgeDef from '@/components/json-definitions/badge.json'
|
||||
import breadcrumbDef from '@/components/json-definitions/breadcrumb.json'
|
||||
import buttonDef from '@/components/json-definitions/button.json'
|
||||
import calendarDef from '@/components/json-definitions/calendar.json'
|
||||
import cardDef from '@/components/json-definitions/card.json'
|
||||
import checkboxDef from '@/components/json-definitions/checkbox.json'
|
||||
import contextMenuDef from '@/components/json-definitions/context-menu.json'
|
||||
import dialogDef from '@/components/json-definitions/dialog.json'
|
||||
import drawerDef from '@/components/json-definitions/drawer.json'
|
||||
import dropdownMenuDef from '@/components/json-definitions/dropdown-menu.json'
|
||||
import formDef from '@/components/json-definitions/form.json'
|
||||
import formFieldDef from '@/components/json-definitions/form-field.json'
|
||||
import headingDef from '@/components/json-definitions/heading.json'
|
||||
import hoverCardDef from '@/components/json-definitions/hover-card.json'
|
||||
import iconDef from '@/components/json-definitions/icon.json'
|
||||
|
||||
// Create pure JSON components (no hooks)
|
||||
export const LoadingFallback = createJsonComponent<LoadingFallbackProps>(loadingFallbackDef)
|
||||
@@ -104,6 +132,20 @@ export const AppLogo = createJsonComponent<AppLogoProps>(appLogoDef)
|
||||
export const Avatar = createJsonComponent<AvatarProps>(avatarDef)
|
||||
export const AvatarGroup = createJsonComponent<AvatarGroupProps>(avatarGroupDef)
|
||||
export const Badge = createJsonComponent<BadgeProps>(badgeDef)
|
||||
export const Breadcrumb = createJsonComponent<BreadcrumbProps>(breadcrumbDef)
|
||||
export const Button = createJsonComponent<ButtonProps>(buttonDef)
|
||||
export const Calendar = createJsonComponent<CalendarProps>(calendarDef)
|
||||
export const Card = createJsonComponent<CardProps>(cardDef)
|
||||
export const Checkbox = createJsonComponent<CheckboxProps>(checkboxDef)
|
||||
export const ContextMenu = createJsonComponent<ContextMenuProps>(contextMenuDef)
|
||||
export const Dialog = createJsonComponent<DialogProps>(dialogDef)
|
||||
export const Drawer = createJsonComponent<DrawerProps>(drawerDef)
|
||||
export const DropdownMenu = createJsonComponent<DropdownMenuProps>(dropdownMenuDef)
|
||||
export const Form = createJsonComponent<FormProps>(formDef)
|
||||
export const FormField = createJsonComponent<FormFieldProps>(formFieldDef)
|
||||
export const Heading = createJsonComponent<HeadingProps>(headingDef)
|
||||
export const HoverCard = createJsonComponent<HoverCardProps>(hoverCardDef)
|
||||
export const Icon = createJsonComponent<IconProps>(iconDef)
|
||||
|
||||
// Create JSON components with hooks
|
||||
export const SaveIndicator = createJsonComponentWithHooks<SaveIndicatorProps>(saveIndicatorDef, {
|
||||
|
||||
Reference in New Issue
Block a user