@nextsparkjs/theme-productivity 0.1.0-beta.1

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 (57) hide show
  1. package/README.md +76 -0
  2. package/about.md +123 -0
  3. package/components/CardDetailModal.tsx +318 -0
  4. package/components/KanbanBoard.tsx +612 -0
  5. package/components/KanbanCard.tsx +218 -0
  6. package/components/KanbanColumn.tsx +264 -0
  7. package/components/SortableList.tsx +46 -0
  8. package/components/index.ts +4 -0
  9. package/config/app.config.ts +172 -0
  10. package/config/billing.config.ts +187 -0
  11. package/config/dashboard.config.ts +357 -0
  12. package/config/dev.config.ts +55 -0
  13. package/config/features.config.ts +256 -0
  14. package/config/flows.config.ts +484 -0
  15. package/config/permissions.config.ts +167 -0
  16. package/config/theme.config.ts +106 -0
  17. package/entities/boards/boards.config.ts +61 -0
  18. package/entities/boards/boards.fields.ts +154 -0
  19. package/entities/boards/boards.service.ts +256 -0
  20. package/entities/boards/boards.types.ts +57 -0
  21. package/entities/boards/messages/en.json +80 -0
  22. package/entities/boards/messages/es.json +80 -0
  23. package/entities/boards/migrations/001_boards_table.sql +83 -0
  24. package/entities/cards/cards.config.ts +61 -0
  25. package/entities/cards/cards.fields.ts +242 -0
  26. package/entities/cards/cards.service.ts +336 -0
  27. package/entities/cards/cards.types.ts +79 -0
  28. package/entities/cards/messages/en.json +114 -0
  29. package/entities/cards/messages/es.json +114 -0
  30. package/entities/cards/migrations/020_cards_table.sql +92 -0
  31. package/entities/lists/lists.config.ts +61 -0
  32. package/entities/lists/lists.fields.ts +105 -0
  33. package/entities/lists/lists.service.ts +252 -0
  34. package/entities/lists/lists.types.ts +55 -0
  35. package/entities/lists/messages/en.json +60 -0
  36. package/entities/lists/messages/es.json +60 -0
  37. package/entities/lists/migrations/010_lists_table.sql +79 -0
  38. package/lib/selectors.ts +206 -0
  39. package/messages/en.json +79 -0
  40. package/messages/es.json +79 -0
  41. package/migrations/999_theme_sample_data.sql +922 -0
  42. package/migrations/999a_initial_sample_data.sql +377 -0
  43. package/migrations/999b_abundant_sample_data.sql +346 -0
  44. package/package.json +17 -0
  45. package/permissions-matrix.md +122 -0
  46. package/styles/components.css +460 -0
  47. package/styles/globals.css +560 -0
  48. package/templates/dashboard/(main)/boards/[id]/[cardId]/page.tsx +238 -0
  49. package/templates/dashboard/(main)/boards/[id]/edit/page.tsx +390 -0
  50. package/templates/dashboard/(main)/boards/[id]/page.tsx +236 -0
  51. package/templates/dashboard/(main)/boards/create/page.tsx +236 -0
  52. package/templates/dashboard/(main)/boards/page.tsx +335 -0
  53. package/templates/dashboard/(main)/layout.tsx +32 -0
  54. package/templates/dashboard/(main)/page.tsx +592 -0
  55. package/templates/shared/ProductivityMobileNav.tsx +410 -0
  56. package/templates/shared/ProductivitySidebar.tsx +538 -0
  57. package/templates/shared/ProductivityTopBar.tsx +317 -0
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Productivity Theme - Application Configuration
3
+ *
4
+ * Multi-tenant mode: Multiple workspaces with team switching.
5
+ * Perfect for teams managing multiple projects or clients.
6
+ */
7
+
8
+ export const APP_CONFIG_OVERRIDES = {
9
+ // =============================================================================
10
+ // APPLICATION METADATA
11
+ // =============================================================================
12
+ app: {
13
+ name: 'Productivity',
14
+ version: '1.0.0',
15
+ },
16
+
17
+ // =============================================================================
18
+ // TEAMS CONFIGURATION - MULTI-TENANT MODE
19
+ // =============================================================================
20
+ /**
21
+ * Multi-tenant mode:
22
+ * - Multiple work teams (workspaces)
23
+ * - Team switching enabled
24
+ * - Invitations enabled
25
+ * - Can create new teams
26
+ */
27
+ teams: {
28
+ mode: 'multi-tenant' as const,
29
+ options: {
30
+ maxMembersPerTeam: 50,
31
+ allowLeaveTeam: true,
32
+ allowCreateTeams: true,
33
+ },
34
+ },
35
+
36
+ // =============================================================================
37
+ // INTERNATIONALIZATION
38
+ // =============================================================================
39
+ i18n: {
40
+ supportedLocales: ['en', 'es'],
41
+ defaultLocale: 'en' as const,
42
+ namespaces: [
43
+ 'common',
44
+ 'dashboard',
45
+ 'settings',
46
+ 'auth',
47
+ 'validation',
48
+ // Theme specific
49
+ 'boards',
50
+ 'lists',
51
+ 'cards',
52
+ 'productivity',
53
+ ],
54
+ },
55
+
56
+ // =============================================================================
57
+ // API CONFIGURATION
58
+ // =============================================================================
59
+ api: {
60
+ cors: {
61
+ allowedOrigins: {
62
+ development: [
63
+ 'http://localhost:3000',
64
+ 'http://localhost:5173',
65
+ ],
66
+ production: [],
67
+ },
68
+ },
69
+ },
70
+
71
+ // =============================================================================
72
+ // DOCUMENTATION
73
+ // =============================================================================
74
+ docs: {
75
+ enabled: true,
76
+ public: false, // Private app documentation
77
+ searchEnabled: true,
78
+ breadcrumbs: true,
79
+ theme: {
80
+ enabled: true,
81
+ open: true,
82
+ label: "Productivity Theme",
83
+ },
84
+ plugins: {
85
+ enabled: false,
86
+ open: false,
87
+ label: "Plugins",
88
+ },
89
+ core: {
90
+ enabled: true,
91
+ open: false,
92
+ label: "Core",
93
+ },
94
+ showPluginsDocsInProd: false,
95
+ },
96
+
97
+ // =============================================================================
98
+ // SCHEDULED ACTIONS
99
+ // =============================================================================
100
+ scheduledActions: {
101
+ enabled: true,
102
+ retentionDays: 7,
103
+ batchSize: 10,
104
+ defaultTimeout: 30000,
105
+ },
106
+
107
+ // =============================================================================
108
+ // MOBILE NAVIGATION
109
+ // =============================================================================
110
+ mobileNav: {
111
+ items: [
112
+ {
113
+ id: 'home',
114
+ labelKey: 'common.mobileNav.home',
115
+ href: '/dashboard',
116
+ icon: 'Home',
117
+ enabled: true,
118
+ },
119
+ {
120
+ id: 'boards',
121
+ labelKey: 'boards.title',
122
+ href: '/dashboard/boards',
123
+ icon: 'LayoutDashboard',
124
+ enabled: true,
125
+ },
126
+ {
127
+ id: 'create',
128
+ labelKey: 'common.mobileNav.create',
129
+ icon: 'Plus',
130
+ isCentral: true,
131
+ action: 'quickCreate',
132
+ enabled: true,
133
+ },
134
+ {
135
+ id: 'cards',
136
+ labelKey: 'cards.myCards',
137
+ href: '/dashboard/cards',
138
+ icon: 'CreditCard',
139
+ enabled: true,
140
+ },
141
+ {
142
+ id: 'settings',
143
+ labelKey: 'common.mobileNav.settings',
144
+ href: '/dashboard/settings',
145
+ icon: 'Settings',
146
+ enabled: true,
147
+ },
148
+ ],
149
+ moreSheetItems: [
150
+ {
151
+ id: 'profile',
152
+ labelKey: 'common.navigation.profile',
153
+ href: '/dashboard/settings/profile',
154
+ icon: 'User',
155
+ enabled: true,
156
+ },
157
+ {
158
+ id: 'team',
159
+ labelKey: 'common.navigation.team',
160
+ href: '/dashboard/settings/teams',
161
+ icon: 'Users',
162
+ enabled: true,
163
+ },
164
+ ],
165
+ },
166
+
167
+ // =============================================================================
168
+ // DEV KEYRING - MOVED TO dev.config.ts
169
+ // =============================================================================
170
+ // DevKeyring configuration has been moved to config/dev.config.ts
171
+ // This separates development-only settings from production configuration.
172
+ }
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Billing Configuration - Productivity Theme
3
+ *
4
+ * Defines plans, features, limits, and action mappings for the Productivity theme.
5
+ * Customized for project and task management.
6
+ */
7
+
8
+ import type { BillingConfig } from '@nextsparkjs/core/lib/billing/config-types'
9
+
10
+ export const billingConfig: BillingConfig = {
11
+ provider: 'stripe',
12
+ currency: 'usd',
13
+ defaultPlan: 'free',
14
+
15
+ // ===========================================
16
+ // FEATURE DEFINITIONS (Productivity-specific)
17
+ // ===========================================
18
+ features: {
19
+ basic_analytics: {
20
+ name: 'billing.features.basic_analytics',
21
+ description: 'billing.features.basic_analytics_description',
22
+ },
23
+ advanced_analytics: {
24
+ name: 'billing.features.advanced_analytics',
25
+ description: 'billing.features.advanced_analytics_description',
26
+ },
27
+ api_access: {
28
+ name: 'billing.features.api_access',
29
+ description: 'billing.features.api_access_description',
30
+ },
31
+ custom_branding: {
32
+ name: 'billing.features.custom_branding',
33
+ description: 'billing.features.custom_branding_description',
34
+ },
35
+ gantt_view: {
36
+ name: 'billing.features.gantt_view',
37
+ description: 'billing.features.gantt_view_description',
38
+ },
39
+ time_tracking: {
40
+ name: 'billing.features.time_tracking',
41
+ description: 'billing.features.time_tracking_description',
42
+ },
43
+ priority_support: {
44
+ name: 'billing.features.priority_support',
45
+ description: 'billing.features.priority_support_description',
46
+ },
47
+ },
48
+
49
+ // ===========================================
50
+ // LIMIT DEFINITIONS (Productivity-specific)
51
+ // ===========================================
52
+ limits: {
53
+ team_members: {
54
+ name: 'billing.limits.team_members',
55
+ unit: 'count',
56
+ resetPeriod: 'never',
57
+ },
58
+ projects: {
59
+ name: 'billing.limits.projects',
60
+ unit: 'count',
61
+ resetPeriod: 'never',
62
+ },
63
+ tasks: {
64
+ name: 'billing.limits.tasks',
65
+ unit: 'count',
66
+ resetPeriod: 'never',
67
+ },
68
+ workspaces: {
69
+ name: 'billing.limits.workspaces',
70
+ unit: 'count',
71
+ resetPeriod: 'never',
72
+ },
73
+ api_calls: {
74
+ name: 'billing.limits.api_calls',
75
+ unit: 'calls',
76
+ resetPeriod: 'monthly',
77
+ },
78
+ storage_gb: {
79
+ name: 'billing.limits.storage',
80
+ unit: 'bytes',
81
+ resetPeriod: 'never',
82
+ },
83
+ },
84
+
85
+ // ===========================================
86
+ // PLAN DEFINITIONS (Productivity-optimized)
87
+ // ===========================================
88
+ plans: [
89
+ {
90
+ slug: 'free',
91
+ name: 'billing.plans.free.name',
92
+ description: 'billing.plans.free.description',
93
+ type: 'free',
94
+ visibility: 'public',
95
+ price: { monthly: 0, yearly: 0 },
96
+ trialDays: 0,
97
+ features: ['basic_analytics'],
98
+ limits: {
99
+ team_members: 3,
100
+ projects: 5,
101
+ tasks: 100,
102
+ workspaces: 1,
103
+ api_calls: 1000,
104
+ storage_gb: 2,
105
+ },
106
+ stripePriceIdMonthly: null,
107
+ stripePriceIdYearly: null,
108
+ },
109
+ {
110
+ slug: 'pro',
111
+ name: 'billing.plans.pro.name',
112
+ description: 'billing.plans.pro.description',
113
+ type: 'paid',
114
+ visibility: 'public',
115
+ price: {
116
+ monthly: 2900, // $29.00 - Same as default theme
117
+ yearly: 29000, // $290.00 (16% savings)
118
+ },
119
+ trialDays: 14,
120
+ features: [
121
+ 'basic_analytics',
122
+ 'advanced_analytics',
123
+ 'api_access',
124
+ 'gantt_view',
125
+ 'time_tracking',
126
+ ],
127
+ limits: {
128
+ team_members: 15,
129
+ projects: 100,
130
+ tasks: -1, // Unlimited tasks
131
+ workspaces: 5,
132
+ api_calls: 100000,
133
+ storage_gb: 50,
134
+ },
135
+ // Configure these in Stripe Dashboard
136
+ stripePriceIdMonthly: 'price_productivity_pro_monthly',
137
+ stripePriceIdYearly: 'price_productivity_pro_yearly',
138
+ },
139
+ {
140
+ slug: 'enterprise',
141
+ name: 'billing.plans.enterprise.name',
142
+ description: 'billing.plans.enterprise.description',
143
+ type: 'enterprise',
144
+ visibility: 'hidden',
145
+ trialDays: 30,
146
+ features: ['*'], // All features
147
+ limits: {
148
+ team_members: -1, // Unlimited
149
+ projects: -1,
150
+ tasks: -1,
151
+ workspaces: -1,
152
+ api_calls: -1,
153
+ storage_gb: -1,
154
+ },
155
+ stripePriceIdMonthly: null,
156
+ stripePriceIdYearly: null,
157
+ },
158
+ ],
159
+
160
+ // ===========================================
161
+ // ACTION MAPPINGS (Productivity-specific)
162
+ // ===========================================
163
+ actionMappings: {
164
+ permissions: {
165
+ 'team.members.invite': 'team.members.invite',
166
+ 'team.settings.edit': 'team.settings.edit',
167
+ 'team.billing.manage': 'team.billing.manage',
168
+ },
169
+
170
+ features: {
171
+ 'analytics.view_advanced': 'advanced_analytics',
172
+ 'api.generate_key': 'api_access',
173
+ 'project.gantt_view': 'gantt_view',
174
+ 'task.time_tracking': 'time_tracking',
175
+ 'support.priority_access': 'priority_support',
176
+ },
177
+
178
+ limits: {
179
+ 'team.members.invite': 'team_members',
180
+ 'projects.create': 'projects',
181
+ 'tasks.create': 'tasks',
182
+ 'workspaces.create': 'workspaces',
183
+ 'api.call': 'api_calls',
184
+ 'files.upload': 'storage_gb',
185
+ },
186
+ },
187
+ }
@@ -0,0 +1,357 @@
1
+ /**
2
+ * Productivity Theme - Dashboard Configuration
3
+ *
4
+ * Board-centric dashboard for task management.
5
+ */
6
+
7
+ export const DASHBOARD_CONFIG = {
8
+ // =============================================================================
9
+ // TOPBAR CONFIGURATION
10
+ // =============================================================================
11
+ topbar: {
12
+ search: {
13
+ enabled: true,
14
+ placeholder: 'dashboard.search.placeholder',
15
+ maxResults: 10,
16
+ },
17
+ notifications: {
18
+ enabled: true, // Notifications for assigned cards, mentions
19
+ },
20
+ themeToggle: {
21
+ enabled: true,
22
+ },
23
+ support: {
24
+ enabled: true,
25
+ type: 'dropdown',
26
+ links: [
27
+ {
28
+ label: 'common.help.documentation',
29
+ url: '/docs',
30
+ icon: 'book-open',
31
+ external: false,
32
+ },
33
+ {
34
+ label: 'common.help.keyboard',
35
+ action: 'showKeyboardShortcuts',
36
+ icon: 'keyboard',
37
+ }
38
+ ],
39
+ },
40
+ quickCreate: {
41
+ enabled: true,
42
+ },
43
+ /**
44
+ * Admin access button (Super Admin area)
45
+ */
46
+ adminAccess: {
47
+ enabled: true,
48
+ showToDevelopers: true,
49
+ },
50
+ /**
51
+ * Dev Zone access button (Developer area)
52
+ */
53
+ devtoolsAccess: {
54
+ enabled: true,
55
+ },
56
+ userMenu: {
57
+ enabled: true,
58
+ showAvatar: true,
59
+ showEmail: true,
60
+ showRole: false,
61
+ items: [
62
+ { type: 'link', label: 'navigation.profile', href: '/dashboard/settings/profile', icon: 'user' },
63
+ { type: 'link', label: 'navigation.team', href: '/dashboard/settings/teams', icon: 'users' },
64
+ { type: 'link', label: 'navigation.settings', href: '/dashboard/settings', icon: 'settings' },
65
+ { type: 'divider' },
66
+ { type: 'action', label: 'buttons.signOut', action: 'signOut', icon: 'log-out' },
67
+ ],
68
+ },
69
+ },
70
+
71
+ // =============================================================================
72
+ // SIDEBAR CONFIGURATION
73
+ // =============================================================================
74
+ sidebar: {
75
+ defaultCollapsed: false,
76
+ rememberState: true,
77
+ collapsedWidth: '60px',
78
+ expandedWidth: '260px',
79
+ toggle: {
80
+ enabled: true,
81
+ showInTopbar: true,
82
+ hideOnMobile: false,
83
+ },
84
+ navigation: {
85
+ showEntityCounts: true,
86
+ groupEntities: true,
87
+ showRecents: true,
88
+ maxRecents: 5,
89
+ },
90
+ },
91
+
92
+ // =============================================================================
93
+ // SETTINGS PAGES
94
+ // =============================================================================
95
+ settings: {
96
+ pages: {
97
+ profile: {
98
+ enabled: true,
99
+ label: 'settings.pages.profile',
100
+ description: 'settings.pages.profileDescription',
101
+ icon: 'user',
102
+ order: 1,
103
+ features: {
104
+ avatarUpload: true,
105
+ nameChange: true,
106
+ emailChange: true,
107
+ localeChange: true,
108
+ timezoneChange: true,
109
+ },
110
+ },
111
+ security: {
112
+ enabled: true,
113
+ label: 'settings.pages.security',
114
+ description: 'settings.pages.securityDescription',
115
+ icon: 'shield',
116
+ order: 2,
117
+ features: {
118
+ twoFactorAuth: true,
119
+ sessionManagement: true,
120
+ loginHistory: true,
121
+ securityQuestions: false,
122
+ },
123
+ },
124
+ password: {
125
+ enabled: true,
126
+ label: 'settings.pages.password',
127
+ description: 'settings.pages.passwordDescription',
128
+ icon: 'key',
129
+ order: 3,
130
+ features: {
131
+ passwordChange: true,
132
+ passwordStrength: true,
133
+ passwordHistory: false,
134
+ },
135
+ },
136
+ notifications: {
137
+ enabled: true,
138
+ label: 'settings.pages.notifications',
139
+ description: 'settings.pages.notificationsDescription',
140
+ icon: 'bell',
141
+ order: 4,
142
+ features: {
143
+ emailNotifications: true,
144
+ pushNotifications: true,
145
+ smsNotifications: false,
146
+ notificationCategories: true,
147
+ },
148
+ },
149
+ 'api-keys': {
150
+ enabled: false, // Not needed for this app
151
+ label: 'settings.pages.apiKeys',
152
+ description: 'settings.pages.apiKeysDescription',
153
+ icon: 'key',
154
+ order: 5,
155
+ features: {},
156
+ },
157
+ billing: {
158
+ enabled: true,
159
+ label: 'settings.pages.billing',
160
+ description: 'settings.pages.billingDescription',
161
+ icon: 'credit-card',
162
+ order: 6,
163
+ features: {},
164
+ },
165
+ teams: {
166
+ enabled: true, // Team management for multi-tenant mode
167
+ label: 'settings.pages.teams',
168
+ description: 'settings.pages.teamsDescription',
169
+ icon: 'users',
170
+ order: 7,
171
+ features: {
172
+ createTeams: true, // Can create new teams in multi-tenant mode
173
+ manageMembers: true,
174
+ inviteMembers: true,
175
+ teamSettings: true,
176
+ },
177
+ },
178
+ plans: {
179
+ enabled: true,
180
+ label: 'settings.pages.plans',
181
+ description: 'settings.pages.plansDescription',
182
+ icon: 'credit-card',
183
+ order: 8,
184
+ features: {
185
+ planComparison: true,
186
+ planSelection: true,
187
+ },
188
+ },
189
+ },
190
+ layout: {
191
+ showDescription: true,
192
+ showIcons: true,
193
+ groupByCategory: false,
194
+ enableSearch: true,
195
+ },
196
+ },
197
+
198
+ // =============================================================================
199
+ // ENTITY PAGES
200
+ // =============================================================================
201
+ entities: {
202
+ defaultListView: {
203
+ pagination: {
204
+ defaultPageSize: 20,
205
+ allowedPageSizes: [10, 20, 50],
206
+ showSizeSelector: true,
207
+ },
208
+ sorting: {
209
+ enabled: true,
210
+ defaultSort: { field: 'position', direction: 'asc' },
211
+ rememberSort: true,
212
+ },
213
+ filtering: {
214
+ enabled: true,
215
+ quickFilters: true,
216
+ advancedFilters: true,
217
+ rememberFilters: true,
218
+ },
219
+ search: {
220
+ enabled: true,
221
+ placeholder: 'dashboard.entities.searchPlaceholder',
222
+ searchableFields: ['name', 'title', 'description'],
223
+ instantSearch: true,
224
+ debounceMs: 200,
225
+ },
226
+ },
227
+ defaultFormView: {
228
+ validation: {
229
+ validateOnBlur: true,
230
+ validateOnChange: false,
231
+ showFieldErrors: true,
232
+ showFormErrors: true,
233
+ },
234
+ autosave: {
235
+ enabled: false,
236
+ intervalMs: 30000,
237
+ showIndicator: true,
238
+ },
239
+ confirmation: {
240
+ showOnCreate: false,
241
+ showOnUpdate: false,
242
+ showOnDelete: true,
243
+ },
244
+ },
245
+ customizations: {
246
+ boards: {
247
+ listView: {
248
+ defaultSort: { field: 'position', direction: 'asc' },
249
+ },
250
+ },
251
+ lists: {
252
+ listView: {
253
+ defaultSort: { field: 'position', direction: 'asc' },
254
+ },
255
+ },
256
+ cards: {
257
+ listView: {
258
+ defaultSort: { field: 'position', direction: 'asc' },
259
+ quickFilters: ['listId', 'assigneeId', 'dueDate'],
260
+ },
261
+ },
262
+ },
263
+ },
264
+
265
+ // =============================================================================
266
+ // DASHBOARD HOMEPAGE
267
+ // =============================================================================
268
+ homepage: {
269
+ widgets: {
270
+ welcome: {
271
+ enabled: true,
272
+ showUserName: true,
273
+ showLastLogin: false,
274
+ showQuickActions: true,
275
+ },
276
+ stats: {
277
+ enabled: true,
278
+ entities: ['boards', 'cards'],
279
+ timeframe: '7days',
280
+ showTrends: true,
281
+ },
282
+ recentActivity: {
283
+ enabled: true,
284
+ maxItems: 10,
285
+ entities: ['boards', 'cards'],
286
+ showTimestamps: true,
287
+ },
288
+ quickActions: {
289
+ enabled: true,
290
+ actions: [
291
+ { entity: 'boards', action: 'create', label: 'productivity.quickActions.createBoard' },
292
+ { entity: 'cards', action: 'create', label: 'productivity.quickActions.createCard' },
293
+ ],
294
+ },
295
+ },
296
+ layout: {
297
+ columns: 3,
298
+ gutter: 'medium',
299
+ responsive: true,
300
+ },
301
+ },
302
+
303
+ // =============================================================================
304
+ // PERFORMANCE
305
+ // =============================================================================
306
+ performance: {
307
+ cache: {
308
+ entityConfigs: { enabled: true, duration: 5 * 60 * 1000 },
309
+ entityData: { enabled: true, duration: 1 * 60 * 1000 }, // Shorter cache for real-time feel
310
+ },
311
+ loading: {
312
+ showSkeletons: true,
313
+ showProgressBars: true,
314
+ minimumLoadingTime: 150,
315
+ },
316
+ errors: {
317
+ showErrorBoundaries: true,
318
+ logErrors: true,
319
+ enableRetry: true,
320
+ maxRetries: 3,
321
+ },
322
+ },
323
+
324
+ // =============================================================================
325
+ // ACCESSIBILITY
326
+ // =============================================================================
327
+ accessibility: {
328
+ keyboard: {
329
+ enabled: true,
330
+ showShortcuts: true,
331
+ customShortcuts: {
332
+ 'Ctrl+K': 'openSearch',
333
+ 'Ctrl+Shift+N': 'quickCreate',
334
+ 'Ctrl+B': 'toggleSidebar',
335
+ 'Esc': 'closeModals',
336
+ 'N': 'newCard',
337
+ 'B': 'newBoard',
338
+ },
339
+ },
340
+ screenReader: {
341
+ announceNavigation: true,
342
+ announceActions: true,
343
+ announceErrors: true,
344
+ },
345
+ visual: {
346
+ showFocusOutlines: true,
347
+ highContrastMode: false,
348
+ reducedMotion: false,
349
+ },
350
+ },
351
+ } as const
352
+
353
+ export const TOPBAR_CONFIG = DASHBOARD_CONFIG.topbar
354
+ export const SIDEBAR_CONFIG = DASHBOARD_CONFIG.sidebar
355
+ export const SETTINGS_CONFIG = DASHBOARD_CONFIG.settings
356
+ export const ENTITIES_CONFIG = DASHBOARD_CONFIG.entities
357
+ export const HOMEPAGE_CONFIG = DASHBOARD_CONFIG.homepage