@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 { TabsSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -7,39 +15,65 @@ import {
7
15
  TabsTrigger,
8
16
  TabsContent
9
17
  } from '../../ui';
18
+ import { cn } from '../../lib/utils';
19
+ import React from 'react';
20
+
21
+ const TabsRenderer = ({ schema, className, onChange, value, ...props }: { schema: TabsSchema; className?: string; onChange?: (val: string) => void; value?: string; [key: string]: any }) => {
22
+ // Extract designer-related props
23
+ const {
24
+ 'data-obj-id': dataObjId,
25
+ 'data-obj-type': dataObjType,
26
+ style,
27
+ ...tabsProps
28
+ } = props;
10
29
 
11
- ComponentRegistry.register('tabs',
12
- ({ schema, className, ...props }: { schema: TabsSchema; className?: string; [key: string]: any }) => {
13
- // Extract designer-related props
14
- const {
15
- 'data-obj-id': dataObjId,
16
- 'data-obj-type': dataObjType,
17
- style,
18
- ...tabsProps
19
- } = props;
30
+ const handleValueChange = (val: string) => {
31
+ if (onChange) {
32
+ onChange(val);
33
+ }
34
+ };
20
35
 
21
- return (
36
+ const isVertical = schema.orientation === 'vertical';
37
+
38
+ return (
22
39
  <Tabs
23
- defaultValue={schema.defaultValue}
24
- className={className}
40
+ defaultValue={value === undefined ? schema.defaultValue : undefined}
41
+ value={value ?? schema.value}
42
+ onValueChange={handleValueChange}
43
+ orientation={schema.orientation || 'horizontal'}
44
+ className={cn(className, isVertical && "flex gap-2")}
25
45
  {...tabsProps}
26
46
  // Apply designer props
27
47
  {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
28
48
  >
29
- <TabsList>
49
+ <TabsList className={cn(isVertical && "flex-col h-auto items-stretch bg-muted/50 p-1")}>
30
50
  {schema.items?.map((item) => (
31
- <TabsTrigger key={item.value} value={item.value}>{item.label}</TabsTrigger>
51
+ <TabsTrigger
52
+ key={item.value}
53
+ value={item.value}
54
+ disabled={item.disabled}
55
+ className={cn(isVertical && "justify-start")}
56
+ >
57
+ {item.label}
58
+ </TabsTrigger>
32
59
  ))}
33
60
  </TabsList>
34
61
  {schema.items?.map((item) => (
35
- <TabsContent key={item.value} value={item.value}>
36
- {renderChildren((item as any).body)}
62
+ <TabsContent
63
+ key={item.value}
64
+ value={item.value}
65
+ className={cn("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2", isVertical && "mt-0 flex-1")}
66
+ >
67
+ {renderChildren(item.content || (item as any).body)}
37
68
  </TabsContent>
38
69
  ))}
39
70
  </Tabs>
40
71
  );
41
- },
72
+ };
73
+
74
+ ComponentRegistry.register('tabs', TabsRenderer,
42
75
  {
76
+ namespace: 'ui',
43
77
  label: 'Tabs',
44
78
  inputs: [
45
79
  { name: 'defaultValue', type: 'string', label: 'Default Value', 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 React from 'react';
2
10
  import { ComponentRegistry } from '@object-ui/core';
3
11
  import type { HeaderBarSchema } from '@object-ui/types';
@@ -14,7 +22,7 @@ import {
14
22
 
15
23
  ComponentRegistry.register('header-bar',
16
24
  ({ schema }: { schema: HeaderBarSchema }) => (
17
- <header className="flex h-16 shrink-0 items-center gap-2 border-b px-4">
25
+ <header className="flex h-14 sm:h-16 shrink-0 items-center gap-2 border-b px-3 sm:px-4">
18
26
  <SidebarTrigger />
19
27
  <Separator orientation="vertical" className="mr-2 h-4" />
20
28
  <Breadcrumb>
@@ -36,6 +44,7 @@ ComponentRegistry.register('header-bar',
36
44
  </header>
37
45
  ),
38
46
  {
47
+ namespace: 'ui',
39
48
  label: 'Header Bar',
40
49
  inputs: [
41
50
  { name: 'crumbs', type: 'array', label: 'Breadcrumbs' }
@@ -1,2 +1,10 @@
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 './sidebar';
2
10
  import './header-bar';
@@ -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 { SidebarSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -22,6 +30,7 @@ ComponentRegistry.register('sidebar-provider',
22
30
  <SidebarProvider {...props}>{renderChildren(schema.body)}</SidebarProvider>
23
31
  ),
24
32
  {
33
+ namespace: 'ui',
25
34
  label: 'Sidebar Provider',
26
35
  inputs: [
27
36
  { name: 'defaultOpen', type: 'boolean', label: 'Default Open', defaultValue: true }
@@ -41,6 +50,7 @@ ComponentRegistry.register('sidebar',
41
50
  <Sidebar {...props}>{renderChildren(schema.body)}</Sidebar>
42
51
  ),
43
52
  {
53
+ namespace: 'ui',
44
54
  label: 'Sidebar',
45
55
  inputs: [
46
56
  { name: 'collapsible', type: 'enum', enum: ['offcanvas', 'icon', 'none'], defaultValue: 'icon', label: 'Collapsible' },
@@ -94,6 +104,7 @@ ComponentRegistry.register('sidebar-group',
94
104
  </SidebarGroup>
95
105
  ),
96
106
  {
107
+ namespace: 'ui',
97
108
  label: 'Sidebar Group',
98
109
  inputs: [
99
110
  { name: 'label', type: 'string', label: 'Label' }
@@ -139,6 +150,7 @@ ComponentRegistry.register('sidebar-menu-button',
139
150
  </SidebarMenuButton>
140
151
  ),
141
152
  {
153
+ namespace: 'ui',
142
154
  label: 'Sidebar Menu Button',
143
155
  inputs: [
144
156
  { name: 'active', type: 'boolean', label: 'Active', defaultValue: false },
@@ -183,6 +195,7 @@ ComponentRegistry.register('sidebar-trigger',
183
195
  <SidebarTrigger className={className} {...props} />
184
196
  ),
185
197
  {
198
+ namespace: 'ui',
186
199
  label: 'Sidebar Trigger',
187
200
  inputs: [{ name: 'className', type: 'string', label: 'CSS Class' }]
188
201
  }
@@ -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 { AlertDialogSchema } from '@object-ui/types';
3
11
  import {
@@ -33,6 +41,7 @@ ComponentRegistry.register('alert-dialog',
33
41
  </AlertDialog>
34
42
  ),
35
43
  {
44
+ namespace: 'ui',
36
45
  label: 'Alert Dialog',
37
46
  inputs: [
38
47
  { 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 { ContextMenuSchema } from '@object-ui/types';
3
11
  import {
@@ -45,7 +53,7 @@ const renderContextMenuItems = (items: any[]) => {
45
53
  ComponentRegistry.register('context-menu',
46
54
  ({ schema, className, ...props }: { schema: ContextMenuSchema; className?: string; [key: string]: any }) => {
47
55
  // Determine classes
48
- const triggerClass = schema.triggerClassName || className || (schema.className as string) || "h-[150px] w-[300px] border border-dashed text-sm flex items-center justify-center";
56
+ const triggerClass = schema.triggerClassName || className || (schema.className as string) || "h-[120px] w-full sm:h-[150px] sm:w-[300px] border border-dashed text-sm flex items-center justify-center";
49
57
  const contentClass = schema.contentClassName;
50
58
 
51
59
  return (
@@ -62,6 +70,7 @@ ComponentRegistry.register('context-menu',
62
70
  </ContextMenu>
63
71
  )},
64
72
  {
73
+ namespace: 'ui',
65
74
  label: 'Context Menu',
66
75
  inputs: [
67
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 { ComponentRegistry } from '@object-ui/core';
2
10
  import type { DialogSchema } from '@object-ui/types';
3
11
  import {
@@ -32,6 +40,7 @@ ComponentRegistry.register('dialog',
32
40
  </Dialog>
33
41
  ),
34
42
  {
43
+ namespace: 'ui',
35
44
  label: 'Dialog',
36
45
  inputs: [
37
46
  { 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 { DrawerSchema } from '@object-ui/types';
3
11
  import {
@@ -34,6 +42,7 @@ ComponentRegistry.register('drawer',
34
42
  </Drawer>
35
43
  ),
36
44
  {
45
+ namespace: 'ui',
37
46
  label: 'Drawer',
38
47
  inputs: [
39
48
  { 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 { DropdownMenuSchema } from '@object-ui/types';
3
11
  import {
@@ -57,6 +65,7 @@ ComponentRegistry.register('dropdown-menu',
57
65
  </DropdownMenu>
58
66
  ),
59
67
  {
68
+ namespace: 'ui',
60
69
  label: 'Dropdown Menu',
61
70
  inputs: [
62
71
  { name: 'label', type: 'string', label: 'Menu Label' },
@@ -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 { HoverCardSchema } from '@object-ui/types';
3
11
  import {
@@ -19,6 +27,7 @@ ComponentRegistry.register('hover-card',
19
27
  </HoverCard>
20
28
  ),
21
29
  {
30
+ namespace: 'ui',
22
31
  label: 'Hover Card',
23
32
  inputs: [
24
33
  { name: 'openDelay', type: 'number', label: 'Open Delay' },
@@ -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 './dialog';
2
10
  import './sheet';
3
11
  import './popover';
@@ -7,3 +15,4 @@ import './drawer';
7
15
  import './hover-card';
8
16
  import './dropdown-menu';
9
17
  import './context-menu';
18
+ import './menubar';
@@ -0,0 +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
+
9
+ import { ComponentRegistry } from '@object-ui/core';
10
+ import type { MenubarSchema } from '@object-ui/types';
11
+ import { Menubar, MenubarMenu, MenubarTrigger, MenubarContent, MenubarItem, MenubarSeparator, MenubarSub, MenubarSubTrigger, MenubarSubContent } from '../../ui/menubar';
12
+
13
+ ComponentRegistry.register('menubar',
14
+ ({ schema, ...props }: { schema: MenubarSchema; [key: string]: any }) => {
15
+ const {
16
+ 'data-obj-id': dataObjId,
17
+ 'data-obj-type': dataObjType,
18
+ style,
19
+ ...menubarProps
20
+ } = props;
21
+
22
+ return (
23
+ <Menubar
24
+ className={schema.className}
25
+ {...menubarProps}
26
+ {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
27
+ >
28
+ {schema.menus?.map((menu, idx) => (
29
+ <MenubarMenu key={idx}>
30
+ <MenubarTrigger>{menu.label}</MenubarTrigger>
31
+ <MenubarContent>
32
+ {menu.items?.map((item, itemIdx) => (
33
+ item.separator ? (
34
+ <MenubarSeparator key={itemIdx} />
35
+ ) : item.children ? (
36
+ <MenubarSub key={itemIdx}>
37
+ <MenubarSubTrigger>{item.label}</MenubarSubTrigger>
38
+ <MenubarSubContent>
39
+ {item.children.map((child, childIdx) => (
40
+ <MenubarItem key={childIdx}>{child.label}</MenubarItem>
41
+ ))}
42
+ </MenubarSubContent>
43
+ </MenubarSub>
44
+ ) : (
45
+ <MenubarItem key={itemIdx} disabled={item.disabled}>
46
+ {item.label}
47
+ </MenubarItem>
48
+ )
49
+ ))}
50
+ </MenubarContent>
51
+ </MenubarMenu>
52
+ ))}
53
+ </Menubar>
54
+ );
55
+ },
56
+ {
57
+ namespace: 'ui',
58
+ label: 'Menubar',
59
+ inputs: [
60
+ { name: 'className', type: 'string', label: 'CSS Class' }
61
+ ],
62
+ defaultProps: {
63
+ menus: [
64
+ {
65
+ label: 'File',
66
+ items: [
67
+ { label: 'New' },
68
+ { label: 'Open' },
69
+ { separator: true },
70
+ { label: 'Exit' }
71
+ ]
72
+ }
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 { ComponentRegistry } from '@object-ui/core';
2
10
  import type { PopoverSchema } from '@object-ui/types';
3
11
  import {
@@ -19,6 +27,7 @@ ComponentRegistry.register('popover',
19
27
  </Popover>
20
28
  ),
21
29
  {
30
+ namespace: 'ui',
22
31
  label: 'Popover',
23
32
  inputs: [
24
33
  { name: 'modal', type: 'boolean', label: 'Modal' },
@@ -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 { SheetSchema } from '@object-ui/types';
3
11
  import {
@@ -32,6 +40,7 @@ ComponentRegistry.register('sheet',
32
40
  </Sheet>
33
41
  ),
34
42
  {
43
+ namespace: 'ui',
35
44
  label: 'Sheet',
36
45
  inputs: [
37
46
  { 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 { TooltipSchema } from '@object-ui/types';
3
11
  import {
@@ -26,6 +34,7 @@ ComponentRegistry.register('tooltip',
26
34
  </TooltipProvider>
27
35
  ),
28
36
  {
37
+ namespace: 'ui',
29
38
  label: 'Tooltip',
30
39
  inputs: [
31
40
  { name: 'delayDuration', type: 'number', label: 'Delay Duration', defaultValue: 700 },
@@ -0,0 +1,107 @@
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 React from 'react';
10
+ import { ComponentRegistry } from '@object-ui/core';
11
+ import { cn } from '../lib/utils';
12
+ import { Box, FileQuestion } from 'lucide-react';
13
+
14
+ export const PlaceholderRenderer = ({ schema, className }: any) => {
15
+ const type = schema.type;
16
+ const isView = type.startsWith('view:');
17
+ const isWidget = type.startsWith('widget:');
18
+ const isField = type.startsWith('field:');
19
+
20
+ return (
21
+ <div className={cn(
22
+ "flex flex-col items-center justify-center p-6 border-2 border-dashed rounded-lg bg-muted/30 transition-colors hover:bg-muted/50",
23
+ isView && "border-blue-300 bg-blue-50/50 min-h-[200px]",
24
+ isWidget && "border-purple-300 bg-purple-50/50 min-h-[150px]",
25
+ isField && "border-yellow-300 bg-yellow-50/50 p-2 min-h-[40px] flex-row gap-2 justify-start",
26
+ className
27
+ )}>
28
+ <div className={cn("flex items-center gap-2 text-muted-foreground", isField && "text-sm")}>
29
+ {isField ? <Box className="h-4 w-4" /> : <FileQuestion className="h-8 w-8 mb-2 opacity-50" />}
30
+ <div className="flex flex-col items-center text-center">
31
+ <span className="font-mono font-medium text-foreground">{type}</span>
32
+ {!isField && <span className="text-xs">Component Placeholder</span>}
33
+ </div>
34
+ </div>
35
+ {schema.props && !isField && (
36
+ <div className="mt-4 w-full text-xs text-muted-foreground bg-background/50 p-2 rounded overflow-hidden">
37
+ <div className="opacity-70">Properties:</div>
38
+ <pre className="mt-1 truncate">{JSON.stringify(schema.props, null, 0)}</pre>
39
+ </div>
40
+ )}
41
+ </div>
42
+ );
43
+ };
44
+
45
+ // List of all protocol-defined components that need placeholders
46
+ const PROTOCOL_COMPONENTS = [
47
+ // 1. Views (List)
48
+ 'view:grid', 'view:kanban', 'view:map', 'view:calendar', 'view:gantt',
49
+ 'view:timeline', 'view:gallery',
50
+
51
+ // 2. Views (Form)
52
+ 'view:simple', 'view:wizard', 'view:tabbed', 'view:drawer', 'view:modal', 'view:split',
53
+
54
+ // 3. Fields (Textual)
55
+ 'field:text', 'field:textarea', 'field:password', 'field:email', 'field:url', 'field:phone',
56
+
57
+ // 4. Fields (Rich)
58
+ 'field:markdown', 'field:html', 'field:code',
59
+
60
+ // 5. Fields (Numeric)
61
+ 'field:number', 'field:currency', 'field:percent', 'field:slider',
62
+
63
+ // 6. Fields (Selection)
64
+ 'field:boolean', 'field:checkboxes', 'field:select', 'field:multiselect', 'field:radio',
65
+
66
+ // 7. Fields (Date/Time)
67
+ 'field:date', 'field:datetime', 'field:time', 'field:duration',
68
+
69
+ // 8. Fields (Relational)
70
+ 'field:lookup', 'field:master_detail', 'field:tree',
71
+
72
+ // 9. Fields (Media)
73
+ 'field:image', 'field:file', 'field:video', 'field:audio', 'field:avatar',
74
+
75
+ // 10. Fields (Visual)
76
+ 'field:color', 'field:rating', 'field:signature', 'field:qrcode', 'field:progress',
77
+
78
+ // 11. Fields (Structure)
79
+ 'field:json', 'field:address', 'field:location',
80
+
81
+ // 12. Page Components
82
+ 'page:header', 'page-header', // Added headers
83
+ 'page:footer', 'page:tabs', 'page:accordion', 'page:card', 'page:sidebar',
84
+ 'record:details', 'record:highlights', 'record:related_list', 'record:activity',
85
+ 'record:chatter', 'record:path',
86
+ 'app:launcher', 'nav:menu', 'nav:breadcrumb',
87
+ 'global:search', 'global:notifications', 'user:profile',
88
+
89
+ // 13. Dashboard Widgets
90
+ 'widget:metric', 'widget:bar', 'widget:line', 'widget:pie', 'widget:funnel',
91
+ 'widget:radar', 'widget:scatter', 'widget:heatmap', 'widget:pivot', 'widget:table', 'widget:text', 'widget:image',
92
+
93
+ // 14. Smart Actions
94
+ 'action:button', 'action:group', 'action:menu', 'action:icon',
95
+
96
+ // 15. AI
97
+ 'ai:chat_window', 'ai:input', 'ai:suggestion', 'ai:feedback'
98
+ ];
99
+
100
+ export function registerPlaceholders() {
101
+ PROTOCOL_COMPONENTS.forEach(type => {
102
+ // Only register if not already registered (to avoid overwriting real implementations)
103
+ if (!ComponentRegistry.get(type)) {
104
+ ComponentRegistry.register(type, PlaceholderRenderer);
105
+ }
106
+ });
107
+ }