@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.
Files changed (317) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/ISSUES_FOUND.md +128 -0
  3. package/README.md +19 -1
  4. package/README_SHADCN_SYNC.md +281 -0
  5. package/TESTING.md +335 -0
  6. package/dist/index.css +1 -1
  7. package/dist/index.js +30981 -30027
  8. package/dist/index.umd.cjs +30 -39
  9. package/dist/src/hooks/use-mobile.d.ts +7 -0
  10. package/dist/src/index.d.ts +4 -1
  11. package/dist/src/renderers/basic/button-group.d.ts +8 -0
  12. package/dist/src/renderers/basic/div.d.ts +7 -0
  13. package/dist/src/renderers/basic/html.d.ts +7 -0
  14. package/dist/src/renderers/basic/icon.d.ts +7 -0
  15. package/dist/src/renderers/basic/image.d.ts +7 -0
  16. package/dist/src/renderers/basic/navigation-menu.d.ts +8 -0
  17. package/dist/src/renderers/basic/pagination.d.ts +8 -0
  18. package/dist/src/renderers/basic/separator.d.ts +7 -0
  19. package/dist/src/renderers/basic/span.d.ts +7 -0
  20. package/dist/src/renderers/basic/text.d.ts +7 -0
  21. package/dist/src/renderers/complex/carousel.d.ts +7 -0
  22. package/dist/src/renderers/complex/data-table.d.ts +7 -0
  23. package/dist/src/renderers/complex/filter-builder.d.ts +7 -0
  24. package/dist/src/renderers/complex/resizable.d.ts +7 -0
  25. package/dist/src/renderers/complex/scroll-area.d.ts +7 -0
  26. package/dist/src/renderers/complex/table.d.ts +7 -0
  27. package/dist/src/renderers/data-display/alert.d.ts +7 -0
  28. package/dist/src/renderers/data-display/avatar.d.ts +7 -0
  29. package/dist/src/renderers/data-display/badge.d.ts +7 -0
  30. package/dist/src/renderers/data-display/breadcrumb.d.ts +8 -0
  31. package/dist/src/renderers/data-display/kbd.d.ts +8 -0
  32. package/dist/src/renderers/data-display/list.d.ts +7 -0
  33. package/dist/src/renderers/data-display/statistic.d.ts +7 -0
  34. package/dist/src/renderers/data-display/table.d.ts +8 -0
  35. package/dist/src/renderers/data-display/tree-view.d.ts +7 -0
  36. package/dist/src/renderers/disclosure/accordion.d.ts +7 -0
  37. package/dist/src/renderers/disclosure/collapsible.d.ts +7 -0
  38. package/dist/src/renderers/disclosure/toggle-group.d.ts +8 -0
  39. package/dist/src/renderers/feedback/empty.d.ts +8 -0
  40. package/dist/src/renderers/feedback/loading.d.ts +7 -0
  41. package/dist/src/renderers/feedback/progress.d.ts +7 -0
  42. package/dist/src/renderers/feedback/skeleton.d.ts +7 -0
  43. package/dist/src/renderers/feedback/sonner.d.ts +8 -0
  44. package/dist/src/renderers/feedback/spinner.d.ts +8 -0
  45. package/dist/src/renderers/feedback/toast.d.ts +8 -0
  46. package/dist/src/renderers/feedback/toaster.d.ts +7 -0
  47. package/dist/src/renderers/form/button.d.ts +7 -0
  48. package/dist/src/renderers/form/calendar.d.ts +7 -0
  49. package/dist/src/renderers/form/checkbox.d.ts +7 -0
  50. package/dist/src/renderers/form/combobox.d.ts +8 -0
  51. package/dist/src/renderers/form/command.d.ts +8 -0
  52. package/dist/src/renderers/form/date-picker.d.ts +7 -0
  53. package/dist/src/renderers/form/file-upload.d.ts +7 -0
  54. package/dist/src/renderers/form/form.d.ts +7 -0
  55. package/dist/src/renderers/form/input-otp.d.ts +7 -0
  56. package/dist/src/renderers/form/input.d.ts +7 -0
  57. package/dist/src/renderers/form/label.d.ts +7 -0
  58. package/dist/src/renderers/form/radio-group.d.ts +7 -0
  59. package/dist/src/renderers/form/select.d.ts +7 -0
  60. package/dist/src/renderers/form/slider.d.ts +7 -0
  61. package/dist/src/renderers/form/switch.d.ts +7 -0
  62. package/dist/src/renderers/form/textarea.d.ts +7 -0
  63. package/dist/src/renderers/form/toggle.d.ts +7 -0
  64. package/dist/src/renderers/layout/aspect-ratio.d.ts +8 -0
  65. package/dist/src/renderers/layout/card.d.ts +7 -0
  66. package/dist/src/renderers/layout/container.d.ts +7 -0
  67. package/dist/src/renderers/layout/flex.d.ts +7 -0
  68. package/dist/src/renderers/layout/grid.d.ts +7 -0
  69. package/dist/src/renderers/layout/semantic.d.ts +7 -0
  70. package/dist/src/renderers/layout/stack.d.ts +7 -0
  71. package/dist/src/renderers/layout/tabs.d.ts +7 -0
  72. package/dist/src/renderers/navigation/header-bar.d.ts +7 -0
  73. package/dist/src/renderers/navigation/sidebar.d.ts +7 -0
  74. package/dist/src/renderers/overlay/alert-dialog.d.ts +7 -0
  75. package/dist/src/renderers/overlay/context-menu.d.ts +7 -0
  76. package/dist/src/renderers/overlay/dialog.d.ts +7 -0
  77. package/dist/src/renderers/overlay/drawer.d.ts +7 -0
  78. package/dist/src/renderers/overlay/dropdown-menu.d.ts +7 -0
  79. package/dist/src/renderers/overlay/hover-card.d.ts +7 -0
  80. package/dist/src/renderers/overlay/menubar.d.ts +8 -0
  81. package/dist/src/renderers/overlay/popover.d.ts +7 -0
  82. package/dist/src/renderers/overlay/sheet.d.ts +7 -0
  83. package/dist/src/renderers/overlay/tooltip.d.ts +7 -0
  84. package/dist/src/renderers/placeholders.d.ts +9 -0
  85. package/dist/src/ui/accordion.d.ts +7 -0
  86. package/dist/src/ui/alert-dialog.d.ts +7 -0
  87. package/dist/src/ui/alert.d.ts +7 -0
  88. package/dist/src/ui/aspect-ratio.d.ts +7 -0
  89. package/dist/src/ui/avatar.d.ts +7 -0
  90. package/dist/src/ui/badge.d.ts +7 -0
  91. package/dist/src/ui/breadcrumb.d.ts +7 -0
  92. package/dist/src/ui/button.d.ts +10 -5
  93. package/dist/src/ui/calendar.d.ts +14 -7
  94. package/dist/src/ui/card.d.ts +7 -0
  95. package/dist/src/ui/carousel.d.ts +7 -0
  96. package/dist/src/ui/checkbox.d.ts +7 -0
  97. package/dist/src/ui/collapsible.d.ts +7 -0
  98. package/dist/src/ui/combobox.d.ts +22 -0
  99. package/dist/src/ui/command.d.ts +7 -0
  100. package/dist/src/ui/context-menu.d.ts +7 -0
  101. package/dist/src/ui/date-picker.d.ts +15 -0
  102. package/dist/src/ui/dialog.d.ts +7 -0
  103. package/dist/src/ui/drawer.d.ts +7 -0
  104. package/dist/src/ui/dropdown-menu.d.ts +7 -0
  105. package/dist/src/ui/filter-builder.d.ts +7 -0
  106. package/dist/src/ui/form.d.ts +7 -0
  107. package/dist/src/ui/hover-card.d.ts +7 -0
  108. package/dist/src/ui/index.d.ts +10 -5
  109. package/dist/src/ui/input-otp.d.ts +7 -0
  110. package/dist/src/ui/input.d.ts +7 -0
  111. package/dist/src/ui/item.d.ts +7 -0
  112. package/dist/src/ui/kbd.d.ts +7 -0
  113. package/dist/src/ui/label.d.ts +7 -0
  114. package/dist/src/ui/menubar.d.ts +7 -0
  115. package/dist/src/ui/navigation-menu.d.ts +7 -0
  116. package/dist/src/ui/pagination.d.ts +7 -0
  117. package/dist/src/ui/popover.d.ts +7 -0
  118. package/dist/src/ui/progress.d.ts +7 -0
  119. package/dist/src/ui/radio-group.d.ts +7 -0
  120. package/dist/src/ui/resizable.d.ts +7 -0
  121. package/dist/src/ui/scroll-area.d.ts +7 -0
  122. package/dist/src/ui/select.d.ts +9 -2
  123. package/dist/src/ui/separator.d.ts +7 -0
  124. package/dist/src/ui/sheet.d.ts +7 -0
  125. package/dist/src/ui/sidebar.d.ts +14 -9
  126. package/dist/src/ui/skeleton.d.ts +7 -0
  127. package/dist/src/ui/slider.d.ts +7 -0
  128. package/dist/src/ui/spinner.d.ts +7 -0
  129. package/dist/src/ui/switch.d.ts +7 -0
  130. package/dist/src/ui/table.d.ts +15 -8
  131. package/dist/src/ui/tabs.d.ts +7 -0
  132. package/dist/src/ui/textarea.d.ts +7 -0
  133. package/dist/src/ui/toggle-group.d.ts +8 -3
  134. package/dist/src/ui/toggle.d.ts +7 -0
  135. package/dist/src/ui/tooltip.d.ts +7 -0
  136. package/metadata/ObjectGrid.component.yml +72 -0
  137. package/package.json +23 -11
  138. package/postcss.config.js +9 -1
  139. package/shadcn-components.json +310 -0
  140. package/src/__tests__/README.md +124 -0
  141. package/src/__tests__/basic-renderers.test.tsx +255 -0
  142. package/src/__tests__/complex-disclosure-renderers.test.tsx +301 -0
  143. package/src/__tests__/feedback-overlay-renderers.test.tsx +349 -0
  144. package/src/__tests__/form-renderers.test.tsx +364 -0
  145. package/src/__tests__/layout-data-renderers.test.tsx +340 -0
  146. package/src/__tests__/test-utils.tsx +190 -0
  147. package/src/hooks/use-mobile.tsx +8 -0
  148. package/src/index.css +86 -54
  149. package/src/index.test.ts +8 -0
  150. package/src/index.ts +21 -1
  151. package/src/lib/utils.tsx +8 -0
  152. package/src/new-components.test.ts +8 -9
  153. package/src/renderers/basic/button-group.tsx +78 -0
  154. package/src/renderers/basic/div.tsx +9 -1
  155. package/src/renderers/basic/html.tsx +8 -0
  156. package/src/renderers/basic/icon.tsx +66 -3
  157. package/src/renderers/basic/image.tsx +12 -1
  158. package/src/renderers/basic/index.ts +11 -0
  159. package/src/renderers/basic/navigation-menu.tsx +80 -0
  160. package/src/renderers/basic/pagination.tsx +82 -0
  161. package/src/renderers/basic/separator.tsx +9 -1
  162. package/src/renderers/basic/span.tsx +9 -1
  163. package/src/renderers/basic/text.tsx +8 -0
  164. package/src/renderers/complex/__tests__/data-table.test.ts +8 -0
  165. package/src/renderers/complex/carousel.tsx +11 -3
  166. package/src/renderers/complex/data-table.tsx +19 -4
  167. package/src/renderers/complex/filter-builder.tsx +8 -0
  168. package/src/renderers/complex/index.ts +9 -3
  169. package/src/renderers/complex/resizable.tsx +8 -0
  170. package/src/renderers/complex/scroll-area.tsx +8 -0
  171. package/src/renderers/complex/table.tsx +10 -2
  172. package/src/renderers/data-display/alert.tsx +8 -0
  173. package/src/renderers/data-display/avatar.tsx +8 -0
  174. package/src/renderers/data-display/badge.tsx +8 -0
  175. package/src/renderers/data-display/breadcrumb.tsx +59 -0
  176. package/src/renderers/data-display/index.ts +12 -0
  177. package/src/renderers/data-display/kbd.tsx +49 -0
  178. package/src/renderers/data-display/list.tsx +8 -0
  179. package/src/renderers/data-display/statistic.tsx +24 -43
  180. package/src/renderers/data-display/table.tsx +68 -0
  181. package/src/renderers/data-display/tree-view.tsx +26 -37
  182. package/src/renderers/disclosure/accordion.tsx +8 -0
  183. package/src/renderers/disclosure/collapsible.tsx +8 -0
  184. package/src/renderers/disclosure/index.ts +9 -0
  185. package/src/renderers/disclosure/toggle-group.tsx +77 -0
  186. package/src/renderers/feedback/empty.tsx +48 -0
  187. package/src/renderers/feedback/index.ts +12 -0
  188. package/src/renderers/feedback/loading.tsx +8 -0
  189. package/src/renderers/feedback/progress.tsx +8 -0
  190. package/src/renderers/feedback/skeleton.tsx +8 -0
  191. package/src/renderers/feedback/sonner.tsx +55 -0
  192. package/src/renderers/feedback/spinner.tsx +54 -0
  193. package/src/renderers/feedback/toast.tsx +58 -0
  194. package/src/renderers/feedback/toaster.tsx +13 -17
  195. package/src/renderers/form/button.tsx +8 -0
  196. package/src/renderers/form/calendar.tsx +8 -0
  197. package/src/renderers/form/checkbox.tsx +8 -0
  198. package/src/renderers/form/combobox.tsx +47 -0
  199. package/src/renderers/form/command.tsx +57 -0
  200. package/src/renderers/form/date-picker.tsx +10 -2
  201. package/src/renderers/form/file-upload.tsx +10 -2
  202. package/src/renderers/form/form.tsx +12 -3
  203. package/src/renderers/form/index.ts +10 -0
  204. package/src/renderers/form/input-otp.tsx +34 -15
  205. package/src/renderers/form/input.tsx +89 -50
  206. package/src/renderers/form/label.tsx +8 -0
  207. package/src/renderers/form/radio-group.tsx +8 -0
  208. package/src/renderers/form/select.tsx +8 -0
  209. package/src/renderers/form/slider.tsx +16 -1
  210. package/src/renderers/form/switch.tsx +8 -0
  211. package/src/renderers/form/textarea.tsx +8 -0
  212. package/src/renderers/form/toggle.tsx +8 -0
  213. package/src/renderers/index.ts +8 -0
  214. package/src/renderers/layout/aspect-ratio.tsx +50 -0
  215. package/src/renderers/layout/card.tsx +8 -0
  216. package/src/renderers/layout/container.tsx +20 -12
  217. package/src/renderers/layout/flex.tsx +16 -8
  218. package/src/renderers/layout/grid.tsx +8 -0
  219. package/src/renderers/layout/index.ts +9 -0
  220. package/src/renderers/layout/page.tsx +9 -1
  221. package/src/renderers/layout/semantic.tsx +8 -0
  222. package/src/renderers/layout/stack.tsx +16 -8
  223. package/src/renderers/layout/tabs.tsx +8 -0
  224. package/src/renderers/navigation/header-bar.tsx +9 -1
  225. package/src/renderers/navigation/index.ts +8 -0
  226. package/src/renderers/navigation/sidebar.tsx +8 -0
  227. package/src/renderers/overlay/alert-dialog.tsx +8 -0
  228. package/src/renderers/overlay/context-menu.tsx +9 -1
  229. package/src/renderers/overlay/dialog.tsx +8 -0
  230. package/src/renderers/overlay/drawer.tsx +8 -0
  231. package/src/renderers/overlay/dropdown-menu.tsx +8 -0
  232. package/src/renderers/overlay/hover-card.tsx +8 -0
  233. package/src/renderers/overlay/index.ts +9 -0
  234. package/src/renderers/overlay/menubar.tsx +75 -0
  235. package/src/renderers/overlay/popover.tsx +8 -0
  236. package/src/renderers/overlay/sheet.tsx +8 -0
  237. package/src/renderers/overlay/tooltip.tsx +8 -0
  238. package/src/renderers/placeholders.tsx +107 -0
  239. package/src/ui/accordion.tsx +8 -0
  240. package/src/ui/alert-dialog.tsx +8 -0
  241. package/src/ui/alert.tsx +14 -24
  242. package/src/ui/aspect-ratio.tsx +8 -0
  243. package/src/ui/avatar.tsx +8 -0
  244. package/src/ui/badge.tsx +13 -6
  245. package/src/ui/breadcrumb.tsx +8 -0
  246. package/src/ui/button-group.tsx +8 -0
  247. package/src/ui/button.tsx +38 -36
  248. package/src/ui/calendar.tsx +57 -200
  249. package/src/ui/card.tsx +8 -0
  250. package/src/ui/carousel.tsx +8 -0
  251. package/src/ui/checkbox.tsx +8 -0
  252. package/src/ui/collapsible.tsx +8 -0
  253. package/src/ui/combobox.tsx +104 -0
  254. package/src/ui/command.tsx +8 -0
  255. package/src/ui/context-menu.tsx +8 -0
  256. package/src/ui/date-picker.tsx +61 -0
  257. package/src/ui/dialog.tsx +8 -0
  258. package/src/ui/drawer.tsx +8 -0
  259. package/src/ui/dropdown-menu.tsx +8 -0
  260. package/src/ui/empty.tsx +8 -0
  261. package/src/ui/filter-builder.tsx +8 -0
  262. package/src/ui/form.tsx +8 -0
  263. package/src/ui/hover-card.tsx +8 -0
  264. package/src/ui/index.ts +11 -5
  265. package/src/ui/input-otp.tsx +20 -12
  266. package/src/ui/input.tsx +8 -0
  267. package/src/ui/item.tsx +8 -0
  268. package/src/ui/kbd.tsx +8 -0
  269. package/src/ui/label.tsx +8 -0
  270. package/src/ui/menubar.tsx +8 -0
  271. package/src/ui/navigation-menu.tsx +8 -0
  272. package/src/ui/pagination.tsx +8 -0
  273. package/src/ui/popover.tsx +9 -1
  274. package/src/ui/progress.tsx +11 -15
  275. package/src/ui/radio-group.tsx +8 -0
  276. package/src/ui/resizable.tsx +8 -0
  277. package/src/ui/scroll-area.tsx +9 -1
  278. package/src/ui/select.tsx +17 -9
  279. package/src/ui/separator.tsx +8 -0
  280. package/src/ui/sheet.tsx +8 -0
  281. package/src/ui/sidebar.tsx +34 -15
  282. package/src/ui/skeleton.tsx +8 -0
  283. package/src/ui/slider.tsx +8 -0
  284. package/src/ui/sonner.tsx +12 -20
  285. package/src/ui/spinner.tsx +11 -23
  286. package/src/ui/switch.tsx +8 -0
  287. package/src/ui/table.tsx +102 -97
  288. package/src/ui/tabs.tsx +8 -0
  289. package/src/ui/textarea.tsx +8 -0
  290. package/src/ui/toggle-group.tsx +12 -21
  291. package/src/ui/toggle.tsx +15 -12
  292. package/src/ui/tooltip.tsx +8 -0
  293. package/tsconfig.json +2 -1
  294. package/vite.config.ts +11 -1
  295. package/dist/src/index.test.d.ts +0 -1
  296. package/dist/src/new-components.test.d.ts +0 -1
  297. package/dist/src/renderers/complex/__tests__/data-table.test.d.ts +0 -0
  298. package/dist/src/renderers/complex/calendar-view.d.ts +0 -1
  299. package/dist/src/renderers/complex/chatbot.d.ts +0 -1
  300. package/dist/src/renderers/complex/chatbot.test.d.ts +0 -1
  301. package/dist/src/renderers/complex/timeline.d.ts +0 -1
  302. package/dist/src/ui/calendar-view.d.ts +0 -21
  303. package/dist/src/ui/chatbot.d.ts +0 -36
  304. package/dist/src/ui/field.d.ts +0 -24
  305. package/dist/src/ui/input-group.d.ts +0 -16
  306. package/dist/src/ui/timeline.d.ts +0 -25
  307. package/metadata/ObjectTable.component.yml +0 -41
  308. package/src/renderers/complex/calendar-view.tsx +0 -219
  309. package/src/renderers/complex/chatbot.test.ts +0 -44
  310. package/src/renderers/complex/chatbot.tsx +0 -185
  311. package/src/renderers/complex/timeline.tsx +0 -466
  312. package/src/ui/calendar-view.tsx +0 -503
  313. package/src/ui/chatbot.tsx +0 -240
  314. package/src/ui/field.tsx +0 -246
  315. package/src/ui/input-group.tsx +0 -170
  316. package/src/ui/timeline.tsx +0 -266
  317. 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 };
@@ -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 };
@@ -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
- );