@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,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 { SwitchSchema } from '@object-ui/types';
3
11
  import { Switch, Label } from '../../ui';
@@ -25,6 +33,7 @@ ComponentRegistry.register('switch',
25
33
  );
26
34
  },
27
35
  {
36
+ namespace: 'ui',
28
37
  label: 'Switch',
29
38
  inputs: [
30
39
  { name: 'label', type: 'string', label: 'Label', required: true },
@@ -1,45 +1,76 @@
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 { TextareaSchema } from '@object-ui/types';
3
11
  import { Textarea, Label } from '../../ui';
12
+ import { cn } from '../../lib/utils';
13
+ import React from 'react';
14
+
15
+ const TextareaRenderer = ({ schema, className, onChange, value, ...props }: { schema: TextareaSchema; className?: string; onChange?: (val: any) => void; value?: any; [key: string]: any }) => {
16
+ // Handle change for both raw inputs and form-bound inputs
17
+ const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
18
+ if (onChange) {
19
+ onChange(e.target.value);
20
+ }
21
+ };
22
+
23
+ // Extract designer-related props
24
+ const {
25
+ 'data-obj-id': dataObjId,
26
+ 'data-obj-type': dataObjType,
27
+ style,
28
+ ...inputProps
29
+ } = props;
4
30
 
5
- ComponentRegistry.register('textarea',
6
- ({ schema, className, ...props }: { schema: TextareaSchema; className?: string; [key: string]: any }) => {
7
- // Extract designer-related props
8
- const {
9
- 'data-obj-id': dataObjId,
10
- 'data-obj-type': dataObjType,
11
- style,
12
- ...inputProps
13
- } = props;
31
+ return (
32
+ <div
33
+ className={cn("grid w-full gap-1.5", schema.wrapperClass)}
34
+ data-obj-id={dataObjId}
35
+ data-obj-type={dataObjType}
36
+ style={style}
37
+ >
38
+ {schema.label && <Label htmlFor={schema.id} className={cn(schema.required && "text-destructive after:content-['*'] after:ml-0.5")}>{schema.label}</Label>}
39
+ <Textarea
40
+ id={schema.id}
41
+ name={schema.name}
42
+ placeholder={schema.placeholder}
43
+ className={className}
44
+ disabled={schema.disabled}
45
+ readOnly={schema.readOnly}
46
+ required={schema.required}
47
+ rows={schema.rows}
48
+ value={value ?? schema.value ?? ''}
49
+ defaultValue={value === undefined ? schema.defaultValue : undefined}
50
+ onChange={handleChange}
51
+ {...inputProps}
52
+ />
53
+ </div>
54
+ );
55
+ };
14
56
 
15
- return (
16
- <div
17
- className={`grid w-full gap-1.5 ${schema.wrapperClass || ''}`}
18
- data-obj-id={dataObjId}
19
- data-obj-type={dataObjType}
20
- style={style}
21
- >
22
- {schema.label && <Label htmlFor={schema.id}>{schema.label}</Label>}
23
- <Textarea
24
- id={schema.id}
25
- placeholder={schema.placeholder}
26
- className={className}
27
- {...inputProps}
28
- />
29
- </div>
30
- );
31
- },
57
+ ComponentRegistry.register('textarea', TextareaRenderer,
32
58
  {
59
+ namespace: 'ui',
33
60
  label: 'Textarea',
34
61
  inputs: [
35
62
  { name: 'label', type: 'string', label: 'Label' },
36
63
  { name: 'placeholder', type: 'string', label: 'Placeholder' },
64
+ { name: 'rows', type: 'number', label: 'Rows' },
65
+ { name: 'required', type: 'boolean', label: 'Required' },
66
+ { name: 'disabled', type: 'boolean', label: 'Disabled' },
37
67
  { name: 'id', type: 'string', label: 'ID', required: true }
38
68
  ],
39
69
  defaultProps: {
40
70
  label: 'Textarea label',
41
71
  placeholder: 'Enter text here...',
42
- id: 'textarea-field' // Will be made unique by designer's ensureNodeIds
72
+ rows: 3,
73
+ id: 'textarea-field'
43
74
  }
44
75
  }
45
76
  );
@@ -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 { ToggleSchema } from '@object-ui/types';
3
- import { Toggle, ToggleGroup, ToggleGroupItem } from '../../ui';
11
+ import { Toggle } from '../../ui';
4
12
  import { renderChildren } from '../../lib/utils';
5
13
 
6
14
  ComponentRegistry.register('toggle',
@@ -16,13 +24,14 @@ ComponentRegistry.register('toggle',
16
24
  </Toggle>
17
25
  ),
18
26
  {
27
+ namespace: 'ui',
19
28
  label: 'Toggle',
20
29
  inputs: [
21
30
  { name: 'label', type: 'string', label: 'Label' },
22
31
  { name: 'pressed', type: 'boolean', label: 'Pressed' },
23
32
  { name: 'variant', type: 'enum', enum: ['default', 'outline'], defaultValue: 'default', label: 'Variant' },
24
33
  { name: 'size', type: 'enum', enum: ['default', 'sm', 'lg'], defaultValue: 'default', label: 'Size' },
25
- { name: 'ariaLabel', type: 'string', label: 'Aria Label' }
34
+ { name: 'ariaLabel', type: 'string', label: 'Aria Label' }
26
35
  ],
27
36
  defaultProps: {
28
37
  label: 'Toggle',
@@ -31,46 +40,3 @@ ComponentRegistry.register('toggle',
31
40
  }
32
41
  }
33
42
  );
34
-
35
- ComponentRegistry.register('toggle-group',
36
- ({ schema, className, ...props }) => (
37
- <ToggleGroup
38
- type={schema.groupType || 'single'}
39
- variant={schema.variant}
40
- size={schema.size}
41
- className={className}
42
- {...props}
43
- >
44
- {schema.items?.map((item: any) => (
45
- <ToggleGroupItem key={item.value} value={item.value} aria-label={item.label}>
46
- {item.icon || item.label}
47
- </ToggleGroupItem>
48
- ))}
49
- </ToggleGroup>
50
- ),
51
- {
52
- label: 'Toggle Group',
53
- inputs: [
54
- { name: 'groupType', type: 'enum', enum: ['single', 'multiple'], defaultValue: 'single', label: 'Type' },
55
- { name: 'variant', type: 'enum', enum: ['default', 'outline'], defaultValue: 'default', label: 'Variant' },
56
- { name: 'size', type: 'enum', enum: ['default', 'sm', 'lg'], defaultValue: 'default', label: 'Size' },
57
- {
58
- name: 'items',
59
- type: 'array',
60
- label: 'Items',
61
- description: 'Array of {label, value, icon?} objects'
62
- },
63
- { name: 'className', type: 'string', label: 'CSS Class' }
64
- ],
65
- defaultProps: {
66
- groupType: 'single',
67
- variant: 'default',
68
- size: 'default',
69
- items: [
70
- { label: 'A', value: 'a' },
71
- { label: 'B', value: 'b' },
72
- { label: 'C', value: 'c' }
73
- ]
74
- }
75
- }
76
- );
@@ -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 './basic';
2
10
  import './form';
3
11
  import './layout';
@@ -0,0 +1,51 @@
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 { AspectRatioSchema } from '@object-ui/types';
11
+ import { AspectRatio } from '../../ui/aspect-ratio';
12
+ import { renderChildren } from '../../lib/utils';
13
+
14
+ ComponentRegistry.register('aspect-ratio',
15
+ ({ schema, ...props }: { schema: AspectRatioSchema; [key: string]: any }) => {
16
+ const {
17
+ 'data-obj-id': dataObjId,
18
+ 'data-obj-type': dataObjType,
19
+ style,
20
+ ...aspectRatioProps
21
+ } = props;
22
+
23
+ return (
24
+ <AspectRatio
25
+ ratio={schema.ratio || 16 / 9}
26
+ className={schema.className}
27
+ {...aspectRatioProps}
28
+ {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
29
+ >
30
+ {schema.image ? (
31
+ <img src={schema.image} alt={schema.alt || ''} className="rounded-md object-cover w-full h-full" />
32
+ ) : (
33
+ renderChildren(schema.children || schema.body)
34
+ )}
35
+ </AspectRatio>
36
+ );
37
+ },
38
+ {
39
+ namespace: 'ui',
40
+ label: 'Aspect Ratio',
41
+ inputs: [
42
+ { name: 'ratio', type: 'number', label: 'Ratio', defaultValue: 16/9 },
43
+ { name: 'image', type: 'string', label: 'Image URL' },
44
+ { name: 'alt', type: 'string', label: 'Alt Text' },
45
+ { name: 'className', type: 'string', label: 'CSS Class' }
46
+ ],
47
+ defaultProps: {
48
+ ratio: 16 / 9
49
+ }
50
+ }
51
+ );
@@ -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 { CardSchema } from '@object-ui/types';
3
- import { renderChildren } from '../../lib/utils';
11
+ import { renderChildren, cn } from '../../lib/utils';
4
12
  import {
5
13
  Card,
6
14
  CardHeader,
@@ -20,11 +28,18 @@ const CardRenderer = forwardRef<HTMLDivElement, { schema: CardSchema; className?
20
28
  style,
21
29
  ...cardProps
22
30
  } = props;
31
+
32
+ const isClickable = schema.clickable || !!props.onClick;
33
+ const isHoverable = schema.hoverable || isClickable;
23
34
 
24
35
  return (
25
36
  <Card
26
37
  ref={ref}
27
- className={className}
38
+ className={cn(
39
+ className,
40
+ isHoverable && "transition-colors hover:bg-muted/50",
41
+ isClickable && "cursor-pointer active:bg-muted"
42
+ )}
28
43
  {...cardProps}
29
44
  // Apply designer props
30
45
  {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
@@ -46,6 +61,7 @@ const CardRenderer = forwardRef<HTMLDivElement, { schema: CardSchema; className?
46
61
  ComponentRegistry.register('card',
47
62
  CardRenderer,
48
63
  {
64
+ namespace: 'ui',
49
65
  label: 'Card',
50
66
  inputs: [
51
67
  { name: 'title', type: 'string', label: 'Title' },
@@ -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 { ContainerSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -28,19 +36,19 @@ const ContainerRenderer = forwardRef<HTMLDivElement, { schema: ContainerSchema;
28
36
  maxWidth === 'screen' && 'max-w-screen-2xl',
29
37
  // Centering
30
38
  centered && 'mx-auto',
31
- // Padding
39
+ // Padding - Mobile-first responsive
32
40
  padding === 0 && 'p-0',
33
- padding === 1 && 'p-1',
34
- padding === 2 && 'p-2',
35
- padding === 3 && 'p-3',
36
- padding === 4 && 'p-4',
37
- padding === 5 && 'p-5',
38
- padding === 6 && 'p-6',
39
- padding === 7 && 'p-7',
40
- padding === 8 && 'p-8',
41
- padding === 10 && 'p-10',
42
- padding === 12 && 'p-12',
43
- padding === 16 && 'p-16',
41
+ padding === 1 && 'p-0.5 sm:p-1',
42
+ padding === 2 && 'p-1 sm:p-2',
43
+ padding === 3 && 'p-2 sm:p-3',
44
+ padding === 4 && 'p-2 sm:p-3 md:p-4',
45
+ padding === 5 && 'p-3 sm:p-4 md:p-5',
46
+ padding === 6 && 'p-3 sm:p-4 md:p-6',
47
+ padding === 7 && 'p-4 sm:p-5 md:p-7',
48
+ padding === 8 && 'p-4 sm:p-6 md:p-8',
49
+ padding === 10 && 'p-5 sm:p-7 md:p-10',
50
+ padding === 12 && 'p-6 sm:p-8 md:p-12',
51
+ padding === 16 && 'p-8 sm:p-10 md:p-16',
44
52
  className
45
53
  );
46
54
 
@@ -69,6 +77,7 @@ const ContainerRenderer = forwardRef<HTMLDivElement, { schema: ContainerSchema;
69
77
  ComponentRegistry.register('container',
70
78
  ContainerRenderer,
71
79
  {
80
+ namespace: 'ui',
72
81
  label: 'Container',
73
82
  inputs: [
74
83
  {
@@ -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 { FlexSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -31,16 +39,16 @@ ComponentRegistry.register('flex',
31
39
  align === 'center' && 'items-center',
32
40
  align === 'baseline' && 'items-baseline',
33
41
  align === 'stretch' && 'items-stretch',
34
- // Gap
42
+ // Gap - Mobile-first responsive
35
43
  gap === 0 && 'gap-0',
36
44
  gap === 1 && 'gap-1',
37
- gap === 2 && 'gap-2',
38
- gap === 3 && 'gap-3',
39
- gap === 4 && 'gap-4',
40
- gap === 5 && 'gap-5',
41
- gap === 6 && 'gap-6',
42
- gap === 7 && 'gap-7',
43
- gap === 8 && 'gap-8',
45
+ gap === 2 && 'gap-1.5 sm:gap-2',
46
+ gap === 3 && 'gap-2 sm:gap-3',
47
+ gap === 4 && 'gap-2 sm:gap-3 md:gap-4',
48
+ gap === 5 && 'gap-3 sm:gap-4 md:gap-5',
49
+ gap === 6 && 'gap-3 sm:gap-4 md:gap-6',
50
+ gap === 7 && 'gap-4 sm:gap-5 md:gap-7',
51
+ gap === 8 && 'gap-4 sm:gap-6 md:gap-8',
44
52
  // Wrap
45
53
  wrap && 'flex-wrap',
46
54
  className
@@ -68,6 +76,7 @@ ComponentRegistry.register('flex',
68
76
  );
69
77
  },
70
78
  {
79
+ namespace: 'ui',
71
80
  label: 'Flex Layout',
72
81
  inputs: [
73
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 { GridSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -42,13 +50,27 @@ const GAPS: Record<number, string> = {
42
50
  ComponentRegistry.register('grid',
43
51
  ({ schema, className, ...props }: { schema: GridSchema & { smColumns?: number, mdColumns?: number, lgColumns?: number, xlColumns?: number }; className?: string; [key: string]: any }) => {
44
52
  // Determine columns configuration
45
- // Supports direct number or responsive object logic if schema allows,
46
- // but here we primarily handle the flat properties supported by the designer inputs
47
- const baseCols = typeof schema.columns === 'number' ? schema.columns : 2;
48
- const smCols = schema.smColumns;
49
- const mdCols = schema.mdColumns;
50
- const lgCols = schema.lgColumns;
51
- const xlCols = schema.xlColumns;
53
+ // Supports detailed object configuration from schema
54
+ let baseCols = 2;
55
+ let smCols, mdCols, lgCols, xlCols;
56
+
57
+ if (typeof schema.columns === 'number') {
58
+ baseCols = schema.columns;
59
+ } else if (typeof schema.columns === 'object' && schema.columns !== null) {
60
+ // Handle responsive object: { xs: 1, sm: 2, md: 3, lg: 4 }
61
+ // Note: 'xs' corresponds to base (mobile-first)
62
+ baseCols = schema.columns.xs ?? 1;
63
+ smCols = schema.columns.sm;
64
+ mdCols = schema.columns.md;
65
+ lgCols = schema.columns.lg;
66
+ xlCols = schema.columns.xl;
67
+ }
68
+
69
+ // Fallback to legacy flat props if provided (from designer)
70
+ if (schema.smColumns) smCols = schema.smColumns;
71
+ if (schema.mdColumns) mdCols = schema.mdColumns;
72
+ if (schema.lgColumns) lgCols = schema.lgColumns;
73
+ if (schema.xlColumns) xlCols = schema.xlColumns;
52
74
 
53
75
  const gap = schema.gap ?? 4;
54
76
 
@@ -63,7 +85,7 @@ ComponentRegistry.register('grid',
63
85
  lgCols && GRID_COLS_LG[lgCols],
64
86
  xlCols && GRID_COLS_XL[xlCols],
65
87
  // Gap
66
- GAPS[gap] || 'gap-4',
88
+ GAPS[gap] || `gap-[${gap * 0.25}rem]`, // Fallback for arbitrary values if not in map
67
89
  className
68
90
  );
69
91
 
@@ -89,6 +111,7 @@ ComponentRegistry.register('grid',
89
111
  );
90
112
  },
91
113
  {
114
+ namespace: 'ui',
92
115
  label: 'Grid Layout',
93
116
  inputs: [
94
117
  {
@@ -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 './card';
2
10
  import './tabs';
3
11
  import './grid';
@@ -6,5 +14,6 @@ import './stack';
6
14
  import './container';
7
15
  import './page';
8
16
  import './semantic';
17
+ import './aspect-ratio';
9
18
 
10
19
 
@@ -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 { PageSchema } from '@object-ui/types';
3
11
  import { SchemaRenderer } from '@object-ui/react';
@@ -9,9 +17,18 @@ export const PageRenderer: React.FC<{ schema: PageSchema; className?: string; [k
9
17
  className,
10
18
  ...props
11
19
  }) => {
12
- // Support both body (legacy/playground) and children
13
- const content = schema.body || schema.children;
14
- const nodes = Array.isArray(content) ? content : (content ? [content] : []);
20
+ // Support regions (spec compliant), body (legacy), and children
21
+ let nodes: any[] = [];
22
+
23
+ if (schema.regions && schema.regions.length > 0) {
24
+ // If regions are present, flatten their components into the main flow
25
+ // Ideally, we might want a grid layout here, but linear stacking works for simple single-region pages
26
+ nodes = schema.regions.flatMap(r => r.components || []);
27
+ } else {
28
+ // Fallback to direct children/body
29
+ const content = schema.body || schema.children;
30
+ nodes = Array.isArray(content) ? content : (content ? [content] : []);
31
+ }
15
32
 
16
33
  // Extract designer-related props
17
34
  const {
@@ -23,7 +40,7 @@ export const PageRenderer: React.FC<{ schema: PageSchema; className?: string; [k
23
40
 
24
41
  return (
25
42
  <div
26
- className={cn("min-h-full w-full bg-background p-6 md:p-8", className)}
43
+ className={cn("min-h-full w-full bg-background p-4 md:p-6 lg:p-8", className)}
27
44
  {...pageProps}
28
45
  // Apply designer props
29
46
  data-obj-id={dataObjId}
@@ -60,23 +77,26 @@ export const PageRenderer: React.FC<{ schema: PageSchema; className?: string; [k
60
77
  );
61
78
  };
62
79
 
63
- ComponentRegistry.register(
64
- 'page',
65
- PageRenderer,
66
- {
67
- label: 'Page',
68
- icon: 'Layout',
69
- category: 'layout',
70
- inputs: [
71
- { name: 'title', type: 'string', label: 'Title' },
72
- { name: 'description', type: 'string', label: 'Description' },
73
- {
74
- name: 'body',
75
- type: 'array',
76
- label: 'Content',
77
- // @ts-expect-error - itemType is experimental/extended metadata
78
- itemType: 'component'
79
- }
80
- ]
81
- }
82
- );
80
+ const pageMeta: any = {
81
+ namespace: 'ui',
82
+ label: 'Page',
83
+ icon: 'Layout',
84
+ category: 'layout',
85
+ inputs: [
86
+ { name: 'title', type: 'string', label: 'Title' },
87
+ { name: 'description', type: 'string', label: 'Description' },
88
+ {
89
+ name: 'body',
90
+ type: 'array',
91
+ label: 'Content',
92
+ itemType: 'component'
93
+ }
94
+ ]
95
+ };
96
+
97
+ ComponentRegistry.register('page', PageRenderer, pageMeta);
98
+ ComponentRegistry.register('app', PageRenderer, { ...pageMeta, label: 'App Page' });
99
+ ComponentRegistry.register('utility', PageRenderer, { ...pageMeta, label: 'Utility Page' });
100
+ ComponentRegistry.register('home', PageRenderer, { ...pageMeta, label: 'Home Page' });
101
+ ComponentRegistry.register('record', PageRenderer, { ...pageMeta, label: 'Record Page' });
102
+
@@ -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 { renderChildren } from '../../lib/utils';
3
11
  import { forwardRef } from 'react';
@@ -30,6 +38,7 @@ tags.forEach(tag => {
30
38
  Component.displayName = `Semantic${tag.charAt(0).toUpperCase() + tag.slice(1)}`;
31
39
 
32
40
  ComponentRegistry.register(tag, Component, {
41
+ namespace: 'ui',
33
42
  label: tag.charAt(0).toUpperCase() + tag.slice(1),
34
43
  category: 'layout',
35
44
  inputs: [
@@ -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 { StackSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -11,7 +19,7 @@ const StackRenderer = forwardRef<HTMLDivElement, { schema: StackSchema; classNam
11
19
  const direction = schema.direction || 'col';
12
20
  const justify = schema.justify || 'start';
13
21
  const align = schema.align || 'stretch'; // Stack items usually stretch
14
- const gap = schema.gap || 2;
22
+ const gap = schema.gap ?? (schema as any).spacing ?? 2;
15
23
  const wrap = schema.wrap || false;
16
24
 
17
25
  const stackClass = cn(
@@ -34,16 +42,16 @@ const StackRenderer = forwardRef<HTMLDivElement, { schema: StackSchema; classNam
34
42
  align === 'center' && 'items-center',
35
43
  align === 'baseline' && 'items-baseline',
36
44
  align === 'stretch' && 'items-stretch',
37
- // Gap
45
+ // Gap - Mobile-first responsive
38
46
  gap === 0 && 'gap-0',
39
47
  gap === 1 && 'gap-1',
40
- gap === 2 && 'gap-2',
41
- gap === 3 && 'gap-3',
42
- gap === 4 && 'gap-4',
43
- gap === 5 && 'gap-5',
44
- gap === 6 && 'gap-6',
45
- gap === 8 && 'gap-8',
46
- gap === 10 && 'gap-10',
48
+ gap === 2 && 'gap-1.5 sm:gap-2',
49
+ gap === 3 && 'gap-2 sm:gap-3',
50
+ gap === 4 && 'gap-2 sm:gap-3 md:gap-4',
51
+ gap === 5 && 'gap-3 sm:gap-4 md:gap-5',
52
+ gap === 6 && 'gap-3 sm:gap-4 md:gap-6',
53
+ gap === 8 && 'gap-4 sm:gap-6 md:gap-8',
54
+ gap === 10 && 'gap-5 sm:gap-7 md:gap-10',
47
55
  // Wrap
48
56
  wrap && 'flex-wrap',
49
57
  className
@@ -74,6 +82,7 @@ const StackRenderer = forwardRef<HTMLDivElement, { schema: StackSchema; classNam
74
82
  ComponentRegistry.register('stack',
75
83
  StackRenderer,
76
84
  {
85
+ namespace: 'ui',
77
86
  label: 'Stack',
78
87
  inputs: [
79
88
  {