@object-ui/components 0.5.0 → 3.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 (119) hide show
  1. package/.turbo/turbo-build.log +12 -25
  2. package/CHANGELOG.md +32 -0
  3. package/dist/index.css +1 -1
  4. package/dist/index.js +23987 -22576
  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 +4 -0
  8. package/dist/src/custom/navigation-overlay.d.ts +50 -0
  9. package/dist/src/custom/view-skeleton.d.ts +37 -0
  10. package/dist/src/custom/view-states.d.ts +33 -0
  11. package/dist/src/index.d.ts +1 -0
  12. package/dist/src/renderers/action/action-button.d.ts +11 -0
  13. package/dist/src/renderers/action/action-group.d.ts +25 -0
  14. package/dist/src/renderers/action/action-icon.d.ts +10 -0
  15. package/dist/src/renderers/action/action-menu.d.ts +19 -0
  16. package/dist/src/renderers/action/index.d.ts +0 -0
  17. package/dist/src/renderers/action/resolve-icon.d.ts +6 -0
  18. package/package.json +20 -19
  19. package/src/__tests__/PageRendererRegions.test.tsx +664 -55
  20. package/src/__tests__/__snapshots__/snapshot-critical.test.tsx.snap +811 -0
  21. package/src/__tests__/__snapshots__/snapshot.test.tsx.snap +327 -0
  22. package/src/__tests__/accessibility.test.tsx +137 -0
  23. package/src/__tests__/api-consistency.test.tsx +596 -0
  24. package/src/__tests__/color-contrast.test.tsx +212 -0
  25. package/src/__tests__/compliance.test.tsx +72 -0
  26. package/src/__tests__/edge-cases.test.tsx +285 -0
  27. package/src/__tests__/navigation-overlay.test.tsx +273 -0
  28. package/src/__tests__/snapshot-critical.test.tsx +317 -0
  29. package/src/__tests__/snapshot.test.tsx +205 -0
  30. package/src/__tests__/view-compliance.test.tsx +153 -0
  31. package/src/__tests__/wcag-audit.test.tsx +493 -0
  32. package/src/custom/action-param-dialog.tsx +264 -0
  33. package/src/custom/index.ts +4 -0
  34. package/src/custom/navigation-overlay.tsx +296 -0
  35. package/src/custom/view-skeleton.tsx +243 -0
  36. package/src/custom/view-states.tsx +153 -0
  37. package/src/index.ts +1 -0
  38. package/src/renderers/action/action-button.tsx +147 -0
  39. package/src/renderers/action/action-group.tsx +270 -0
  40. package/src/renderers/action/action-icon.tsx +150 -0
  41. package/src/renderers/action/action-menu.tsx +203 -0
  42. package/src/renderers/action/index.ts +18 -0
  43. package/src/renderers/action/resolve-icon.ts +35 -0
  44. package/src/renderers/complex/__tests__/data-table-batch-editing.test.tsx +275 -0
  45. package/src/renderers/complex/__tests__/data-table-cell-renderer.test.tsx +120 -0
  46. package/src/renderers/complex/__tests__/data-table-editing.test.tsx +221 -0
  47. package/src/renderers/complex/data-table.tsx +269 -33
  48. package/src/renderers/complex/resizable.tsx +20 -17
  49. package/src/renderers/data-display/list.tsx +1 -1
  50. package/src/renderers/data-display/table.tsx +1 -1
  51. package/src/renderers/data-display/tree-view.tsx +2 -1
  52. package/src/renderers/form/form.tsx +33 -10
  53. package/src/renderers/index.ts +1 -0
  54. package/src/renderers/layout/aspect-ratio.tsx +1 -1
  55. package/src/renderers/layout/page.tsx +416 -52
  56. package/src/renderers/navigation/sidebar.tsx +6 -0
  57. package/src/renderers/placeholders.tsx +2 -2
  58. package/src/stories/MockedData.stories.tsx +87 -37
  59. package/src/stories-json/Accessibility.mdx +297 -0
  60. package/src/stories-json/EdgeCases.stories.tsx +160 -0
  61. package/src/stories-json/GettingStarted.mdx +89 -0
  62. package/src/stories-json/Introduction.mdx +127 -0
  63. package/src/stories-json/accordion.stories.tsx +1 -1
  64. package/src/stories-json/aggrid.stories.tsx +1 -1
  65. package/src/stories-json/alert.stories.tsx +1 -1
  66. package/src/stories-json/aspect-ratio.stories.tsx +1 -1
  67. package/src/stories-json/avatar.stories.tsx +1 -1
  68. package/src/stories-json/badge.stories.tsx +1 -1
  69. package/src/stories-json/breadcrumb.stories.tsx +1 -1
  70. package/src/stories-json/button-group.stories.tsx +1 -1
  71. package/src/stories-json/button.stories.tsx +1 -1
  72. package/src/stories-json/calendar.stories.tsx +1 -1
  73. package/src/stories-json/card.stories.tsx +1 -1
  74. package/src/stories-json/carousel.stories.tsx +1 -1
  75. package/src/stories-json/charts.stories.tsx +1 -1
  76. package/src/stories-json/chatbot.stories.tsx +1 -1
  77. package/src/stories-json/code-editor.stories.tsx +1 -1
  78. package/src/stories-json/collapsible.stories.tsx +1 -1
  79. package/src/stories-json/controls.stories.tsx +1 -1
  80. package/src/stories-json/crm-live-data.stories.tsx +154 -0
  81. package/src/stories-json/data-table.stories.tsx +80 -4
  82. package/src/stories-json/data_display_extras.stories.tsx +1 -1
  83. package/src/stories-json/date-picker.stories.tsx +1 -1
  84. package/src/stories-json/detail-view.stories.tsx +1 -1
  85. package/src/stories-json/dialog.stories.tsx +1 -1
  86. package/src/stories-json/feedback_extras.stories.tsx +1 -1
  87. package/src/stories-json/feedback_others.stories.tsx +1 -1
  88. package/src/stories-json/form-variants.stories.tsx +210 -0
  89. package/src/stories-json/form_advanced.stories.tsx +1 -1
  90. package/src/stories-json/form_extras.stories.tsx +1 -1
  91. package/src/stories-json/grid.stories.tsx +1 -1
  92. package/src/stories-json/icon.stories.tsx +1 -1
  93. package/src/stories-json/input.stories.tsx +1 -1
  94. package/src/stories-json/kanban.stories.tsx +1 -1
  95. package/src/stories-json/layout_extended.stories.tsx +1 -1
  96. package/src/stories-json/layout_flex.stories.tsx +1 -1
  97. package/src/stories-json/list-view.stories.tsx +1 -1
  98. package/src/stories-json/markdown.stories.tsx +1 -1
  99. package/src/stories-json/menus.stories.tsx +1 -1
  100. package/src/stories-json/metric-card.stories.tsx +1 -1
  101. package/src/stories-json/navigation-menu.stories.tsx +1 -1
  102. package/src/stories-json/object-aggrid-advanced.stories.tsx +389 -0
  103. package/src/stories-json/object-aggrid.stories.tsx +1 -1
  104. package/src/stories-json/object-form.stories.tsx +1 -1
  105. package/src/stories-json/object-gantt.stories.tsx +1 -1
  106. package/src/stories-json/object-grid.stories.tsx +159 -1
  107. package/src/stories-json/object-map.stories.tsx +1 -1
  108. package/src/stories-json/object-view.stories.tsx +1 -1
  109. package/src/stories-json/overlay_extras.stories.tsx +1 -1
  110. package/src/stories-json/overlay_others.stories.tsx +1 -1
  111. package/src/stories-json/resizable.stories.tsx +1 -1
  112. package/src/stories-json/select.stories.tsx +1 -1
  113. package/src/stories-json/separator.stories.tsx +1 -1
  114. package/src/stories-json/statistic.stories.tsx +1 -1
  115. package/src/stories-json/tabs.stories.tsx +1 -1
  116. package/src/stories-json/timeline.stories.tsx +1 -1
  117. package/src/stories-json/typography.stories.tsx +1 -1
  118. package/src/ui/slider.tsx +6 -2
  119. package/src/stories/Introduction.mdx +0 -34
@@ -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/Date Picker',
6
+ title: 'Primitives/Data Entry/Date Picker',
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/DetailView',
6
+ title: 'Plugins/Data Views/Detail 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: 'Components/Dialog',
6
+ title: 'Primitives/Feedback/Dialog',
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/Feedback Extras',
5
+ title: 'Primitives/Feedback/Extras',
6
6
  component: SchemaRenderer,
7
7
  tags: ['autodocs'],
8
8
  };
@@ -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/Feedback Others',
6
+ title: 'Primitives/Feedback/Others',
7
7
  component: SchemaRenderer,
8
8
  parameters: { layout: 'centered' },
9
9
  tags: ['autodocs'],
@@ -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'],