@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
@@ -0,0 +1,58 @@
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 { ToastSchema } from '@object-ui/types';
11
+ import { toast } from 'sonner';
12
+ import { Button } from '../../ui';
13
+
14
+ ComponentRegistry.register('toast',
15
+ ({ schema }: { schema: ToastSchema }) => {
16
+ const showToast = () => {
17
+ const toastFn = schema.variant === 'success' ? toast.success :
18
+ schema.variant === 'error' ? toast.error :
19
+ schema.variant === 'warning' ? toast.warning :
20
+ schema.variant === 'info' ? toast.info :
21
+ toast;
22
+
23
+ toastFn(schema.title || 'Notification', {
24
+ description: schema.description,
25
+ duration: schema.duration,
26
+ });
27
+ };
28
+
29
+ return (
30
+ <Button onClick={showToast} variant={schema.buttonVariant} className={schema.className}>
31
+ {schema.buttonLabel || 'Show Toast'}
32
+ </Button>
33
+ );
34
+ },
35
+ {
36
+ label: 'Toast',
37
+ inputs: [
38
+ { name: 'title', type: 'string', label: 'Title' },
39
+ { name: 'description', type: 'string', label: 'Description' },
40
+ {
41
+ name: 'variant',
42
+ type: 'enum',
43
+ enum: ['default', 'success', 'warning', 'error', 'info'],
44
+ defaultValue: 'default',
45
+ label: 'Variant'
46
+ },
47
+ { name: 'duration', type: 'number', label: 'Duration (ms)' },
48
+ { name: 'buttonLabel', type: 'string', label: 'Button Label' },
49
+ { name: 'className', type: 'string', label: 'CSS Class' }
50
+ ],
51
+ defaultProps: {
52
+ title: 'Notification',
53
+ buttonLabel: 'Show Toast',
54
+ variant: 'default',
55
+ duration: 5000
56
+ }
57
+ }
58
+ );
@@ -1,26 +1,22 @@
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 { ToasterSchema } from '@object-ui/types';
3
- import { Toaster as SonnerToaster } from '../../ui';
4
- import { Toaster as DefaultToaster } from '../../ui';
5
- // Note: In shadcn/ui typical setup, Toaster is exported from 'components/ui/toaster' and 'components/ui/sonner'.
6
- // But in @object-ui/ui index.tsx, we need to check if they are exported.
7
- // Assuming they are exported as Toaster and Sonner (or similar).
8
- // Let's assume standard exports.
11
+ import { Toaster as SonnerToaster } from '../../ui/sonner';
9
12
 
10
13
  ComponentRegistry.register('toaster',
11
- ({ schema }: { schema: ToasterSchema }) => {
12
- if (schema.provider === 'sonner') {
13
- return <SonnerToaster />;
14
- }
15
- return <DefaultToaster />;
14
+ () => {
15
+ return <SonnerToaster />;
16
16
  },
17
17
  {
18
18
  label: 'Toaster',
19
- inputs: [
20
- { name: 'provider', type: 'enum', enum: ['default', 'sonner'], defaultValue: 'default', label: 'Provider' }
21
- ],
22
- defaultProps: {
23
- provider: 'default'
24
- }
19
+ inputs: [],
20
+ defaultProps: {}
25
21
  }
26
22
  );
@@ -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 { ButtonSchema } from '@object-ui/types';
3
11
  import { Button } from '../../ui';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { CalendarSchema } from '@object-ui/types';
3
11
  import { Calendar } from '../../ui';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { CheckboxSchema } from '@object-ui/types';
3
11
  import { Checkbox, Label } from '../../ui';
@@ -0,0 +1,47 @@
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 { ComboboxSchema } from '@object-ui/types';
11
+ import { Combobox } from '../../ui';
12
+
13
+ ComponentRegistry.register('combobox',
14
+ ({ schema, ...props }: { schema: ComboboxSchema; [key: string]: any }) => {
15
+ const {
16
+ 'data-obj-id': dataObjId,
17
+ 'data-obj-type': dataObjType,
18
+ style,
19
+ ...comboboxProps
20
+ } = props;
21
+
22
+ return (
23
+ <Combobox
24
+ options={schema.options || []}
25
+ placeholder={schema.placeholder}
26
+ value={schema.value}
27
+ disabled={schema.disabled}
28
+ className={schema.className}
29
+ {...comboboxProps}
30
+ {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
31
+ />
32
+ );
33
+ },
34
+ {
35
+ label: 'Combobox',
36
+ inputs: [
37
+ { name: 'placeholder', type: 'string', label: 'Placeholder' },
38
+ { name: 'value', type: 'string', label: 'Value' },
39
+ { name: 'disabled', type: 'boolean', label: 'Disabled', defaultValue: false },
40
+ { name: 'className', type: 'string', label: 'CSS Class' }
41
+ ],
42
+ defaultProps: {
43
+ placeholder: 'Select option...',
44
+ options: []
45
+ }
46
+ }
47
+ );
@@ -0,0 +1,57 @@
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 { CommandSchema } from '@object-ui/types';
11
+ import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from '../../ui/command';
12
+
13
+ ComponentRegistry.register('command',
14
+ ({ schema, ...props }: { schema: CommandSchema; [key: string]: any }) => {
15
+ const {
16
+ 'data-obj-id': dataObjId,
17
+ 'data-obj-type': dataObjType,
18
+ style,
19
+ ...commandProps
20
+ } = props;
21
+
22
+ return (
23
+ <Command
24
+ className={schema.className}
25
+ {...commandProps}
26
+ {...{ 'data-obj-id': dataObjId, 'data-obj-type': dataObjType, style }}
27
+ >
28
+ <CommandInput placeholder={schema.placeholder || 'Type a command or search...'} />
29
+ <CommandList>
30
+ <CommandEmpty>{schema.emptyText || 'No results found.'}</CommandEmpty>
31
+ {schema.groups?.map((group, idx) => (
32
+ <CommandGroup key={idx} heading={group.heading}>
33
+ {group.items?.map((item, itemIdx) => (
34
+ <CommandItem key={itemIdx} value={item.value}>
35
+ {item.label}
36
+ </CommandItem>
37
+ ))}
38
+ </CommandGroup>
39
+ ))}
40
+ </CommandList>
41
+ </Command>
42
+ );
43
+ },
44
+ {
45
+ label: 'Command',
46
+ inputs: [
47
+ { name: 'placeholder', type: 'string', label: 'Placeholder' },
48
+ { name: 'emptyText', type: 'string', label: 'Empty Text' },
49
+ { name: 'className', type: 'string', label: 'CSS Class' }
50
+ ],
51
+ defaultProps: {
52
+ placeholder: 'Type a command or search...',
53
+ emptyText: 'No results found.',
54
+ groups: []
55
+ }
56
+ }
57
+ );
@@ -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 { DatePickerSchema } from '@object-ui/types';
3
11
  import { Calendar, Button, Popover, PopoverTrigger, PopoverContent, Label } from '../../ui';
@@ -35,8 +43,8 @@ ComponentRegistry.register('date-picker',
35
43
  id={schema.id}
36
44
  variant="outline"
37
45
  className={cn(
38
- 'w-full justify-start text-left font-normal transition-all duration-300',
39
- !value ? 'text-muted-foreground' : 'text-cyan-300 font-medium shadow-[0_0_10px_-5px_rgba(6,182,212,0.5)] border-cyan-500/50 bg-cyan-950/20',
46
+ 'w-full justify-start text-left font-normal',
47
+ !value && 'text-muted-foreground',
40
48
  className
41
49
  )}
42
50
  {...triggerProps}
@@ -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 { FileUploadSchema } from '@object-ui/types';
3
11
  import { Label, Button } from '../../ui';
@@ -87,7 +95,7 @@ ComponentRegistry.register('file-upload',
87
95
  <div
88
96
  onClick={handleClick}
89
97
  className={cn(
90
- "relative overflow-hidden cursor-pointer rounded-lg border-2 border-dashed transition-all duration-300 min-h-[120px] flex flex-col items-center justify-center p-6 gap-3",
98
+ "relative overflow-hidden cursor-pointer rounded-lg border-2 border-dashed transition-all duration-300 min-h-[120px] flex flex-col items-center justify-center p-4 sm:p-6 gap-3",
91
99
  isUploading
92
100
  ? "border-cyan-400 bg-cyan-950/30"
93
101
  : "border-slate-700 bg-slate-900/50 hover:bg-slate-900 hover:border-cyan-500/50 hover:shadow-[0_0_20px_-5px_rgba(6,182,212,0.3)]"
@@ -133,7 +141,7 @@ ComponentRegistry.register('file-upload',
133
141
 
134
142
  <div className="flex items-center gap-3 z-10">
135
143
  <CheckCircle2 className="w-4 h-4 text-emerald-500 rounded-full" />
136
- <span className="truncate max-w-[200px] text-muted-foreground group-hover/file:text-foreground font-mono text-xs transition-colors">{file.name}</span>
144
+ <span className="truncate max-w-[150px] sm:max-w-[200px] md:max-w-[300px] text-muted-foreground group-hover/file:text-foreground font-mono text-xs transition-colors">{file.name}</span>
137
145
  </div>
138
146
 
139
147
  <Button
@@ -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 { FormSchema, FormField as FormFieldConfig, ValidationRule, FieldCondition, SelectOption } from '@object-ui/types';
3
11
  import { useForm } from 'react-hook-form';
@@ -118,11 +126,12 @@ ComponentRegistry.register('form',
118
126
  };
119
127
 
120
128
  // Determine grid classes based on columns (explicit classes for Tailwind JIT)
129
+ // Mobile-first: 1 column on mobile, 2 on sm, then md/lg for larger values
121
130
  const gridColsClass =
122
131
  columns === 1 ? '' :
123
- columns === 2 ? 'md:grid-cols-2' :
124
- columns === 3 ? 'md:grid-cols-3' :
125
- 'md:grid-cols-4';
132
+ columns === 2 ? 'sm:grid-cols-2' :
133
+ columns === 3 ? 'sm:grid-cols-2 md:grid-cols-3' :
134
+ 'sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4';
126
135
 
127
136
  const gridClass = columns > 1
128
137
  ? cn('grid gap-4', gridColsClass)
@@ -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 './form';
2
10
  import './button';
3
11
  import './label';
@@ -14,3 +22,5 @@ import './input-otp';
14
22
  import './calendar';
15
23
  import './date-picker';
16
24
  import './file-upload';
25
+ import './combobox';
26
+ import './command';
@@ -1,23 +1,42 @@
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 { InputOTPSchema } from '@object-ui/types';
3
11
  import { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } from '../../ui';
4
12
 
5
13
  ComponentRegistry.register('input-otp',
6
- ({ schema, className, ...props }: { schema: InputOTPSchema; className?: string; [key: string]: any }) => (
7
- <InputOTP maxLength={schema.length || 6} className={className} {...props}>
8
- <InputOTPGroup>
9
- <InputOTPSlot index={0} />
10
- <InputOTPSlot index={1} />
11
- <InputOTPSlot index={2} />
12
- </InputOTPGroup>
13
- <InputOTPSeparator />
14
- <InputOTPGroup>
15
- <InputOTPSlot index={3} />
16
- <InputOTPSlot index={4} />
17
- <InputOTPSlot index={5} />
18
- </InputOTPGroup>
19
- </InputOTP>
20
- ),
14
+ ({ schema, className, onChange, value, ...props }: { schema: InputOTPSchema; className?: string; [key: string]: any }) => {
15
+ const length = schema.maxLength || 6;
16
+ const slots = Array.from({ length });
17
+
18
+ const handleChange = (val: string) => {
19
+ if (onChange) {
20
+ onChange(val);
21
+ }
22
+ };
23
+
24
+ return (
25
+ <InputOTP
26
+ maxLength={length}
27
+ className={className}
28
+ value={value ?? schema.value}
29
+ onChange={handleChange}
30
+ {...props}
31
+ >
32
+ <InputOTPGroup>
33
+ {slots.map((_, i) => (
34
+ <InputOTPSlot key={i} index={i} />
35
+ ))}
36
+ </InputOTPGroup>
37
+ </InputOTP>
38
+ );
39
+ },
21
40
  {
22
41
  label: 'Input OTP',
23
42
  inputs: [
@@ -1,61 +1,68 @@
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 { InputSchema } from '@object-ui/types';
4
12
  import { Input, Label } from '../../ui';
5
13
  import { cn } from '../../lib/utils';
6
14
 
7
- ComponentRegistry.register('input',
8
- ({ schema, className, onChange, value, ...props }: { schema: InputSchema; className?: string; onChange?: (val: any) => void; value?: any; [key: string]: any }) => {
9
-
10
- // Handle change for both raw inputs and form-bound inputs
11
- const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
12
- if (onChange) {
13
- onChange(e.target.value);
14
- }
15
- };
15
+ const InputRenderer = ({ schema, className, onChange, value, ...props }: { schema: InputSchema; 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<HTMLInputElement>) => {
18
+ if (onChange) {
19
+ onChange(e.target.value);
20
+ }
21
+ };
22
+
23
+ // Extract designer-related props to apply to the wrapper
24
+ // These props are injected by SchemaRenderer for designer interaction
25
+ const {
26
+ 'data-obj-id': dataObjId,
27
+ 'data-obj-type': dataObjType,
28
+ style,
29
+ ...inputProps
30
+ } = props;
16
31
 
17
- // Extract designer-related props to apply to the wrapper
18
- // These props are injected by SchemaRenderer for designer interaction
19
- const {
20
- 'data-obj-id': dataObjId,
21
- 'data-obj-type': dataObjType,
22
- style,
23
- ...inputProps
24
- } = props;
32
+ return (
33
+ <div
34
+ className={cn("grid w-full items-center gap-1.5", schema.wrapperClass)}
35
+ data-obj-id={dataObjId}
36
+ data-obj-type={dataObjType}
37
+ style={style}
38
+ >
39
+ {schema.label && <Label htmlFor={schema.id} className={cn(schema.required && "text-destructive after:content-['*'] after:ml-0.5")}>{schema.label}</Label>}
40
+ <Input
41
+ type={schema.inputType || 'text'}
42
+ id={schema.id}
43
+ name={schema.name}
44
+ placeholder={schema.placeholder}
45
+ className={className}
46
+ required={schema.required}
47
+ disabled={schema.disabled}
48
+ readOnly={schema.readOnly}
49
+ value={value ?? schema.value ?? ''} // Controlled if value provided
50
+ defaultValue={value === undefined ? schema.defaultValue : undefined}
51
+ onChange={handleChange}
52
+ min={schema.min}
53
+ max={schema.max}
54
+ step={schema.step}
55
+ maxLength={schema.maxLength}
56
+ pattern={schema.pattern}
57
+ {...inputProps}
58
+ />
59
+ {schema.description && <p className="text-sm text-muted-foreground">{schema.description}</p>}
60
+ {schema.error && <p className="text-sm font-medium text-destructive">{schema.error}</p>}
61
+ </div>
62
+ );
63
+ };
25
64
 
26
- return (
27
- <div
28
- className={cn("grid w-full items-center gap-1.5", schema.wrapperClass)}
29
- data-obj-id={dataObjId}
30
- data-obj-type={dataObjType}
31
- style={style}
32
- >
33
- {schema.label && <Label htmlFor={schema.id} className={cn(schema.required && "text-destructive after:content-['*'] after:ml-0.5")}>{schema.label}</Label>}
34
- <Input
35
- type={schema.inputType || 'text'}
36
- id={schema.id}
37
- name={schema.name}
38
- placeholder={schema.placeholder}
39
- className={className}
40
- required={schema.required}
41
- disabled={schema.disabled}
42
- readOnly={schema.readOnly}
43
- value={value ?? schema.value ?? ''} // Controlled if value provided
44
- defaultValue={value === undefined ? schema.defaultValue : undefined}
45
- onChange={handleChange}
46
- min={schema.min}
47
- max={schema.max}
48
- step={schema.step}
49
- maxLength={schema.maxLength}
50
- pattern={schema.pattern}
51
- {...inputProps}
52
- />
53
- {schema.description && <p className="text-sm text-muted-foreground">{schema.description}</p>}
54
- {schema.error && <p className="text-sm font-medium text-destructive">{schema.error}</p>}
55
- </div>
56
- );
57
- },
58
- {
65
+ ComponentRegistry.register('input', InputRenderer, {
59
66
  label: 'Input Field',
60
67
  inputs: [
61
68
  { name: 'label', type: 'string', label: 'Label' },
@@ -77,3 +84,35 @@ ComponentRegistry.register('input',
77
84
  }
78
85
  }
79
86
  );
87
+
88
+ ComponentRegistry.register('email',
89
+ (props: any) => <InputRenderer {...props} schema={{ ...props.schema, inputType: 'email' }} />,
90
+ {
91
+ label: 'Email Input',
92
+ icon: 'mail',
93
+ inputs: [
94
+ { name: 'label', type: 'string', label: 'Label' },
95
+ { name: 'name', type: 'string', label: 'Field Name' },
96
+ { name: 'placeholder', type: 'string', label: 'Placeholder' },
97
+ { name: 'required', type: 'boolean', label: 'Required' },
98
+ { name: 'disabled', type: 'boolean', label: 'Disabled' },
99
+ { name: 'description', type: 'string', label: 'Description' }
100
+ ]
101
+ }
102
+ );
103
+
104
+ ComponentRegistry.register('password',
105
+ (props: any) => <InputRenderer {...props} schema={{ ...props.schema, inputType: 'password' }} />,
106
+ {
107
+ label: 'Password Input',
108
+ icon: 'lock',
109
+ inputs: [
110
+ { name: 'label', type: 'string', label: 'Label' },
111
+ { name: 'name', type: 'string', label: 'Field Name' },
112
+ { name: 'placeholder', type: 'string', label: 'Placeholder' },
113
+ { name: 'required', type: 'boolean', label: 'Required' },
114
+ { name: 'disabled', type: 'boolean', label: 'Disabled' },
115
+ { name: 'description', type: 'string', label: 'Description' }
116
+ ]
117
+ }
118
+ );
@@ -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 { LabelSchema } from '@object-ui/types';
3
11
  import { Label } from '../../ui';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { RadioGroupSchema } from '@object-ui/types';
3
11
  import { RadioGroup, RadioGroupItem, Label } from '../../ui';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { SelectSchema } 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 { SliderSchema } from '@object-ui/types';
3
11
  import { Slider } from '../../ui';
@@ -12,9 +20,16 @@ ComponentRegistry.register('slider',
12
20
  ...sliderProps
13
21
  } = props;
14
22
 
23
+ // Ensure defaultValue is an array for backward compatibility
24
+ const defaultValue = Array.isArray(schema.defaultValue)
25
+ ? schema.defaultValue
26
+ : schema.defaultValue !== undefined
27
+ ? [schema.defaultValue]
28
+ : undefined;
29
+
15
30
  return (
16
31
  <Slider
17
- defaultValue={schema.defaultValue}
32
+ defaultValue={defaultValue}
18
33
  max={schema.max}
19
34
  min={schema.min}
20
35
  step={schema.step}
@@ -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';
@@ -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 { TextareaSchema } from '@object-ui/types';
3
11
  import { Textarea, Label } from '../../ui';
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
1
9
  import { ComponentRegistry } from '@object-ui/core';
2
10
  import type { ToggleSchema } from '@object-ui/types';
3
11
  import { Toggle, ToggleGroup, ToggleGroupItem } from '../../ui';