@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,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import './div';
2
10
  import './text';
3
11
  import './span';
@@ -5,3 +13,6 @@ import './separator';
5
13
  import './image';
6
14
  import './icon';
7
15
  import './html';
16
+ import './button-group';
17
+ import './pagination';
18
+ import './navigation-menu';
@@ -0,0 +1,80 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ import { ComponentRegistry } from '@object-ui/core';
10
+ import type { NavigationMenuSchema } from '@object-ui/types';
11
+ import { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent, NavigationMenuLink } from '../../ui/navigation-menu';
12
+ import { cn } from '../../lib/utils';
13
+
14
+ ComponentRegistry.register('navigation-menu',
15
+ ({ schema, ...props }: { schema: NavigationMenuSchema; [key: string]: any }) => {
16
+ const {
17
+ 'data-obj-id': dataObjId,
18
+ 'data-obj-type': dataObjType,
19
+ style,
20
+ ...navigationMenuProps
21
+ } = props;
22
+
23
+ return (
24
+ <NavigationMenu
25
+ className={schema.className}
26
+ {...navigationMenuProps}
27
+ {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
28
+ >
29
+ <NavigationMenuList>
30
+ {schema.items?.map((item, idx) => (
31
+ <NavigationMenuItem key={idx}>
32
+ {item.children ? (
33
+ <>
34
+ <NavigationMenuTrigger>{item.label}</NavigationMenuTrigger>
35
+ <NavigationMenuContent>
36
+ <ul className="grid w-full gap-3 p-4 sm:w-[400px] md:w-[500px] md:grid-cols-2 lg:w-[600px]">
37
+ {item.children.map((child, childIdx) => (
38
+ <li key={childIdx}>
39
+ <NavigationMenuLink asChild>
40
+ <a
41
+ className={cn(
42
+ "block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground"
43
+ )}
44
+ href={child.href}
45
+ >
46
+ <div className="text-sm font-medium leading-none">{child.label}</div>
47
+ {child.description && (
48
+ <p className="line-clamp-2 text-sm leading-snug text-muted-foreground">
49
+ {child.description}
50
+ </p>
51
+ )}
52
+ </a>
53
+ </NavigationMenuLink>
54
+ </li>
55
+ ))}
56
+ </ul>
57
+ </NavigationMenuContent>
58
+ </>
59
+ ) : (
60
+ <NavigationMenuLink href={item.href}>{item.label}</NavigationMenuLink>
61
+ )}
62
+ </NavigationMenuItem>
63
+ ))}
64
+ </NavigationMenuList>
65
+ </NavigationMenu>
66
+ );
67
+ },
68
+ {
69
+ label: 'Navigation Menu',
70
+ inputs: [
71
+ { name: 'className', type: 'string', label: 'CSS Class' }
72
+ ],
73
+ defaultProps: {
74
+ items: [
75
+ { label: 'Home', href: '/' },
76
+ { label: 'About', href: '/about' }
77
+ ]
78
+ }
79
+ }
80
+ );
@@ -0,0 +1,82 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ import { ComponentRegistry } from '@object-ui/core';
10
+ import type { PaginationSchema } from '@object-ui/types';
11
+ import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from '../../ui/pagination';
12
+
13
+ ComponentRegistry.register('pagination',
14
+ ({ schema, ...props }: { schema: PaginationSchema; [key: string]: any }) => {
15
+ const {
16
+ 'data-obj-id': dataObjId,
17
+ 'data-obj-type': dataObjType,
18
+ style,
19
+ ...paginationProps
20
+ } = props;
21
+
22
+ const currentPage = schema.currentPage || schema.page || 1;
23
+ const totalPages = schema.totalPages || 1;
24
+ const showEllipsis = totalPages > 7;
25
+
26
+ const getPageNumbers = () => {
27
+ if (totalPages <= 7) {
28
+ return Array.from({ length: totalPages }, (_, i) => i + 1);
29
+ }
30
+
31
+ if (currentPage <= 3) {
32
+ return [1, 2, 3, 4, 5, -1, totalPages];
33
+ }
34
+
35
+ if (currentPage >= totalPages - 2) {
36
+ return [1, -1, totalPages - 4, totalPages - 3, totalPages - 2, totalPages - 1, totalPages];
37
+ }
38
+
39
+ return [1, -1, currentPage - 1, currentPage, currentPage + 1, -1, totalPages];
40
+ };
41
+
42
+ return (
43
+ <Pagination
44
+ className={schema.className}
45
+ {...paginationProps}
46
+ {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
47
+ >
48
+ <PaginationContent>
49
+ <PaginationItem>
50
+ <PaginationPrevious href="#" />
51
+ </PaginationItem>
52
+ {getPageNumbers().map((page, idx) => (
53
+ <PaginationItem key={idx}>
54
+ {page === -1 ? (
55
+ <PaginationEllipsis />
56
+ ) : (
57
+ <PaginationLink href="#" isActive={page === currentPage}>
58
+ {page}
59
+ </PaginationLink>
60
+ )}
61
+ </PaginationItem>
62
+ ))}
63
+ <PaginationItem>
64
+ <PaginationNext href="#" />
65
+ </PaginationItem>
66
+ </PaginationContent>
67
+ </Pagination>
68
+ );
69
+ },
70
+ {
71
+ label: 'Pagination',
72
+ inputs: [
73
+ { name: 'currentPage', type: 'number', label: 'Current Page', defaultValue: 1 },
74
+ { name: 'totalPages', type: 'number', label: 'Total Pages', defaultValue: 10 },
75
+ { name: 'className', type: 'string', label: 'CSS Class' }
76
+ ],
77
+ defaultProps: {
78
+ currentPage: 1,
79
+ totalPages: 10
80
+ }
81
+ }
82
+ );
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { SeparatorSchema } from '@object-ui/types';
3
11
  import { Separator } from '../../ui';
@@ -42,7 +50,7 @@ ComponentRegistry.register('separator',
42
50
  ],
43
51
  defaultProps: {
44
52
  orientation: 'horizontal',
45
- className: 'my-4'
53
+ className: 'my-2 sm:my-4'
46
54
  }
47
55
  }
48
56
  );
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { SpanSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -35,7 +43,7 @@ ComponentRegistry.register('span',
35
43
  { name: 'className', type: 'string', label: 'CSS Class' }
36
44
  ],
37
45
  defaultProps: {
38
- className: 'px-2 py-1'
46
+ className: 'px-1.5 py-0.5 sm:px-2 sm:py-1'
39
47
  },
40
48
  defaultChildren: [
41
49
  { type: 'text', content: 'Inline text' }
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { TextSchema } from '@object-ui/types';
3
11
 
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { describe, it, expect, beforeAll } from 'vitest';
2
10
  import { ComponentRegistry } from '@object-ui/core';
3
11
 
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { CarouselSchema } from '@object-ui/types';
3
11
  import {
@@ -50,9 +58,9 @@ ComponentRegistry.register('carousel',
50
58
  orientation: 'horizontal',
51
59
  showArrows: true,
52
60
  items: [
53
- [{ type: 'div', className: 'p-8 border rounded bg-slate-50', body: [{ type: 'text', content: 'Slide 1' }] }],
54
- [{ type: 'div', className: 'p-8 border rounded bg-slate-50', body: [{ type: 'text', content: 'Slide 2' }] }],
55
- [{ type: 'div', className: 'p-8 border rounded bg-slate-50', body: [{ type: 'text', content: 'Slide 3' }] }]
61
+ [{ type: 'div', className: 'p-4 sm:p-6 md:p-8 border rounded bg-slate-50', body: [{ type: 'text', content: 'Slide 1' }] }],
62
+ [{ type: 'div', className: 'p-4 sm:p-6 md:p-8 border rounded bg-slate-50', body: [{ type: 'text', content: 'Slide 2' }] }],
63
+ [{ type: 'div', className: 'p-4 sm:p-6 md:p-8 border rounded bg-slate-50', body: [{ type: 'text', content: 'Slide 3' }] }]
56
64
  ],
57
65
  className: 'w-full max-w-xs'
58
66
  }
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  // Enterprise-level DataTable Component (Airtable-like)
2
10
  import React, { useState, useMemo, useRef, useEffect } from 'react';
3
11
  import { ComponentRegistry } from '@object-ui/core';
@@ -77,7 +85,7 @@ type SortDirection = 'asc' | 'desc' | null;
77
85
  const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
78
86
  const {
79
87
  caption,
80
- columns: initialColumns = [],
88
+ columns: rawColumns = [],
81
89
  data = [],
82
90
  pagination = true,
83
91
  pageSize: initialPageSize = 10,
@@ -91,6 +99,15 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
91
99
  className,
92
100
  } = schema;
93
101
 
102
+ // Normalize columns to support legacy keys (label/name) from existing JSONs
103
+ const initialColumns = useMemo(() => {
104
+ return rawColumns.map((col: any) => ({
105
+ ...col,
106
+ header: col.header || col.label,
107
+ accessorKey: col.accessorKey || col.name
108
+ }));
109
+ }, [rawColumns]);
110
+
94
111
  // State management
95
112
  const [searchQuery, setSearchQuery] = useState('');
96
113
  const [sortColumn, setSortColumn] = useState<string | null>(null);
@@ -386,8 +403,7 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
386
403
  </div>
387
404
 
388
405
  {/* Table */}
389
- <div className="border rounded-lg">
390
- <Table>
406
+ <Table>
391
407
  {caption && <TableCaption>{caption}</TableCaption>}
392
408
  <TableHeader>
393
409
  <TableRow>
@@ -511,7 +527,6 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
511
527
  )}
512
528
  </TableBody>
513
529
  </Table>
514
- </div>
515
530
 
516
531
  {/* Pagination */}
517
532
  {pagination && sortedData.length > 0 && (
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { FilterBuilderSchema, FilterGroup } from '@object-ui/types';
3
11
  import { FilterBuilder } from '../../ui/filter-builder';
@@ -1,10 +1,16 @@
1
- import './calendar-view';
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
2
9
  import './carousel';
3
10
  import './filter-builder';
4
11
  import './scroll-area';
5
12
  import './resizable';
6
13
  import './table';
7
- import './chatbot';
8
14
  import './data-table';
9
- import './timeline';
15
+
10
16
 
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import React from 'react';
2
10
  import { ComponentRegistry } from '@object-ui/core';
3
11
  import type { ResizableSchema } from '@object-ui/types';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { ScrollAreaSchema } from '@object-ui/types';
3
11
  import { ScrollArea, ScrollBar } from '../../ui';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  // table.tsx implementation
2
10
  import { ComponentRegistry } from '@object-ui/core';
3
11
  import type { TableSchema } from '@object-ui/types';
@@ -22,7 +30,7 @@ ComponentRegistry.register('table',
22
30
  <TableRow>
23
31
  {schema.columns?.map((col: any, index: number) => (
24
32
  <TableHead key={index} className={col.className} style={{ width: col.width }}>
25
- {col.header}
33
+ {col.header || col.label}
26
34
  </TableHead>
27
35
  ))}
28
36
  </TableRow>
@@ -32,7 +40,7 @@ ComponentRegistry.register('table',
32
40
  <TableRow key={rowIndex}>
33
41
  {schema.columns?.map((col: any, colIndex: number) => (
34
42
  <TableCell key={colIndex} className={col.cellClassName}>
35
- {row[col.accessorKey]}
43
+ {row[col.accessorKey || col.name]}
36
44
  </TableCell>
37
45
  ))}
38
46
  </TableRow>
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { AlertSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { AvatarSchema } from '@object-ui/types';
3
11
  import {
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { BadgeSchema } from '@object-ui/types';
3
11
  import { Badge } from '../../ui';
@@ -0,0 +1,59 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ import { ComponentRegistry } from '@object-ui/core';
10
+ import type { BreadcrumbSchema } from '@object-ui/types';
11
+ import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from '../../ui/breadcrumb';
12
+ import { renderChildren } from '../../lib/utils';
13
+
14
+ ComponentRegistry.register('breadcrumb',
15
+ ({ schema, ...props }: { schema: BreadcrumbSchema; [key: string]: any }) => {
16
+ const {
17
+ 'data-obj-id': dataObjId,
18
+ 'data-obj-type': dataObjType,
19
+ style,
20
+ ...breadcrumbProps
21
+ } = props;
22
+
23
+ return (
24
+ <Breadcrumb
25
+ className={schema.className}
26
+ {...breadcrumbProps}
27
+ {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
28
+ >
29
+ <BreadcrumbList>
30
+ {schema.items?.map((item, idx) => (
31
+ <div key={idx} className="flex items-center">
32
+ <BreadcrumbItem>
33
+ {idx === (schema.items?.length || 0) - 1 ? (
34
+ <BreadcrumbPage>{item.label}</BreadcrumbPage>
35
+ ) : (
36
+ <BreadcrumbLink href={item.href}>{item.label}</BreadcrumbLink>
37
+ )}
38
+ </BreadcrumbItem>
39
+ {idx < (schema.items?.length || 0) - 1 && <BreadcrumbSeparator />}
40
+ </div>
41
+ ))}
42
+ </BreadcrumbList>
43
+ </Breadcrumb>
44
+ );
45
+ },
46
+ {
47
+ label: 'Breadcrumb',
48
+ inputs: [
49
+ { name: 'className', type: 'string', label: 'CSS Class' }
50
+ ],
51
+ defaultProps: {
52
+ items: [
53
+ { label: 'Home', href: '/' },
54
+ { label: 'Products', href: '/products' },
55
+ { label: 'Product' }
56
+ ]
57
+ }
58
+ }
59
+ );
@@ -1,6 +1,18 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import './badge';
2
10
  import './avatar';
3
11
  import './alert';
4
12
  import './list';
5
13
  import './tree-view';
6
14
  import './statistic';
15
+ import './breadcrumb';
16
+ import './kbd';
17
+ import './table';
18
+
@@ -0,0 +1,49 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ import { ComponentRegistry } from '@object-ui/core';
10
+ import type { KbdSchema } from '@object-ui/types';
11
+ import { cn } from '../../lib/utils';
12
+
13
+ ComponentRegistry.register('kbd',
14
+ ({ schema, ...props }: { schema: KbdSchema; [key: string]: any }) => {
15
+ const {
16
+ 'data-obj-id': dataObjId,
17
+ 'data-obj-type': dataObjType,
18
+ style,
19
+ ...kbdProps
20
+ } = props;
21
+
22
+ const keys = Array.isArray(schema.keys) ? schema.keys : [schema.keys || schema.label || 'K'];
23
+
24
+ return (
25
+ <div className={cn('inline-flex flex-wrap gap-1', schema.className)}>
26
+ {keys.map((key, idx) => (
27
+ <kbd
28
+ key={idx}
29
+ className="pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground opacity-100"
30
+ {...kbdProps}
31
+ {...(idx === 0 ? { 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style } : {})}
32
+ >
33
+ {key}
34
+ </kbd>
35
+ ))}
36
+ </div>
37
+ );
38
+ },
39
+ {
40
+ label: 'Keyboard Key',
41
+ inputs: [
42
+ { name: 'label', type: 'string', label: 'Label' },
43
+ { name: 'className', type: 'string', label: 'CSS Class' }
44
+ ],
45
+ defaultProps: {
46
+ label: 'K'
47
+ }
48
+ }
49
+ );
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { ListSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';