@object-ui/components 0.3.0 → 0.5.0

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 (423) hide show
  1. package/.turbo/turbo-build.log +47 -0
  2. package/CHANGELOG.md +10 -0
  3. package/README.md +32 -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 +45067 -34357
  8. package/dist/index.umd.cjs +54 -42
  9. package/dist/src/SchemaRenderer.d.ts +3 -0
  10. package/dist/src/{ui → custom}/button-group.d.ts +1 -1
  11. package/dist/src/custom/combobox.d.ts +22 -0
  12. package/dist/src/custom/date-picker.d.ts +15 -0
  13. package/dist/src/custom/field.d.ts +19 -0
  14. package/dist/src/{ui → custom}/filter-builder.d.ts +7 -0
  15. package/dist/src/custom/index.d.ts +12 -0
  16. package/dist/src/custom/input-group.d.ts +14 -0
  17. package/dist/src/{ui → custom}/item.d.ts +8 -1
  18. package/dist/src/{ui → custom}/kbd.d.ts +7 -0
  19. package/dist/src/custom/native-select.d.ts +12 -0
  20. package/dist/src/custom/sort-builder.d.ts +22 -0
  21. package/dist/src/custom/spinner.d.ts +10 -0
  22. package/dist/src/hooks/use-mobile.d.ts +7 -0
  23. package/dist/src/index.d.ts +5 -1
  24. package/dist/src/renderers/basic/button-group.d.ts +8 -0
  25. package/dist/src/renderers/basic/div.d.ts +7 -0
  26. package/dist/src/renderers/basic/html.d.ts +7 -0
  27. package/dist/src/renderers/basic/icon.d.ts +7 -0
  28. package/dist/src/renderers/basic/image.d.ts +7 -0
  29. package/dist/src/renderers/basic/navigation-menu.d.ts +8 -0
  30. package/dist/src/renderers/basic/pagination.d.ts +8 -0
  31. package/dist/src/renderers/basic/separator.d.ts +7 -0
  32. package/dist/src/renderers/basic/span.d.ts +7 -0
  33. package/dist/src/renderers/basic/text.d.ts +7 -0
  34. package/dist/src/renderers/complex/carousel.d.ts +7 -0
  35. package/dist/src/renderers/complex/data-table.d.ts +7 -0
  36. package/dist/src/renderers/complex/filter-builder.d.ts +7 -0
  37. package/dist/src/renderers/complex/resizable.d.ts +7 -0
  38. package/dist/src/renderers/complex/scroll-area.d.ts +7 -0
  39. package/dist/src/renderers/complex/table.d.ts +7 -0
  40. package/dist/src/renderers/data-display/alert.d.ts +7 -0
  41. package/dist/src/renderers/data-display/avatar.d.ts +7 -0
  42. package/dist/src/renderers/data-display/badge.d.ts +7 -0
  43. package/dist/src/renderers/data-display/breadcrumb.d.ts +8 -0
  44. package/dist/src/renderers/data-display/kbd.d.ts +8 -0
  45. package/dist/src/renderers/data-display/list.d.ts +7 -0
  46. package/dist/src/renderers/data-display/statistic.d.ts +7 -0
  47. package/dist/src/renderers/data-display/table.d.ts +8 -0
  48. package/dist/src/renderers/data-display/tree-view.d.ts +7 -0
  49. package/dist/src/renderers/disclosure/accordion.d.ts +7 -0
  50. package/dist/src/renderers/disclosure/collapsible.d.ts +7 -0
  51. package/dist/src/renderers/disclosure/toggle-group.d.ts +8 -0
  52. package/dist/src/renderers/feedback/empty.d.ts +8 -0
  53. package/dist/src/renderers/feedback/loading.d.ts +7 -0
  54. package/dist/src/renderers/feedback/progress.d.ts +7 -0
  55. package/dist/src/renderers/feedback/skeleton.d.ts +7 -0
  56. package/dist/src/renderers/feedback/sonner.d.ts +8 -0
  57. package/dist/src/renderers/feedback/spinner.d.ts +8 -0
  58. package/dist/src/renderers/feedback/toast.d.ts +8 -0
  59. package/dist/src/renderers/feedback/toaster.d.ts +7 -0
  60. package/dist/src/renderers/form/button.d.ts +7 -0
  61. package/dist/src/renderers/form/calendar.d.ts +7 -0
  62. package/dist/src/renderers/form/checkbox.d.ts +7 -0
  63. package/dist/src/renderers/form/combobox.d.ts +8 -0
  64. package/dist/src/renderers/form/command.d.ts +8 -0
  65. package/dist/src/renderers/form/date-picker.d.ts +7 -0
  66. package/dist/src/renderers/form/file-upload.d.ts +7 -0
  67. package/dist/src/renderers/form/form.d.ts +7 -0
  68. package/dist/src/renderers/form/input-otp.d.ts +7 -0
  69. package/dist/src/renderers/form/input.d.ts +7 -0
  70. package/dist/src/renderers/form/label.d.ts +7 -0
  71. package/dist/src/renderers/form/radio-group.d.ts +7 -0
  72. package/dist/src/renderers/form/select.d.ts +7 -0
  73. package/dist/src/renderers/form/slider.d.ts +7 -0
  74. package/dist/src/renderers/form/switch.d.ts +7 -0
  75. package/dist/src/renderers/form/textarea.d.ts +7 -0
  76. package/dist/src/renderers/form/toggle.d.ts +7 -0
  77. package/dist/src/renderers/layout/aspect-ratio.d.ts +8 -0
  78. package/dist/src/renderers/layout/card.d.ts +7 -0
  79. package/dist/src/renderers/layout/container.d.ts +7 -0
  80. package/dist/src/renderers/layout/flex.d.ts +7 -0
  81. package/dist/src/renderers/layout/grid.d.ts +7 -0
  82. package/dist/src/renderers/layout/page.d.ts +1 -1
  83. package/dist/src/renderers/layout/semantic.d.ts +7 -0
  84. package/dist/src/renderers/layout/stack.d.ts +7 -0
  85. package/dist/src/renderers/layout/tabs.d.ts +7 -0
  86. package/dist/src/renderers/navigation/header-bar.d.ts +7 -0
  87. package/dist/src/renderers/navigation/sidebar.d.ts +7 -0
  88. package/dist/src/renderers/overlay/alert-dialog.d.ts +7 -0
  89. package/dist/src/renderers/overlay/context-menu.d.ts +7 -0
  90. package/dist/src/renderers/overlay/dialog.d.ts +7 -0
  91. package/dist/src/renderers/overlay/drawer.d.ts +7 -0
  92. package/dist/src/renderers/overlay/dropdown-menu.d.ts +7 -0
  93. package/dist/src/renderers/overlay/hover-card.d.ts +7 -0
  94. package/dist/src/renderers/overlay/menubar.d.ts +8 -0
  95. package/dist/src/renderers/overlay/popover.d.ts +7 -0
  96. package/dist/src/renderers/overlay/sheet.d.ts +7 -0
  97. package/dist/src/renderers/overlay/tooltip.d.ts +7 -0
  98. package/dist/src/renderers/placeholders.d.ts +9 -0
  99. package/dist/src/ui/accordion.d.ts +11 -4
  100. package/dist/src/ui/alert-dialog.d.ts +24 -11
  101. package/dist/src/ui/alert.d.ts +11 -5
  102. package/dist/src/ui/aspect-ratio.d.ts +8 -1
  103. package/dist/src/ui/avatar.d.ts +10 -3
  104. package/dist/src/ui/badge.d.ts +10 -3
  105. package/dist/src/ui/breadcrumb.d.ts +23 -8
  106. package/dist/src/ui/button.d.ts +10 -5
  107. package/dist/src/ui/calendar.d.ts +8 -1
  108. package/dist/src/ui/card.d.ts +14 -8
  109. package/dist/src/ui/carousel.d.ts +12 -6
  110. package/dist/src/ui/chart.d.ts +62 -0
  111. package/dist/src/ui/checkbox.d.ts +8 -1
  112. package/dist/src/ui/collapsible.d.ts +10 -3
  113. package/dist/src/ui/command.d.ts +85 -16
  114. package/dist/src/ui/context-menu.d.ts +21 -12
  115. package/dist/src/ui/dialog.d.ts +24 -13
  116. package/dist/src/ui/drawer.d.ts +26 -10
  117. package/dist/src/ui/dropdown-menu.d.ts +27 -18
  118. package/dist/src/ui/form.d.ts +13 -7
  119. package/dist/src/ui/hover-card.d.ts +10 -3
  120. package/dist/src/ui/index.d.ts +10 -11
  121. package/dist/src/ui/input-otp.d.ts +37 -7
  122. package/dist/src/ui/input.d.ts +7 -0
  123. package/dist/src/ui/label.d.ts +9 -1
  124. package/dist/src/ui/menubar.d.ts +26 -17
  125. package/dist/src/ui/navigation-menu.d.ts +16 -11
  126. package/dist/src/ui/pagination.d.ts +32 -10
  127. package/dist/src/ui/popover.d.ts +11 -5
  128. package/dist/src/ui/progress.d.ts +8 -1
  129. package/dist/src/ui/radio-group.d.ts +9 -2
  130. package/dist/src/ui/resizable.d.ts +12 -8
  131. package/dist/src/ui/scroll-area.d.ts +9 -2
  132. package/dist/src/ui/select.d.ts +18 -13
  133. package/dist/src/ui/separator.d.ts +7 -0
  134. package/dist/src/ui/sheet.d.ts +30 -11
  135. package/dist/src/ui/sidebar.d.ts +41 -38
  136. package/dist/src/ui/skeleton.d.ts +8 -1
  137. package/dist/src/ui/slider.d.ts +8 -1
  138. package/dist/src/ui/sonner.d.ts +2 -1
  139. package/dist/src/ui/switch.d.ts +9 -2
  140. package/dist/src/ui/table.d.ts +15 -8
  141. package/dist/src/ui/tabs.d.ts +8 -1
  142. package/dist/src/ui/textarea.d.ts +8 -1
  143. package/dist/src/ui/toast.d.ts +22 -0
  144. package/dist/src/ui/toggle-group.d.ts +15 -5
  145. package/dist/src/ui/toggle.d.ts +11 -1
  146. package/dist/src/ui/tooltip.d.ts +11 -4
  147. package/dist/src/ui/typography.d.ts +21 -0
  148. package/metadata/ObjectGrid.component.yml +72 -0
  149. package/package.json +35 -13
  150. package/postcss.config.js +9 -1
  151. package/shadcn-components.json +315 -0
  152. package/src/SchemaRenderer.tsx +28 -0
  153. package/src/__tests__/PageRendererRegions.test.tsx +59 -0
  154. package/src/__tests__/README.md +124 -0
  155. package/src/__tests__/Registry.test.ts +21 -0
  156. package/src/__tests__/basic-renderers.test.tsx +255 -0
  157. package/src/__tests__/complex-disclosure-renderers.test.tsx +302 -0
  158. package/src/__tests__/feedback-overlay-renderers.test.tsx +349 -0
  159. package/src/__tests__/form-renderers.test.tsx +364 -0
  160. package/src/__tests__/layout-data-renderers.test.tsx +340 -0
  161. package/src/__tests__/test-utils.tsx +190 -0
  162. package/src/{ui → custom}/button-group.tsx +9 -1
  163. package/src/custom/combobox.tsx +104 -0
  164. package/src/custom/date-picker.tsx +61 -0
  165. package/src/{ui → custom}/empty.tsx +8 -0
  166. package/src/custom/field.tsx +81 -0
  167. package/src/{ui → custom}/filter-builder.tsx +11 -3
  168. package/src/custom/index.ts +12 -0
  169. package/src/custom/input-group.tsx +53 -0
  170. package/src/{ui → custom}/item.tsx +9 -1
  171. package/src/{ui → custom}/kbd.tsx +8 -0
  172. package/src/custom/native-select.tsx +33 -0
  173. package/src/custom/sort-builder.tsx +129 -0
  174. package/src/custom/spinner.tsx +26 -0
  175. package/src/hooks/use-mobile.tsx +8 -0
  176. package/src/index.css +105 -54
  177. package/src/index.test.ts +8 -0
  178. package/src/index.ts +22 -1
  179. package/src/lib/utils.tsx +8 -0
  180. package/src/new-components.test.ts +8 -9
  181. package/src/renderers/basic/button-group.tsx +79 -0
  182. package/src/renderers/basic/div.tsx +21 -2
  183. package/src/renderers/basic/html.tsx +9 -0
  184. package/src/renderers/basic/icon.tsx +67 -3
  185. package/src/renderers/basic/image.tsx +13 -1
  186. package/src/renderers/basic/index.ts +11 -0
  187. package/src/renderers/basic/navigation-menu.tsx +81 -0
  188. package/src/renderers/basic/pagination.tsx +109 -0
  189. package/src/renderers/basic/separator.tsx +10 -1
  190. package/src/renderers/basic/span.tsx +21 -2
  191. package/src/renderers/basic/text.tsx +12 -2
  192. package/src/renderers/complex/__tests__/data-table.test.ts +8 -0
  193. package/src/renderers/complex/carousel.tsx +12 -3
  194. package/src/renderers/complex/data-table.tsx +150 -96
  195. package/src/renderers/complex/filter-builder.tsx +10 -1
  196. package/src/renderers/complex/index.ts +9 -3
  197. package/src/renderers/complex/resizable.tsx +10 -1
  198. package/src/renderers/complex/scroll-area.tsx +33 -7
  199. package/src/renderers/complex/table.tsx +11 -2
  200. package/src/renderers/data-display/alert.tsx +9 -0
  201. package/src/renderers/data-display/avatar.tsx +9 -0
  202. package/src/renderers/data-display/badge.tsx +9 -0
  203. package/src/renderers/data-display/breadcrumb.tsx +60 -0
  204. package/src/renderers/data-display/index.ts +12 -0
  205. package/src/renderers/data-display/kbd.tsx +50 -0
  206. package/src/renderers/data-display/list.tsx +29 -49
  207. package/src/renderers/data-display/statistic.tsx +45 -48
  208. package/src/renderers/data-display/table.tsx +78 -0
  209. package/src/renderers/data-display/tree-view.tsx +32 -37
  210. package/src/renderers/disclosure/accordion.tsx +9 -0
  211. package/src/renderers/disclosure/collapsible.tsx +9 -0
  212. package/src/renderers/disclosure/index.ts +9 -0
  213. package/src/renderers/disclosure/toggle-group.tsx +79 -0
  214. package/src/renderers/feedback/empty.tsx +49 -0
  215. package/src/renderers/feedback/index.ts +12 -0
  216. package/src/renderers/feedback/loading.tsx +10 -1
  217. package/src/renderers/feedback/progress.tsx +9 -0
  218. package/src/renderers/feedback/skeleton.tsx +9 -0
  219. package/src/renderers/feedback/sonner.tsx +56 -0
  220. package/src/renderers/feedback/spinner.tsx +55 -0
  221. package/src/renderers/feedback/toast.tsx +59 -0
  222. package/src/renderers/feedback/toaster.tsx +14 -17
  223. package/src/renderers/form/button.tsx +43 -1
  224. package/src/renderers/form/calendar.tsx +9 -0
  225. package/src/renderers/form/checkbox.tsx +46 -16
  226. package/src/renderers/form/combobox.tsx +48 -0
  227. package/src/renderers/form/command.tsx +58 -0
  228. package/src/renderers/form/date-picker.tsx +11 -2
  229. package/src/renderers/form/file-upload.tsx +11 -2
  230. package/src/renderers/form/form.tsx +104 -18
  231. package/src/renderers/form/index.ts +10 -0
  232. package/src/renderers/form/input-otp.tsx +35 -15
  233. package/src/renderers/form/input.tsx +92 -50
  234. package/src/renderers/form/label.tsx +9 -0
  235. package/src/renderers/form/radio-group.tsx +9 -0
  236. package/src/renderers/form/select.tsx +43 -15
  237. package/src/renderers/form/slider.tsx +17 -1
  238. package/src/renderers/form/switch.tsx +9 -0
  239. package/src/renderers/form/textarea.tsx +58 -27
  240. package/src/renderers/form/toggle.tsx +11 -45
  241. package/src/renderers/index.ts +8 -0
  242. package/src/renderers/layout/aspect-ratio.tsx +51 -0
  243. package/src/renderers/layout/card.tsx +18 -2
  244. package/src/renderers/layout/container.tsx +21 -12
  245. package/src/renderers/layout/flex.tsx +17 -8
  246. package/src/renderers/layout/grid.tsx +31 -8
  247. package/src/renderers/layout/index.ts +9 -0
  248. package/src/renderers/layout/page.tsx +44 -24
  249. package/src/renderers/layout/semantic.tsx +9 -0
  250. package/src/renderers/layout/stack.tsx +18 -9
  251. package/src/renderers/layout/tabs.tsx +51 -17
  252. package/src/renderers/navigation/header-bar.tsx +10 -1
  253. package/src/renderers/navigation/index.ts +8 -0
  254. package/src/renderers/navigation/sidebar.tsx +13 -0
  255. package/src/renderers/overlay/alert-dialog.tsx +9 -0
  256. package/src/renderers/overlay/context-menu.tsx +10 -1
  257. package/src/renderers/overlay/dialog.tsx +9 -0
  258. package/src/renderers/overlay/drawer.tsx +9 -0
  259. package/src/renderers/overlay/dropdown-menu.tsx +9 -0
  260. package/src/renderers/overlay/hover-card.tsx +9 -0
  261. package/src/renderers/overlay/index.ts +9 -0
  262. package/src/renderers/overlay/menubar.tsx +76 -0
  263. package/src/renderers/overlay/popover.tsx +9 -0
  264. package/src/renderers/overlay/sheet.tsx +9 -0
  265. package/src/renderers/overlay/tooltip.tsx +9 -0
  266. package/src/renderers/placeholders.tsx +107 -0
  267. package/src/stories/CRMApp.stories.tsx +706 -0
  268. package/src/stories/Guide.mdx +55 -0
  269. package/src/stories/Introduction.mdx +34 -0
  270. package/src/stories/MockedData.stories.tsx +71 -0
  271. package/src/stories/assets/accessibility.png +0 -0
  272. package/src/stories/assets/accessibility.svg +1 -0
  273. package/src/stories/assets/addon-library.png +0 -0
  274. package/src/stories/assets/assets.png +0 -0
  275. package/src/stories/assets/avif-test-image.avif +0 -0
  276. package/src/stories/assets/context.png +0 -0
  277. package/src/stories/assets/discord.svg +1 -0
  278. package/src/stories/assets/docs.png +0 -0
  279. package/src/stories/assets/figma-plugin.png +0 -0
  280. package/src/stories/assets/github.svg +1 -0
  281. package/src/stories/assets/share.png +0 -0
  282. package/src/stories/assets/styling.png +0 -0
  283. package/src/stories/assets/testing.png +0 -0
  284. package/src/stories/assets/theming.png +0 -0
  285. package/src/stories/assets/tutorials.svg +1 -0
  286. package/src/stories/assets/youtube.svg +1 -0
  287. package/src/stories/button.css +30 -0
  288. package/src/stories/header.css +32 -0
  289. package/src/stories/page.css +68 -0
  290. package/src/stories-json/accordion.stories.tsx +43 -0
  291. package/src/stories-json/aggrid.stories.tsx +103 -0
  292. package/src/stories-json/alert.stories.tsx +39 -0
  293. package/src/stories-json/aspect-ratio.stories.tsx +34 -0
  294. package/src/stories-json/avatar.stories.tsx +38 -0
  295. package/src/stories-json/badge.stories.tsx +53 -0
  296. package/src/stories-json/breadcrumb.stories.tsx +30 -0
  297. package/src/stories-json/button-group.stories.tsx +43 -0
  298. package/src/stories-json/button.stories.tsx +73 -0
  299. package/src/stories-json/calendar.stories.tsx +85 -0
  300. package/src/stories-json/card.stories.tsx +48 -0
  301. package/src/stories-json/carousel.stories.tsx +33 -0
  302. package/src/stories-json/charts.stories.tsx +195 -0
  303. package/src/stories-json/chatbot.stories.tsx +248 -0
  304. package/src/stories-json/code-editor.stories.tsx +92 -0
  305. package/src/stories-json/collapsible.stories.tsx +40 -0
  306. package/src/stories-json/controls.stories.tsx +36 -0
  307. package/src/stories-json/dashboard.stories.tsx +318 -0
  308. package/src/stories-json/data-table.stories.tsx +60 -0
  309. package/src/stories-json/data_display_extras.stories.tsx +102 -0
  310. package/src/stories-json/date-picker.stories.tsx +28 -0
  311. package/src/stories-json/detail-view.stories.tsx +258 -0
  312. package/src/stories-json/dialog.stories.tsx +43 -0
  313. package/src/stories-json/feedback_extras.stories.tsx +40 -0
  314. package/src/stories-json/feedback_others.stories.tsx +46 -0
  315. package/src/stories-json/form_advanced.stories.tsx +117 -0
  316. package/src/stories-json/form_extras.stories.tsx +123 -0
  317. package/src/stories-json/grid.stories.tsx +56 -0
  318. package/src/stories-json/icon.stories.tsx +36 -0
  319. package/src/stories-json/input.stories.tsx +52 -0
  320. package/src/stories-json/kanban.stories.tsx +295 -0
  321. package/src/stories-json/layout_extended.stories.tsx +76 -0
  322. package/src/stories-json/layout_flex.stories.tsx +107 -0
  323. package/src/stories-json/list-view.stories.tsx +97 -0
  324. package/src/stories-json/markdown.stories.tsx +129 -0
  325. package/src/stories-json/menus.stories.tsx +63 -0
  326. package/src/stories-json/metric-card.stories.tsx +143 -0
  327. package/src/stories-json/navigation-menu.stories.tsx +37 -0
  328. package/src/stories-json/object-aggrid.stories.tsx +252 -0
  329. package/src/stories-json/object-form.stories.tsx +130 -0
  330. package/src/stories-json/object-gantt.stories.tsx +114 -0
  331. package/src/stories-json/object-grid.stories.tsx +157 -0
  332. package/src/stories-json/object-map.stories.tsx +116 -0
  333. package/src/stories-json/object-view.stories.tsx +118 -0
  334. package/src/stories-json/overlay_extras.stories.tsx +113 -0
  335. package/src/stories-json/overlay_others.stories.tsx +76 -0
  336. package/src/stories-json/page.stories.tsx +55 -0
  337. package/src/stories-json/reports.stories.tsx +163 -0
  338. package/src/stories-json/resizable.stories.tsx +44 -0
  339. package/src/stories-json/select.stories.tsx +34 -0
  340. package/src/stories-json/separator.stories.tsx +41 -0
  341. package/src/stories-json/sidebar.stories.tsx +147 -0
  342. package/src/stories-json/statistic.stories.tsx +44 -0
  343. package/src/stories-json/tabs.stories.tsx +51 -0
  344. package/src/stories-json/timeline.stories.tsx +188 -0
  345. package/src/stories-json/typography.stories.tsx +45 -0
  346. package/src/ui/accordion.tsx +55 -53
  347. package/src/ui/alert-dialog.tsx +111 -117
  348. package/src/ui/alert.tsx +46 -57
  349. package/src/ui/aspect-ratio.tsx +9 -5
  350. package/src/ui/avatar.tsx +49 -42
  351. package/src/ui/badge.tsx +18 -20
  352. package/src/ui/breadcrumb.tsx +89 -75
  353. package/src/ui/button.tsx +38 -37
  354. package/src/ui/calendar.tsx +37 -53
  355. package/src/ui/card.tsx +59 -110
  356. package/src/ui/carousel.tsx +144 -113
  357. package/src/ui/chart.tsx +367 -0
  358. package/src/ui/checkbox.tsx +28 -22
  359. package/src/ui/collapsible.tsx +13 -25
  360. package/src/ui/command.tsx +114 -135
  361. package/src/ui/context-menu.tsx +77 -116
  362. package/src/ui/dialog.tsx +102 -113
  363. package/src/ui/drawer.tsx +90 -99
  364. package/src/ui/dropdown-menu.tsx +142 -188
  365. package/src/ui/form.tsx +59 -40
  366. package/src/ui/hover-card.tsx +26 -33
  367. package/src/ui/index.ts +11 -11
  368. package/src/ui/input-otp.tsx +53 -55
  369. package/src/ui/input.tsx +21 -15
  370. package/src/ui/label.tsx +25 -15
  371. package/src/ui/menubar.tsx +196 -206
  372. package/src/ui/navigation-menu.tsx +104 -136
  373. package/src/ui/pagination.tsx +94 -96
  374. package/src/ui/popover.tsx +29 -38
  375. package/src/ui/progress.tsx +29 -34
  376. package/src/ui/radio-group.tsx +27 -20
  377. package/src/ui/resizable.tsx +40 -42
  378. package/src/ui/scroll-area.tsx +46 -48
  379. package/src/ui/select.tsx +140 -160
  380. package/src/ui/separator.tsx +10 -2
  381. package/src/ui/sheet.tsx +118 -107
  382. package/src/ui/sidebar.tsx +471 -418
  383. package/src/ui/skeleton.tsx +14 -11
  384. package/src/ui/slider.tsx +27 -54
  385. package/src/ui/sonner.tsx +29 -19
  386. package/src/ui/switch.tsx +27 -21
  387. package/src/ui/table.tsx +102 -97
  388. package/src/ui/tabs.tsx +14 -37
  389. package/src/ui/textarea.tsx +16 -4
  390. package/src/ui/toast.tsx +137 -0
  391. package/src/ui/toggle-group.tsx +37 -55
  392. package/src/ui/toggle.tsx +30 -27
  393. package/src/ui/tooltip.tsx +29 -52
  394. package/src/ui/typography.tsx +85 -0
  395. package/tsconfig.json +2 -1
  396. package/vite.config.ts +20 -2
  397. package/vitest.config.ts +5 -0
  398. package/dist/src/index.test.d.ts +0 -1
  399. package/dist/src/new-components.test.d.ts +0 -1
  400. package/dist/src/renderers/complex/__tests__/data-table.test.d.ts +0 -0
  401. package/dist/src/renderers/complex/calendar-view.d.ts +0 -1
  402. package/dist/src/renderers/complex/chatbot.d.ts +0 -1
  403. package/dist/src/renderers/complex/chatbot.test.d.ts +0 -1
  404. package/dist/src/renderers/complex/timeline.d.ts +0 -1
  405. package/dist/src/ui/calendar-view.d.ts +0 -21
  406. package/dist/src/ui/chatbot.d.ts +0 -36
  407. package/dist/src/ui/field.d.ts +0 -24
  408. package/dist/src/ui/input-group.d.ts +0 -16
  409. package/dist/src/ui/spinner.d.ts +0 -3
  410. package/dist/src/ui/timeline.d.ts +0 -25
  411. package/metadata/ObjectTable.component.yml +0 -41
  412. package/src/renderers/complex/calendar-view.tsx +0 -219
  413. package/src/renderers/complex/chatbot.test.ts +0 -44
  414. package/src/renderers/complex/chatbot.tsx +0 -185
  415. package/src/renderers/complex/timeline.tsx +0 -466
  416. package/src/ui/calendar-view.tsx +0 -503
  417. package/src/ui/chatbot.tsx +0 -240
  418. package/src/ui/field.tsx +0 -246
  419. package/src/ui/input-group.tsx +0 -170
  420. package/src/ui/spinner.tsx +0 -38
  421. package/src/ui/timeline.tsx +0 -266
  422. package/tailwind.config.js +0 -75
  423. /package/dist/src/{ui → custom}/empty.d.ts +0 -0
@@ -1,5 +1,14 @@
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';
11
+ import { cn } from '../../lib/utils';
3
12
  import { ComponentRegistry } from '@object-ui/core';
4
13
  import type { DataTableSchema } from '@object-ui/types';
5
14
  import {
@@ -77,7 +86,7 @@ type SortDirection = 'asc' | 'desc' | null;
77
86
  const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
78
87
  const {
79
88
  caption,
80
- columns: initialColumns = [],
89
+ columns: rawColumns = [],
81
90
  data = [],
82
91
  pagination = true,
83
92
  pageSize: initialPageSize = 10,
@@ -91,6 +100,15 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
91
100
  className,
92
101
  } = schema;
93
102
 
103
+ // Normalize columns to support legacy keys (label/name) from existing JSONs
104
+ const initialColumns = useMemo(() => {
105
+ return rawColumns.map((col: any) => ({
106
+ ...col,
107
+ header: col.header || col.label,
108
+ accessorKey: col.accessorKey || col.name
109
+ }));
110
+ }, [rawColumns]);
111
+
94
112
  // State management
95
113
  const [searchQuery, setSearchQuery] = useState('');
96
114
  const [sortColumn, setSortColumn] = useState<string | null>(null);
@@ -343,56 +361,60 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
343
361
  return selectedRowIds.has(rowId);
344
362
  }) && !allPageRowsSelected;
345
363
 
364
+ const showToolbar = searchable || exportable || (selectable && selectedRowIds.size > 0);
365
+
346
366
  return (
347
- <div className={`space-y-4 ${className || ''}`}>
367
+ <div className={`flex flex-col h-full gap-4 ${className || ''}`}>
348
368
  {/* Toolbar */}
349
- <div className="flex items-center justify-between gap-4">
350
- <div className="flex items-center gap-2 flex-1">
351
- {searchable && (
352
- <div className="relative max-w-sm flex-1">
353
- <Search className="absolute left-2 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
354
- <Input
355
- placeholder="Search..."
356
- value={searchQuery}
357
- onChange={(e) => {
358
- setSearchQuery(e.target.value);
359
- setCurrentPage(1);
360
- }}
361
- className="pl-8"
362
- />
363
- </div>
364
- )}
365
- </div>
366
-
367
- <div className="flex items-center gap-2">
368
- {exportable && (
369
- <Button
370
- variant="outline"
371
- size="sm"
372
- onClick={handleExport}
373
- disabled={sortedData.length === 0}
374
- >
375
- <Download className="h-4 w-4 mr-2" />
376
- Export CSV
377
- </Button>
378
- )}
369
+ {showToolbar && (
370
+ <div className="flex items-center justify-between gap-4 flex-none">
371
+ <div className="flex items-center gap-2 flex-1">
372
+ {searchable && (
373
+ <div className="relative max-w-sm flex-1">
374
+ <Search className="absolute left-2 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
375
+ <Input
376
+ placeholder="Search..."
377
+ value={searchQuery}
378
+ onChange={(e) => {
379
+ setSearchQuery(e.target.value);
380
+ setCurrentPage(1);
381
+ }}
382
+ className="pl-8"
383
+ />
384
+ </div>
385
+ )}
386
+ </div>
379
387
 
380
- {selectable && selectedRowIds.size > 0 && (
381
- <div className="text-sm text-muted-foreground">
382
- {selectedRowIds.size} selected
383
- </div>
384
- )}
388
+ <div className="flex items-center gap-2">
389
+ {exportable && (
390
+ <Button
391
+ variant="outline"
392
+ size="sm"
393
+ onClick={handleExport}
394
+ disabled={sortedData.length === 0}
395
+ >
396
+ <Download className="h-4 w-4 mr-2" />
397
+ Export CSV
398
+ </Button>
399
+ )}
400
+
401
+ {selectable && selectedRowIds.size > 0 && (
402
+ <div className="text-sm text-muted-foreground">
403
+ {selectedRowIds.size} selected
404
+ </div>
405
+ )}
406
+ </div>
385
407
  </div>
386
- </div>
408
+ )}
387
409
 
388
410
  {/* Table */}
389
- <div className="border rounded-lg">
411
+ <div className="rounded-md border flex-1 min-h-0 overflow-auto relative bg-background">
390
412
  <Table>
391
413
  {caption && <TableCaption>{caption}</TableCaption>}
392
- <TableHeader>
414
+ <TableHeader className="sticky top-0 bg-background z-10 shadow-sm">
393
415
  <TableRow>
394
416
  {selectable && (
395
- <TableHead className="w-12">
417
+ <TableHead className="w-12 bg-background">
396
418
  <Checkbox
397
419
  checked={allPageRowsSelected ? true : somePageRowsSelected ? 'indeterminate' : false}
398
420
  onCheckedChange={handleSelectAll}
@@ -407,7 +429,7 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
407
429
  return (
408
430
  <TableHead
409
431
  key={col.accessorKey}
410
- className={`${col.className || ''} ${sortable && col.sortable !== false ? 'cursor-pointer select-none' : ''} ${isDragging ? 'opacity-50' : ''} ${isDragOver ? 'border-l-2 border-primary' : ''} relative group`}
432
+ className={`${col.className || ''} ${sortable && col.sortable !== false ? 'cursor-pointer select-none' : ''} ${isDragging ? 'opacity-50' : ''} ${isDragOver ? 'border-l-2 border-primary' : ''} relative group bg-background`}
411
433
  style={{
412
434
  width: columnWidth,
413
435
  minWidth: columnWidth
@@ -439,7 +461,7 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
439
461
  );
440
462
  })}
441
463
  {rowActions && (
442
- <TableHead className="w-24 text-right">Actions</TableHead>
464
+ <TableHead className="w-24 text-right bg-background">Actions</TableHead>
443
465
  )}
444
466
  </TableRow>
445
467
  </TableHeader>
@@ -448,66 +470,97 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
448
470
  <TableRow>
449
471
  <TableCell
450
472
  colSpan={columns.length + (selectable ? 1 : 0) + (rowActions ? 1 : 0)}
451
- className="h-24 text-center text-muted-foreground"
473
+ className="h-96 text-center text-muted-foreground"
452
474
  >
453
- No data available
475
+ <div className="flex flex-col items-center justify-center gap-2">
476
+ <Search className="h-8 w-8 text-muted-foreground/50" />
477
+ <p>No results found</p>
478
+ <p className="text-xs text-muted-foreground/50">Try adjusting your filters or search query.</p>
479
+ </div>
454
480
  </TableCell>
455
481
  </TableRow>
456
482
  ) : (
457
- paginatedData.map((row, rowIndex) => {
458
- const globalIndex = (currentPage - 1) * pageSize + rowIndex;
459
- const rowId = getRowId(row, globalIndex);
460
- const isSelected = selectedRowIds.has(rowId);
461
-
462
- return (
463
- <TableRow key={rowId} data-state={isSelected ? 'selected' : undefined}>
464
- {selectable && (
465
- <TableCell>
466
- <Checkbox
467
- checked={isSelected}
468
- onCheckedChange={(checked) => handleSelectRow(rowId, checked as boolean)}
469
- />
470
- </TableCell>
471
- )}
472
- {columns.map((col, colIndex) => {
473
- const columnWidth = columnWidths[col.accessorKey] || col.width;
474
- return (
475
- <TableCell
476
- key={colIndex}
477
- className={col.cellClassName}
478
- style={{
479
- width: columnWidth,
480
- minWidth: columnWidth,
481
- maxWidth: columnWidth
482
- }}
483
- >
484
- {row[col.accessorKey]}
483
+ <>
484
+ {paginatedData.map((row, rowIndex) => {
485
+ const globalIndex = (currentPage - 1) * pageSize + rowIndex;
486
+ const rowId = getRowId(row, globalIndex);
487
+ const isSelected = selectedRowIds.has(rowId);
488
+
489
+ return (
490
+ <TableRow
491
+ key={rowId}
492
+ data-state={isSelected ? 'selected' : undefined}
493
+ className={cn(
494
+ // @ts-expect-error - onRowClick might not be in schema type definition
495
+ schema.onRowClick && "cursor-pointer"
496
+ )}
497
+ onClick={(e) => {
498
+ // @ts-expect-error - onRowClick might not be in schema type definition
499
+ if (schema.onRowClick && !e.defaultPrevented) {
500
+ // Simple heuristic to avoid triggering on interactive elements if they didn't stop propagation
501
+ const target = e.target as HTMLElement;
502
+ if (target.closest('button') || target.closest('[role="checkbox"]') || target.closest('a')) {
503
+ return;
504
+ }
505
+ // @ts-expect-error - onRowClick might not be in schema type definition
506
+ schema.onRowClick(row);
507
+ }
508
+ }}
509
+ >
510
+ {selectable && (
511
+ <TableCell>
512
+ <Checkbox
513
+ checked={isSelected}
514
+ onCheckedChange={(checked) => handleSelectRow(rowId, checked as boolean)}
515
+ />
485
516
  </TableCell>
486
- );
487
- })}
488
- {rowActions && (
489
- <TableCell className="text-right">
490
- <div className="flex items-center justify-end gap-1">
491
- <Button
492
- variant="ghost"
493
- size="icon-sm"
494
- onClick={() => schema.onRowEdit?.(row)}
495
- >
496
- <Edit className="h-4 w-4" />
497
- </Button>
498
- <Button
499
- variant="ghost"
500
- size="icon-sm"
501
- onClick={() => schema.onRowDelete?.(row)}
517
+ )}
518
+ {columns.map((col, colIndex) => {
519
+ const columnWidth = columnWidths[col.accessorKey] || col.width;
520
+ return (
521
+ <TableCell
522
+ key={colIndex}
523
+ className={col.cellClassName}
524
+ style={{
525
+ width: columnWidth,
526
+ minWidth: columnWidth,
527
+ maxWidth: columnWidth
528
+ }}
502
529
  >
503
- <Trash2 className="h-4 w-4 text-destructive" />
504
- </Button>
505
- </div>
506
- </TableCell>
507
- )}
530
+ {row[col.accessorKey]}
531
+ </TableCell>
532
+ );
533
+ })}
534
+ {rowActions && (
535
+ <TableCell className="text-right">
536
+ <div className="flex items-center justify-end gap-1">
537
+ <Button
538
+ variant="ghost"
539
+ size="icon-sm"
540
+ onClick={() => schema.onRowEdit?.(row)}
541
+ >
542
+ <Edit className="h-4 w-4" />
543
+ </Button>
544
+ <Button
545
+ variant="ghost"
546
+ size="icon-sm"
547
+ onClick={() => schema.onRowDelete?.(row)}
548
+ >
549
+ <Trash2 className="h-4 w-4 text-destructive" />
550
+ </Button>
551
+ </div>
552
+ </TableCell>
553
+ )}
554
+ </TableRow>
555
+ );
556
+ })}
557
+ {/* Filler rows to maintain height consistency */}
558
+ {paginatedData.length > 0 && Array.from({ length: Math.max(0, pageSize - paginatedData.length) }).map((_, i) => (
559
+ <TableRow key={`empty-${i}`} className="hover:bg-transparent">
560
+ <TableCell colSpan={columns.length + (selectable ? 1 : 0) + (rowActions ? 1 : 0)} className="h-[52px] p-0" />
508
561
  </TableRow>
509
- );
510
- })
562
+ ))}
563
+ </>
511
564
  )}
512
565
  </TableBody>
513
566
  </Table>
@@ -585,6 +638,7 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
585
638
 
586
639
  // Register the component
587
640
  ComponentRegistry.register('data-table', DataTableRenderer, {
641
+ namespace: 'ui',
588
642
  label: 'Data Table',
589
643
  icon: 'table',
590
644
  inputs: [
@@ -1,6 +1,14 @@
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
- import { FilterBuilder } from '../../ui/filter-builder';
11
+ import { FilterBuilder } from '../../custom/filter-builder';
4
12
 
5
13
  ComponentRegistry.register('filter-builder',
6
14
  ({ schema, className, onChange, ...props }: { schema: FilterBuilderSchema; className?: string; onChange?: (event: any) => void; [key: string]: any }) => {
@@ -31,6 +39,7 @@ ComponentRegistry.register('filter-builder',
31
39
  );
32
40
  },
33
41
  {
42
+ namespace: 'ui',
34
43
  label: 'Filter Builder',
35
44
  inputs: [
36
45
  { name: 'label', type: 'string', label: 'Label' },
@@ -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';
@@ -11,7 +19,7 @@ import { renderChildren } from '../../lib/utils';
11
19
  ComponentRegistry.register('resizable',
12
20
  ({ schema, className, ...props }: { schema: ResizableSchema; className?: string; [key: string]: any }) => (
13
21
  <ResizablePanelGroup
14
- direction={schema.direction || 'horizontal'}
22
+ orientation={(schema.direction || 'horizontal') as "horizontal" | "vertical"}
15
23
  className={className}
16
24
  {...props}
17
25
  style={{ minHeight: schema.minHeight || '200px' }}
@@ -27,6 +35,7 @@ ComponentRegistry.register('resizable',
27
35
  </ResizablePanelGroup>
28
36
  ),
29
37
  {
38
+ namespace: 'ui',
30
39
  label: 'Resizable Panel Group',
31
40
  inputs: [
32
41
  { name: 'direction', type: 'enum', enum: ['horizontal', 'vertical'], defaultValue: 'horizontal', label: 'Direction' },
@@ -1,29 +1,55 @@
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';
4
12
  import { renderChildren } from '../../lib/utils';
5
13
 
6
14
  ComponentRegistry.register('scroll-area',
7
- ({ schema, className, ...props }: { schema: ScrollAreaSchema; className?: string; [key: string]: any }) => (
8
- <ScrollArea className={className} style={{ height: schema.height, width: schema.width }} {...props}>
9
- {renderChildren(schema.content || schema.children)}
10
- {schema.orientation === 'horizontal' && <ScrollBar orientation="horizontal" />}
15
+ ({ schema, className, ...props }: { schema: ScrollAreaSchema; className?: string; [key: string]: any }) => {
16
+ // Extract designer-related props
17
+ const {
18
+ 'data-obj-id': dataObjId,
19
+ 'data-obj-type': dataObjType,
20
+ style,
21
+ ...scrollAreaProps
22
+ } = props;
23
+
24
+ const orientation = schema.orientation || 'vertical';
25
+
26
+ return (
27
+ <ScrollArea
28
+ className={className}
29
+ style={{ height: schema.height, width: schema.width, ...style }}
30
+ {...scrollAreaProps}
31
+ data-obj-id={dataObjId}
32
+ data-obj-type={dataObjType}
33
+ >
34
+ {renderChildren(schema.children)}
35
+ {(orientation === 'horizontal' || orientation === 'both') && <ScrollBar orientation="horizontal" />}
36
+ {(orientation === 'vertical' || orientation === 'both') && <ScrollBar orientation="vertical" />}
11
37
  </ScrollArea>
12
- ),
38
+ )},
13
39
  {
40
+ namespace: 'ui',
14
41
  label: 'Scroll Area',
15
42
  inputs: [
16
43
  { name: 'height', type: 'string', label: 'Height (e.g. 200px)' },
17
44
  { name: 'width', type: 'string', label: 'Width' },
18
45
  { name: 'orientation', type: 'enum', enum: ['vertical', 'horizontal', 'both'], defaultValue: 'vertical', label: 'Orientation' },
19
- { name: 'content', type: 'slot', label: 'Content' },
20
46
  { name: 'className', type: 'string', label: 'CSS Class' }
21
47
  ],
22
48
  defaultProps: {
23
49
  height: '200px',
24
50
  width: '100%',
25
51
  orientation: 'vertical',
26
- content: [
52
+ children: [
27
53
  { type: 'div', className: 'p-4', body: [{ type: 'text', content: 'Scrollable content goes here. Add more content to see scrolling behavior.' }] }
28
54
  ],
29
55
  className: 'rounded-md border'
@@ -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>
@@ -51,6 +59,7 @@ ComponentRegistry.register('table',
51
59
  </Table>
52
60
  ),
53
61
  {
62
+ namespace: 'ui',
54
63
  label: 'Table',
55
64
  inputs: [
56
65
  { name: 'caption', type: 'string', label: 'Caption' },
@@ -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';
@@ -15,6 +23,7 @@ ComponentRegistry.register('alert',
15
23
  </Alert>
16
24
  ),
17
25
  {
26
+ namespace: 'ui',
18
27
  label: 'Alert',
19
28
  inputs: [
20
29
  { name: 'title', type: 'string', label: 'Title', required: true },
@@ -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 {
@@ -14,6 +22,7 @@ ComponentRegistry.register('avatar',
14
22
  </Avatar>
15
23
  ),
16
24
  {
25
+ namespace: 'ui',
17
26
  label: 'Avatar',
18
27
  inputs: [
19
28
  { name: 'src', type: 'string', label: 'Image URL' },
@@ -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';
@@ -26,6 +34,7 @@ ComponentRegistry.register('badge',
26
34
  );
27
35
  },
28
36
  {
37
+ namespace: 'ui',
29
38
  label: 'Badge',
30
39
  inputs: [
31
40
  { name: 'label', type: 'string', label: 'Label' },
@@ -0,0 +1,60 @@
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
+ namespace: 'ui',
48
+ label: 'Breadcrumb',
49
+ inputs: [
50
+ { name: 'className', type: 'string', label: 'CSS Class' }
51
+ ],
52
+ defaultProps: {
53
+ items: [
54
+ { label: 'Home', href: '/' },
55
+ { label: 'Products', href: '/products' },
56
+ { label: 'Product' }
57
+ ]
58
+ }
59
+ }
60
+ );
@@ -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
+