@object-ui/components 0.3.0 → 0.3.1
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/CHANGELOG.md +10 -0
- package/ISSUES_FOUND.md +128 -0
- package/README.md +19 -1
- package/README_SHADCN_SYNC.md +281 -0
- package/TESTING.md +335 -0
- package/dist/index.css +1 -1
- package/dist/index.js +30981 -30027
- package/dist/index.umd.cjs +30 -39
- package/dist/src/hooks/use-mobile.d.ts +7 -0
- package/dist/src/index.d.ts +4 -1
- package/dist/src/renderers/basic/button-group.d.ts +8 -0
- package/dist/src/renderers/basic/div.d.ts +7 -0
- package/dist/src/renderers/basic/html.d.ts +7 -0
- package/dist/src/renderers/basic/icon.d.ts +7 -0
- package/dist/src/renderers/basic/image.d.ts +7 -0
- package/dist/src/renderers/basic/navigation-menu.d.ts +8 -0
- package/dist/src/renderers/basic/pagination.d.ts +8 -0
- package/dist/src/renderers/basic/separator.d.ts +7 -0
- package/dist/src/renderers/basic/span.d.ts +7 -0
- package/dist/src/renderers/basic/text.d.ts +7 -0
- package/dist/src/renderers/complex/carousel.d.ts +7 -0
- package/dist/src/renderers/complex/data-table.d.ts +7 -0
- package/dist/src/renderers/complex/filter-builder.d.ts +7 -0
- package/dist/src/renderers/complex/resizable.d.ts +7 -0
- package/dist/src/renderers/complex/scroll-area.d.ts +7 -0
- package/dist/src/renderers/complex/table.d.ts +7 -0
- package/dist/src/renderers/data-display/alert.d.ts +7 -0
- package/dist/src/renderers/data-display/avatar.d.ts +7 -0
- package/dist/src/renderers/data-display/badge.d.ts +7 -0
- package/dist/src/renderers/data-display/breadcrumb.d.ts +8 -0
- package/dist/src/renderers/data-display/kbd.d.ts +8 -0
- package/dist/src/renderers/data-display/list.d.ts +7 -0
- package/dist/src/renderers/data-display/statistic.d.ts +7 -0
- package/dist/src/renderers/data-display/table.d.ts +8 -0
- package/dist/src/renderers/data-display/tree-view.d.ts +7 -0
- package/dist/src/renderers/disclosure/accordion.d.ts +7 -0
- package/dist/src/renderers/disclosure/collapsible.d.ts +7 -0
- package/dist/src/renderers/disclosure/toggle-group.d.ts +8 -0
- package/dist/src/renderers/feedback/empty.d.ts +8 -0
- package/dist/src/renderers/feedback/loading.d.ts +7 -0
- package/dist/src/renderers/feedback/progress.d.ts +7 -0
- package/dist/src/renderers/feedback/skeleton.d.ts +7 -0
- package/dist/src/renderers/feedback/sonner.d.ts +8 -0
- package/dist/src/renderers/feedback/spinner.d.ts +8 -0
- package/dist/src/renderers/feedback/toast.d.ts +8 -0
- package/dist/src/renderers/feedback/toaster.d.ts +7 -0
- package/dist/src/renderers/form/button.d.ts +7 -0
- package/dist/src/renderers/form/calendar.d.ts +7 -0
- package/dist/src/renderers/form/checkbox.d.ts +7 -0
- package/dist/src/renderers/form/combobox.d.ts +8 -0
- package/dist/src/renderers/form/command.d.ts +8 -0
- package/dist/src/renderers/form/date-picker.d.ts +7 -0
- package/dist/src/renderers/form/file-upload.d.ts +7 -0
- package/dist/src/renderers/form/form.d.ts +7 -0
- package/dist/src/renderers/form/input-otp.d.ts +7 -0
- package/dist/src/renderers/form/input.d.ts +7 -0
- package/dist/src/renderers/form/label.d.ts +7 -0
- package/dist/src/renderers/form/radio-group.d.ts +7 -0
- package/dist/src/renderers/form/select.d.ts +7 -0
- package/dist/src/renderers/form/slider.d.ts +7 -0
- package/dist/src/renderers/form/switch.d.ts +7 -0
- package/dist/src/renderers/form/textarea.d.ts +7 -0
- package/dist/src/renderers/form/toggle.d.ts +7 -0
- package/dist/src/renderers/layout/aspect-ratio.d.ts +8 -0
- package/dist/src/renderers/layout/card.d.ts +7 -0
- package/dist/src/renderers/layout/container.d.ts +7 -0
- package/dist/src/renderers/layout/flex.d.ts +7 -0
- package/dist/src/renderers/layout/grid.d.ts +7 -0
- package/dist/src/renderers/layout/semantic.d.ts +7 -0
- package/dist/src/renderers/layout/stack.d.ts +7 -0
- package/dist/src/renderers/layout/tabs.d.ts +7 -0
- package/dist/src/renderers/navigation/header-bar.d.ts +7 -0
- package/dist/src/renderers/navigation/sidebar.d.ts +7 -0
- package/dist/src/renderers/overlay/alert-dialog.d.ts +7 -0
- package/dist/src/renderers/overlay/context-menu.d.ts +7 -0
- package/dist/src/renderers/overlay/dialog.d.ts +7 -0
- package/dist/src/renderers/overlay/drawer.d.ts +7 -0
- package/dist/src/renderers/overlay/dropdown-menu.d.ts +7 -0
- package/dist/src/renderers/overlay/hover-card.d.ts +7 -0
- package/dist/src/renderers/overlay/menubar.d.ts +8 -0
- package/dist/src/renderers/overlay/popover.d.ts +7 -0
- package/dist/src/renderers/overlay/sheet.d.ts +7 -0
- package/dist/src/renderers/overlay/tooltip.d.ts +7 -0
- package/dist/src/renderers/placeholders.d.ts +9 -0
- package/dist/src/ui/accordion.d.ts +7 -0
- package/dist/src/ui/alert-dialog.d.ts +7 -0
- package/dist/src/ui/alert.d.ts +7 -0
- package/dist/src/ui/aspect-ratio.d.ts +7 -0
- package/dist/src/ui/avatar.d.ts +7 -0
- package/dist/src/ui/badge.d.ts +7 -0
- package/dist/src/ui/breadcrumb.d.ts +7 -0
- package/dist/src/ui/button.d.ts +10 -5
- package/dist/src/ui/calendar.d.ts +14 -7
- package/dist/src/ui/card.d.ts +7 -0
- package/dist/src/ui/carousel.d.ts +7 -0
- package/dist/src/ui/checkbox.d.ts +7 -0
- package/dist/src/ui/collapsible.d.ts +7 -0
- package/dist/src/ui/combobox.d.ts +22 -0
- package/dist/src/ui/command.d.ts +7 -0
- package/dist/src/ui/context-menu.d.ts +7 -0
- package/dist/src/ui/date-picker.d.ts +15 -0
- package/dist/src/ui/dialog.d.ts +7 -0
- package/dist/src/ui/drawer.d.ts +7 -0
- package/dist/src/ui/dropdown-menu.d.ts +7 -0
- package/dist/src/ui/filter-builder.d.ts +7 -0
- package/dist/src/ui/form.d.ts +7 -0
- package/dist/src/ui/hover-card.d.ts +7 -0
- package/dist/src/ui/index.d.ts +10 -5
- package/dist/src/ui/input-otp.d.ts +7 -0
- package/dist/src/ui/input.d.ts +7 -0
- package/dist/src/ui/item.d.ts +7 -0
- package/dist/src/ui/kbd.d.ts +7 -0
- package/dist/src/ui/label.d.ts +7 -0
- package/dist/src/ui/menubar.d.ts +7 -0
- package/dist/src/ui/navigation-menu.d.ts +7 -0
- package/dist/src/ui/pagination.d.ts +7 -0
- package/dist/src/ui/popover.d.ts +7 -0
- package/dist/src/ui/progress.d.ts +7 -0
- package/dist/src/ui/radio-group.d.ts +7 -0
- package/dist/src/ui/resizable.d.ts +7 -0
- package/dist/src/ui/scroll-area.d.ts +7 -0
- package/dist/src/ui/select.d.ts +9 -2
- package/dist/src/ui/separator.d.ts +7 -0
- package/dist/src/ui/sheet.d.ts +7 -0
- package/dist/src/ui/sidebar.d.ts +14 -9
- package/dist/src/ui/skeleton.d.ts +7 -0
- package/dist/src/ui/slider.d.ts +7 -0
- package/dist/src/ui/spinner.d.ts +7 -0
- package/dist/src/ui/switch.d.ts +7 -0
- package/dist/src/ui/table.d.ts +15 -8
- package/dist/src/ui/tabs.d.ts +7 -0
- package/dist/src/ui/textarea.d.ts +7 -0
- package/dist/src/ui/toggle-group.d.ts +8 -3
- package/dist/src/ui/toggle.d.ts +7 -0
- package/dist/src/ui/tooltip.d.ts +7 -0
- package/metadata/ObjectGrid.component.yml +72 -0
- package/package.json +23 -11
- package/postcss.config.js +9 -1
- package/shadcn-components.json +310 -0
- package/src/__tests__/README.md +124 -0
- package/src/__tests__/basic-renderers.test.tsx +255 -0
- package/src/__tests__/complex-disclosure-renderers.test.tsx +301 -0
- package/src/__tests__/feedback-overlay-renderers.test.tsx +349 -0
- package/src/__tests__/form-renderers.test.tsx +364 -0
- package/src/__tests__/layout-data-renderers.test.tsx +340 -0
- package/src/__tests__/test-utils.tsx +190 -0
- package/src/hooks/use-mobile.tsx +8 -0
- package/src/index.css +86 -54
- package/src/index.test.ts +8 -0
- package/src/index.ts +21 -1
- package/src/lib/utils.tsx +8 -0
- package/src/new-components.test.ts +8 -9
- package/src/renderers/basic/button-group.tsx +78 -0
- package/src/renderers/basic/div.tsx +9 -1
- package/src/renderers/basic/html.tsx +8 -0
- package/src/renderers/basic/icon.tsx +66 -3
- package/src/renderers/basic/image.tsx +12 -1
- package/src/renderers/basic/index.ts +11 -0
- package/src/renderers/basic/navigation-menu.tsx +80 -0
- package/src/renderers/basic/pagination.tsx +82 -0
- package/src/renderers/basic/separator.tsx +9 -1
- package/src/renderers/basic/span.tsx +9 -1
- package/src/renderers/basic/text.tsx +8 -0
- package/src/renderers/complex/__tests__/data-table.test.ts +8 -0
- package/src/renderers/complex/carousel.tsx +11 -3
- package/src/renderers/complex/data-table.tsx +19 -4
- package/src/renderers/complex/filter-builder.tsx +8 -0
- package/src/renderers/complex/index.ts +9 -3
- package/src/renderers/complex/resizable.tsx +8 -0
- package/src/renderers/complex/scroll-area.tsx +8 -0
- package/src/renderers/complex/table.tsx +10 -2
- package/src/renderers/data-display/alert.tsx +8 -0
- package/src/renderers/data-display/avatar.tsx +8 -0
- package/src/renderers/data-display/badge.tsx +8 -0
- package/src/renderers/data-display/breadcrumb.tsx +59 -0
- package/src/renderers/data-display/index.ts +12 -0
- package/src/renderers/data-display/kbd.tsx +49 -0
- package/src/renderers/data-display/list.tsx +8 -0
- package/src/renderers/data-display/statistic.tsx +24 -43
- package/src/renderers/data-display/table.tsx +68 -0
- package/src/renderers/data-display/tree-view.tsx +26 -37
- package/src/renderers/disclosure/accordion.tsx +8 -0
- package/src/renderers/disclosure/collapsible.tsx +8 -0
- package/src/renderers/disclosure/index.ts +9 -0
- package/src/renderers/disclosure/toggle-group.tsx +77 -0
- package/src/renderers/feedback/empty.tsx +48 -0
- package/src/renderers/feedback/index.ts +12 -0
- package/src/renderers/feedback/loading.tsx +8 -0
- package/src/renderers/feedback/progress.tsx +8 -0
- package/src/renderers/feedback/skeleton.tsx +8 -0
- package/src/renderers/feedback/sonner.tsx +55 -0
- package/src/renderers/feedback/spinner.tsx +54 -0
- package/src/renderers/feedback/toast.tsx +58 -0
- package/src/renderers/feedback/toaster.tsx +13 -17
- package/src/renderers/form/button.tsx +8 -0
- package/src/renderers/form/calendar.tsx +8 -0
- package/src/renderers/form/checkbox.tsx +8 -0
- package/src/renderers/form/combobox.tsx +47 -0
- package/src/renderers/form/command.tsx +57 -0
- package/src/renderers/form/date-picker.tsx +10 -2
- package/src/renderers/form/file-upload.tsx +10 -2
- package/src/renderers/form/form.tsx +12 -3
- package/src/renderers/form/index.ts +10 -0
- package/src/renderers/form/input-otp.tsx +34 -15
- package/src/renderers/form/input.tsx +89 -50
- package/src/renderers/form/label.tsx +8 -0
- package/src/renderers/form/radio-group.tsx +8 -0
- package/src/renderers/form/select.tsx +8 -0
- package/src/renderers/form/slider.tsx +16 -1
- package/src/renderers/form/switch.tsx +8 -0
- package/src/renderers/form/textarea.tsx +8 -0
- package/src/renderers/form/toggle.tsx +8 -0
- package/src/renderers/index.ts +8 -0
- package/src/renderers/layout/aspect-ratio.tsx +50 -0
- package/src/renderers/layout/card.tsx +8 -0
- package/src/renderers/layout/container.tsx +20 -12
- package/src/renderers/layout/flex.tsx +16 -8
- package/src/renderers/layout/grid.tsx +8 -0
- package/src/renderers/layout/index.ts +9 -0
- package/src/renderers/layout/page.tsx +9 -1
- package/src/renderers/layout/semantic.tsx +8 -0
- package/src/renderers/layout/stack.tsx +16 -8
- package/src/renderers/layout/tabs.tsx +8 -0
- package/src/renderers/navigation/header-bar.tsx +9 -1
- package/src/renderers/navigation/index.ts +8 -0
- package/src/renderers/navigation/sidebar.tsx +8 -0
- package/src/renderers/overlay/alert-dialog.tsx +8 -0
- package/src/renderers/overlay/context-menu.tsx +9 -1
- package/src/renderers/overlay/dialog.tsx +8 -0
- package/src/renderers/overlay/drawer.tsx +8 -0
- package/src/renderers/overlay/dropdown-menu.tsx +8 -0
- package/src/renderers/overlay/hover-card.tsx +8 -0
- package/src/renderers/overlay/index.ts +9 -0
- package/src/renderers/overlay/menubar.tsx +75 -0
- package/src/renderers/overlay/popover.tsx +8 -0
- package/src/renderers/overlay/sheet.tsx +8 -0
- package/src/renderers/overlay/tooltip.tsx +8 -0
- package/src/renderers/placeholders.tsx +107 -0
- package/src/ui/accordion.tsx +8 -0
- package/src/ui/alert-dialog.tsx +8 -0
- package/src/ui/alert.tsx +14 -24
- package/src/ui/aspect-ratio.tsx +8 -0
- package/src/ui/avatar.tsx +8 -0
- package/src/ui/badge.tsx +13 -6
- package/src/ui/breadcrumb.tsx +8 -0
- package/src/ui/button-group.tsx +8 -0
- package/src/ui/button.tsx +38 -36
- package/src/ui/calendar.tsx +57 -200
- package/src/ui/card.tsx +8 -0
- package/src/ui/carousel.tsx +8 -0
- package/src/ui/checkbox.tsx +8 -0
- package/src/ui/collapsible.tsx +8 -0
- package/src/ui/combobox.tsx +104 -0
- package/src/ui/command.tsx +8 -0
- package/src/ui/context-menu.tsx +8 -0
- package/src/ui/date-picker.tsx +61 -0
- package/src/ui/dialog.tsx +8 -0
- package/src/ui/drawer.tsx +8 -0
- package/src/ui/dropdown-menu.tsx +8 -0
- package/src/ui/empty.tsx +8 -0
- package/src/ui/filter-builder.tsx +8 -0
- package/src/ui/form.tsx +8 -0
- package/src/ui/hover-card.tsx +8 -0
- package/src/ui/index.ts +11 -5
- package/src/ui/input-otp.tsx +20 -12
- package/src/ui/input.tsx +8 -0
- package/src/ui/item.tsx +8 -0
- package/src/ui/kbd.tsx +8 -0
- package/src/ui/label.tsx +8 -0
- package/src/ui/menubar.tsx +8 -0
- package/src/ui/navigation-menu.tsx +8 -0
- package/src/ui/pagination.tsx +8 -0
- package/src/ui/popover.tsx +9 -1
- package/src/ui/progress.tsx +11 -15
- package/src/ui/radio-group.tsx +8 -0
- package/src/ui/resizable.tsx +8 -0
- package/src/ui/scroll-area.tsx +9 -1
- package/src/ui/select.tsx +17 -9
- package/src/ui/separator.tsx +8 -0
- package/src/ui/sheet.tsx +8 -0
- package/src/ui/sidebar.tsx +34 -15
- package/src/ui/skeleton.tsx +8 -0
- package/src/ui/slider.tsx +8 -0
- package/src/ui/sonner.tsx +12 -20
- package/src/ui/spinner.tsx +11 -23
- package/src/ui/switch.tsx +8 -0
- package/src/ui/table.tsx +102 -97
- package/src/ui/tabs.tsx +8 -0
- package/src/ui/textarea.tsx +8 -0
- package/src/ui/toggle-group.tsx +12 -21
- package/src/ui/toggle.tsx +15 -12
- package/src/ui/tooltip.tsx +8 -0
- package/tsconfig.json +2 -1
- package/vite.config.ts +11 -1
- package/dist/src/index.test.d.ts +0 -1
- package/dist/src/new-components.test.d.ts +0 -1
- package/dist/src/renderers/complex/__tests__/data-table.test.d.ts +0 -0
- package/dist/src/renderers/complex/calendar-view.d.ts +0 -1
- package/dist/src/renderers/complex/chatbot.d.ts +0 -1
- package/dist/src/renderers/complex/chatbot.test.d.ts +0 -1
- package/dist/src/renderers/complex/timeline.d.ts +0 -1
- package/dist/src/ui/calendar-view.d.ts +0 -21
- package/dist/src/ui/chatbot.d.ts +0 -36
- package/dist/src/ui/field.d.ts +0 -24
- package/dist/src/ui/input-group.d.ts +0 -16
- package/dist/src/ui/timeline.d.ts +0 -25
- package/metadata/ObjectTable.component.yml +0 -41
- package/src/renderers/complex/calendar-view.tsx +0 -219
- package/src/renderers/complex/chatbot.test.ts +0 -44
- package/src/renderers/complex/chatbot.tsx +0 -185
- package/src/renderers/complex/timeline.tsx +0 -466
- package/src/ui/calendar-view.tsx +0 -503
- package/src/ui/chatbot.tsx +0 -240
- package/src/ui/field.tsx +0 -246
- package/src/ui/input-group.tsx +0 -170
- package/src/ui/timeline.tsx +0 -266
- package/tailwind.config.js +0 -75
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export interface CalendarEvent {
|
|
2
|
-
id: string | number;
|
|
3
|
-
title: string;
|
|
4
|
-
start: Date;
|
|
5
|
-
end?: Date;
|
|
6
|
-
allDay?: boolean;
|
|
7
|
-
color?: string;
|
|
8
|
-
data?: any;
|
|
9
|
-
}
|
|
10
|
-
export interface CalendarViewProps {
|
|
11
|
-
events?: CalendarEvent[];
|
|
12
|
-
view?: "month" | "week" | "day";
|
|
13
|
-
currentDate?: Date;
|
|
14
|
-
onEventClick?: (event: CalendarEvent) => void;
|
|
15
|
-
onDateClick?: (date: Date) => void;
|
|
16
|
-
onViewChange?: (view: "month" | "week" | "day") => void;
|
|
17
|
-
onNavigate?: (date: Date) => void;
|
|
18
|
-
className?: string;
|
|
19
|
-
}
|
|
20
|
-
declare function CalendarView({ events, view, currentDate, onEventClick, onDateClick, onViewChange, onNavigate, className, }: CalendarViewProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
-
export { CalendarView };
|
package/dist/src/ui/chatbot.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
export interface ChatMessage {
|
|
3
|
-
id: string;
|
|
4
|
-
role: "user" | "assistant" | "system";
|
|
5
|
-
content: string;
|
|
6
|
-
timestamp?: string;
|
|
7
|
-
avatar?: string;
|
|
8
|
-
avatarFallback?: string;
|
|
9
|
-
}
|
|
10
|
-
export interface ChatbotProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
11
|
-
messages?: ChatMessage[];
|
|
12
|
-
placeholder?: string;
|
|
13
|
-
onSendMessage?: (message: string) => void;
|
|
14
|
-
disabled?: boolean;
|
|
15
|
-
showTimestamp?: boolean;
|
|
16
|
-
userAvatarUrl?: string;
|
|
17
|
-
userAvatarFallback?: string;
|
|
18
|
-
assistantAvatarUrl?: string;
|
|
19
|
-
assistantAvatarFallback?: string;
|
|
20
|
-
maxHeight?: string;
|
|
21
|
-
}
|
|
22
|
-
declare const Chatbot: React.ForwardRefExoticComponent<ChatbotProps & React.RefAttributes<HTMLDivElement>>;
|
|
23
|
-
export interface ChatMessageProps {
|
|
24
|
-
message: ChatMessage;
|
|
25
|
-
showTimestamp?: boolean;
|
|
26
|
-
userAvatarUrl?: string;
|
|
27
|
-
userAvatarFallback?: string;
|
|
28
|
-
assistantAvatarUrl?: string;
|
|
29
|
-
assistantAvatarFallback?: string;
|
|
30
|
-
}
|
|
31
|
-
export interface TypingIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
32
|
-
avatarSrc?: string;
|
|
33
|
-
avatarFallback?: string;
|
|
34
|
-
}
|
|
35
|
-
declare const TypingIndicator: React.ForwardRefExoticComponent<TypingIndicatorProps & React.RefAttributes<HTMLDivElement>>;
|
|
36
|
-
export { Chatbot, TypingIndicator };
|
package/dist/src/ui/field.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { VariantProps } from 'class-variance-authority';
|
|
2
|
-
import { Label } from './label';
|
|
3
|
-
declare function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">): import("react/jsx-runtime").JSX.Element;
|
|
4
|
-
declare function FieldLegend({ className, variant, ...props }: React.ComponentProps<"legend"> & {
|
|
5
|
-
variant?: "legend" | "label";
|
|
6
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
declare function FieldGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
declare const fieldVariants: (props?: ({
|
|
9
|
-
orientation?: "horizontal" | "vertical" | "responsive" | null | undefined;
|
|
10
|
-
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
11
|
-
declare function Field({ className, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof fieldVariants>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
declare function FieldContent({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
declare function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
declare function FieldTitle({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
15
|
-
declare function FieldDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
declare function FieldSeparator({ children, className, ...props }: React.ComponentProps<"div"> & {
|
|
17
|
-
children?: React.ReactNode;
|
|
18
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
19
|
-
declare function FieldError({ className, children, errors, ...props }: React.ComponentProps<"div"> & {
|
|
20
|
-
errors?: Array<{
|
|
21
|
-
message?: string;
|
|
22
|
-
} | undefined>;
|
|
23
|
-
}): import("react/jsx-runtime").JSX.Element | null;
|
|
24
|
-
export { Field, FieldLabel, FieldDescription, FieldError, FieldGroup, FieldLegend, FieldSeparator, FieldSet, FieldContent, FieldTitle, };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { VariantProps } from 'class-variance-authority';
|
|
2
|
-
import { Button } from './button';
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
declare function InputGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
5
|
-
declare const inputGroupAddonVariants: (props?: ({
|
|
6
|
-
align?: "inline-end" | "inline-start" | "block-end" | "block-start" | null | undefined;
|
|
7
|
-
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
8
|
-
declare function InputGroupAddon({ className, align, ...props }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
-
declare const inputGroupButtonVariants: (props?: ({
|
|
10
|
-
size?: "sm" | "icon-sm" | "xs" | "icon-xs" | null | undefined;
|
|
11
|
-
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
12
|
-
declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React.ComponentProps<typeof Button>, "size"> & VariantProps<typeof inputGroupButtonVariants>): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
declare function InputGroupText({ className, ...props }: React.ComponentProps<"span">): import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
declare function InputGroupInput({ className, ...props }: React.ComponentProps<"input">): import("react/jsx-runtime").JSX.Element;
|
|
15
|
-
declare function InputGroupTextarea({ className, ...props }: React.ComponentProps<"textarea">): import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
declare const Timeline: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLOListElement> & React.RefAttributes<HTMLOListElement>>;
|
|
3
|
-
declare const TimelineItem: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLLIElement> & React.RefAttributes<HTMLLIElement>>;
|
|
4
|
-
declare const TimelineMarker: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
5
|
-
variant?: "default" | "success" | "warning" | "danger" | "info";
|
|
6
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
-
declare const TimelineContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
8
|
-
declare const TimelineTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLHeadingElement>>;
|
|
9
|
-
declare const TimelineTime: React.ForwardRefExoticComponent<React.TimeHTMLAttributes<HTMLTimeElement> & React.RefAttributes<HTMLTimeElement>>;
|
|
10
|
-
declare const TimelineDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
|
|
11
|
-
declare const TimelineHorizontal: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
-
declare const TimelineHorizontalItem: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
13
|
-
declare const TimelineGantt: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
14
|
-
declare const TimelineGanttHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
-
declare const TimelineGanttRowLabels: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
16
|
-
declare const TimelineGanttGrid: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
17
|
-
declare const TimelineGanttRow: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
-
declare const TimelineGanttLabel: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
-
declare const TimelineGanttBar: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
20
|
-
start?: number;
|
|
21
|
-
width?: number;
|
|
22
|
-
variant?: "default" | "success" | "warning" | "danger" | "info";
|
|
23
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
24
|
-
declare const TimelineGanttBarContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
-
export { Timeline, TimelineItem, TimelineMarker, TimelineContent, TimelineTitle, TimelineTime, TimelineDescription, TimelineHorizontal, TimelineHorizontalItem, TimelineGantt, TimelineGanttHeader, TimelineGanttRowLabels, TimelineGanttGrid, TimelineGanttRow, TimelineGanttLabel, TimelineGanttBar, TimelineGanttBarContent, };
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
name: ObjectTable
|
|
2
|
-
label: Object Table
|
|
3
|
-
description: Production-grade data table for displaying and managing object records
|
|
4
|
-
category: data_display
|
|
5
|
-
version: 1.0.0
|
|
6
|
-
framework: react
|
|
7
|
-
|
|
8
|
-
props:
|
|
9
|
-
- name: object
|
|
10
|
-
type: string
|
|
11
|
-
required: true
|
|
12
|
-
description: The object API name to display data for
|
|
13
|
-
- name: columns
|
|
14
|
-
type: array
|
|
15
|
-
description: Column configurations
|
|
16
|
-
schema:
|
|
17
|
-
- field: string
|
|
18
|
-
- label: string
|
|
19
|
-
- width: number
|
|
20
|
-
- name: filters
|
|
21
|
-
type: array
|
|
22
|
-
description: Default filters
|
|
23
|
-
- name: sortable
|
|
24
|
-
type: boolean
|
|
25
|
-
default: true
|
|
26
|
-
- name: paginated
|
|
27
|
-
type: boolean
|
|
28
|
-
default: true
|
|
29
|
-
- name: pageSize
|
|
30
|
-
type: number
|
|
31
|
-
default: 20
|
|
32
|
-
|
|
33
|
-
events:
|
|
34
|
-
- name: onRowClick
|
|
35
|
-
payload: "{ row: any, index: number }"
|
|
36
|
-
- name: onSelectionChange
|
|
37
|
-
payload: "{ selectedIds: string[] }"
|
|
38
|
-
|
|
39
|
-
features:
|
|
40
|
-
remote_data: true
|
|
41
|
-
virtual_scroll: true
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import { ComponentRegistry } from '@object-ui/core';
|
|
2
|
-
import type { CalendarViewSchema, CalendarEvent } from '@object-ui/types';
|
|
3
|
-
import { CalendarView } from '../../ui';
|
|
4
|
-
import React from 'react';
|
|
5
|
-
|
|
6
|
-
// Calendar View Renderer - Airtable-style calendar for displaying records as events
|
|
7
|
-
ComponentRegistry.register('calendar-view',
|
|
8
|
-
({ schema, className, onAction, ...props }: { schema: CalendarViewSchema; className?: string; onAction?: (action: any) => void; [key: string]: any }) => {
|
|
9
|
-
// Transform schema data to CalendarEvent format
|
|
10
|
-
const events = React.useMemo(() => {
|
|
11
|
-
if (!schema.data || !Array.isArray(schema.data)) return [];
|
|
12
|
-
|
|
13
|
-
return schema.data.map((record: any, index: number) => {
|
|
14
|
-
/** Field name to use for event title display */
|
|
15
|
-
const titleField = schema.titleField || 'title';
|
|
16
|
-
/** Field name containing the event start date/time */
|
|
17
|
-
const startField = schema.startDateField || 'start';
|
|
18
|
-
/** Field name containing the event end date/time (optional) */
|
|
19
|
-
const endField = schema.endDateField || 'end';
|
|
20
|
-
/** Field name to determine event color or color category */
|
|
21
|
-
const colorField = schema.colorField || 'color';
|
|
22
|
-
/** Field name indicating if event is all-day */
|
|
23
|
-
const allDayField = schema.allDayField || 'allDay';
|
|
24
|
-
|
|
25
|
-
const title = record[titleField] || 'Untitled';
|
|
26
|
-
const start = record[startField] ? new Date(record[startField]) : new Date();
|
|
27
|
-
const end = record[endField] ? new Date(record[endField]) : undefined;
|
|
28
|
-
const allDay = record[allDayField] !== undefined ? record[allDayField] : false;
|
|
29
|
-
|
|
30
|
-
// Handle color mapping
|
|
31
|
-
let color = record[colorField];
|
|
32
|
-
if (color && schema.colorMapping && schema.colorMapping[color]) {
|
|
33
|
-
color = schema.colorMapping[color];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return {
|
|
37
|
-
id: String(record.id || record._id || index),
|
|
38
|
-
title,
|
|
39
|
-
start,
|
|
40
|
-
end,
|
|
41
|
-
allDay,
|
|
42
|
-
color,
|
|
43
|
-
data: record,
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
}, [schema.data, schema.titleField, schema.startDateField, schema.endDateField, schema.colorField, schema.allDayField, schema.colorMapping]);
|
|
47
|
-
|
|
48
|
-
const handleEventClick = React.useCallback((event: any) => {
|
|
49
|
-
if (onAction) {
|
|
50
|
-
onAction({
|
|
51
|
-
type: 'event_click',
|
|
52
|
-
payload: { event: event.data, eventId: event.id }
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
if (schema.onEventClick) {
|
|
56
|
-
schema.onEventClick(event.data);
|
|
57
|
-
}
|
|
58
|
-
}, [onAction, schema]);
|
|
59
|
-
|
|
60
|
-
const handleDateClick = React.useCallback((date: Date) => {
|
|
61
|
-
if (onAction) {
|
|
62
|
-
onAction({
|
|
63
|
-
type: 'date_click',
|
|
64
|
-
payload: { date }
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
if (schema.onDateClick) {
|
|
68
|
-
schema.onDateClick(date);
|
|
69
|
-
}
|
|
70
|
-
}, [onAction, schema]);
|
|
71
|
-
|
|
72
|
-
const handleViewChange = React.useCallback((view: "month" | "week" | "day") => {
|
|
73
|
-
if (onAction) {
|
|
74
|
-
onAction({
|
|
75
|
-
type: 'view_change',
|
|
76
|
-
payload: { view }
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
if (schema.onViewChange) {
|
|
80
|
-
schema.onViewChange(view);
|
|
81
|
-
}
|
|
82
|
-
}, [onAction, schema]);
|
|
83
|
-
|
|
84
|
-
const handleNavigate = React.useCallback((date: Date) => {
|
|
85
|
-
if (onAction) {
|
|
86
|
-
onAction({
|
|
87
|
-
type: 'navigate',
|
|
88
|
-
payload: { date }
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
if (schema.onNavigate) {
|
|
92
|
-
schema.onNavigate(date);
|
|
93
|
-
}
|
|
94
|
-
}, [onAction, schema]);
|
|
95
|
-
|
|
96
|
-
return (
|
|
97
|
-
<CalendarView
|
|
98
|
-
events={events as any[]}
|
|
99
|
-
view={(schema.view as any) || 'month'}
|
|
100
|
-
currentDate={schema.currentDate ? new Date(schema.currentDate) : undefined}
|
|
101
|
-
onEventClick={handleEventClick}
|
|
102
|
-
onDateClick={schema.allowCreate || schema.onDateClick ? handleDateClick : undefined}
|
|
103
|
-
onViewChange={handleViewChange}
|
|
104
|
-
onNavigate={handleNavigate}
|
|
105
|
-
className={className}
|
|
106
|
-
{...props}
|
|
107
|
-
/>
|
|
108
|
-
);
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
label: 'Calendar View',
|
|
112
|
-
inputs: [
|
|
113
|
-
{
|
|
114
|
-
name: 'data',
|
|
115
|
-
type: 'array',
|
|
116
|
-
label: 'Data',
|
|
117
|
-
description: 'Array of record objects to display as events'
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
name: 'titleField',
|
|
121
|
-
type: 'string',
|
|
122
|
-
label: 'Title Field',
|
|
123
|
-
defaultValue: 'title',
|
|
124
|
-
description: 'Field name to use for event title'
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
name: 'startDateField',
|
|
128
|
-
type: 'string',
|
|
129
|
-
label: 'Start Date Field',
|
|
130
|
-
defaultValue: 'start',
|
|
131
|
-
description: 'Field name for event start date'
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
name: 'endDateField',
|
|
135
|
-
type: 'string',
|
|
136
|
-
label: 'End Date Field',
|
|
137
|
-
defaultValue: 'end',
|
|
138
|
-
description: 'Field name for event end date (optional)'
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
name: 'allDayField',
|
|
142
|
-
type: 'string',
|
|
143
|
-
label: 'All Day Field',
|
|
144
|
-
defaultValue: 'allDay',
|
|
145
|
-
description: 'Field name for all-day flag'
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
name: 'colorField',
|
|
149
|
-
type: 'string',
|
|
150
|
-
label: 'Color Field',
|
|
151
|
-
defaultValue: 'color',
|
|
152
|
-
description: 'Field name for event color'
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
name: 'colorMapping',
|
|
156
|
-
type: 'object',
|
|
157
|
-
label: 'Color Mapping',
|
|
158
|
-
description: 'Map field values to colors (e.g., {meeting: "blue", deadline: "red"})'
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
name: 'view',
|
|
162
|
-
type: 'enum',
|
|
163
|
-
enum: ['month', 'week', 'day'],
|
|
164
|
-
defaultValue: 'month',
|
|
165
|
-
label: 'View Mode',
|
|
166
|
-
description: 'Calendar view mode (month, week, or day)'
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
name: 'currentDate',
|
|
170
|
-
type: 'string',
|
|
171
|
-
label: 'Current Date',
|
|
172
|
-
description: 'ISO date string for initial calendar date'
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
name: 'allowCreate',
|
|
176
|
-
type: 'boolean',
|
|
177
|
-
label: 'Allow Create',
|
|
178
|
-
defaultValue: false,
|
|
179
|
-
description: 'Allow creating events by clicking on dates'
|
|
180
|
-
},
|
|
181
|
-
{ name: 'className', type: 'string', label: 'CSS Class' }
|
|
182
|
-
],
|
|
183
|
-
defaultProps: {
|
|
184
|
-
view: 'month',
|
|
185
|
-
titleField: 'title',
|
|
186
|
-
startDateField: 'start',
|
|
187
|
-
endDateField: 'end',
|
|
188
|
-
allDayField: 'allDay',
|
|
189
|
-
colorField: 'color',
|
|
190
|
-
allowCreate: false,
|
|
191
|
-
data: [
|
|
192
|
-
{
|
|
193
|
-
id: 1,
|
|
194
|
-
title: 'Team Meeting',
|
|
195
|
-
start: new Date(new Date().setHours(10, 0, 0, 0)).toISOString(),
|
|
196
|
-
end: new Date(new Date().setHours(11, 0, 0, 0)).toISOString(),
|
|
197
|
-
color: '#3b82f6',
|
|
198
|
-
allDay: false
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
id: 2,
|
|
202
|
-
title: 'Project Deadline',
|
|
203
|
-
start: new Date(new Date().setDate(new Date().getDate() + 3)).toISOString(),
|
|
204
|
-
color: '#ef4444',
|
|
205
|
-
allDay: true
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
id: 3,
|
|
209
|
-
title: 'Conference',
|
|
210
|
-
start: new Date(new Date().setDate(new Date().getDate() + 7)).toISOString(),
|
|
211
|
-
end: new Date(new Date().setDate(new Date().getDate() + 9)).toISOString(),
|
|
212
|
-
color: '#10b981',
|
|
213
|
-
allDay: true
|
|
214
|
-
}
|
|
215
|
-
],
|
|
216
|
-
className: 'h-[600px] border rounded-lg'
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
);
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeAll } from 'vitest';
|
|
2
|
-
import { ComponentRegistry } from '@object-ui/core';
|
|
3
|
-
|
|
4
|
-
describe('Chatbot Component', () => {
|
|
5
|
-
// Import all renderers to register them
|
|
6
|
-
beforeAll(async () => {
|
|
7
|
-
await import('./index');
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
it('should be registered in ComponentRegistry', () => {
|
|
11
|
-
const chatbotRenderer = ComponentRegistry.get('chatbot');
|
|
12
|
-
expect(chatbotRenderer).toBeDefined();
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('should have proper metadata', () => {
|
|
16
|
-
const config = ComponentRegistry.getConfig('chatbot');
|
|
17
|
-
expect(config).toBeDefined();
|
|
18
|
-
expect(config?.label).toBe('Chatbot');
|
|
19
|
-
expect(config?.inputs).toBeDefined();
|
|
20
|
-
expect(config?.defaultProps).toBeDefined();
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('should have expected inputs', () => {
|
|
24
|
-
const config = ComponentRegistry.getConfig('chatbot');
|
|
25
|
-
const inputNames = config?.inputs?.map((input: any) => input.name) || [];
|
|
26
|
-
|
|
27
|
-
expect(inputNames).toContain('messages');
|
|
28
|
-
expect(inputNames).toContain('placeholder');
|
|
29
|
-
expect(inputNames).toContain('showTimestamp');
|
|
30
|
-
expect(inputNames).toContain('userAvatarUrl');
|
|
31
|
-
expect(inputNames).toContain('assistantAvatarUrl');
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('should have sensible default props', () => {
|
|
35
|
-
const config = ComponentRegistry.getConfig('chatbot');
|
|
36
|
-
const defaults = config?.defaultProps;
|
|
37
|
-
|
|
38
|
-
expect(defaults).toBeDefined();
|
|
39
|
-
expect(defaults?.placeholder).toBe('Type your message...');
|
|
40
|
-
expect(defaults?.showTimestamp).toBe(false);
|
|
41
|
-
expect(defaults?.messages).toBeDefined();
|
|
42
|
-
expect(Array.isArray(defaults?.messages)).toBe(true);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { ComponentRegistry } from '@object-ui/core';
|
|
2
|
-
import type { ChatbotSchema, ChatMessage } from '@object-ui/types';
|
|
3
|
-
import { Chatbot } from '../../ui';
|
|
4
|
-
import { useState } from 'react';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Chatbot component for Object UI
|
|
8
|
-
*
|
|
9
|
-
* @remarks
|
|
10
|
-
* This component supports an optional `onSend` callback in the schema:
|
|
11
|
-
* - Signature: `onSend(content: string, messages: ChatMessage[]): void`
|
|
12
|
-
* - Parameters:
|
|
13
|
-
* - content: The message text that was sent
|
|
14
|
-
* - messages: Array of all messages including the newly added message
|
|
15
|
-
* - Called when: User sends a message via the input field
|
|
16
|
-
* - Use case: Connect to backend API or trigger custom actions on message send
|
|
17
|
-
*/
|
|
18
|
-
ComponentRegistry.register('chatbot',
|
|
19
|
-
({ schema, className, ...props }) => {
|
|
20
|
-
// Initialize messages from schema or use empty array
|
|
21
|
-
const [messages, setMessages] = useState<ChatMessage[]>(
|
|
22
|
-
schema.messages?.map((msg: any, idx: number) => ({
|
|
23
|
-
id: msg.id || `msg-${idx}`,
|
|
24
|
-
role: msg.role || 'user',
|
|
25
|
-
content: msg.content || '',
|
|
26
|
-
timestamp: typeof msg.timestamp === 'string' ? msg.timestamp : (msg.timestamp instanceof Date ? msg.timestamp.toISOString() : undefined),
|
|
27
|
-
avatar: msg.avatar,
|
|
28
|
-
avatarFallback: msg.avatarFallback,
|
|
29
|
-
})) || []
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
// Handle sending new messages
|
|
33
|
-
const handleSendMessage = (content: string) => {
|
|
34
|
-
// Create user message with robust ID generation
|
|
35
|
-
const userMessage: ChatMessage = {
|
|
36
|
-
id: crypto.randomUUID(),
|
|
37
|
-
role: 'user',
|
|
38
|
-
content,
|
|
39
|
-
timestamp: schema.showTimestamp ? new Date().toLocaleTimeString() : undefined,
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
const updatedMessages = [...messages, userMessage];
|
|
43
|
-
setMessages(updatedMessages);
|
|
44
|
-
|
|
45
|
-
// If onSend callback is provided in schema, call it with updated messages
|
|
46
|
-
if (schema.onSend) {
|
|
47
|
-
schema.onSend(content, updatedMessages);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Auto-response feature for demo purposes
|
|
51
|
-
if (schema.autoResponse) {
|
|
52
|
-
setTimeout(() => {
|
|
53
|
-
const assistantMessage: ChatMessage = {
|
|
54
|
-
id: crypto.randomUUID(),
|
|
55
|
-
role: 'assistant',
|
|
56
|
-
content: schema.autoResponseText || 'Thank you for your message!',
|
|
57
|
-
timestamp: schema.showTimestamp ? new Date().toLocaleTimeString() : undefined,
|
|
58
|
-
};
|
|
59
|
-
setMessages((prev) => [...prev, assistantMessage]);
|
|
60
|
-
}, schema.autoResponseDelay || 1000);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
return (
|
|
65
|
-
<Chatbot
|
|
66
|
-
messages={messages as any}
|
|
67
|
-
placeholder={schema.placeholder}
|
|
68
|
-
onSendMessage={handleSendMessage}
|
|
69
|
-
disabled={schema.disabled}
|
|
70
|
-
showTimestamp={schema.showTimestamp}
|
|
71
|
-
userAvatarUrl={schema.userAvatarUrl}
|
|
72
|
-
userAvatarFallback={schema.userAvatarFallback}
|
|
73
|
-
assistantAvatarUrl={schema.assistantAvatarUrl}
|
|
74
|
-
assistantAvatarFallback={schema.assistantAvatarFallback}
|
|
75
|
-
maxHeight={schema.maxHeight}
|
|
76
|
-
className={className}
|
|
77
|
-
{...props}
|
|
78
|
-
/>
|
|
79
|
-
);
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
label: 'Chatbot',
|
|
83
|
-
inputs: [
|
|
84
|
-
{
|
|
85
|
-
name: 'messages',
|
|
86
|
-
type: 'array',
|
|
87
|
-
label: 'Initial Messages',
|
|
88
|
-
description: 'Array of message objects with id, role, content, and optional timestamp'
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
name: 'placeholder',
|
|
92
|
-
type: 'string',
|
|
93
|
-
label: 'Input Placeholder',
|
|
94
|
-
defaultValue: 'Type your message...'
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
name: 'showTimestamp',
|
|
98
|
-
type: 'boolean',
|
|
99
|
-
label: 'Show Timestamps',
|
|
100
|
-
defaultValue: false
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
name: 'disabled',
|
|
104
|
-
type: 'boolean',
|
|
105
|
-
label: 'Disabled',
|
|
106
|
-
defaultValue: false
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
name: 'userAvatarUrl',
|
|
110
|
-
type: 'string',
|
|
111
|
-
label: 'User Avatar URL',
|
|
112
|
-
description: 'URL of the user avatar image'
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
name: 'userAvatarFallback',
|
|
116
|
-
type: 'string',
|
|
117
|
-
label: 'User Avatar Fallback',
|
|
118
|
-
defaultValue: 'You',
|
|
119
|
-
description: 'Fallback text shown when user avatar image is not available'
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
name: 'assistantAvatarUrl',
|
|
123
|
-
type: 'string',
|
|
124
|
-
label: 'Assistant Avatar URL',
|
|
125
|
-
description: 'URL of the assistant avatar image'
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: 'assistantAvatarFallback',
|
|
129
|
-
type: 'string',
|
|
130
|
-
label: 'Assistant Avatar Fallback',
|
|
131
|
-
defaultValue: 'AI',
|
|
132
|
-
description: 'Fallback text shown when assistant avatar image is not available'
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
name: 'maxHeight',
|
|
136
|
-
type: 'string',
|
|
137
|
-
label: 'Max Height',
|
|
138
|
-
defaultValue: '500px'
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
name: 'autoResponse',
|
|
142
|
-
type: 'boolean',
|
|
143
|
-
label: 'Enable Auto Response (Demo)',
|
|
144
|
-
defaultValue: false,
|
|
145
|
-
description: 'Automatically send a response after user message (for demo purposes)'
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
name: 'autoResponseText',
|
|
149
|
-
type: 'string',
|
|
150
|
-
label: 'Auto Response Text',
|
|
151
|
-
defaultValue: 'Thank you for your message!'
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
name: 'autoResponseDelay',
|
|
155
|
-
type: 'number',
|
|
156
|
-
label: 'Auto Response Delay (ms)',
|
|
157
|
-
defaultValue: 1000
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
name: 'className',
|
|
161
|
-
type: 'string',
|
|
162
|
-
label: 'CSS Class'
|
|
163
|
-
}
|
|
164
|
-
],
|
|
165
|
-
defaultProps: {
|
|
166
|
-
messages: [
|
|
167
|
-
{
|
|
168
|
-
id: 'welcome',
|
|
169
|
-
role: 'assistant',
|
|
170
|
-
content: 'Hello! How can I help you today?',
|
|
171
|
-
}
|
|
172
|
-
],
|
|
173
|
-
placeholder: 'Type your message...',
|
|
174
|
-
showTimestamp: false,
|
|
175
|
-
disabled: false,
|
|
176
|
-
userAvatarFallback: 'You',
|
|
177
|
-
assistantAvatarFallback: 'AI',
|
|
178
|
-
maxHeight: '500px',
|
|
179
|
-
autoResponse: true,
|
|
180
|
-
autoResponseText: 'Thank you for your message! This is an automated response.',
|
|
181
|
-
autoResponseDelay: 1000,
|
|
182
|
-
className: 'w-full max-w-2xl'
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
);
|