@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,318 @@
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: 'Templates/Dashboard',
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: 'dashboard',
26
+ columns: 3,
27
+ gap: 4,
28
+ widgets: [
29
+ {
30
+ id: 'metric-1',
31
+ component: {
32
+ type: 'metric',
33
+ label: 'Total Revenue',
34
+ value: '$45,231.89',
35
+ }
36
+ },
37
+ {
38
+ id: 'metric-2',
39
+ component: {
40
+ type: 'metric',
41
+ label: 'Active Users',
42
+ value: '2,350',
43
+ }
44
+ },
45
+ {
46
+ id: 'metric-3',
47
+ component: {
48
+ type: 'metric',
49
+ label: 'Conversion Rate',
50
+ value: '12.5%',
51
+ }
52
+ }
53
+ ]
54
+ } as any,
55
+ };
56
+
57
+ export const WithCards: Story = {
58
+ render: renderStory,
59
+ args: {
60
+ type: 'dashboard',
61
+ columns: 2,
62
+ gap: 6,
63
+ widgets: [
64
+ {
65
+ id: 'card-1',
66
+ title: 'Sales Overview',
67
+ component: {
68
+ type: 'card',
69
+ children: [
70
+ { type: 'metric', label: 'Today', value: '$1,234' },
71
+ { type: 'metric', label: 'This Week', value: '$8,456' },
72
+ ],
73
+ }
74
+ },
75
+ {
76
+ id: 'card-2',
77
+ title: 'User Metrics',
78
+ component: {
79
+ type: 'card',
80
+ children: [
81
+ { type: 'metric', label: 'Online', value: '456' },
82
+ { type: 'metric', label: 'New Today', value: '89' },
83
+ ],
84
+ }
85
+ }
86
+ ]
87
+ } as any,
88
+ };
89
+
90
+ export const WithMetricCards: Story = {
91
+ render: renderStory,
92
+ args: {
93
+ type: 'dashboard',
94
+ columns: 3,
95
+ gap: 4,
96
+ widgets: [
97
+ {
98
+ id: 'metric-card-1',
99
+ component: {
100
+ type: 'metric-card',
101
+ title: 'Total Revenue',
102
+ value: '$45,231.89',
103
+ icon: 'DollarSign',
104
+ trend: 'up',
105
+ trendValue: '+20.1%',
106
+ description: 'from last month'
107
+ },
108
+ layout: { x: 0, y: 0, w: 1, h: 1 }
109
+ },
110
+ {
111
+ id: 'metric-card-2',
112
+ component: {
113
+ type: 'metric-card',
114
+ title: 'New Customers',
115
+ value: '+2,350',
116
+ icon: 'Users',
117
+ trend: 'up',
118
+ trendValue: '+180.1%',
119
+ description: 'from last month'
120
+ },
121
+ layout: { x: 1, y: 0, w: 1, h: 1 }
122
+ },
123
+ {
124
+ id: 'metric-card-3',
125
+ component: {
126
+ type: 'metric-card',
127
+ title: 'Active Sessions',
128
+ value: '+573',
129
+ icon: 'Activity',
130
+ trend: 'up',
131
+ trendValue: '+201',
132
+ description: 'since last hour'
133
+ },
134
+ layout: { x: 2, y: 0, w: 1, h: 1 }
135
+ }
136
+ ]
137
+ } as any,
138
+ };
139
+
140
+ export const WithChartsAndMetrics: Story = {
141
+ render: renderStory,
142
+ args: {
143
+ type: 'dashboard',
144
+ columns: 3,
145
+ gap: 4,
146
+ widgets: [
147
+ {
148
+ id: 'metric-1',
149
+ component: {
150
+ type: 'metric-card',
151
+ title: 'Total Revenue',
152
+ value: '$45,231',
153
+ icon: 'DollarSign',
154
+ trend: 'up',
155
+ trendValue: '+12%'
156
+ },
157
+ layout: { x: 0, y: 0, w: 1, h: 1 }
158
+ },
159
+ {
160
+ id: 'metric-2',
161
+ component: {
162
+ type: 'metric-card',
163
+ title: 'Orders',
164
+ value: '856',
165
+ icon: 'ShoppingCart',
166
+ trend: 'up',
167
+ trendValue: '+8%'
168
+ },
169
+ layout: { x: 1, y: 0, w: 1, h: 1 }
170
+ },
171
+ {
172
+ id: 'metric-3',
173
+ component: {
174
+ type: 'metric-card',
175
+ title: 'Bounce Rate',
176
+ value: '2.4%',
177
+ icon: 'TrendingDown',
178
+ trend: 'down',
179
+ trendValue: '-5%'
180
+ },
181
+ layout: { x: 2, y: 0, w: 1, h: 1 }
182
+ },
183
+ {
184
+ id: 'chart-1',
185
+ title: 'Revenue Overview',
186
+ component: {
187
+ type: 'chart',
188
+ chartType: 'line',
189
+ data: [
190
+ { month: 'Jan', revenue: 4000 },
191
+ { month: 'Feb', revenue: 3000 },
192
+ { month: 'Mar', revenue: 6000 },
193
+ { month: 'Apr', revenue: 8000 },
194
+ { month: 'May', revenue: 5000 },
195
+ { month: 'Jun', revenue: 7000 },
196
+ ],
197
+ xAxisKey: 'month',
198
+ series: [{ dataKey: 'revenue' }],
199
+ config: {
200
+ revenue: { label: 'Revenue', color: '#10b981' }
201
+ }
202
+ },
203
+ layout: { x: 0, y: 1, w: 3, h: 2 }
204
+ }
205
+ ]
206
+ } as any,
207
+ };
208
+
209
+ export const WithGridLayout: Story = {
210
+ render: renderStory,
211
+ args: {
212
+ type: 'dashboard',
213
+ name: 'sales_dashboard',
214
+ title: 'Sales Analytics Dashboard',
215
+ enableGridLayout: true,
216
+ persistLayout: true,
217
+ widgets: [
218
+ {
219
+ id: 'total-revenue',
220
+ type: 'metric-card',
221
+ title: 'Total Revenue',
222
+ value: '$142,892',
223
+ change: '+12.5%',
224
+ trend: 'up',
225
+ layout: { x: 0, y: 0, w: 3, h: 2 },
226
+ },
227
+ {
228
+ id: 'new-customers',
229
+ type: 'metric-card',
230
+ title: 'New Customers',
231
+ value: '847',
232
+ change: '+8.2%',
233
+ trend: 'up',
234
+ layout: { x: 3, y: 0, w: 3, h: 2 },
235
+ },
236
+ {
237
+ id: 'conversion-rate',
238
+ type: 'metric-card',
239
+ title: 'Conversion Rate',
240
+ value: '3.24%',
241
+ change: '-0.5%',
242
+ trend: 'down',
243
+ layout: { x: 6, y: 0, w: 3, h: 2 },
244
+ },
245
+ {
246
+ id: 'revenue-chart',
247
+ type: 'bar',
248
+ title: 'Monthly Revenue',
249
+ data: [
250
+ { month: 'Jan', revenue: 12000 },
251
+ { month: 'Feb', revenue: 15000 },
252
+ { month: 'Mar', revenue: 18000 },
253
+ { month: 'Apr', revenue: 14000 },
254
+ { month: 'May', revenue: 20000 },
255
+ { month: 'Jun', revenue: 22000 },
256
+ ],
257
+ xAxisKey: 'month',
258
+ series: [{ dataKey: 'revenue' }],
259
+ layout: { x: 0, y: 2, w: 6, h: 4 },
260
+ },
261
+ {
262
+ id: 'top-products',
263
+ type: 'table',
264
+ title: 'Top Products',
265
+ columns: ['Product', 'Sales', 'Revenue'],
266
+ data: [
267
+ { Product: 'Product A', Sales: 245, Revenue: '$12,450' },
268
+ { Product: 'Product B', Sales: 189, Revenue: '$9,450' },
269
+ { Product: 'Product C', Sales: 156, Revenue: '$7,800' },
270
+ ],
271
+ layout: { x: 6, y: 2, w: 3, h: 4 },
272
+ },
273
+ ],
274
+ } as any,
275
+ };
276
+
277
+ export const EditableLayout: Story = {
278
+ render: renderStory,
279
+ args: {
280
+ type: 'dashboard',
281
+ name: 'custom_dashboard',
282
+ title: 'Customizable Dashboard',
283
+ enableGridLayout: true,
284
+ enableEditMode: true,
285
+ persistLayout: true,
286
+ widgets: [
287
+ {
288
+ id: 'widget-1',
289
+ type: 'metric-card',
290
+ title: 'Metric 1',
291
+ value: '1,234',
292
+ layout: { x: 0, y: 0, w: 3, h: 2 },
293
+ },
294
+ {
295
+ id: 'widget-2',
296
+ type: 'metric-card',
297
+ title: 'Metric 2',
298
+ value: '5,678',
299
+ layout: { x: 3, y: 0, w: 3, h: 2 },
300
+ },
301
+ {
302
+ id: 'widget-3',
303
+ type: 'line',
304
+ title: 'Trend Chart',
305
+ data: [
306
+ { date: 'Mon', value: 100 },
307
+ { date: 'Tue', value: 150 },
308
+ { date: 'Wed', value: 130 },
309
+ { date: 'Thu', value: 180 },
310
+ { date: 'Fri', value: 200 },
311
+ ],
312
+ xAxisKey: 'date',
313
+ series: [{ dataKey: 'value' }],
314
+ layout: { x: 0, y: 2, w: 6, h: 3 },
315
+ },
316
+ ],
317
+ } as any,
318
+ };
@@ -0,0 +1,60 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer } from '../SchemaRenderer';
3
+
4
+ const meta: Meta = {
5
+ title: 'Components/Table',
6
+ component: SchemaRenderer,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ // Schema properties
10
+ }
11
+ };
12
+
13
+ export default meta;
14
+ type Story = StoryObj<typeof meta>;
15
+
16
+ export const DataTable: Story = {
17
+ args: {
18
+ type: 'data-table',
19
+ caption: 'Employees',
20
+ columns: [
21
+ { header: 'ID', accessorKey: 'id', width: '80px' },
22
+ { header: 'Name', accessorKey: 'name' },
23
+ { header: 'Email', accessorKey: 'email' },
24
+ { header: 'Role', accessorKey: 'role' },
25
+ ],
26
+ data: [
27
+ { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin' },
28
+ { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'User' },
29
+ { id: 3, name: 'Bob Johnson', email: 'bob@example.com', role: 'User' }
30
+ ]
31
+ },
32
+ render: (args) => <SchemaRenderer schema={args} />
33
+ };
34
+
35
+ export const FullFeatures: Story = {
36
+ args: {
37
+ type: 'data-table',
38
+ caption: 'Full Feature Table',
39
+ searchable: true,
40
+ pagination: true,
41
+ selectable: true,
42
+ sortable: true,
43
+ exportable: true,
44
+ rowActions: true,
45
+ pageSize: 5,
46
+ columns: [
47
+ { header: 'Invoice', accessorKey: 'invoice' },
48
+ { header: 'Status', accessorKey: 'status' },
49
+ { header: 'Amount', accessorKey: 'amount', enableSorting: true },
50
+ { header: 'Method', accessorKey: 'method' }
51
+ ],
52
+ data: Array.from({ length: 20 }).map((_, i) => ({
53
+ invoice: `INV-${1000 + i}`,
54
+ status: i % 3 === 0 ? 'Paid' : 'Pending',
55
+ amount: `$${(Math.random() * 500).toFixed(2)}`,
56
+ method: i % 2 === 0 ? 'Credit Card' : 'PayPal'
57
+ }))
58
+ },
59
+ render: (args) => <SchemaRenderer schema={args} />
60
+ };
@@ -0,0 +1,102 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer } from '../SchemaRenderer';
3
+
4
+ const meta: Meta = {
5
+ title: 'Components/Data Display Extras',
6
+ component: SchemaRenderer,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ // Schema properties
10
+ }
11
+ };
12
+
13
+ export default meta;
14
+ type Story = StoryObj<typeof meta>;
15
+
16
+ export const KeyboardKey: Story = {
17
+ args: {
18
+ type: 'kbd',
19
+ keys: ['⌘', 'K'],
20
+ className: 'text-xs'
21
+ },
22
+ render: (args) => <SchemaRenderer schema={args} />
23
+ };
24
+
25
+ export const ListUnordered: Story = {
26
+ args: {
27
+ type: 'list',
28
+ title: 'Schema/Data Display/Technology Stack',
29
+ ordered: false,
30
+ items: [
31
+ 'React',
32
+ 'TypeScript',
33
+ 'Tailwind CSS',
34
+ { content: 'Storybook', className: 'font-bold' }
35
+ ]
36
+ },
37
+ render: (args) => <SchemaRenderer schema={args} />
38
+ };
39
+
40
+ export const ListOrdered: Story = {
41
+ args: {
42
+ type: 'list',
43
+ title: 'Schema/Data Display/Installation Steps',
44
+ ordered: true,
45
+ items: [
46
+ 'Run npm install',
47
+ 'Configure provider',
48
+ 'Start application'
49
+ ]
50
+ },
51
+ render: (args) => <SchemaRenderer schema={args} />
52
+ };
53
+
54
+ export const SimpleTable: Story = {
55
+ args: {
56
+ type: 'table',
57
+ bind: 'users',
58
+ columns: [
59
+ { key: 'id', label: 'ID' },
60
+ { key: 'name', label: 'Name' },
61
+ { key: 'role', label: 'Role' }
62
+ ]
63
+ },
64
+ decorators: [
65
+ (Story) => (
66
+ <div className="p-4">
67
+ {/* Mock data context would be needed here, but since stories don't have easy data injection without a provider,
68
+ we rely on the renderer handling undefined/empty data gracefully, or we wrap it in a provider if available using decorators.
69
+ However, SchemaRenderer doesn't accept a provider prop directly.
70
+ The users will see "Table data must be an array" or Empty state.
71
+ Hack: We can't easily inject data into the unified SchemaRenderer story pattern without a wrapping provider in the story.
72
+ */}
73
+ <Story />
74
+ </div>
75
+ )
76
+ ],
77
+ render: (args) => <SchemaRenderer schema={args} />
78
+ };
79
+
80
+ export const TreeView: Story = {
81
+ args: {
82
+ type: 'tree-view',
83
+ title: 'Schema/Data Display/Project Files',
84
+ nodes: [
85
+ {
86
+ id: 'src',
87
+ label: 'src',
88
+ icon: 'folder',
89
+ children: [
90
+ { id: 'components', label: 'components', icon: 'folder', children: [{id: 'Button.tsx', label: 'Button.tsx', icon: 'file'}] },
91
+ { id: 'App.tsx', label: 'App.tsx', icon: 'file' }
92
+ ]
93
+ },
94
+ {
95
+ id: 'package.json',
96
+ label: 'package.json',
97
+ icon: 'file'
98
+ }
99
+ ]
100
+ },
101
+ render: (args) => <SchemaRenderer schema={args} />
102
+ };
@@ -0,0 +1,28 @@
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/Date Picker',
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 DatePicker: Story = {
21
+ render: renderStory,
22
+ args: {
23
+ type: 'date-picker',
24
+ label: 'Date of birth',
25
+ placeholder: 'Pick a date',
26
+ description: 'Your date of birth is used to calculate your age.'
27
+ } as any,
28
+ };