@object-ui/components 0.3.1 → 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 (299) hide show
  1. package/.turbo/turbo-build.log +47 -0
  2. package/README.md +13 -0
  3. package/dist/index.css +1 -1
  4. package/dist/index.js +34610 -24854
  5. package/dist/index.umd.cjs +53 -32
  6. package/dist/src/SchemaRenderer.d.ts +3 -0
  7. package/dist/src/{ui → custom}/button-group.d.ts +1 -1
  8. package/dist/src/custom/field.d.ts +19 -0
  9. package/dist/src/custom/index.d.ts +12 -0
  10. package/dist/src/custom/input-group.d.ts +14 -0
  11. package/dist/src/{ui → custom}/item.d.ts +1 -1
  12. package/dist/src/custom/native-select.d.ts +12 -0
  13. package/dist/src/custom/sort-builder.d.ts +22 -0
  14. package/dist/src/index.d.ts +1 -0
  15. package/dist/src/renderers/data-display/table.d.ts +1 -1
  16. package/dist/src/renderers/layout/page.d.ts +1 -1
  17. package/dist/src/renderers/placeholders.d.ts +1 -1
  18. package/dist/src/ui/accordion.d.ts +4 -4
  19. package/dist/src/ui/alert-dialog.d.ts +17 -11
  20. package/dist/src/ui/alert.d.ts +4 -5
  21. package/dist/src/ui/aspect-ratio.d.ts +1 -1
  22. package/dist/src/ui/avatar.d.ts +3 -3
  23. package/dist/src/ui/badge.d.ts +3 -3
  24. package/dist/src/ui/breadcrumb.d.ts +16 -8
  25. package/dist/src/ui/calendar.d.ts +7 -7
  26. package/dist/src/ui/card.d.ts +7 -8
  27. package/dist/src/ui/carousel.d.ts +5 -6
  28. package/dist/src/ui/chart.d.ts +62 -0
  29. package/dist/src/ui/checkbox.d.ts +1 -1
  30. package/dist/src/ui/collapsible.d.ts +3 -3
  31. package/dist/src/ui/command.d.ts +78 -16
  32. package/dist/src/ui/context-menu.d.ts +14 -12
  33. package/dist/src/ui/dialog.d.ts +17 -13
  34. package/dist/src/ui/drawer.d.ts +19 -10
  35. package/dist/src/ui/dropdown-menu.d.ts +20 -18
  36. package/dist/src/ui/form.d.ts +6 -7
  37. package/dist/src/ui/hover-card.d.ts +3 -3
  38. package/dist/src/ui/index.d.ts +2 -8
  39. package/dist/src/ui/input-otp.d.ts +30 -7
  40. package/dist/src/ui/label.d.ts +2 -1
  41. package/dist/src/ui/menubar.d.ts +19 -17
  42. package/dist/src/ui/navigation-menu.d.ts +9 -11
  43. package/dist/src/ui/pagination.d.ts +25 -10
  44. package/dist/src/ui/popover.d.ts +4 -5
  45. package/dist/src/ui/progress.d.ts +1 -1
  46. package/dist/src/ui/radio-group.d.ts +2 -2
  47. package/dist/src/ui/resizable.d.ts +5 -8
  48. package/dist/src/ui/scroll-area.d.ts +2 -2
  49. package/dist/src/ui/select.d.ts +11 -13
  50. package/dist/src/ui/sheet.d.ts +23 -11
  51. package/dist/src/ui/sidebar.d.ts +27 -29
  52. package/dist/src/ui/skeleton.d.ts +1 -1
  53. package/dist/src/ui/slider.d.ts +1 -1
  54. package/dist/src/ui/sonner.d.ts +2 -1
  55. package/dist/src/ui/switch.d.ts +2 -2
  56. package/dist/src/ui/tabs.d.ts +1 -1
  57. package/dist/src/ui/textarea.d.ts +1 -1
  58. package/dist/src/ui/toast.d.ts +22 -0
  59. package/dist/src/ui/toggle-group.d.ts +8 -3
  60. package/dist/src/ui/toggle.d.ts +4 -1
  61. package/dist/src/ui/tooltip.d.ts +4 -4
  62. package/dist/src/ui/typography.d.ts +21 -0
  63. package/package.json +17 -7
  64. package/shadcn-components.json +52 -47
  65. package/src/SchemaRenderer.tsx +28 -0
  66. package/src/__tests__/PageRendererRegions.test.tsx +59 -0
  67. package/src/__tests__/Registry.test.ts +21 -0
  68. package/src/__tests__/basic-renderers.test.tsx +1 -1
  69. package/src/__tests__/complex-disclosure-renderers.test.tsx +3 -2
  70. package/src/__tests__/feedback-overlay-renderers.test.tsx +1 -1
  71. package/src/__tests__/form-renderers.test.tsx +1 -1
  72. package/src/__tests__/layout-data-renderers.test.tsx +1 -1
  73. package/src/{ui → custom}/button-group.tsx +1 -1
  74. package/src/{ui → custom}/combobox.tsx +3 -3
  75. package/src/{ui → custom}/date-picker.tsx +3 -3
  76. package/src/custom/field.tsx +81 -0
  77. package/src/{ui → custom}/filter-builder.tsx +3 -3
  78. package/src/custom/index.ts +12 -0
  79. package/src/custom/input-group.tsx +53 -0
  80. package/src/{ui → custom}/item.tsx +1 -1
  81. package/src/custom/native-select.tsx +33 -0
  82. package/src/custom/sort-builder.tsx +129 -0
  83. package/src/index.css +20 -1
  84. package/src/index.ts +1 -0
  85. package/src/renderers/basic/button-group.tsx +1 -0
  86. package/src/renderers/basic/div.tsx +12 -1
  87. package/src/renderers/basic/html.tsx +1 -0
  88. package/src/renderers/basic/icon.tsx +1 -0
  89. package/src/renderers/basic/image.tsx +1 -0
  90. package/src/renderers/basic/navigation-menu.tsx +1 -0
  91. package/src/renderers/basic/pagination.tsx +31 -4
  92. package/src/renderers/basic/separator.tsx +1 -0
  93. package/src/renderers/basic/span.tsx +12 -1
  94. package/src/renderers/basic/text.tsx +4 -2
  95. package/src/renderers/complex/carousel.tsx +1 -0
  96. package/src/renderers/complex/data-table.tsx +134 -95
  97. package/src/renderers/complex/filter-builder.tsx +2 -1
  98. package/src/renderers/complex/resizable.tsx +2 -1
  99. package/src/renderers/complex/scroll-area.tsx +25 -7
  100. package/src/renderers/complex/table.tsx +1 -0
  101. package/src/renderers/data-display/alert.tsx +1 -0
  102. package/src/renderers/data-display/avatar.tsx +1 -0
  103. package/src/renderers/data-display/badge.tsx +1 -0
  104. package/src/renderers/data-display/breadcrumb.tsx +1 -0
  105. package/src/renderers/data-display/kbd.tsx +1 -0
  106. package/src/renderers/data-display/list.tsx +21 -49
  107. package/src/renderers/data-display/statistic.tsx +21 -5
  108. package/src/renderers/data-display/table.tsx +21 -11
  109. package/src/renderers/data-display/tree-view.tsx +7 -1
  110. package/src/renderers/disclosure/accordion.tsx +1 -0
  111. package/src/renderers/disclosure/collapsible.tsx +1 -0
  112. package/src/renderers/disclosure/toggle-group.tsx +2 -0
  113. package/src/renderers/feedback/empty.tsx +1 -0
  114. package/src/renderers/feedback/loading.tsx +2 -1
  115. package/src/renderers/feedback/progress.tsx +1 -0
  116. package/src/renderers/feedback/skeleton.tsx +1 -0
  117. package/src/renderers/feedback/sonner.tsx +1 -0
  118. package/src/renderers/feedback/spinner.tsx +1 -0
  119. package/src/renderers/feedback/toast.tsx +1 -0
  120. package/src/renderers/feedback/toaster.tsx +1 -0
  121. package/src/renderers/form/button.tsx +35 -1
  122. package/src/renderers/form/calendar.tsx +1 -0
  123. package/src/renderers/form/checkbox.tsx +38 -16
  124. package/src/renderers/form/combobox.tsx +2 -1
  125. package/src/renderers/form/command.tsx +1 -0
  126. package/src/renderers/form/date-picker.tsx +1 -0
  127. package/src/renderers/form/file-upload.tsx +1 -0
  128. package/src/renderers/form/form.tsx +92 -15
  129. package/src/renderers/form/input-otp.tsx +1 -0
  130. package/src/renderers/form/input.tsx +3 -0
  131. package/src/renderers/form/label.tsx +1 -0
  132. package/src/renderers/form/radio-group.tsx +1 -0
  133. package/src/renderers/form/select.tsx +35 -15
  134. package/src/renderers/form/slider.tsx +1 -0
  135. package/src/renderers/form/switch.tsx +1 -0
  136. package/src/renderers/form/textarea.tsx +50 -27
  137. package/src/renderers/form/toggle.tsx +3 -45
  138. package/src/renderers/layout/aspect-ratio.tsx +2 -1
  139. package/src/renderers/layout/card.tsx +10 -2
  140. package/src/renderers/layout/container.tsx +1 -0
  141. package/src/renderers/layout/flex.tsx +1 -0
  142. package/src/renderers/layout/grid.tsx +23 -8
  143. package/src/renderers/layout/page.tsx +35 -23
  144. package/src/renderers/layout/semantic.tsx +1 -0
  145. package/src/renderers/layout/stack.tsx +2 -1
  146. package/src/renderers/layout/tabs.tsx +43 -17
  147. package/src/renderers/navigation/header-bar.tsx +1 -0
  148. package/src/renderers/navigation/sidebar.tsx +5 -0
  149. package/src/renderers/overlay/alert-dialog.tsx +1 -0
  150. package/src/renderers/overlay/context-menu.tsx +1 -0
  151. package/src/renderers/overlay/dialog.tsx +1 -0
  152. package/src/renderers/overlay/drawer.tsx +1 -0
  153. package/src/renderers/overlay/dropdown-menu.tsx +1 -0
  154. package/src/renderers/overlay/hover-card.tsx +1 -0
  155. package/src/renderers/overlay/menubar.tsx +1 -0
  156. package/src/renderers/overlay/popover.tsx +1 -0
  157. package/src/renderers/overlay/sheet.tsx +1 -0
  158. package/src/renderers/overlay/tooltip.tsx +1 -0
  159. package/src/renderers/placeholders.tsx +2 -2
  160. package/src/stories/CRMApp.stories.tsx +706 -0
  161. package/src/stories/Guide.mdx +55 -0
  162. package/src/stories/Introduction.mdx +34 -0
  163. package/src/stories/MockedData.stories.tsx +71 -0
  164. package/src/stories/assets/accessibility.png +0 -0
  165. package/src/stories/assets/accessibility.svg +1 -0
  166. package/src/stories/assets/addon-library.png +0 -0
  167. package/src/stories/assets/assets.png +0 -0
  168. package/src/stories/assets/avif-test-image.avif +0 -0
  169. package/src/stories/assets/context.png +0 -0
  170. package/src/stories/assets/discord.svg +1 -0
  171. package/src/stories/assets/docs.png +0 -0
  172. package/src/stories/assets/figma-plugin.png +0 -0
  173. package/src/stories/assets/github.svg +1 -0
  174. package/src/stories/assets/share.png +0 -0
  175. package/src/stories/assets/styling.png +0 -0
  176. package/src/stories/assets/testing.png +0 -0
  177. package/src/stories/assets/theming.png +0 -0
  178. package/src/stories/assets/tutorials.svg +1 -0
  179. package/src/stories/assets/youtube.svg +1 -0
  180. package/src/stories/button.css +30 -0
  181. package/src/stories/header.css +32 -0
  182. package/src/stories/page.css +68 -0
  183. package/src/stories-json/accordion.stories.tsx +43 -0
  184. package/src/stories-json/aggrid.stories.tsx +103 -0
  185. package/src/stories-json/alert.stories.tsx +39 -0
  186. package/src/stories-json/aspect-ratio.stories.tsx +34 -0
  187. package/src/stories-json/avatar.stories.tsx +38 -0
  188. package/src/stories-json/badge.stories.tsx +53 -0
  189. package/src/stories-json/breadcrumb.stories.tsx +30 -0
  190. package/src/stories-json/button-group.stories.tsx +43 -0
  191. package/src/stories-json/button.stories.tsx +73 -0
  192. package/src/stories-json/calendar.stories.tsx +85 -0
  193. package/src/stories-json/card.stories.tsx +48 -0
  194. package/src/stories-json/carousel.stories.tsx +33 -0
  195. package/src/stories-json/charts.stories.tsx +195 -0
  196. package/src/stories-json/chatbot.stories.tsx +248 -0
  197. package/src/stories-json/code-editor.stories.tsx +92 -0
  198. package/src/stories-json/collapsible.stories.tsx +40 -0
  199. package/src/stories-json/controls.stories.tsx +36 -0
  200. package/src/stories-json/dashboard.stories.tsx +318 -0
  201. package/src/stories-json/data-table.stories.tsx +60 -0
  202. package/src/stories-json/data_display_extras.stories.tsx +102 -0
  203. package/src/stories-json/date-picker.stories.tsx +28 -0
  204. package/src/stories-json/detail-view.stories.tsx +258 -0
  205. package/src/stories-json/dialog.stories.tsx +43 -0
  206. package/src/stories-json/feedback_extras.stories.tsx +40 -0
  207. package/src/stories-json/feedback_others.stories.tsx +46 -0
  208. package/src/stories-json/form_advanced.stories.tsx +117 -0
  209. package/src/stories-json/form_extras.stories.tsx +123 -0
  210. package/src/stories-json/grid.stories.tsx +56 -0
  211. package/src/stories-json/icon.stories.tsx +36 -0
  212. package/src/stories-json/input.stories.tsx +52 -0
  213. package/src/stories-json/kanban.stories.tsx +295 -0
  214. package/src/stories-json/layout_extended.stories.tsx +76 -0
  215. package/src/stories-json/layout_flex.stories.tsx +107 -0
  216. package/src/stories-json/list-view.stories.tsx +97 -0
  217. package/src/stories-json/markdown.stories.tsx +129 -0
  218. package/src/stories-json/menus.stories.tsx +63 -0
  219. package/src/stories-json/metric-card.stories.tsx +143 -0
  220. package/src/stories-json/navigation-menu.stories.tsx +37 -0
  221. package/src/stories-json/object-aggrid.stories.tsx +252 -0
  222. package/src/stories-json/object-form.stories.tsx +130 -0
  223. package/src/stories-json/object-gantt.stories.tsx +114 -0
  224. package/src/stories-json/object-grid.stories.tsx +157 -0
  225. package/src/stories-json/object-map.stories.tsx +116 -0
  226. package/src/stories-json/object-view.stories.tsx +118 -0
  227. package/src/stories-json/overlay_extras.stories.tsx +113 -0
  228. package/src/stories-json/overlay_others.stories.tsx +76 -0
  229. package/src/stories-json/page.stories.tsx +55 -0
  230. package/src/stories-json/reports.stories.tsx +163 -0
  231. package/src/stories-json/resizable.stories.tsx +44 -0
  232. package/src/stories-json/select.stories.tsx +34 -0
  233. package/src/stories-json/separator.stories.tsx +41 -0
  234. package/src/stories-json/sidebar.stories.tsx +147 -0
  235. package/src/stories-json/statistic.stories.tsx +44 -0
  236. package/src/stories-json/tabs.stories.tsx +51 -0
  237. package/src/stories-json/timeline.stories.tsx +188 -0
  238. package/src/stories-json/typography.stories.tsx +45 -0
  239. package/src/ui/accordion.tsx +47 -53
  240. package/src/ui/alert-dialog.tsx +103 -117
  241. package/src/ui/alert.tsx +35 -36
  242. package/src/ui/aspect-ratio.tsx +1 -5
  243. package/src/ui/avatar.tsx +41 -42
  244. package/src/ui/badge.tsx +6 -15
  245. package/src/ui/breadcrumb.tsx +81 -75
  246. package/src/ui/button.tsx +10 -11
  247. package/src/ui/calendar.tsx +178 -51
  248. package/src/ui/card.tsx +51 -110
  249. package/src/ui/carousel.tsx +136 -113
  250. package/src/ui/chart.tsx +367 -0
  251. package/src/ui/checkbox.tsx +20 -22
  252. package/src/ui/collapsible.tsx +5 -25
  253. package/src/ui/command.tsx +106 -135
  254. package/src/ui/context-menu.tsx +69 -116
  255. package/src/ui/dialog.tsx +94 -113
  256. package/src/ui/drawer.tsx +82 -99
  257. package/src/ui/dropdown-menu.tsx +134 -188
  258. package/src/ui/form.tsx +51 -40
  259. package/src/ui/hover-card.tsx +18 -33
  260. package/src/ui/index.ts +2 -8
  261. package/src/ui/input-otp.tsx +42 -52
  262. package/src/ui/input.tsx +13 -15
  263. package/src/ui/label.tsx +17 -15
  264. package/src/ui/menubar.tsx +188 -206
  265. package/src/ui/navigation-menu.tsx +96 -136
  266. package/src/ui/pagination.tsx +86 -96
  267. package/src/ui/popover.tsx +24 -41
  268. package/src/ui/progress.tsx +21 -22
  269. package/src/ui/radio-group.tsx +19 -20
  270. package/src/ui/resizable.tsx +32 -42
  271. package/src/ui/scroll-area.tsx +38 -48
  272. package/src/ui/select.tsx +129 -157
  273. package/src/ui/separator.tsx +2 -2
  274. package/src/ui/sheet.tsx +110 -107
  275. package/src/ui/sidebar.tsx +442 -408
  276. package/src/ui/skeleton.tsx +6 -11
  277. package/src/ui/slider.tsx +19 -54
  278. package/src/ui/sonner.tsx +19 -1
  279. package/src/ui/switch.tsx +19 -21
  280. package/src/ui/tabs.tsx +6 -37
  281. package/src/ui/textarea.tsx +8 -4
  282. package/src/ui/toast.tsx +137 -0
  283. package/src/ui/toggle-group.tsx +28 -37
  284. package/src/ui/toggle.tsx +19 -19
  285. package/src/ui/tooltip.tsx +21 -52
  286. package/src/ui/typography.tsx +85 -0
  287. package/tsconfig.json +1 -1
  288. package/vite.config.ts +9 -1
  289. package/vitest.config.ts +5 -0
  290. package/ISSUES_FOUND.md +0 -128
  291. /package/dist/src/{ui → custom}/combobox.d.ts +0 -0
  292. /package/dist/src/{ui → custom}/date-picker.d.ts +0 -0
  293. /package/dist/src/{ui → custom}/empty.d.ts +0 -0
  294. /package/dist/src/{ui → custom}/filter-builder.d.ts +0 -0
  295. /package/dist/src/{ui → custom}/kbd.d.ts +0 -0
  296. /package/dist/src/{ui → custom}/spinner.d.ts +0 -0
  297. /package/src/{ui → custom}/empty.tsx +0 -0
  298. /package/src/{ui → custom}/kbd.tsx +0 -0
  299. /package/src/{ui → custom}/spinner.tsx +0 -0
@@ -0,0 +1,36 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer } from '../SchemaRenderer';
3
+ import type { BaseSchema } from '@object-ui/types';
4
+
5
+ const meta = {
6
+ title: 'Components/Icon',
7
+ component: SchemaRenderer,
8
+ parameters: { layout: 'centered' },
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ schema: { table: { disable: true } }
12
+ }
13
+ } satisfies Meta<typeof SchemaRenderer>;
14
+
15
+ export default meta;
16
+ type Story = StoryObj<typeof meta>;
17
+
18
+ const renderStory = (args: any) => <SchemaRenderer schema={args as unknown as BaseSchema} />;
19
+
20
+ export const Default: Story = {
21
+ render: renderStory,
22
+ args: {
23
+ type: 'icon',
24
+ name: 'calendar',
25
+ className: 'h-10 w-10 text-primary'
26
+ } as any,
27
+ };
28
+
29
+ export const Colored: Story = {
30
+ render: renderStory,
31
+ args: {
32
+ type: 'icon',
33
+ name: 'heart',
34
+ className: 'h-10 w-10 text-red-500 fill-red-500'
35
+ } as any,
36
+ };
@@ -0,0 +1,52 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer } from '../SchemaRenderer';
3
+ import type { BaseSchema } from '@object-ui/types';
4
+
5
+ const meta = {
6
+ title: 'Components/Input',
7
+ component: SchemaRenderer,
8
+ parameters: { layout: 'centered' },
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ schema: { table: { disable: true } }
12
+ }
13
+ } satisfies Meta<typeof SchemaRenderer>;
14
+
15
+ export default meta;
16
+ type Story = StoryObj<typeof meta>;
17
+
18
+ const renderStory = (args: any) => <SchemaRenderer schema={args as unknown as BaseSchema} />;
19
+
20
+ export const Input: Story = {
21
+ render: renderStory,
22
+ args: {
23
+ type: 'input',
24
+ label: 'Email Address',
25
+ placeholder: 'Enter your email',
26
+ inputType: 'email',
27
+ description: 'We will never share your email.',
28
+ wrapperClass: 'w-[300px]'
29
+ } as any,
30
+ };
31
+
32
+ export const WithError: Story = {
33
+ render: renderStory,
34
+ args: {
35
+ type: 'input',
36
+ label: 'Username',
37
+ placeholder: 'jdoe',
38
+ value: 'invalid name',
39
+ error: 'Username is already taken',
40
+ wrapperClass: 'w-[300px]'
41
+ } as any,
42
+ };
43
+
44
+ export const Textarea: Story = {
45
+ render: renderStory,
46
+ args: {
47
+ type: 'textarea',
48
+ label: 'Bio',
49
+ placeholder: 'Tell us a little bit about yourself',
50
+ wrapperClass: 'w-[300px]'
51
+ } as any,
52
+ };
@@ -0,0 +1,295 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer } from '../SchemaRenderer';
3
+ import type { BaseSchema } from '@object-ui/types';
4
+
5
+ const meta = {
6
+ title: 'Views/Kanban',
7
+ component: SchemaRenderer,
8
+ parameters: {
9
+ layout: 'padded',
10
+ },
11
+ tags: ['autodocs'],
12
+ argTypes: {
13
+ schema: { table: { disable: true } },
14
+ },
15
+ } satisfies Meta<any>;
16
+
17
+ export default meta;
18
+ type Story = StoryObj<typeof meta>;
19
+
20
+ const renderStory = (args: any) => <SchemaRenderer schema={args as unknown as BaseSchema} />;
21
+
22
+ export const Default: Story = {
23
+ render: renderStory,
24
+ args: {
25
+ type: 'kanban',
26
+ columns: [
27
+ {
28
+ id: 'todo',
29
+ title: 'Schema/Plugins/To Do',
30
+ cards: [
31
+ {
32
+ id: 'card-1',
33
+ title: 'Schema/Plugins/Task 1',
34
+ description: 'This is the first task',
35
+ badges: [
36
+ { label: 'High Priority', variant: 'destructive' },
37
+ { label: 'Feature', variant: 'default' }
38
+ ]
39
+ },
40
+ {
41
+ id: 'card-2',
42
+ title: 'Schema/Plugins/Task 2',
43
+ description: 'This is the second task',
44
+ badges: [
45
+ { label: 'Bug', variant: 'destructive' }
46
+ ]
47
+ }
48
+ ]
49
+ },
50
+ {
51
+ id: 'in-progress',
52
+ title: 'Schema/Plugins/In Progress',
53
+ limit: 3,
54
+ cards: [
55
+ {
56
+ id: 'card-3',
57
+ title: 'Schema/Plugins/Task 3',
58
+ description: 'Currently working on this',
59
+ badges: [
60
+ { label: 'In Progress', variant: 'default' }
61
+ ]
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ id: 'done',
67
+ title: 'Schema/Plugins/Done',
68
+ cards: [
69
+ {
70
+ id: 'card-4',
71
+ title: 'Schema/Plugins/Task 4',
72
+ description: 'This task is completed',
73
+ badges: [
74
+ { label: 'Completed', variant: 'outline' }
75
+ ]
76
+ },
77
+ {
78
+ id: 'card-5',
79
+ title: 'Schema/Plugins/Task 5',
80
+ description: 'Another completed task',
81
+ badges: [
82
+ { label: 'Completed', variant: 'outline' }
83
+ ]
84
+ }
85
+ ]
86
+ }
87
+ ],
88
+ className: 'w-full'
89
+ } as any,
90
+ };
91
+
92
+ export const ProjectManagement: Story = {
93
+ render: renderStory,
94
+ args: {
95
+ type: 'kanban',
96
+ columns: [
97
+ {
98
+ id: 'backlog',
99
+ title: 'Schema/Plugins/Backlog',
100
+ cards: [
101
+ {
102
+ id: 'task-1',
103
+ title: 'Schema/Plugins/Implement dark mode',
104
+ description: 'Add support for dark theme across the application',
105
+ badges: [
106
+ { label: 'Enhancement', variant: 'default' },
107
+ { label: 'Low Priority', variant: 'secondary' }
108
+ ]
109
+ },
110
+ {
111
+ id: 'task-2',
112
+ title: 'Schema/Plugins/Performance optimization',
113
+ description: 'Optimize bundle size and loading time',
114
+ badges: [
115
+ { label: 'Performance', variant: 'default' }
116
+ ]
117
+ }
118
+ ]
119
+ },
120
+ {
121
+ id: 'in-progress',
122
+ title: 'Schema/Plugins/In Progress',
123
+ limit: 2,
124
+ cards: [
125
+ {
126
+ id: 'task-3',
127
+ title: 'Schema/Plugins/User authentication',
128
+ description: 'Implement JWT-based authentication',
129
+ badges: [
130
+ { label: 'Feature', variant: 'default' },
131
+ { label: 'High Priority', variant: 'destructive' }
132
+ ]
133
+ }
134
+ ]
135
+ },
136
+ {
137
+ id: 'review',
138
+ title: 'Schema/Plugins/In Review',
139
+ cards: [
140
+ {
141
+ id: 'task-4',
142
+ title: 'Schema/Plugins/API integration',
143
+ description: 'Connect to REST API endpoints',
144
+ badges: [
145
+ { label: 'Feature', variant: 'default' }
146
+ ]
147
+ }
148
+ ]
149
+ },
150
+ {
151
+ id: 'completed',
152
+ title: 'Schema/Plugins/Completed',
153
+ cards: [
154
+ {
155
+ id: 'task-5',
156
+ title: 'Schema/Plugins/Initial setup',
157
+ description: 'Project scaffolding and configuration',
158
+ badges: [
159
+ { label: 'Done', variant: 'outline' }
160
+ ]
161
+ }
162
+ ]
163
+ }
164
+ ],
165
+ className: 'w-full'
166
+ } as any,
167
+ };
168
+
169
+ export const WithVirtualScrolling: Story = {
170
+ render: renderStory,
171
+ args: {
172
+ type: 'kanban',
173
+ enableVirtualScrolling: true,
174
+ columns: [
175
+ {
176
+ id: 'backlog',
177
+ title: 'Backlog',
178
+ cards: Array.from({ length: 100 }, (_, i) => ({
179
+ id: `card-${i}`,
180
+ title: `Task ${i + 1}`,
181
+ description: `Description for task ${i + 1}`,
182
+ badges: [
183
+ { label: i % 3 === 0 ? 'Bug' : i % 2 === 0 ? 'Feature' : 'Enhancement', variant: 'default' }
184
+ ]
185
+ }))
186
+ },
187
+ {
188
+ id: 'in-progress',
189
+ title: 'In Progress',
190
+ limit: 5,
191
+ cards: []
192
+ },
193
+ {
194
+ id: 'done',
195
+ title: 'Done',
196
+ cards: []
197
+ }
198
+ ],
199
+ className: 'w-full'
200
+ } as any,
201
+ };
202
+
203
+ export const WithColumnLimits: Story = {
204
+ render: renderStory,
205
+ args: {
206
+ type: 'kanban',
207
+ columns: [
208
+ {
209
+ id: 'todo',
210
+ title: 'To Do',
211
+ cards: [
212
+ { id: '1', title: 'Task 1', badges: [{ label: 'P1', variant: 'destructive' }] },
213
+ { id: '2', title: 'Task 2', badges: [{ label: 'P2', variant: 'default' }] },
214
+ ]
215
+ },
216
+ {
217
+ id: 'in-progress',
218
+ title: 'In Progress (80% Full)',
219
+ limit: 5,
220
+ cards: [
221
+ { id: '3', title: 'Task 3', description: 'Working on this' },
222
+ { id: '4', title: 'Task 4', description: 'Almost done' },
223
+ { id: '5', title: 'Task 5', description: 'In review' },
224
+ { id: '6', title: 'Task 6', description: 'Testing' },
225
+ ]
226
+ },
227
+ {
228
+ id: 'blocked',
229
+ title: 'Blocked (Over Limit)',
230
+ limit: 2,
231
+ cards: [
232
+ { id: '7', title: 'Task 7', description: 'Waiting for API', badges: [{ label: 'Blocked', variant: 'destructive' }] },
233
+ { id: '8', title: 'Task 8', description: 'Dependency issue', badges: [{ label: 'Blocked', variant: 'destructive' }] },
234
+ { id: '9', title: 'Task 9', description: 'Needs approval', badges: [{ label: 'Blocked', variant: 'destructive' }] },
235
+ ]
236
+ },
237
+ {
238
+ id: 'done',
239
+ title: 'Done',
240
+ cards: [
241
+ { id: '10', title: 'Task 10', badges: [{ label: 'Completed', variant: 'outline' }] },
242
+ ]
243
+ }
244
+ ],
245
+ className: 'w-full'
246
+ } as any,
247
+ };
248
+
249
+ export const WithCollapsibleColumns: Story = {
250
+ render: renderStory,
251
+ args: {
252
+ type: 'kanban',
253
+ enableCollapse: true,
254
+ columns: [
255
+ {
256
+ id: 'backlog',
257
+ title: 'Backlog',
258
+ collapsed: false,
259
+ cards: [
260
+ { id: '1', title: 'Feature Request 1', description: 'Add dark mode support' },
261
+ { id: '2', title: 'Feature Request 2', description: 'Export to PDF' },
262
+ { id: '3', title: 'Bug Fix 1', description: 'Fix login issue' },
263
+ ]
264
+ },
265
+ {
266
+ id: 'todo',
267
+ title: 'To Do',
268
+ collapsed: false,
269
+ cards: [
270
+ { id: '4', title: 'Update documentation', badges: [{ label: 'Docs', variant: 'secondary' }] },
271
+ { id: '5', title: 'Write tests', badges: [{ label: 'Testing', variant: 'default' }] },
272
+ ]
273
+ },
274
+ {
275
+ id: 'in-progress',
276
+ title: 'In Progress',
277
+ collapsed: false,
278
+ cards: [
279
+ { id: '6', title: 'Implement API', description: 'RESTful endpoints' },
280
+ ]
281
+ },
282
+ {
283
+ id: 'done',
284
+ title: 'Done',
285
+ collapsed: true,
286
+ cards: [
287
+ { id: '7', title: 'Setup project', badges: [{ label: 'Done', variant: 'outline' }] },
288
+ { id: '8', title: 'Configure CI/CD', badges: [{ label: 'Done', variant: 'outline' }] },
289
+ { id: '9', title: 'Deploy to staging', badges: [{ label: 'Done', variant: 'outline' }] },
290
+ ]
291
+ }
292
+ ],
293
+ className: 'w-full'
294
+ } as any,
295
+ };
@@ -0,0 +1,76 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer } from '../SchemaRenderer';
3
+
4
+ const meta: Meta = {
5
+ title: 'Components/Extended',
6
+ component: SchemaRenderer,
7
+ tags: ['autodocs'],
8
+ };
9
+
10
+ export default meta;
11
+ type Story = StoryObj<typeof meta>;
12
+
13
+ export const ScrollArea: Story = {
14
+ args: {
15
+ type: 'scroll-area',
16
+ height: '200px',
17
+ width: '350px',
18
+ className: 'rounded-md border p-4',
19
+ content: [
20
+ { type: 'div', className: 'mb-4 text-sm font-bold', children: [{ type: 'text', content: 'Tags' }] },
21
+ {
22
+ type: 'div',
23
+ children: Array.from({ length: 50 }).map((_, i) => ({
24
+ type: 'div',
25
+ className: 'text-sm border-b py-2',
26
+ children: [{ type: 'text', content: `Tag ${i + 1}` }]
27
+ }))
28
+ }
29
+ ]
30
+ } as any,
31
+ render: (args) => <SchemaRenderer schema={args} />
32
+ };
33
+
34
+ export const HeaderBar: Story = {
35
+ args: {
36
+ type: 'sidebar-provider',
37
+ body: [
38
+ {
39
+ type: 'sidebar-inset',
40
+ children: [
41
+ {
42
+ type: 'header-bar',
43
+ crumbs: [
44
+ { label: 'Application' },
45
+ { label: 'Dashboard', href: '/dashboard' },
46
+ { label: 'Analytics' }
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ ]
52
+ } as any,
53
+ render: (args) => <SchemaRenderer schema={args} />
54
+ };
55
+
56
+ export const Pagination: Story = {
57
+ args: {
58
+ type: 'pagination',
59
+ currentPage: 2,
60
+ totalPages: 10,
61
+ className: 'mt-4'
62
+ } as any,
63
+ render: (args) => <SchemaRenderer schema={args} />
64
+ };
65
+
66
+ export const Image: Story = {
67
+ args: {
68
+ type: 'image',
69
+ src: 'https://images.unsplash.com/photo-1576075796615-2c1185331f36?w=800&dpr=2&q=80',
70
+ alt: 'Photo by Unsplash',
71
+ className: 'rounded-xl object-cover',
72
+ width: 300,
73
+ height: 200
74
+ } as any,
75
+ render: (args) => <SchemaRenderer schema={args} />
76
+ };
@@ -0,0 +1,107 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer } from '../SchemaRenderer';
3
+
4
+ const meta: Meta = {
5
+ title: 'Components/Flex',
6
+ component: SchemaRenderer,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ // Schema properties will be passed as args
10
+ }
11
+ };
12
+
13
+ export default meta;
14
+ type Story = StoryObj<typeof meta>;
15
+
16
+ export const FlexRow: Story = {
17
+ args: {
18
+ type: 'flex',
19
+ direction: 'row',
20
+ gap: 4,
21
+ align: 'center',
22
+ className: 'p-4 border rounded-lg bg-slate-50',
23
+ children: [
24
+ {
25
+ type: 'badge',
26
+ variant: 'default',
27
+ content: 'Item 1'
28
+ },
29
+ {
30
+ type: 'badge',
31
+ variant: 'secondary',
32
+ content: 'Item 2'
33
+ },
34
+ {
35
+ type: 'badge',
36
+ variant: 'outline',
37
+ content: 'Item 3'
38
+ }
39
+ ]
40
+ },
41
+ render: (args) => <SchemaRenderer schema={args} />
42
+ };
43
+
44
+ export const FlexColumn: Story = {
45
+ args: {
46
+ type: 'flex',
47
+ direction: 'col',
48
+ gap: 2,
49
+ className: 'p-4 border rounded-lg max-w-xs',
50
+ children: [
51
+ {
52
+ type: 'alert',
53
+ variant: 'default',
54
+ children: [{ type: 'text', content: 'Alert 1' }]
55
+ },
56
+ {
57
+ type: 'alert',
58
+ variant: 'destructive',
59
+ children: [{ type: 'text', content: 'Alert 2' }]
60
+ }
61
+ ]
62
+ },
63
+ render: (args) => <SchemaRenderer schema={args} />
64
+ };
65
+
66
+ export const StackDefault: Story = {
67
+ args: {
68
+ type: 'stack',
69
+ gap: 4,
70
+ className: 'p-6 border rounded-md',
71
+ children: [
72
+ {
73
+ type: 'text',
74
+ content: 'Stack is essentially a Flex Column',
75
+ className: 'font-semibold'
76
+ },
77
+ {
78
+ type: 'input',
79
+ placeholder: 'First Name'
80
+ },
81
+ {
82
+ type: 'input',
83
+ placeholder: 'Last Name'
84
+ },
85
+ {
86
+ type: 'button',
87
+ content: 'Submit',
88
+ className: 'w-full'
89
+ }
90
+ ]
91
+ },
92
+ render: (args) => <SchemaRenderer schema={args} />
93
+ };
94
+
95
+ export const FlexWrap: Story = {
96
+ args: {
97
+ type: 'flex',
98
+ wrap: true,
99
+ gap: 2,
100
+ className: 'w-64 p-4 border border-dashed',
101
+ children: Array.from({ length: 12 }).map((_, i) => ({
102
+ type: 'badge',
103
+ content: `Tag ${i + 1}`
104
+ }))
105
+ },
106
+ render: (args) => <SchemaRenderer schema={args} />
107
+ };
@@ -0,0 +1,97 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer } from '../SchemaRenderer';
3
+ import type { BaseSchema } from '@object-ui/types';
4
+
5
+ const meta = {
6
+ title: 'Views/ListView',
7
+ component: SchemaRenderer,
8
+ parameters: {
9
+ layout: 'padded',
10
+ },
11
+ tags: ['autodocs'],
12
+ argTypes: {
13
+ schema: { table: { disable: true } },
14
+ },
15
+ } satisfies Meta<any>;
16
+
17
+ export default meta;
18
+ type Story = StoryObj<typeof meta>;
19
+
20
+ const renderStory = (args: any) => <SchemaRenderer schema={args as unknown as BaseSchema} />;
21
+
22
+ export const ContactsGrid: Story = {
23
+ render: renderStory,
24
+ args: {
25
+ type: 'list-view',
26
+ objectName: 'contacts',
27
+ viewType: 'grid',
28
+ fields: ['name', 'email', 'phone', 'company'],
29
+ sort: [{ field: 'name', order: 'asc' }],
30
+ } as any,
31
+ };
32
+
33
+ export const DealsKanban: Story = {
34
+ render: renderStory,
35
+ args: {
36
+ type: 'list-view',
37
+ objectName: 'deals',
38
+ viewType: 'kanban',
39
+ fields: ['name', 'amount', 'stage', 'close_date'],
40
+ options: {
41
+ kanban: {
42
+ groupField: 'stage',
43
+ titleField: 'name',
44
+ cardFields: ['amount', 'close_date'],
45
+ },
46
+ },
47
+ } as any,
48
+ };
49
+
50
+ export const TasksCalendar: Story = {
51
+ render: renderStory,
52
+ args: {
53
+ type: 'list-view',
54
+ objectName: 'tasks',
55
+ viewType: 'calendar',
56
+ fields: ['title', 'status', 'priority', 'due_date'],
57
+ options: {
58
+ calendar: {
59
+ startDateField: 'due_date',
60
+ titleField: 'title',
61
+ },
62
+ },
63
+ } as any,
64
+ };
65
+
66
+ export const SalesChart: Story = {
67
+ render: renderStory,
68
+ args: {
69
+ type: 'list-view',
70
+ objectName: 'sales',
71
+ viewType: 'chart',
72
+ fields: ['month', 'revenue', 'profit'],
73
+ options: {
74
+ chart: {
75
+ chartType: 'bar',
76
+ xAxisField: 'month',
77
+ yAxisFields: ['revenue', 'profit'],
78
+ },
79
+ },
80
+ } as any,
81
+ };
82
+
83
+ export const WithFiltersAndSearch: Story = {
84
+ render: renderStory,
85
+ args: {
86
+ type: 'list-view',
87
+ objectName: 'opportunities',
88
+ viewType: 'grid',
89
+ fields: ['name', 'amount', 'stage', 'owner', 'close_date'],
90
+ filters: [
91
+ ['stage', '=', 'Prospecting'],
92
+ 'OR',
93
+ ['stage', '=', 'Qualification'],
94
+ ],
95
+ sort: [{ field: 'amount', order: 'desc' }],
96
+ } as any,
97
+ };