@object-ui/components 0.5.0 → 2.0.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 (96) hide show
  1. package/.turbo/turbo-build.log +12 -25
  2. package/CHANGELOG.md +13 -0
  3. package/dist/index.css +1 -1
  4. package/dist/index.js +23366 -22221
  5. package/dist/index.umd.cjs +30 -30
  6. package/dist/src/custom/action-param-dialog.d.ts +21 -0
  7. package/dist/src/custom/index.d.ts +2 -0
  8. package/dist/src/custom/navigation-overlay.d.ts +50 -0
  9. package/dist/src/index.d.ts +1 -0
  10. package/dist/src/renderers/action/action-button.d.ts +11 -0
  11. package/dist/src/renderers/action/action-group.d.ts +25 -0
  12. package/dist/src/renderers/action/action-icon.d.ts +10 -0
  13. package/dist/src/renderers/action/action-menu.d.ts +19 -0
  14. package/dist/src/renderers/action/index.d.ts +0 -0
  15. package/dist/src/renderers/action/resolve-icon.d.ts +6 -0
  16. package/package.json +9 -8
  17. package/src/__tests__/PageRendererRegions.test.tsx +664 -55
  18. package/src/__tests__/compliance.test.tsx +72 -0
  19. package/src/__tests__/navigation-overlay.test.tsx +273 -0
  20. package/src/__tests__/view-compliance.test.tsx +153 -0
  21. package/src/custom/action-param-dialog.tsx +264 -0
  22. package/src/custom/index.ts +2 -0
  23. package/src/custom/navigation-overlay.tsx +296 -0
  24. package/src/index.ts +1 -0
  25. package/src/renderers/action/action-button.tsx +147 -0
  26. package/src/renderers/action/action-group.tsx +270 -0
  27. package/src/renderers/action/action-icon.tsx +150 -0
  28. package/src/renderers/action/action-menu.tsx +203 -0
  29. package/src/renderers/action/index.ts +18 -0
  30. package/src/renderers/action/resolve-icon.ts +35 -0
  31. package/src/renderers/complex/__tests__/data-table-batch-editing.test.tsx +275 -0
  32. package/src/renderers/complex/__tests__/data-table-cell-renderer.test.tsx +120 -0
  33. package/src/renderers/complex/__tests__/data-table-editing.test.tsx +221 -0
  34. package/src/renderers/complex/data-table.tsx +242 -21
  35. package/src/renderers/form/form.tsx +23 -4
  36. package/src/renderers/index.ts +1 -0
  37. package/src/renderers/layout/page.tsx +416 -52
  38. package/src/renderers/navigation/sidebar.tsx +6 -0
  39. package/src/renderers/placeholders.tsx +2 -2
  40. package/src/stories/Introduction.mdx +54 -27
  41. package/src/stories/MockedData.stories.tsx +87 -37
  42. package/src/stories-json/accordion.stories.tsx +1 -1
  43. package/src/stories-json/aggrid.stories.tsx +1 -1
  44. package/src/stories-json/alert.stories.tsx +1 -1
  45. package/src/stories-json/aspect-ratio.stories.tsx +1 -1
  46. package/src/stories-json/avatar.stories.tsx +1 -1
  47. package/src/stories-json/badge.stories.tsx +1 -1
  48. package/src/stories-json/breadcrumb.stories.tsx +1 -1
  49. package/src/stories-json/button-group.stories.tsx +1 -1
  50. package/src/stories-json/button.stories.tsx +1 -1
  51. package/src/stories-json/calendar.stories.tsx +1 -1
  52. package/src/stories-json/card.stories.tsx +1 -1
  53. package/src/stories-json/carousel.stories.tsx +1 -1
  54. package/src/stories-json/charts.stories.tsx +1 -1
  55. package/src/stories-json/chatbot.stories.tsx +1 -1
  56. package/src/stories-json/code-editor.stories.tsx +1 -1
  57. package/src/stories-json/collapsible.stories.tsx +1 -1
  58. package/src/stories-json/controls.stories.tsx +1 -1
  59. package/src/stories-json/crm-live-data.stories.tsx +154 -0
  60. package/src/stories-json/data-table.stories.tsx +80 -4
  61. package/src/stories-json/data_display_extras.stories.tsx +1 -1
  62. package/src/stories-json/date-picker.stories.tsx +1 -1
  63. package/src/stories-json/detail-view.stories.tsx +1 -1
  64. package/src/stories-json/dialog.stories.tsx +1 -1
  65. package/src/stories-json/feedback_extras.stories.tsx +1 -1
  66. package/src/stories-json/feedback_others.stories.tsx +1 -1
  67. package/src/stories-json/form-variants.stories.tsx +210 -0
  68. package/src/stories-json/form_advanced.stories.tsx +1 -1
  69. package/src/stories-json/form_extras.stories.tsx +1 -1
  70. package/src/stories-json/grid.stories.tsx +1 -1
  71. package/src/stories-json/icon.stories.tsx +1 -1
  72. package/src/stories-json/input.stories.tsx +1 -1
  73. package/src/stories-json/kanban.stories.tsx +1 -1
  74. package/src/stories-json/layout_extended.stories.tsx +1 -1
  75. package/src/stories-json/layout_flex.stories.tsx +1 -1
  76. package/src/stories-json/list-view.stories.tsx +1 -1
  77. package/src/stories-json/markdown.stories.tsx +1 -1
  78. package/src/stories-json/menus.stories.tsx +1 -1
  79. package/src/stories-json/metric-card.stories.tsx +1 -1
  80. package/src/stories-json/navigation-menu.stories.tsx +1 -1
  81. package/src/stories-json/object-aggrid-advanced.stories.tsx +389 -0
  82. package/src/stories-json/object-aggrid.stories.tsx +1 -1
  83. package/src/stories-json/object-form.stories.tsx +1 -1
  84. package/src/stories-json/object-gantt.stories.tsx +1 -1
  85. package/src/stories-json/object-grid.stories.tsx +159 -1
  86. package/src/stories-json/object-map.stories.tsx +1 -1
  87. package/src/stories-json/object-view.stories.tsx +1 -1
  88. package/src/stories-json/overlay_extras.stories.tsx +1 -1
  89. package/src/stories-json/overlay_others.stories.tsx +1 -1
  90. package/src/stories-json/resizable.stories.tsx +1 -1
  91. package/src/stories-json/select.stories.tsx +1 -1
  92. package/src/stories-json/separator.stories.tsx +1 -1
  93. package/src/stories-json/statistic.stories.tsx +1 -1
  94. package/src/stories-json/tabs.stories.tsx +1 -1
  95. package/src/stories-json/timeline.stories.tsx +1 -1
  96. package/src/stories-json/typography.stories.tsx +1 -1
@@ -0,0 +1,210 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SchemaRenderer, SchemaRendererProvider } from '@object-ui/react';
3
+ import type { BaseSchema } from '@object-ui/types';
4
+ import { createStorybookDataSource } from '@storybook-config/datasource';
5
+
6
+ const meta = {
7
+ title: 'Plugins/Forms/Form Variants',
8
+ component: SchemaRenderer,
9
+ parameters: {
10
+ layout: 'padded',
11
+ },
12
+ tags: ['autodocs'],
13
+ argTypes: {
14
+ schema: { table: { disable: true } },
15
+ },
16
+ } satisfies Meta<any>;
17
+
18
+ export default meta;
19
+ type Story = StoryObj<typeof meta>;
20
+
21
+ const dataSource = createStorybookDataSource();
22
+
23
+ const renderStory = (args: any) => (
24
+ <SchemaRendererProvider dataSource={dataSource}>
25
+ <div className="max-w-4xl mx-auto">
26
+ <SchemaRenderer schema={args as unknown as BaseSchema} />
27
+ </div>
28
+ </SchemaRendererProvider>
29
+ );
30
+
31
+ // ==========================================
32
+ // Sectioned Form
33
+ // ==========================================
34
+
35
+ export const SectionedForm: Story = {
36
+ name: 'Sectioned Form',
37
+ render: renderStory,
38
+ args: {
39
+ type: 'object-form',
40
+ objectName: 'Employee',
41
+ formType: 'simple',
42
+ sections: [
43
+ {
44
+ name: 'personal',
45
+ label: 'Personal Information',
46
+ description: 'Basic employee details',
47
+ columns: 2,
48
+ collapsible: true,
49
+ fields: [
50
+ { name: 'firstName', label: 'First Name', type: 'text', required: true },
51
+ { name: 'lastName', label: 'Last Name', type: 'text', required: true },
52
+ { name: 'email', label: 'Email', type: 'email', required: true },
53
+ { name: 'phone', label: 'Phone', type: 'tel' },
54
+ ]
55
+ },
56
+ {
57
+ name: 'employment',
58
+ label: 'Employment Details',
59
+ description: 'Job-related information',
60
+ columns: 2,
61
+ collapsible: true,
62
+ fields: [
63
+ { name: 'department', label: 'Department', type: 'select', options: ['Engineering', 'Sales', 'Marketing', 'HR'] },
64
+ { name: 'title', label: 'Job Title', type: 'text' },
65
+ { name: 'startDate', label: 'Start Date', type: 'date' },
66
+ { name: 'salary', label: 'Salary', type: 'number' },
67
+ ]
68
+ },
69
+ {
70
+ name: 'address',
71
+ label: 'Address',
72
+ columns: 1,
73
+ collapsible: true,
74
+ collapsed: true,
75
+ fields: [
76
+ { name: 'street', label: 'Street Address', type: 'text' },
77
+ { name: 'city', label: 'City', type: 'text' },
78
+ { name: 'state', label: 'State', type: 'text' },
79
+ { name: 'zip', label: 'ZIP Code', type: 'text' },
80
+ ]
81
+ }
82
+ ],
83
+ className: 'w-full'
84
+ } as any,
85
+ };
86
+
87
+ // ==========================================
88
+ // Tabbed Form
89
+ // ==========================================
90
+
91
+ export const TabbedForm: Story = {
92
+ name: 'Tabbed Form',
93
+ render: renderStory,
94
+ args: {
95
+ type: 'object-form',
96
+ objectName: 'Contact',
97
+ formType: 'tabbed',
98
+ defaultTab: 'basic',
99
+ sections: [
100
+ {
101
+ name: 'basic',
102
+ label: 'Basic Info',
103
+ columns: 2,
104
+ fields: [
105
+ { name: 'name', label: 'Full Name', type: 'text', required: true },
106
+ { name: 'email', label: 'Email', type: 'email', required: true },
107
+ { name: 'phone', label: 'Phone', type: 'tel' },
108
+ { name: 'company', label: 'Company', type: 'text' },
109
+ ]
110
+ },
111
+ {
112
+ name: 'social',
113
+ label: 'Social Media',
114
+ columns: 2,
115
+ fields: [
116
+ { name: 'linkedin', label: 'LinkedIn', type: 'url' },
117
+ { name: 'twitter', label: 'Twitter', type: 'text' },
118
+ { name: 'github', label: 'GitHub', type: 'text' },
119
+ { name: 'website', label: 'Website', type: 'url' },
120
+ ]
121
+ },
122
+ {
123
+ name: 'notes',
124
+ label: 'Notes',
125
+ columns: 1,
126
+ fields: [
127
+ { name: 'notes', label: 'Additional Notes', type: 'textarea', rows: 6 },
128
+ { name: 'tags', label: 'Tags', type: 'text' },
129
+ ]
130
+ }
131
+ ],
132
+ className: 'w-full'
133
+ } as any,
134
+ };
135
+
136
+ // ==========================================
137
+ // Wizard Form
138
+ // ==========================================
139
+
140
+ export const WizardForm: Story = {
141
+ name: 'Wizard Form',
142
+ render: renderStory,
143
+ args: {
144
+ type: 'object-form',
145
+ objectName: 'Account',
146
+ formType: 'wizard',
147
+ showStepIndicator: true,
148
+ nextText: 'Continue',
149
+ prevText: 'Go Back',
150
+ sections: [
151
+ {
152
+ name: 'step1',
153
+ label: 'Company Details',
154
+ description: 'Tell us about your company',
155
+ columns: 2,
156
+ fields: [
157
+ { name: 'companyName', label: 'Company Name', type: 'text', required: true },
158
+ { name: 'industry', label: 'Industry', type: 'select', options: ['Technology', 'Finance', 'Healthcare', 'Retail'] },
159
+ { name: 'website', label: 'Website', type: 'url' },
160
+ { name: 'employees', label: 'Employee Count', type: 'number' },
161
+ ]
162
+ },
163
+ {
164
+ name: 'step2',
165
+ label: 'Primary Contact',
166
+ description: 'Who should we contact?',
167
+ columns: 2,
168
+ fields: [
169
+ { name: 'contactName', label: 'Contact Name', type: 'text', required: true },
170
+ { name: 'contactEmail', label: 'Contact Email', type: 'email', required: true },
171
+ { name: 'contactPhone', label: 'Phone', type: 'tel' },
172
+ { name: 'contactRole', label: 'Role', type: 'text' },
173
+ ]
174
+ },
175
+ {
176
+ name: 'step3',
177
+ label: 'Preferences',
178
+ description: 'Configure your preferences',
179
+ columns: 1,
180
+ fields: [
181
+ { name: 'plan', label: 'Plan', type: 'select', options: ['Starter', 'Professional', 'Enterprise'] },
182
+ { name: 'newsletter', label: 'Subscribe to Newsletter', type: 'checkbox' },
183
+ { name: 'notes', label: 'Additional Notes', type: 'textarea', rows: 4 },
184
+ ]
185
+ }
186
+ ],
187
+ className: 'w-full'
188
+ } as any,
189
+ };
190
+
191
+ // ==========================================
192
+ // Simple Form (Default)
193
+ // ==========================================
194
+
195
+ export const SimpleForm: Story = {
196
+ name: 'Simple Form (Default)',
197
+ render: renderStory,
198
+ args: {
199
+ type: 'object-form',
200
+ objectName: 'Task',
201
+ customFields: [
202
+ { name: 'title', label: 'Task Title', type: 'text', required: true },
203
+ { name: 'description', label: 'Description', type: 'textarea', rows: 3 },
204
+ { name: 'priority', label: 'Priority', type: 'select', options: ['Low', 'Medium', 'High', 'Critical'] },
205
+ { name: 'dueDate', label: 'Due Date', type: 'date' },
206
+ { name: 'assignee', label: 'Assignee', type: 'text' },
207
+ ],
208
+ className: 'w-full max-w-2xl'
209
+ } as any,
210
+ };
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Components/Form Advanced',
6
+ title: 'Primitives/Data Entry/Form Advanced',
7
7
  component: SchemaRenderer,
8
8
  parameters: { layout: 'centered' },
9
9
  tags: ['autodocs'],
@@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { SchemaRenderer } from '../SchemaRenderer';
3
3
 
4
4
  const meta: Meta = {
5
- title: 'Components/Form Extras',
5
+ title: 'Primitives/Data Entry/Form Extras',
6
6
  component: SchemaRenderer,
7
7
  tags: ['autodocs'],
8
8
  argTypes: {
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Components/Grid',
6
+ title: 'Primitives/Layout/Grid',
7
7
  component: SchemaRenderer,
8
8
  parameters: { layout: 'padded' },
9
9
  tags: ['autodocs'],
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Components/Icon',
6
+ title: 'Primitives/General/Icon',
7
7
  component: SchemaRenderer,
8
8
  parameters: { layout: 'centered' },
9
9
  tags: ['autodocs'],
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Components/Input',
6
+ title: 'Primitives/Data Entry/Input',
7
7
  component: SchemaRenderer,
8
8
  parameters: { layout: 'centered' },
9
9
  tags: ['autodocs'],
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Views/Kanban',
6
+ title: 'Plugins/Scheduling/Kanban',
7
7
  component: SchemaRenderer,
8
8
  parameters: {
9
9
  layout: 'padded',
@@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { SchemaRenderer } from '../SchemaRenderer';
3
3
 
4
4
  const meta: Meta = {
5
- title: 'Components/Extended',
5
+ title: 'Primitives/Layout/Container',
6
6
  component: SchemaRenderer,
7
7
  tags: ['autodocs'],
8
8
  };
@@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { SchemaRenderer } from '../SchemaRenderer';
3
3
 
4
4
  const meta: Meta = {
5
- title: 'Components/Flex',
5
+ title: 'Primitives/Layout/Flex',
6
6
  component: SchemaRenderer,
7
7
  tags: ['autodocs'],
8
8
  argTypes: {
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Views/ListView',
6
+ title: 'Plugins/Data Views/List View',
7
7
  component: SchemaRenderer,
8
8
  parameters: {
9
9
  layout: 'padded',
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Views/Markdown',
6
+ title: 'Plugins/Rich Content/Markdown',
7
7
  component: SchemaRenderer,
8
8
  parameters: {
9
9
  layout: 'padded',
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Components/Menus',
6
+ title: 'Primitives/Navigation/Menus',
7
7
  component: SchemaRenderer,
8
8
  parameters: { layout: 'centered' },
9
9
  tags: ['autodocs'],
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Components/Data Display/Metric Card',
6
+ title: 'Primitives/Data Display/Metric Card',
7
7
  component: SchemaRenderer,
8
8
  parameters: {
9
9
  layout: 'padded',
@@ -3,7 +3,7 @@ import { SchemaRenderer } from '../SchemaRenderer';
3
3
  import type { BaseSchema } from '@object-ui/types';
4
4
 
5
5
  const meta = {
6
- title: 'Components/Navigation Menu',
6
+ title: 'Primitives/Navigation/Navigation Menu',
7
7
  component: SchemaRenderer,
8
8
  parameters: { layout: 'centered' },
9
9
  tags: ['autodocs'],