@object-ui/components 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/ISSUES_FOUND.md +128 -0
  3. package/README.md +19 -1
  4. package/README_SHADCN_SYNC.md +281 -0
  5. package/TESTING.md +335 -0
  6. package/dist/index.css +1 -1
  7. package/dist/index.js +30981 -30027
  8. package/dist/index.umd.cjs +30 -39
  9. package/dist/src/hooks/use-mobile.d.ts +7 -0
  10. package/dist/src/index.d.ts +4 -1
  11. package/dist/src/renderers/basic/button-group.d.ts +8 -0
  12. package/dist/src/renderers/basic/div.d.ts +7 -0
  13. package/dist/src/renderers/basic/html.d.ts +7 -0
  14. package/dist/src/renderers/basic/icon.d.ts +7 -0
  15. package/dist/src/renderers/basic/image.d.ts +7 -0
  16. package/dist/src/renderers/basic/navigation-menu.d.ts +8 -0
  17. package/dist/src/renderers/basic/pagination.d.ts +8 -0
  18. package/dist/src/renderers/basic/separator.d.ts +7 -0
  19. package/dist/src/renderers/basic/span.d.ts +7 -0
  20. package/dist/src/renderers/basic/text.d.ts +7 -0
  21. package/dist/src/renderers/complex/carousel.d.ts +7 -0
  22. package/dist/src/renderers/complex/data-table.d.ts +7 -0
  23. package/dist/src/renderers/complex/filter-builder.d.ts +7 -0
  24. package/dist/src/renderers/complex/resizable.d.ts +7 -0
  25. package/dist/src/renderers/complex/scroll-area.d.ts +7 -0
  26. package/dist/src/renderers/complex/table.d.ts +7 -0
  27. package/dist/src/renderers/data-display/alert.d.ts +7 -0
  28. package/dist/src/renderers/data-display/avatar.d.ts +7 -0
  29. package/dist/src/renderers/data-display/badge.d.ts +7 -0
  30. package/dist/src/renderers/data-display/breadcrumb.d.ts +8 -0
  31. package/dist/src/renderers/data-display/kbd.d.ts +8 -0
  32. package/dist/src/renderers/data-display/list.d.ts +7 -0
  33. package/dist/src/renderers/data-display/statistic.d.ts +7 -0
  34. package/dist/src/renderers/data-display/table.d.ts +8 -0
  35. package/dist/src/renderers/data-display/tree-view.d.ts +7 -0
  36. package/dist/src/renderers/disclosure/accordion.d.ts +7 -0
  37. package/dist/src/renderers/disclosure/collapsible.d.ts +7 -0
  38. package/dist/src/renderers/disclosure/toggle-group.d.ts +8 -0
  39. package/dist/src/renderers/feedback/empty.d.ts +8 -0
  40. package/dist/src/renderers/feedback/loading.d.ts +7 -0
  41. package/dist/src/renderers/feedback/progress.d.ts +7 -0
  42. package/dist/src/renderers/feedback/skeleton.d.ts +7 -0
  43. package/dist/src/renderers/feedback/sonner.d.ts +8 -0
  44. package/dist/src/renderers/feedback/spinner.d.ts +8 -0
  45. package/dist/src/renderers/feedback/toast.d.ts +8 -0
  46. package/dist/src/renderers/feedback/toaster.d.ts +7 -0
  47. package/dist/src/renderers/form/button.d.ts +7 -0
  48. package/dist/src/renderers/form/calendar.d.ts +7 -0
  49. package/dist/src/renderers/form/checkbox.d.ts +7 -0
  50. package/dist/src/renderers/form/combobox.d.ts +8 -0
  51. package/dist/src/renderers/form/command.d.ts +8 -0
  52. package/dist/src/renderers/form/date-picker.d.ts +7 -0
  53. package/dist/src/renderers/form/file-upload.d.ts +7 -0
  54. package/dist/src/renderers/form/form.d.ts +7 -0
  55. package/dist/src/renderers/form/input-otp.d.ts +7 -0
  56. package/dist/src/renderers/form/input.d.ts +7 -0
  57. package/dist/src/renderers/form/label.d.ts +7 -0
  58. package/dist/src/renderers/form/radio-group.d.ts +7 -0
  59. package/dist/src/renderers/form/select.d.ts +7 -0
  60. package/dist/src/renderers/form/slider.d.ts +7 -0
  61. package/dist/src/renderers/form/switch.d.ts +7 -0
  62. package/dist/src/renderers/form/textarea.d.ts +7 -0
  63. package/dist/src/renderers/form/toggle.d.ts +7 -0
  64. package/dist/src/renderers/layout/aspect-ratio.d.ts +8 -0
  65. package/dist/src/renderers/layout/card.d.ts +7 -0
  66. package/dist/src/renderers/layout/container.d.ts +7 -0
  67. package/dist/src/renderers/layout/flex.d.ts +7 -0
  68. package/dist/src/renderers/layout/grid.d.ts +7 -0
  69. package/dist/src/renderers/layout/semantic.d.ts +7 -0
  70. package/dist/src/renderers/layout/stack.d.ts +7 -0
  71. package/dist/src/renderers/layout/tabs.d.ts +7 -0
  72. package/dist/src/renderers/navigation/header-bar.d.ts +7 -0
  73. package/dist/src/renderers/navigation/sidebar.d.ts +7 -0
  74. package/dist/src/renderers/overlay/alert-dialog.d.ts +7 -0
  75. package/dist/src/renderers/overlay/context-menu.d.ts +7 -0
  76. package/dist/src/renderers/overlay/dialog.d.ts +7 -0
  77. package/dist/src/renderers/overlay/drawer.d.ts +7 -0
  78. package/dist/src/renderers/overlay/dropdown-menu.d.ts +7 -0
  79. package/dist/src/renderers/overlay/hover-card.d.ts +7 -0
  80. package/dist/src/renderers/overlay/menubar.d.ts +8 -0
  81. package/dist/src/renderers/overlay/popover.d.ts +7 -0
  82. package/dist/src/renderers/overlay/sheet.d.ts +7 -0
  83. package/dist/src/renderers/overlay/tooltip.d.ts +7 -0
  84. package/dist/src/renderers/placeholders.d.ts +9 -0
  85. package/dist/src/ui/accordion.d.ts +7 -0
  86. package/dist/src/ui/alert-dialog.d.ts +7 -0
  87. package/dist/src/ui/alert.d.ts +7 -0
  88. package/dist/src/ui/aspect-ratio.d.ts +7 -0
  89. package/dist/src/ui/avatar.d.ts +7 -0
  90. package/dist/src/ui/badge.d.ts +7 -0
  91. package/dist/src/ui/breadcrumb.d.ts +7 -0
  92. package/dist/src/ui/button.d.ts +10 -5
  93. package/dist/src/ui/calendar.d.ts +14 -7
  94. package/dist/src/ui/card.d.ts +7 -0
  95. package/dist/src/ui/carousel.d.ts +7 -0
  96. package/dist/src/ui/checkbox.d.ts +7 -0
  97. package/dist/src/ui/collapsible.d.ts +7 -0
  98. package/dist/src/ui/combobox.d.ts +22 -0
  99. package/dist/src/ui/command.d.ts +7 -0
  100. package/dist/src/ui/context-menu.d.ts +7 -0
  101. package/dist/src/ui/date-picker.d.ts +15 -0
  102. package/dist/src/ui/dialog.d.ts +7 -0
  103. package/dist/src/ui/drawer.d.ts +7 -0
  104. package/dist/src/ui/dropdown-menu.d.ts +7 -0
  105. package/dist/src/ui/filter-builder.d.ts +7 -0
  106. package/dist/src/ui/form.d.ts +7 -0
  107. package/dist/src/ui/hover-card.d.ts +7 -0
  108. package/dist/src/ui/index.d.ts +10 -5
  109. package/dist/src/ui/input-otp.d.ts +7 -0
  110. package/dist/src/ui/input.d.ts +7 -0
  111. package/dist/src/ui/item.d.ts +7 -0
  112. package/dist/src/ui/kbd.d.ts +7 -0
  113. package/dist/src/ui/label.d.ts +7 -0
  114. package/dist/src/ui/menubar.d.ts +7 -0
  115. package/dist/src/ui/navigation-menu.d.ts +7 -0
  116. package/dist/src/ui/pagination.d.ts +7 -0
  117. package/dist/src/ui/popover.d.ts +7 -0
  118. package/dist/src/ui/progress.d.ts +7 -0
  119. package/dist/src/ui/radio-group.d.ts +7 -0
  120. package/dist/src/ui/resizable.d.ts +7 -0
  121. package/dist/src/ui/scroll-area.d.ts +7 -0
  122. package/dist/src/ui/select.d.ts +9 -2
  123. package/dist/src/ui/separator.d.ts +7 -0
  124. package/dist/src/ui/sheet.d.ts +7 -0
  125. package/dist/src/ui/sidebar.d.ts +14 -9
  126. package/dist/src/ui/skeleton.d.ts +7 -0
  127. package/dist/src/ui/slider.d.ts +7 -0
  128. package/dist/src/ui/spinner.d.ts +7 -0
  129. package/dist/src/ui/switch.d.ts +7 -0
  130. package/dist/src/ui/table.d.ts +15 -8
  131. package/dist/src/ui/tabs.d.ts +7 -0
  132. package/dist/src/ui/textarea.d.ts +7 -0
  133. package/dist/src/ui/toggle-group.d.ts +8 -3
  134. package/dist/src/ui/toggle.d.ts +7 -0
  135. package/dist/src/ui/tooltip.d.ts +7 -0
  136. package/metadata/ObjectGrid.component.yml +72 -0
  137. package/package.json +23 -11
  138. package/postcss.config.js +9 -1
  139. package/shadcn-components.json +310 -0
  140. package/src/__tests__/README.md +124 -0
  141. package/src/__tests__/basic-renderers.test.tsx +255 -0
  142. package/src/__tests__/complex-disclosure-renderers.test.tsx +301 -0
  143. package/src/__tests__/feedback-overlay-renderers.test.tsx +349 -0
  144. package/src/__tests__/form-renderers.test.tsx +364 -0
  145. package/src/__tests__/layout-data-renderers.test.tsx +340 -0
  146. package/src/__tests__/test-utils.tsx +190 -0
  147. package/src/hooks/use-mobile.tsx +8 -0
  148. package/src/index.css +86 -54
  149. package/src/index.test.ts +8 -0
  150. package/src/index.ts +21 -1
  151. package/src/lib/utils.tsx +8 -0
  152. package/src/new-components.test.ts +8 -9
  153. package/src/renderers/basic/button-group.tsx +78 -0
  154. package/src/renderers/basic/div.tsx +9 -1
  155. package/src/renderers/basic/html.tsx +8 -0
  156. package/src/renderers/basic/icon.tsx +66 -3
  157. package/src/renderers/basic/image.tsx +12 -1
  158. package/src/renderers/basic/index.ts +11 -0
  159. package/src/renderers/basic/navigation-menu.tsx +80 -0
  160. package/src/renderers/basic/pagination.tsx +82 -0
  161. package/src/renderers/basic/separator.tsx +9 -1
  162. package/src/renderers/basic/span.tsx +9 -1
  163. package/src/renderers/basic/text.tsx +8 -0
  164. package/src/renderers/complex/__tests__/data-table.test.ts +8 -0
  165. package/src/renderers/complex/carousel.tsx +11 -3
  166. package/src/renderers/complex/data-table.tsx +19 -4
  167. package/src/renderers/complex/filter-builder.tsx +8 -0
  168. package/src/renderers/complex/index.ts +9 -3
  169. package/src/renderers/complex/resizable.tsx +8 -0
  170. package/src/renderers/complex/scroll-area.tsx +8 -0
  171. package/src/renderers/complex/table.tsx +10 -2
  172. package/src/renderers/data-display/alert.tsx +8 -0
  173. package/src/renderers/data-display/avatar.tsx +8 -0
  174. package/src/renderers/data-display/badge.tsx +8 -0
  175. package/src/renderers/data-display/breadcrumb.tsx +59 -0
  176. package/src/renderers/data-display/index.ts +12 -0
  177. package/src/renderers/data-display/kbd.tsx +49 -0
  178. package/src/renderers/data-display/list.tsx +8 -0
  179. package/src/renderers/data-display/statistic.tsx +24 -43
  180. package/src/renderers/data-display/table.tsx +68 -0
  181. package/src/renderers/data-display/tree-view.tsx +26 -37
  182. package/src/renderers/disclosure/accordion.tsx +8 -0
  183. package/src/renderers/disclosure/collapsible.tsx +8 -0
  184. package/src/renderers/disclosure/index.ts +9 -0
  185. package/src/renderers/disclosure/toggle-group.tsx +77 -0
  186. package/src/renderers/feedback/empty.tsx +48 -0
  187. package/src/renderers/feedback/index.ts +12 -0
  188. package/src/renderers/feedback/loading.tsx +8 -0
  189. package/src/renderers/feedback/progress.tsx +8 -0
  190. package/src/renderers/feedback/skeleton.tsx +8 -0
  191. package/src/renderers/feedback/sonner.tsx +55 -0
  192. package/src/renderers/feedback/spinner.tsx +54 -0
  193. package/src/renderers/feedback/toast.tsx +58 -0
  194. package/src/renderers/feedback/toaster.tsx +13 -17
  195. package/src/renderers/form/button.tsx +8 -0
  196. package/src/renderers/form/calendar.tsx +8 -0
  197. package/src/renderers/form/checkbox.tsx +8 -0
  198. package/src/renderers/form/combobox.tsx +47 -0
  199. package/src/renderers/form/command.tsx +57 -0
  200. package/src/renderers/form/date-picker.tsx +10 -2
  201. package/src/renderers/form/file-upload.tsx +10 -2
  202. package/src/renderers/form/form.tsx +12 -3
  203. package/src/renderers/form/index.ts +10 -0
  204. package/src/renderers/form/input-otp.tsx +34 -15
  205. package/src/renderers/form/input.tsx +89 -50
  206. package/src/renderers/form/label.tsx +8 -0
  207. package/src/renderers/form/radio-group.tsx +8 -0
  208. package/src/renderers/form/select.tsx +8 -0
  209. package/src/renderers/form/slider.tsx +16 -1
  210. package/src/renderers/form/switch.tsx +8 -0
  211. package/src/renderers/form/textarea.tsx +8 -0
  212. package/src/renderers/form/toggle.tsx +8 -0
  213. package/src/renderers/index.ts +8 -0
  214. package/src/renderers/layout/aspect-ratio.tsx +50 -0
  215. package/src/renderers/layout/card.tsx +8 -0
  216. package/src/renderers/layout/container.tsx +20 -12
  217. package/src/renderers/layout/flex.tsx +16 -8
  218. package/src/renderers/layout/grid.tsx +8 -0
  219. package/src/renderers/layout/index.ts +9 -0
  220. package/src/renderers/layout/page.tsx +9 -1
  221. package/src/renderers/layout/semantic.tsx +8 -0
  222. package/src/renderers/layout/stack.tsx +16 -8
  223. package/src/renderers/layout/tabs.tsx +8 -0
  224. package/src/renderers/navigation/header-bar.tsx +9 -1
  225. package/src/renderers/navigation/index.ts +8 -0
  226. package/src/renderers/navigation/sidebar.tsx +8 -0
  227. package/src/renderers/overlay/alert-dialog.tsx +8 -0
  228. package/src/renderers/overlay/context-menu.tsx +9 -1
  229. package/src/renderers/overlay/dialog.tsx +8 -0
  230. package/src/renderers/overlay/drawer.tsx +8 -0
  231. package/src/renderers/overlay/dropdown-menu.tsx +8 -0
  232. package/src/renderers/overlay/hover-card.tsx +8 -0
  233. package/src/renderers/overlay/index.ts +9 -0
  234. package/src/renderers/overlay/menubar.tsx +75 -0
  235. package/src/renderers/overlay/popover.tsx +8 -0
  236. package/src/renderers/overlay/sheet.tsx +8 -0
  237. package/src/renderers/overlay/tooltip.tsx +8 -0
  238. package/src/renderers/placeholders.tsx +107 -0
  239. package/src/ui/accordion.tsx +8 -0
  240. package/src/ui/alert-dialog.tsx +8 -0
  241. package/src/ui/alert.tsx +14 -24
  242. package/src/ui/aspect-ratio.tsx +8 -0
  243. package/src/ui/avatar.tsx +8 -0
  244. package/src/ui/badge.tsx +13 -6
  245. package/src/ui/breadcrumb.tsx +8 -0
  246. package/src/ui/button-group.tsx +8 -0
  247. package/src/ui/button.tsx +38 -36
  248. package/src/ui/calendar.tsx +57 -200
  249. package/src/ui/card.tsx +8 -0
  250. package/src/ui/carousel.tsx +8 -0
  251. package/src/ui/checkbox.tsx +8 -0
  252. package/src/ui/collapsible.tsx +8 -0
  253. package/src/ui/combobox.tsx +104 -0
  254. package/src/ui/command.tsx +8 -0
  255. package/src/ui/context-menu.tsx +8 -0
  256. package/src/ui/date-picker.tsx +61 -0
  257. package/src/ui/dialog.tsx +8 -0
  258. package/src/ui/drawer.tsx +8 -0
  259. package/src/ui/dropdown-menu.tsx +8 -0
  260. package/src/ui/empty.tsx +8 -0
  261. package/src/ui/filter-builder.tsx +8 -0
  262. package/src/ui/form.tsx +8 -0
  263. package/src/ui/hover-card.tsx +8 -0
  264. package/src/ui/index.ts +11 -5
  265. package/src/ui/input-otp.tsx +20 -12
  266. package/src/ui/input.tsx +8 -0
  267. package/src/ui/item.tsx +8 -0
  268. package/src/ui/kbd.tsx +8 -0
  269. package/src/ui/label.tsx +8 -0
  270. package/src/ui/menubar.tsx +8 -0
  271. package/src/ui/navigation-menu.tsx +8 -0
  272. package/src/ui/pagination.tsx +8 -0
  273. package/src/ui/popover.tsx +9 -1
  274. package/src/ui/progress.tsx +11 -15
  275. package/src/ui/radio-group.tsx +8 -0
  276. package/src/ui/resizable.tsx +8 -0
  277. package/src/ui/scroll-area.tsx +9 -1
  278. package/src/ui/select.tsx +17 -9
  279. package/src/ui/separator.tsx +8 -0
  280. package/src/ui/sheet.tsx +8 -0
  281. package/src/ui/sidebar.tsx +34 -15
  282. package/src/ui/skeleton.tsx +8 -0
  283. package/src/ui/slider.tsx +8 -0
  284. package/src/ui/sonner.tsx +12 -20
  285. package/src/ui/spinner.tsx +11 -23
  286. package/src/ui/switch.tsx +8 -0
  287. package/src/ui/table.tsx +102 -97
  288. package/src/ui/tabs.tsx +8 -0
  289. package/src/ui/textarea.tsx +8 -0
  290. package/src/ui/toggle-group.tsx +12 -21
  291. package/src/ui/toggle.tsx +15 -12
  292. package/src/ui/tooltip.tsx +8 -0
  293. package/tsconfig.json +2 -1
  294. package/vite.config.ts +11 -1
  295. package/dist/src/index.test.d.ts +0 -1
  296. package/dist/src/new-components.test.d.ts +0 -1
  297. package/dist/src/renderers/complex/__tests__/data-table.test.d.ts +0 -0
  298. package/dist/src/renderers/complex/calendar-view.d.ts +0 -1
  299. package/dist/src/renderers/complex/chatbot.d.ts +0 -1
  300. package/dist/src/renderers/complex/chatbot.test.d.ts +0 -1
  301. package/dist/src/renderers/complex/timeline.d.ts +0 -1
  302. package/dist/src/ui/calendar-view.d.ts +0 -21
  303. package/dist/src/ui/chatbot.d.ts +0 -36
  304. package/dist/src/ui/field.d.ts +0 -24
  305. package/dist/src/ui/input-group.d.ts +0 -16
  306. package/dist/src/ui/timeline.d.ts +0 -25
  307. package/metadata/ObjectTable.component.yml +0 -41
  308. package/src/renderers/complex/calendar-view.tsx +0 -219
  309. package/src/renderers/complex/chatbot.test.ts +0 -44
  310. package/src/renderers/complex/chatbot.tsx +0 -185
  311. package/src/renderers/complex/timeline.tsx +0 -466
  312. package/src/ui/calendar-view.tsx +0 -503
  313. package/src/ui/chatbot.tsx +0 -240
  314. package/src/ui/field.tsx +0 -246
  315. package/src/ui/input-group.tsx +0 -170
  316. package/src/ui/timeline.tsx +0 -266
  317. package/tailwind.config.js +0 -75
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import './basic';
2
10
  import './form';
3
11
  import './layout';
@@ -0,0 +1,50 @@
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.body)
34
+ )}
35
+ </AspectRatio>
36
+ );
37
+ },
38
+ {
39
+ label: 'Aspect Ratio',
40
+ inputs: [
41
+ { name: 'ratio', type: 'number', label: 'Ratio', defaultValue: 16/9 },
42
+ { name: 'image', type: 'string', label: 'Image URL' },
43
+ { name: 'alt', type: 'string', label: 'Alt Text' },
44
+ { name: 'className', type: 'string', label: 'CSS Class' }
45
+ ],
46
+ defaultProps: {
47
+ ratio: 16 / 9
48
+ }
49
+ }
50
+ );
@@ -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 { CardSchema } from '@object-ui/types';
3
11
  import { renderChildren } from '../../lib/utils';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { 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
 
@@ -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
@@ -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';
@@ -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';
@@ -23,7 +31,7 @@ export const PageRenderer: React.FC<{ schema: PageSchema; className?: string; [k
23
31
 
24
32
  return (
25
33
  <div
26
- className={cn("min-h-full w-full bg-background p-6 md:p-8", className)}
34
+ className={cn("min-h-full w-full bg-background p-4 md:p-6 lg:p-8", className)}
27
35
  {...pageProps}
28
36
  // Apply designer props
29
37
  data-obj-id={dataObjId}
@@ -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';
@@ -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';
@@ -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
@@ -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';
@@ -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>
@@ -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';
@@ -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 {
@@ -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 (
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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,75 @@
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
+ label: 'Menubar',
58
+ inputs: [
59
+ { name: 'className', type: 'string', label: 'CSS Class' }
60
+ ],
61
+ defaultProps: {
62
+ menus: [
63
+ {
64
+ label: 'File',
65
+ items: [
66
+ { label: 'New' },
67
+ { label: 'Open' },
68
+ { separator: true },
69
+ { label: 'Exit' }
70
+ ]
71
+ }
72
+ ]
73
+ }
74
+ }
75
+ );
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { PopoverSchema } from '@object-ui/types';
3
11
  import {
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { SheetSchema } from '@object-ui/types';
3
11
  import {
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { TooltipSchema } from '@object-ui/types';
3
11
  import {
@@ -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, ...props }: 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', 'view:spreadsheet',
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
+ }
@@ -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 * as React from "react"
2
10
  import * as AccordionPrimitive from "@radix-ui/react-accordion"
3
11
  import { ChevronDownIcon } from "lucide-react"