@pattern-stack/frontend-patterns 0.0.1 → 0.0.3

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 (153) hide show
  1. package/README.md +6 -6
  2. package/package.json +3 -5
  3. package/src/App.css +0 -42
  4. package/src/App.tsx +0 -54
  5. package/src/__tests__/README.md +0 -221
  6. package/src/__tests__/atoms/hooks/simple-hooks.test.ts +0 -44
  7. package/src/__tests__/atoms/ui/button.test.tsx +0 -68
  8. package/src/__tests__/atoms/utils/simple.test.ts +0 -18
  9. package/src/__tests__/atoms/utils/utils.test.ts +0 -77
  10. package/src/__tests__/features/auth/simple-auth.test.tsx +0 -40
  11. package/src/__tests__/molecules/layout/simple-layout.test.tsx +0 -81
  12. package/src/__tests__/organisms/showcase/simple-showcase.test.tsx +0 -167
  13. package/src/__tests__/setup.ts +0 -51
  14. package/src/__tests__/utils.tsx +0 -123
  15. package/src/atoms/composed/Accordion/Accordion.tsx +0 -271
  16. package/src/atoms/composed/Accordion/index.ts +0 -1
  17. package/src/atoms/composed/Alert/Alert.tsx +0 -132
  18. package/src/atoms/composed/Alert/index.ts +0 -1
  19. package/src/atoms/composed/Breadcrumb/Breadcrumb.tsx +0 -83
  20. package/src/atoms/composed/Breadcrumb/index.ts +0 -1
  21. package/src/atoms/composed/Chart/Chart.tsx +0 -425
  22. package/src/atoms/composed/Chart/index.ts +0 -2
  23. package/src/atoms/composed/ColorSwatch/ColorSwatch.tsx +0 -72
  24. package/src/atoms/composed/ColorSwatch/index.ts +0 -1
  25. package/src/atoms/composed/DarkModeToggle.tsx +0 -66
  26. package/src/atoms/composed/DataBadge/DataBadge.tsx +0 -81
  27. package/src/atoms/composed/DataBadge/index.ts +0 -1
  28. package/src/atoms/composed/DataTable/DataTable.tsx +0 -394
  29. package/src/atoms/composed/DataTable/TableCellWithTooltip.tsx +0 -41
  30. package/src/atoms/composed/DataTable/index.ts +0 -2
  31. package/src/atoms/composed/DateTimePicker/DateTimePicker.tsx +0 -611
  32. package/src/atoms/composed/DateTimePicker/index.ts +0 -2
  33. package/src/atoms/composed/DetailedCard/DetailedCard.tsx +0 -181
  34. package/src/atoms/composed/DetailedCard/index.ts +0 -2
  35. package/src/atoms/composed/EmptyState/EmptyState.tsx +0 -90
  36. package/src/atoms/composed/EmptyState/index.ts +0 -1
  37. package/src/atoms/composed/FileUpload/FileUpload.tsx +0 -477
  38. package/src/atoms/composed/FileUpload/index.ts +0 -2
  39. package/src/atoms/composed/FormField/FormField.tsx +0 -92
  40. package/src/atoms/composed/FormField/index.ts +0 -1
  41. package/src/atoms/composed/GlobalSearch/GlobalSearch.tsx +0 -37
  42. package/src/atoms/composed/GlobalSearch/index.ts +0 -1
  43. package/src/atoms/composed/IconBadge/IconBadge.tsx +0 -95
  44. package/src/atoms/composed/IconBadge/index.ts +0 -2
  45. package/src/atoms/composed/Modal/Modal.tsx +0 -223
  46. package/src/atoms/composed/Modal/index.ts +0 -2
  47. package/src/atoms/composed/PaletteSwitcher.tsx +0 -386
  48. package/src/atoms/composed/ProgressBar/ProgressBar.tsx +0 -116
  49. package/src/atoms/composed/ProgressBar/index.ts +0 -1
  50. package/src/atoms/composed/StatCard/StatCard.tsx +0 -219
  51. package/src/atoms/composed/StatCard/index.ts +0 -1
  52. package/src/atoms/composed/StyleGuide.tsx +0 -717
  53. package/src/atoms/composed/Toast/Toast.tsx +0 -219
  54. package/src/atoms/composed/Toast/index.ts +0 -1
  55. package/src/atoms/composed/Tooltip/Tooltip.tsx +0 -213
  56. package/src/atoms/composed/Tooltip/index.ts +0 -1
  57. package/src/atoms/composed/UserAvatar/UserAvatar.tsx +0 -139
  58. package/src/atoms/composed/UserAvatar/index.ts +0 -1
  59. package/src/atoms/composed/UserMenu/UserMenu.tsx +0 -16
  60. package/src/atoms/composed/UserMenu/index.ts +0 -1
  61. package/src/atoms/composed/index.ts +0 -29
  62. package/src/atoms/hooks/useApi.ts +0 -80
  63. package/src/atoms/hooks/useHealth.ts +0 -17
  64. package/src/atoms/index.ts +0 -13
  65. package/src/atoms/services/api/client.ts +0 -134
  66. package/src/atoms/services/auth-service.ts +0 -248
  67. package/src/atoms/services/health.ts +0 -15
  68. package/src/atoms/services/index.ts +0 -3
  69. package/src/atoms/shared/config/constants.ts +0 -17
  70. package/src/atoms/shared/config/dashboard-sizes.ts +0 -111
  71. package/src/atoms/shared/config/environment.ts +0 -10
  72. package/src/atoms/shared/index.ts +0 -4
  73. package/src/atoms/shared/styles/color-palettes.css +0 -566
  74. package/src/atoms/types/auth.ts +0 -62
  75. package/src/atoms/types/generated.ts +0 -1469
  76. package/src/atoms/types/index.ts +0 -4
  77. package/src/atoms/types/loading.ts +0 -28
  78. package/src/atoms/ui/Badge.tsx +0 -30
  79. package/src/atoms/ui/ErrorBoundary.tsx +0 -59
  80. package/src/atoms/ui/Select.tsx +0 -53
  81. package/src/atoms/ui/Switch.tsx +0 -42
  82. package/src/atoms/ui/Tabs.tsx +0 -118
  83. package/src/atoms/ui/avatar.tsx +0 -48
  84. package/src/atoms/ui/button.tsx +0 -70
  85. package/src/atoms/ui/card.tsx +0 -76
  86. package/src/atoms/ui/dropdown-menu.tsx +0 -199
  87. package/src/atoms/ui/index.ts +0 -39
  88. package/src/atoms/ui/input.tsx +0 -23
  89. package/src/atoms/ui/label.tsx +0 -23
  90. package/src/atoms/ui/skeleton.tsx +0 -13
  91. package/src/atoms/ui/spinner.tsx +0 -49
  92. package/src/atoms/ui/table.tsx +0 -116
  93. package/src/atoms/utils/animations.ts +0 -135
  94. package/src/atoms/utils/tooltip-helpers.ts +0 -140
  95. package/src/atoms/utils/utils.ts +0 -9
  96. package/src/features/auth/components/LoginForm.tsx +0 -168
  97. package/src/features/auth/components/LogoutButton.tsx +0 -19
  98. package/src/features/auth/components/ProtectedRoute.tsx +0 -60
  99. package/src/features/auth/components/index.ts +0 -4
  100. package/src/features/auth/hooks/index.ts +0 -2
  101. package/src/features/auth/hooks/useAuth.tsx +0 -205
  102. package/src/features/auth/hooks/usePermissions.ts +0 -35
  103. package/src/features/auth/index.ts +0 -2
  104. package/src/features/index.ts +0 -2
  105. package/src/index.css +0 -704
  106. package/src/index.ts +0 -13
  107. package/src/main.tsx +0 -48
  108. package/src/molecules/.gitkeep +0 -0
  109. package/src/molecules/forms/FormGroup.tsx +0 -75
  110. package/src/molecules/forms/SearchInput.tsx +0 -259
  111. package/src/molecules/forms/index.ts +0 -4
  112. package/src/molecules/index.ts +0 -4
  113. package/src/molecules/layout/AppHeader/AppHeader.tsx +0 -42
  114. package/src/molecules/layout/AppHeader/index.ts +0 -1
  115. package/src/molecules/layout/AppLayout.tsx +0 -29
  116. package/src/molecules/layout/PageTemplate.tsx +0 -87
  117. package/src/molecules/layout/SectionHeader/SectionHeader.tsx +0 -87
  118. package/src/molecules/layout/SectionHeader/index.ts +0 -1
  119. package/src/molecules/layout/ShowcaseSection.tsx +0 -57
  120. package/src/molecules/layout/Sidebar.tsx +0 -144
  121. package/src/molecules/layout/SidebarButton/SidebarButton.tsx +0 -99
  122. package/src/molecules/layout/SidebarButton/index.ts +0 -1
  123. package/src/molecules/layout/SidebarContext.tsx +0 -31
  124. package/src/molecules/layout/index.ts +0 -7
  125. package/src/molecules/navigation/NavMenu.tsx +0 -188
  126. package/src/molecules/navigation/Pagination.tsx +0 -172
  127. package/src/molecules/navigation/index.ts +0 -4
  128. package/src/organisms/index.ts +0 -5
  129. package/src/organisms/showcase/ComponentShowcasePage.tsx +0 -2496
  130. package/src/organisms/showcase/index.ts +0 -1
  131. package/src/pages/AdminShowcase/AdminCRUDShowcase.tsx +0 -242
  132. package/src/pages/AdminShowcase/AdminDashboardShowcase.tsx +0 -171
  133. package/src/pages/AdminShowcase/AdminDetailShowcase.tsx +0 -385
  134. package/src/pages/AdminShowcase/index.tsx +0 -3
  135. package/src/pages/ComponentShowcase/BadgesShowcase.tsx +0 -188
  136. package/src/pages/ComponentShowcase/CardsShowcase.tsx +0 -392
  137. package/src/pages/ComponentShowcase/PalettesShowcase.tsx +0 -207
  138. package/src/pages/ComponentShowcase/StatesShowcase.tsx +0 -485
  139. package/src/pages/ComponentShowcase/TablesShowcase.tsx +0 -134
  140. package/src/pages/ComponentShowcase/TypographyShowcase.tsx +0 -255
  141. package/src/pages/ComponentShowcase/index.tsx +0 -188
  142. package/src/pages/index.ts +0 -2
  143. package/src/templates/AuthTemplate.tsx +0 -216
  144. package/src/templates/ComponentShowcaseTemplate.tsx +0 -173
  145. package/src/templates/DashboardTemplate.tsx +0 -232
  146. package/src/templates/DataTemplate.tsx +0 -319
  147. package/src/templates/admin/AdminCRUDTemplate.tsx +0 -630
  148. package/src/templates/admin/AdminDashboardTemplate.tsx +0 -351
  149. package/src/templates/admin/AdminDetailTemplate.tsx +0 -563
  150. package/src/templates/admin/index.ts +0 -29
  151. package/src/templates/factory.tsx +0 -169
  152. package/src/templates/index.ts +0 -37
  153. package/src/vite-env.d.ts +0 -1
@@ -1 +0,0 @@
1
- export { ComponentShowcasePage } from './ComponentShowcasePage';
@@ -1,242 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { AdminCRUDTemplate } from '../../templates/admin';
3
- import type { ResourceSchema, CRUDPermissions, CRUDActions } from '../../templates/admin';
4
- import { DataBadge } from '../../atoms/composed';
5
-
6
- // Mock user data
7
- const mockUsers = [
8
- {
9
- id: '1',
10
- name: 'John Doe',
11
- email: 'john.doe@example.com',
12
- role: 'Admin',
13
- status: 'Active',
14
- lastLogin: '2024-01-15',
15
- isActive: true
16
- },
17
- {
18
- id: '2',
19
- name: 'Sarah Wilson',
20
- email: 'sarah.wilson@example.com',
21
- role: 'Editor',
22
- status: 'Active',
23
- lastLogin: '2024-01-14',
24
- isActive: true
25
- },
26
- {
27
- id: '3',
28
- name: 'Mike Johnson',
29
- email: 'mike.johnson@example.com',
30
- role: 'Viewer',
31
- status: 'Inactive',
32
- lastLogin: '2024-01-10',
33
- isActive: false
34
- },
35
- {
36
- id: '4',
37
- name: 'Emily Davis',
38
- email: 'emily.davis@example.com',
39
- role: 'Editor',
40
- status: 'Active',
41
- lastLogin: '2024-01-15',
42
- isActive: true
43
- },
44
- {
45
- id: '5',
46
- name: 'Alex Chen',
47
- email: 'alex.chen@example.com',
48
- role: 'Admin',
49
- status: 'Active',
50
- lastLogin: '2024-01-13',
51
- isActive: true
52
- }
53
- ];
54
-
55
- const userSchema: ResourceSchema = {
56
- primaryKey: 'id',
57
- displayName: 'User',
58
- displayNamePlural: 'Users',
59
- fields: [
60
- {
61
- name: 'name',
62
- label: 'Full Name',
63
- type: 'text',
64
- required: true,
65
- searchable: true,
66
- showInTable: true
67
- },
68
- {
69
- name: 'email',
70
- label: 'Email Address',
71
- type: 'email',
72
- required: true,
73
- searchable: true,
74
- showInTable: true
75
- },
76
- {
77
- name: 'role',
78
- label: 'Role',
79
- type: 'select',
80
- required: true,
81
- showInTable: true,
82
- options: [
83
- { value: 'admin', label: 'Administrator' },
84
- { value: 'editor', label: 'Editor' },
85
- { value: 'viewer', label: 'Viewer' }
86
- ],
87
- render: (value) => {
88
- const roleCategories: Record<string, 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8> = {
89
- 'Admin': 1,
90
- 'Editor': 2,
91
- 'Viewer': 6
92
- };
93
- return (
94
- <DataBadge
95
- variant="category"
96
- category={roleCategories[value as string] || 3}
97
- >
98
- {value as string}
99
- </DataBadge>
100
- );
101
- }
102
- },
103
- {
104
- name: 'isActive',
105
- label: 'Active Status',
106
- type: 'boolean',
107
- required: true,
108
- showInTable: true
109
- },
110
- {
111
- name: 'lastLogin',
112
- label: 'Last Login',
113
- type: 'date',
114
- showInTable: true
115
- }
116
- ]
117
- };
118
-
119
- const permissions: CRUDPermissions = {
120
- view: true,
121
- create: true,
122
- edit: true,
123
- delete: true,
124
- export: true,
125
- import: true,
126
- bulkEdit: true
127
- };
128
-
129
- export const AdminCRUDShowcase: React.FC = () => {
130
- const [users, setUsers] = useState(mockUsers);
131
- const [isLoading, setIsLoading] = useState(false);
132
-
133
- const actions: CRUDActions = {
134
- onCreate: async (data) => {
135
- setIsLoading(true);
136
- // Simulate API call
137
- await new Promise(resolve => setTimeout(resolve, 1000));
138
-
139
- const newUser = {
140
- id: String(users.length + 1),
141
- name: data.name as string,
142
- email: data.email as string,
143
- role: data.role as string,
144
- status: data.isActive ? 'Active' : 'Inactive',
145
- lastLogin: new Date().toISOString().split('T')[0],
146
- isActive: data.isActive as boolean
147
- };
148
-
149
- setUsers(prev => [...prev, newUser]);
150
- setIsLoading(false);
151
- console.log('Created user:', newUser);
152
- },
153
-
154
- onUpdate: async (id, data) => {
155
- setIsLoading(true);
156
- await new Promise(resolve => setTimeout(resolve, 1000));
157
-
158
- setUsers(prev => prev.map(user =>
159
- user.id === id
160
- ? {
161
- ...user,
162
- name: data.name as string,
163
- email: data.email as string,
164
- role: data.role as string,
165
- isActive: data.isActive as boolean,
166
- status: data.isActive ? 'Active' : 'Inactive'
167
- }
168
- : user
169
- ));
170
- setIsLoading(false);
171
- console.log('Updated user:', id, data);
172
- },
173
-
174
- onDelete: async (id) => {
175
- setIsLoading(true);
176
- await new Promise(resolve => setTimeout(resolve, 500));
177
-
178
- setUsers(prev => prev.filter(user => user.id !== id));
179
- setIsLoading(false);
180
- console.log('Deleted user:', id);
181
- },
182
-
183
- onBulkDelete: async (ids) => {
184
- setIsLoading(true);
185
- await new Promise(resolve => setTimeout(resolve, 1000));
186
-
187
- setUsers(prev => prev.filter(user => !ids.includes(user.id)));
188
- setIsLoading(false);
189
- console.log('Bulk deleted users:', ids);
190
- },
191
-
192
- onExport: async (format) => {
193
- console.log('Exporting users as:', format);
194
- // Simulate export
195
- const data = JSON.stringify(users, null, 2);
196
- const blob = new Blob([data], { type: 'application/json' });
197
- const url = URL.createObjectURL(blob);
198
- const a = document.createElement('a');
199
- a.href = url;
200
- a.download = `users.${format}`;
201
- a.click();
202
- URL.revokeObjectURL(url);
203
- },
204
-
205
- onImport: async (file) => {
206
- console.log('Importing users from file:', file.name);
207
- // In a real app, you'd parse the file and add users
208
- },
209
-
210
- onRefresh: async () => {
211
- setIsLoading(true);
212
- await new Promise(resolve => setTimeout(resolve, 1000));
213
- setIsLoading(false);
214
- console.log('Refreshed user data');
215
- }
216
- };
217
-
218
- const customActions = [
219
- {
220
- label: 'Send Invitation',
221
- onClick: () => console.log('Sending bulk invitations'),
222
- variant: 'outline' as const
223
- },
224
- {
225
- label: 'Generate Report',
226
- onClick: () => console.log('Generating user report'),
227
- variant: 'outline' as const
228
- }
229
- ];
230
-
231
- return (
232
- <AdminCRUDTemplate
233
- schema={userSchema}
234
- data={users}
235
- permissions={permissions}
236
- actions={actions}
237
- isLoading={isLoading}
238
- customActions={customActions}
239
- category={1}
240
- />
241
- );
242
- };
@@ -1,171 +0,0 @@
1
- import React from 'react';
2
- import { AdminDashboardTemplate } from '../../templates/admin';
3
- import type { MetricCard, ChartConfig, ActivityItem, AlertItem } from '../../templates/admin';
4
- import { Users, DollarSign, TrendingUp } from 'lucide-react';
5
-
6
- // Mock data for demonstration
7
- const mockMetrics: MetricCard[] = [
8
- {
9
- title: 'Total Users',
10
- value: '12,486',
11
- change: 12.5,
12
- changePeriod: 'from last month',
13
- icon: <Users className="w-5 h-5" />,
14
- category: 1,
15
- onClick: () => console.log('Navigate to users')
16
- },
17
- {
18
- title: 'Revenue',
19
- value: '$89,432',
20
- change: 8.2,
21
- changePeriod: 'from last month',
22
- icon: <DollarSign className="w-5 h-5" />,
23
- category: 2,
24
- onClick: () => console.log('Navigate to revenue')
25
- },
26
- {
27
- title: 'Growth Rate',
28
- value: '23.8%',
29
- change: -2.1,
30
- changePeriod: 'from last quarter',
31
- icon: <TrendingUp className="w-5 h-5" />,
32
- category: 3,
33
- onClick: () => console.log('Navigate to analytics')
34
- },
35
- {
36
- title: 'Active Sessions',
37
- value: '1,247',
38
- change: 5.7,
39
- changePeriod: 'from yesterday',
40
- icon: <Users className="w-5 h-5" />,
41
- category: 4,
42
- onClick: () => console.log('Navigate to sessions')
43
- }
44
- ];
45
-
46
- const mockCharts: ChartConfig[] = [
47
- {
48
- title: 'User Growth',
49
- type: 'line',
50
- data: [
51
- { label: 'Jan', value: 1200 },
52
- { label: 'Feb', value: 1400 },
53
- { label: 'Mar', value: 1800 },
54
- { label: 'Apr', value: 2200 },
55
- { label: 'May', value: 2800 },
56
- { label: 'Jun', value: 3200 }
57
- ],
58
- category: 1
59
- },
60
- {
61
- title: 'Revenue Distribution',
62
- type: 'pie',
63
- data: [
64
- { label: 'Subscriptions', value: 45000, category: 2 },
65
- { label: 'One-time', value: 28000, category: 3 },
66
- { label: 'Enterprise', value: 16000, category: 1 }
67
- ],
68
- category: 2
69
- }
70
- ];
71
-
72
- const mockActivities: ActivityItem[] = [
73
- {
74
- id: '1',
75
- type: 'user',
76
- message: 'New user registered: john.doe@example.com',
77
- timestamp: new Date(Date.now() - 5 * 60 * 1000),
78
- user: 'System'
79
- },
80
- {
81
- id: '2',
82
- type: 'security',
83
- message: 'Failed login attempt detected',
84
- timestamp: new Date(Date.now() - 15 * 60 * 1000),
85
- user: 'Security Monitor'
86
- },
87
- {
88
- id: '3',
89
- type: 'content',
90
- message: 'Blog post published: "Getting Started Guide"',
91
- timestamp: new Date(Date.now() - 30 * 60 * 1000),
92
- user: 'content.manager'
93
- },
94
- {
95
- id: '4',
96
- type: 'system',
97
- message: 'Database backup completed successfully',
98
- timestamp: new Date(Date.now() - 60 * 60 * 1000),
99
- user: 'System'
100
- },
101
- {
102
- id: '5',
103
- type: 'user',
104
- message: 'User updated profile: sarah.wilson@example.com',
105
- timestamp: new Date(Date.now() - 90 * 60 * 1000),
106
- user: 'sarah.wilson'
107
- },
108
- {
109
- id: '6',
110
- type: 'error',
111
- message: 'Payment processing error for order #12847',
112
- timestamp: new Date(Date.now() - 120 * 60 * 1000),
113
- user: 'Payment System'
114
- }
115
- ];
116
-
117
- const mockAlerts: AlertItem[] = [
118
- {
119
- id: '1',
120
- severity: 'critical',
121
- title: 'High CPU Usage',
122
- description: 'Server CPU usage has exceeded 90% for the last 5 minutes',
123
- timestamp: new Date(Date.now() - 10 * 60 * 1000),
124
- onResolve: () => console.log('Resolving CPU alert')
125
- },
126
- {
127
- id: '2',
128
- severity: 'medium',
129
- title: 'Low Disk Space',
130
- description: 'Database server disk usage is at 85%',
131
- timestamp: new Date(Date.now() - 30 * 60 * 1000),
132
- onResolve: () => console.log('Resolving disk space alert')
133
- },
134
- {
135
- id: '3',
136
- severity: 'low',
137
- title: 'SSL Certificate Expiring',
138
- description: 'SSL certificate will expire in 30 days',
139
- timestamp: new Date(Date.now() - 60 * 60 * 1000),
140
- onResolve: () => console.log('Resolving SSL alert')
141
- }
142
- ];
143
-
144
- export const AdminDashboardShowcase: React.FC = () => {
145
- const handleRefresh = () => {
146
- console.log('Refreshing dashboard data...');
147
- };
148
-
149
- return (
150
- <AdminDashboardTemplate
151
- title="System Overview"
152
- description="Monitor key metrics, system health, and recent activity"
153
- metrics={mockMetrics}
154
- charts={mockCharts}
155
- activities={mockActivities}
156
- alerts={mockAlerts}
157
- onRefresh={handleRefresh}
158
- lastUpdated={new Date()}
159
- actions={
160
- <div className="flex gap-2">
161
- <button className="px-3 py-2 text-sm border border-input rounded-md hover:bg-muted">
162
- Export Report
163
- </button>
164
- <button className="px-3 py-2 text-sm bg-category-1 text-white rounded-md hover:bg-category-1/90">
165
- View Analytics
166
- </button>
167
- </div>
168
- }
169
- />
170
- );
171
- };