@nextsparkjs/theme-default 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 (333) hide show
  1. package/about/business.md +49 -0
  2. package/about/features.json +302 -0
  3. package/about/team.md +79 -0
  4. package/api/ai/chat/stream/route.ts +212 -0
  5. package/api/ai/orchestrator/route.ts +226 -0
  6. package/api/ai/single-agent/route.ts +291 -0
  7. package/api/ai/usage/route.ts +122 -0
  8. package/blocks/benefits/component.tsx +100 -0
  9. package/blocks/benefits/config.ts +11 -0
  10. package/blocks/benefits/examples.ts +85 -0
  11. package/blocks/benefits/fields.ts +156 -0
  12. package/blocks/benefits/schema.ts +33 -0
  13. package/blocks/cta-section/component.tsx +100 -0
  14. package/blocks/cta-section/config.ts +11 -0
  15. package/blocks/cta-section/examples.ts +41 -0
  16. package/blocks/cta-section/fields.ts +89 -0
  17. package/blocks/cta-section/index.ts +6 -0
  18. package/blocks/cta-section/schema.ts +32 -0
  19. package/blocks/cta-section/thumbnail.png +1 -0
  20. package/blocks/faq-accordion/component.tsx +156 -0
  21. package/blocks/faq-accordion/config.ts +11 -0
  22. package/blocks/faq-accordion/examples.ts +77 -0
  23. package/blocks/faq-accordion/fields.ts +119 -0
  24. package/blocks/faq-accordion/index.ts +6 -0
  25. package/blocks/faq-accordion/schema.ts +45 -0
  26. package/blocks/features-grid/component.tsx +112 -0
  27. package/blocks/features-grid/config.ts +11 -0
  28. package/blocks/features-grid/examples.ts +63 -0
  29. package/blocks/features-grid/fields.ts +97 -0
  30. package/blocks/features-grid/index.ts +6 -0
  31. package/blocks/features-grid/schema.ts +40 -0
  32. package/blocks/features-grid/thumbnail.png +1 -0
  33. package/blocks/hero/component.tsx +100 -0
  34. package/blocks/hero/config.ts +11 -0
  35. package/blocks/hero/examples.ts +35 -0
  36. package/blocks/hero/fields.ts +60 -0
  37. package/blocks/hero/index.ts +6 -0
  38. package/blocks/hero/schema.ts +32 -0
  39. package/blocks/hero/thumbnail.png +1 -0
  40. package/blocks/hero/thumbnail.png.txt +6 -0
  41. package/blocks/hero-with-form/component.tsx +232 -0
  42. package/blocks/hero-with-form/config.ts +11 -0
  43. package/blocks/hero-with-form/examples.ts +16 -0
  44. package/blocks/hero-with-form/fields.ts +207 -0
  45. package/blocks/hero-with-form/index.ts +6 -0
  46. package/blocks/hero-with-form/schema.ts +54 -0
  47. package/blocks/jumbotron/component.tsx +136 -0
  48. package/blocks/jumbotron/config.ts +11 -0
  49. package/blocks/jumbotron/examples.ts +36 -0
  50. package/blocks/jumbotron/fields.ts +202 -0
  51. package/blocks/jumbotron/index.ts +6 -0
  52. package/blocks/jumbotron/schema.ts +55 -0
  53. package/blocks/logo-cloud/component.tsx +154 -0
  54. package/blocks/logo-cloud/config.ts +11 -0
  55. package/blocks/logo-cloud/examples.ts +34 -0
  56. package/blocks/logo-cloud/fields.ts +133 -0
  57. package/blocks/logo-cloud/index.ts +6 -0
  58. package/blocks/logo-cloud/schema.ts +46 -0
  59. package/blocks/post-content/component.tsx +197 -0
  60. package/blocks/post-content/config.ts +11 -0
  61. package/blocks/post-content/examples.ts +33 -0
  62. package/blocks/post-content/fields.ts +165 -0
  63. package/blocks/post-content/index.ts +4 -0
  64. package/blocks/post-content/schema.ts +46 -0
  65. package/blocks/pricing-table/component.tsx +154 -0
  66. package/blocks/pricing-table/config.ts +11 -0
  67. package/blocks/pricing-table/examples.ts +96 -0
  68. package/blocks/pricing-table/fields.ts +161 -0
  69. package/blocks/pricing-table/index.ts +4 -0
  70. package/blocks/pricing-table/schema.ts +50 -0
  71. package/blocks/split-content/component.tsx +135 -0
  72. package/blocks/split-content/config.ts +11 -0
  73. package/blocks/split-content/examples.ts +38 -0
  74. package/blocks/split-content/fields.ts +198 -0
  75. package/blocks/split-content/index.ts +6 -0
  76. package/blocks/split-content/schema.ts +67 -0
  77. package/blocks/stats-counter/component.tsx +124 -0
  78. package/blocks/stats-counter/config.ts +11 -0
  79. package/blocks/stats-counter/examples.ts +61 -0
  80. package/blocks/stats-counter/fields.ts +134 -0
  81. package/blocks/stats-counter/index.ts +6 -0
  82. package/blocks/stats-counter/schema.ts +47 -0
  83. package/blocks/testimonials/component.tsx +114 -0
  84. package/blocks/testimonials/config.ts +11 -0
  85. package/blocks/testimonials/examples.ts +65 -0
  86. package/blocks/testimonials/fields.ts +105 -0
  87. package/blocks/testimonials/index.ts +6 -0
  88. package/blocks/testimonials/schema.ts +41 -0
  89. package/blocks/testimonials/thumbnail.png +1 -0
  90. package/blocks/text-content/component.tsx +97 -0
  91. package/blocks/text-content/config.ts +11 -0
  92. package/blocks/text-content/examples.ts +30 -0
  93. package/blocks/text-content/fields.ts +88 -0
  94. package/blocks/text-content/index.ts +6 -0
  95. package/blocks/text-content/schema.ts +30 -0
  96. package/blocks/text-content/thumbnail.png +1 -0
  97. package/blocks/timeline/component.tsx +267 -0
  98. package/blocks/timeline/config.ts +11 -0
  99. package/blocks/timeline/examples.ts +68 -0
  100. package/blocks/timeline/fields.ts +147 -0
  101. package/blocks/timeline/index.ts +6 -0
  102. package/blocks/timeline/schema.ts +49 -0
  103. package/blocks/video-hero/component.tsx +270 -0
  104. package/blocks/video-hero/config.ts +11 -0
  105. package/blocks/video-hero/examples.ts +24 -0
  106. package/blocks/video-hero/fields.ts +98 -0
  107. package/blocks/video-hero/index.ts +6 -0
  108. package/blocks/video-hero/schema.ts +39 -0
  109. package/components/ai-chat/ChatPanel.tsx +575 -0
  110. package/components/ai-chat/ConversationItem.tsx +266 -0
  111. package/components/ai-chat/ConversationSidebar.tsx +99 -0
  112. package/components/ai-chat/MarkdownRenderer.tsx +15 -0
  113. package/components/ai-chat/Message.tsx +42 -0
  114. package/components/ai-chat/MessageInput.tsx +49 -0
  115. package/components/ai-chat/MessageList.tsx +46 -0
  116. package/components/ai-chat/TypingIndicator.tsx +11 -0
  117. package/config/app.config.ts +367 -0
  118. package/config/billing.config.ts +349 -0
  119. package/config/dashboard.config.ts +506 -0
  120. package/config/dev.config.ts +104 -0
  121. package/config/features.config.ts +203 -0
  122. package/config/flows.config.ts +129 -0
  123. package/config/permissions.config.ts +245 -0
  124. package/config/theme.config.ts +74 -0
  125. package/docs/01-overview/01-introduction.md +335 -0
  126. package/docs/01-overview/02-customization.md +671 -0
  127. package/docs/02-features/01-components.md +155 -0
  128. package/docs/02-features/02-styling.md +139 -0
  129. package/docs/02-features/03-tasks-entity.md +407 -0
  130. package/docs/03-ai/01-overview.md +211 -0
  131. package/docs/03-ai/02-customization.md +436 -0
  132. package/entities/customers/customers.config.ts +75 -0
  133. package/entities/customers/customers.fields.ts +165 -0
  134. package/entities/customers/customers.service.ts +516 -0
  135. package/entities/customers/customers.types.ts +83 -0
  136. package/entities/customers/messages/en.json +66 -0
  137. package/entities/customers/messages/es.json +66 -0
  138. package/entities/customers/migrations/001_customers_table.sql +102 -0
  139. package/entities/customers/migrations/002_customers_metas.sql +92 -0
  140. package/entities/pages/messages/en.json +41 -0
  141. package/entities/pages/messages/es.json +41 -0
  142. package/entities/pages/migrations/001_pages_table.sql +112 -0
  143. package/entities/pages/migrations/002_pages_metas.sql +56 -0
  144. package/entities/pages/migrations/003_add_status.sql +50 -0
  145. package/entities/pages/pages-management.service.ts +610 -0
  146. package/entities/pages/pages.config.ts +94 -0
  147. package/entities/pages/pages.fields.ts +101 -0
  148. package/entities/pages/pages.service.ts +290 -0
  149. package/entities/pages/pages.types.ts +124 -0
  150. package/entities/posts/components/post-header.tsx +97 -0
  151. package/entities/posts/messages/en.json +55 -0
  152. package/entities/posts/messages/es.json +55 -0
  153. package/entities/posts/migrations/001_posts_table.sql +115 -0
  154. package/entities/posts/migrations/003_add_status.sql +44 -0
  155. package/entities/posts/migrations/004_entity_taxonomy_relations.sql +129 -0
  156. package/entities/posts/migrations/006_posts_metas.sql +56 -0
  157. package/entities/posts/posts.config.ts +101 -0
  158. package/entities/posts/posts.fields.ts +116 -0
  159. package/entities/posts/posts.service.ts +376 -0
  160. package/entities/posts/posts.types.ts +74 -0
  161. package/entities/tasks/messages/en.json +204 -0
  162. package/entities/tasks/messages/es.json +204 -0
  163. package/entities/tasks/migrations/001_tasks_table.sql +105 -0
  164. package/entities/tasks/migrations/002_task_metas.sql +85 -0
  165. package/entities/tasks/migrations/sample_data.json +77 -0
  166. package/entities/tasks/tasks.config.ts +79 -0
  167. package/entities/tasks/tasks.fields.ts +196 -0
  168. package/entities/tasks/tasks.service.ts +541 -0
  169. package/entities/tasks/tasks.types.ts +56 -0
  170. package/lib/hooks/useAiChat.ts +114 -0
  171. package/lib/hooks/useConversations.ts +376 -0
  172. package/lib/hooks/useOrchestratorChat.ts +122 -0
  173. package/lib/hooks/usePersistentChat.ts +315 -0
  174. package/lib/hooks/useStreamingChat.ts +127 -0
  175. package/lib/hooks/useTokenUsage.ts +63 -0
  176. package/lib/langchain/agents/customer-assistant.md +69 -0
  177. package/lib/langchain/agents/index.ts +61 -0
  178. package/lib/langchain/agents/orchestrator.md +59 -0
  179. package/lib/langchain/agents/page-assistant.md +85 -0
  180. package/lib/langchain/agents/single-agent.md +46 -0
  181. package/lib/langchain/agents/task-assistant.md +55 -0
  182. package/lib/langchain/config.ts +45 -0
  183. package/lib/langchain/handlers/customer-handler.ts +338 -0
  184. package/lib/langchain/handlers/page-handler.ts +232 -0
  185. package/lib/langchain/handlers/task-handler.ts +323 -0
  186. package/lib/langchain/langchain.config.ts +223 -0
  187. package/lib/langchain/observability.config.ts +30 -0
  188. package/lib/langchain/orchestrator.ts +562 -0
  189. package/lib/langchain/tools/customers.ts +176 -0
  190. package/lib/langchain/tools/index.ts +10 -0
  191. package/lib/langchain/tools/orchestrator.ts +92 -0
  192. package/lib/langchain/tools/pages.ts +289 -0
  193. package/lib/langchain/tools/tasks.ts +167 -0
  194. package/lib/scheduled-actions/billing.ts +149 -0
  195. package/lib/scheduled-actions/index.ts +170 -0
  196. package/lib/scheduled-actions/webhook.ts +231 -0
  197. package/lib/selectors.ts +197 -0
  198. package/messages/de/admin.json +219 -0
  199. package/messages/de/aiUsage.json +36 -0
  200. package/messages/de/buttons.json +19 -0
  201. package/messages/de/categories.json +35 -0
  202. package/messages/de/common.json +16 -0
  203. package/messages/de/dev.json +101 -0
  204. package/messages/de/docs.json +27 -0
  205. package/messages/de/entities.json +7 -0
  206. package/messages/de/features.json +119 -0
  207. package/messages/de/footer.json +22 -0
  208. package/messages/de/home.json +57 -0
  209. package/messages/de/index.ts +39 -0
  210. package/messages/de/mobileNav.json +13 -0
  211. package/messages/de/navigation.json +8 -0
  212. package/messages/de/observability.json +74 -0
  213. package/messages/de/posts.json +54 -0
  214. package/messages/de/pricing.json +102 -0
  215. package/messages/de/support.json +9 -0
  216. package/messages/de/teams.json +8 -0
  217. package/messages/en/admin.json +219 -0
  218. package/messages/en/aiUsage.json +36 -0
  219. package/messages/en/buttons.json +19 -0
  220. package/messages/en/categories.json +35 -0
  221. package/messages/en/common.json +16 -0
  222. package/messages/en/dev.json +106 -0
  223. package/messages/en/docs.json +27 -0
  224. package/messages/en/entities.json +7 -0
  225. package/messages/en/features.json +119 -0
  226. package/messages/en/footer.json +22 -0
  227. package/messages/en/home.json +57 -0
  228. package/messages/en/index.ts +39 -0
  229. package/messages/en/mobileNav.json +13 -0
  230. package/messages/en/navigation.json +8 -0
  231. package/messages/en/observability.json +74 -0
  232. package/messages/en/posts.json +54 -0
  233. package/messages/en/pricing.json +102 -0
  234. package/messages/en/support.json +9 -0
  235. package/messages/en/teams.json +8 -0
  236. package/messages/es/admin.json +219 -0
  237. package/messages/es/aiUsage.json +36 -0
  238. package/messages/es/buttons.json +19 -0
  239. package/messages/es/categories.json +35 -0
  240. package/messages/es/common.json +16 -0
  241. package/messages/es/dev.json +101 -0
  242. package/messages/es/docs.json +27 -0
  243. package/messages/es/entities.json +7 -0
  244. package/messages/es/features.json +119 -0
  245. package/messages/es/footer.json +22 -0
  246. package/messages/es/home.json +57 -0
  247. package/messages/es/index.ts +39 -0
  248. package/messages/es/mobileNav.json +13 -0
  249. package/messages/es/navigation.json +8 -0
  250. package/messages/es/observability.json +74 -0
  251. package/messages/es/posts.json +54 -0
  252. package/messages/es/pricing.json +102 -0
  253. package/messages/es/support.json +9 -0
  254. package/messages/es/teams.json +8 -0
  255. package/messages/fr/admin.json +219 -0
  256. package/messages/fr/aiUsage.json +36 -0
  257. package/messages/fr/buttons.json +19 -0
  258. package/messages/fr/categories.json +35 -0
  259. package/messages/fr/common.json +16 -0
  260. package/messages/fr/dev.json +101 -0
  261. package/messages/fr/docs.json +27 -0
  262. package/messages/fr/entities.json +7 -0
  263. package/messages/fr/features.json +119 -0
  264. package/messages/fr/footer.json +22 -0
  265. package/messages/fr/home.json +57 -0
  266. package/messages/fr/index.ts +39 -0
  267. package/messages/fr/mobileNav.json +13 -0
  268. package/messages/fr/navigation.json +8 -0
  269. package/messages/fr/observability.json +74 -0
  270. package/messages/fr/posts.json +54 -0
  271. package/messages/fr/pricing.json +102 -0
  272. package/messages/fr/support.json +9 -0
  273. package/messages/fr/teams.json +8 -0
  274. package/messages/it/admin.json +219 -0
  275. package/messages/it/aiUsage.json +36 -0
  276. package/messages/it/buttons.json +19 -0
  277. package/messages/it/categories.json +35 -0
  278. package/messages/it/common.json +16 -0
  279. package/messages/it/dev.json +101 -0
  280. package/messages/it/docs.json +27 -0
  281. package/messages/it/entities.json +7 -0
  282. package/messages/it/features.json +119 -0
  283. package/messages/it/footer.json +22 -0
  284. package/messages/it/home.json +57 -0
  285. package/messages/it/index.ts +39 -0
  286. package/messages/it/mobileNav.json +13 -0
  287. package/messages/it/navigation.json +8 -0
  288. package/messages/it/observability.json +74 -0
  289. package/messages/it/posts.json +54 -0
  290. package/messages/it/pricing.json +102 -0
  291. package/messages/it/support.json +9 -0
  292. package/messages/it/teams.json +8 -0
  293. package/messages/pt/admin.json +219 -0
  294. package/messages/pt/aiUsage.json +36 -0
  295. package/messages/pt/buttons.json +19 -0
  296. package/messages/pt/categories.json +35 -0
  297. package/messages/pt/common.json +16 -0
  298. package/messages/pt/dev.json +101 -0
  299. package/messages/pt/docs.json +27 -0
  300. package/messages/pt/entities.json +7 -0
  301. package/messages/pt/features.json +119 -0
  302. package/messages/pt/footer.json +22 -0
  303. package/messages/pt/home.json +57 -0
  304. package/messages/pt/index.ts +39 -0
  305. package/messages/pt/mobileNav.json +13 -0
  306. package/messages/pt/navigation.json +8 -0
  307. package/messages/pt/observability.json +74 -0
  308. package/messages/pt/posts.json +54 -0
  309. package/messages/pt/pricing.json +102 -0
  310. package/messages/pt/support.json +9 -0
  311. package/messages/pt/teams.json +8 -0
  312. package/migrations/089_add_editor_team_role.sql +39 -0
  313. package/migrations/090_demo_users_teams.sql +540 -0
  314. package/migrations/091_greek_teams_billing.sql +523 -0
  315. package/migrations/092_billing_sample_data.sql +774 -0
  316. package/migrations/093_pages_sample_data.sql +1158 -0
  317. package/migrations/094_posts_sample_data.sql +278 -0
  318. package/migrations/095_tasks_sample_data.sql +440 -0
  319. package/migrations/096_customers_sample_data.sql +358 -0
  320. package/migrations/097_scheduled_actions_sample_data.sql +111 -0
  321. package/package.json +22 -0
  322. package/public/docs/desktop-layout-example.png +0 -0
  323. package/styles/components.css +11 -0
  324. package/styles/globals.css +179 -0
  325. package/templates/(public)/blog/[slug]/page.tsx +65 -0
  326. package/templates/(public)/layout.tsx +25 -0
  327. package/templates/(public)/page.tsx +200 -0
  328. package/templates/(public)/support/page.tsx +321 -0
  329. package/templates/dashboard/(main)/agent-multi/page.tsx +63 -0
  330. package/templates/dashboard/(main)/agent-single/page.tsx +142 -0
  331. package/templates/dashboard/(main)/settings/ai-usage/page.tsx +157 -0
  332. package/templates/superadmin/ai-observability/[traceId]/page.tsx +27 -0
  333. package/templates/superadmin/ai-observability/page.tsx +17 -0
@@ -0,0 +1,506 @@
1
+ /**
2
+ * Dashboard-Specific Configuration
3
+ *
4
+ * This file contains all configurable values specific to the dashboard interface.
5
+ * Separate from general app configuration to allow fine-grained control over
6
+ * dashboard features, layout, and behavior.
7
+ */
8
+
9
+ // =============================================================================
10
+ // DASHBOARD CONFIGURATION
11
+ // =============================================================================
12
+
13
+ export const DASHBOARD_CONFIG = {
14
+ // =============================================================================
15
+ // TOPBAR CONFIGURATION
16
+ // =============================================================================
17
+ topbar: {
18
+ /**
19
+ * Search functionality in the topbar
20
+ */
21
+ search: {
22
+ enabled: true,
23
+ placeholder: 'dashboard.search.placeholder',
24
+ maxResults: 8,
25
+ },
26
+
27
+ /**
28
+ * Notifications dropdown
29
+ */
30
+ notifications: {
31
+ enabled: true,
32
+ // maxVisible: 5,
33
+ // autoRefresh: true,
34
+ // refreshInterval: 30000, // 30 seconds
35
+ // showBadge: true,
36
+ // playSound: false,
37
+ },
38
+
39
+ /**
40
+ * Theme mode toggle
41
+ */
42
+ themeToggle: {
43
+ enabled: true,
44
+ },
45
+
46
+ /**
47
+ * Support/Help button
48
+ */
49
+ support: {
50
+ enabled: true,
51
+ type: 'dropdown', // 'dropdown' | 'link' | 'modal'
52
+ links: [
53
+ {
54
+ label: 'common.help.documentation',
55
+ url: '/docs',
56
+ icon: 'book-open',
57
+ external: false,
58
+ },
59
+ {
60
+ label: 'common.help.support',
61
+ url: '/support',
62
+ icon: 'help-circle',
63
+ external: false,
64
+ },
65
+ {
66
+ label: 'common.help.keyboard',
67
+ action: 'showKeyboardShortcuts',
68
+ icon: 'keyboard',
69
+ }
70
+ ],
71
+ },
72
+
73
+ /**
74
+ * Quick create dropdown
75
+ */
76
+ quickCreate: {
77
+ enabled: true,
78
+ },
79
+
80
+ /**
81
+ * Admin access button (Super Admin area)
82
+ * By default only visible to superadmins, but can be extended to developers
83
+ */
84
+ adminAccess: {
85
+ enabled: true,
86
+ showToDevelopers: true,
87
+ },
88
+
89
+ /**
90
+ * Dev Zone access button (Developer area)
91
+ * Only visible to users with developer role
92
+ */
93
+ devtoolsAccess: {
94
+ enabled: true,
95
+ },
96
+
97
+ /**
98
+ * User menu dropdown
99
+ */
100
+ userMenu: {
101
+ enabled: true,
102
+ showAvatar: true,
103
+ showEmail: true,
104
+ showRole: false, // User role no longer relevant - team roles are shown in TeamSwitcher
105
+ items: [
106
+ { type: 'link', label: 'navigation.profile', href: '/dashboard/settings/profile', icon: 'user' },
107
+ { type: 'link', label: 'navigation.settings', href: '/dashboard/settings', icon: 'settings' },
108
+ { type: 'divider' },
109
+ { type: 'action', label: 'buttons.signOut', action: 'signOut', icon: 'log-out' },
110
+ ],
111
+ },
112
+ },
113
+
114
+ // =============================================================================
115
+ // SIDEBAR CONFIGURATION
116
+ // =============================================================================
117
+ sidebar: {
118
+ /**
119
+ * Default sidebar state
120
+ */
121
+ defaultCollapsed: false,
122
+ rememberState: true,
123
+ collapsedWidth: '60px',
124
+ expandedWidth: '240px',
125
+
126
+ /**
127
+ * Sidebar toggle behavior
128
+ */
129
+ toggle: {
130
+ enabled: true,
131
+ showInTopbar: true,
132
+ hideOnMobile: false,
133
+ },
134
+
135
+ /**
136
+ * Navigation structure
137
+ */
138
+ navigation: {
139
+ showEntityCounts: true,
140
+ groupEntities: true,
141
+ showRecents: true,
142
+ maxRecents: 5,
143
+ },
144
+ },
145
+
146
+ // =============================================================================
147
+ // SETTINGS PAGES CONFIGURATION
148
+ // =============================================================================
149
+ settings: {
150
+ /**
151
+ * Available settings pages
152
+ * Set enabled: false to hide a settings page
153
+ */
154
+ pages: {
155
+ profile: {
156
+ enabled: true,
157
+ label: 'settings.pages.profile',
158
+ description: 'settings.pages.profileDescription',
159
+ icon: 'user',
160
+ order: 1,
161
+ features: {
162
+ avatarUpload: true,
163
+ nameChange: true,
164
+ emailChange: true,
165
+ localeChange: true,
166
+ timezoneChange: false,
167
+ },
168
+ },
169
+
170
+ security: {
171
+ enabled: true,
172
+ label: 'settings.pages.security',
173
+ description: 'settings.pages.securityDescription',
174
+ icon: 'shield',
175
+ order: 2,
176
+ features: {
177
+ twoFactorAuth: true,
178
+ sessionManagement: true,
179
+ loginHistory: true,
180
+ securityQuestions: false,
181
+ },
182
+ },
183
+
184
+ password: {
185
+ enabled: true,
186
+ label: 'settings.pages.password',
187
+ description: 'settings.pages.passwordDescription',
188
+ icon: 'key',
189
+ order: 3,
190
+ features: {
191
+ passwordChange: true,
192
+ passwordStrength: true,
193
+ passwordHistory: false,
194
+ },
195
+ },
196
+
197
+ notifications: {
198
+ enabled: true,
199
+ label: 'settings.pages.notifications',
200
+ description: 'settings.pages.notificationsDescription',
201
+ icon: 'bell',
202
+ order: 4,
203
+ features: {
204
+ emailNotifications: true,
205
+ pushNotifications: true,
206
+ smsNotifications: false,
207
+ notificationCategories: true,
208
+ },
209
+ },
210
+
211
+ 'api-keys': {
212
+ enabled: true,
213
+ label: 'settings.pages.apiKeys',
214
+ description: 'settings.pages.apiKeysDescription',
215
+ icon: 'key',
216
+ order: 5,
217
+ features: {
218
+ createKeys: true,
219
+ revokeKeys: true,
220
+ scopeManagement: true,
221
+ usageAnalytics: true,
222
+ },
223
+ requiredRole: 'colaborator', // Minimum role required to access
224
+ },
225
+
226
+ billing: {
227
+ enabled: true,
228
+ label: 'settings.pages.billing',
229
+ description: 'settings.pages.billingDescription',
230
+ icon: 'credit-card',
231
+ order: 6,
232
+ features: {
233
+ subscriptionManagement: true,
234
+ paymentMethods: true,
235
+ invoiceHistory: true,
236
+ usageMetrics: true,
237
+ },
238
+ requiredRole: 'admin', // Only admins can manage billing
239
+ },
240
+
241
+ teams: {
242
+ enabled: true,
243
+ label: 'settings.pages.teams',
244
+ description: 'settings.pages.teamsDescription',
245
+ icon: 'users',
246
+ order: 7,
247
+ features: {
248
+ createTeams: true,
249
+ manageMembers: true,
250
+ inviteMembers: true,
251
+ teamSettings: true,
252
+ },
253
+ },
254
+ },
255
+
256
+ /**
257
+ * Settings layout configuration
258
+ */
259
+ layout: {
260
+ showDescription: true,
261
+ showIcons: true,
262
+ groupByCategory: false,
263
+ enableSearch: true,
264
+ },
265
+ },
266
+
267
+ // =============================================================================
268
+ // ENTITY PAGES CONFIGURATION
269
+ // =============================================================================
270
+ entities: {
271
+ /**
272
+ * Default list view configuration for all entities
273
+ */
274
+ defaultListView: {
275
+ pagination: {
276
+ defaultPageSize: 20,
277
+ allowedPageSizes: [10, 20, 50, 100],
278
+ showSizeSelector: true,
279
+ },
280
+ sorting: {
281
+ enabled: true,
282
+ defaultSort: { field: 'createdAt', direction: 'desc' },
283
+ rememberSort: true,
284
+ },
285
+ filtering: {
286
+ enabled: true,
287
+ quickFilters: true,
288
+ advancedFilters: true,
289
+ rememberFilters: false,
290
+ },
291
+ search: {
292
+ enabled: true,
293
+ placeholder: 'dashboard.entities.searchPlaceholder',
294
+ searchableFields: ['name', 'title', 'description', 'email'],
295
+ instantSearch: true,
296
+ debounceMs: 300,
297
+ },
298
+ },
299
+
300
+ /**
301
+ * Default form behavior for all entities
302
+ */
303
+ defaultFormView: {
304
+ validation: {
305
+ validateOnBlur: true,
306
+ validateOnChange: false,
307
+ showFieldErrors: true,
308
+ showFormErrors: true,
309
+ },
310
+ autosave: {
311
+ enabled: false,
312
+ intervalMs: 30000,
313
+ showIndicator: true,
314
+ },
315
+ confirmation: {
316
+ showOnCreate: false,
317
+ showOnUpdate: true,
318
+ showOnDelete: true,
319
+ },
320
+ },
321
+
322
+ /**
323
+ * Per-entity customizations
324
+ * Override default settings for specific entities
325
+ */
326
+ customizations: {
327
+ tasks: {
328
+ listView: {
329
+ defaultSort: { field: 'priority', direction: 'desc' },
330
+ quickFilters: ['status', 'priority', 'assignee'],
331
+ },
332
+ formView: {
333
+ autosave: { enabled: true },
334
+ },
335
+ },
336
+ clients: {
337
+ listView: {
338
+ defaultSort: { field: 'name', direction: 'asc' },
339
+ searchableFields: ['name', 'email', 'company'],
340
+ },
341
+ },
342
+ },
343
+ },
344
+
345
+ // =============================================================================
346
+ // DASHBOARD HOMEPAGE CONFIGURATION
347
+ // =============================================================================
348
+ homepage: {
349
+ /**
350
+ * Widgets to show on dashboard homepage
351
+ */
352
+ widgets: {
353
+ welcome: {
354
+ enabled: true,
355
+ showUserName: true,
356
+ showLastLogin: true,
357
+ showQuickActions: true,
358
+ },
359
+
360
+ stats: {
361
+ enabled: true,
362
+ entities: ['tasks', 'clients', 'products', 'orders'],
363
+ timeframe: '30days', // 'today' | '7days' | '30days' | '90days'
364
+ showTrends: true,
365
+ },
366
+
367
+ recentActivity: {
368
+ enabled: true,
369
+ maxItems: 10,
370
+ entities: ['tasks', 'clients', 'products', 'orders'],
371
+ showTimestamps: true,
372
+ },
373
+
374
+ quickActions: {
375
+ enabled: true,
376
+ actions: [
377
+ { entity: 'tasks', action: 'create', label: 'dashboard.quickActions.createTask' },
378
+ { entity: 'clients', action: 'create', label: 'dashboard.quickActions.createClient' },
379
+ { entity: 'products', action: 'create', label: 'dashboard.quickActions.createProduct' },
380
+ ],
381
+ },
382
+ },
383
+
384
+ /**
385
+ * Layout configuration
386
+ */
387
+ layout: {
388
+ columns: 3,
389
+ gutter: 'medium', // 'small' | 'medium' | 'large'
390
+ responsive: true,
391
+ },
392
+ },
393
+
394
+ // =============================================================================
395
+ // PERFORMANCE & BEHAVIOR
396
+ // =============================================================================
397
+ performance: {
398
+ /**
399
+ * Caching configuration
400
+ */
401
+ cache: {
402
+ entityConfigs: {
403
+ enabled: true,
404
+ duration: 5 * 60 * 1000, // 5 minutes
405
+ },
406
+ entityData: {
407
+ enabled: true,
408
+ duration: 2 * 60 * 1000, // 2 minutes
409
+ },
410
+ },
411
+
412
+ /**
413
+ * Loading states
414
+ */
415
+ loading: {
416
+ showSkeletons: true,
417
+ showProgressBars: true,
418
+ minimumLoadingTime: 300, // Prevent flashing
419
+ },
420
+
421
+ /**
422
+ * Error handling
423
+ */
424
+ errors: {
425
+ showErrorBoundaries: true,
426
+ logErrors: true,
427
+ enableRetry: true,
428
+ maxRetries: 3,
429
+ },
430
+ },
431
+
432
+ // =============================================================================
433
+ // ACCESSIBILITY & UX
434
+ // =============================================================================
435
+ accessibility: {
436
+ /**
437
+ * Keyboard navigation
438
+ * @todo Shortcuts are not implemented yet
439
+ */
440
+ keyboard: {
441
+ enabled: true,
442
+ showShortcuts: true,
443
+ customShortcuts: {
444
+ 'Ctrl+K': 'openSearch',
445
+ 'Ctrl+Shift+N': 'quickCreate',
446
+ 'Ctrl+B': 'toggleSidebar',
447
+ 'Esc': 'closeModals',
448
+ },
449
+ },
450
+
451
+ /**
452
+ * Screen reader support
453
+ */
454
+ screenReader: {
455
+ announceNavigation: true,
456
+ announceActions: true,
457
+ announceErrors: true,
458
+ },
459
+
460
+ /**
461
+ * Visual indicators
462
+ */
463
+ visual: {
464
+ showFocusOutlines: true,
465
+ highContrastMode: false,
466
+ reducedMotion: false,
467
+ },
468
+ },
469
+ } as const
470
+
471
+ // =============================================================================
472
+ // CONVENIENCE EXPORTS
473
+ // =============================================================================
474
+
475
+ /**
476
+ * Quick access to common dashboard configuration values
477
+ */
478
+ export const TOPBAR_CONFIG = DASHBOARD_CONFIG.topbar
479
+ export const SIDEBAR_CONFIG = DASHBOARD_CONFIG.sidebar
480
+ export const SETTINGS_CONFIG = DASHBOARD_CONFIG.settings
481
+ export const ENTITIES_CONFIG = DASHBOARD_CONFIG.entities
482
+ export const HOMEPAGE_CONFIG = DASHBOARD_CONFIG.homepage
483
+
484
+ /**
485
+ * Helper to check if a settings page is enabled
486
+ */
487
+ export const isSettingsPageEnabled = (pageKey: keyof typeof DASHBOARD_CONFIG.settings.pages): boolean => {
488
+ return DASHBOARD_CONFIG.settings.pages[pageKey]?.enabled ?? false
489
+ }
490
+
491
+ /**
492
+ * Helper to get enabled settings pages sorted by order
493
+ */
494
+ export const getEnabledSettingsPages = () => {
495
+ return Object.entries(DASHBOARD_CONFIG.settings.pages)
496
+ .filter(([_, config]) => config.enabled)
497
+ .sort((a, b) => a[1].order - b[1].order)
498
+ .map(([key, config]) => ({ key, ...config }))
499
+ }
500
+
501
+ /**
502
+ * Helper to check if a topbar feature is enabled
503
+ */
504
+ export const isTopbarFeatureEnabled = (feature: keyof typeof DASHBOARD_CONFIG.topbar): boolean => {
505
+ return DASHBOARD_CONFIG.topbar[feature]?.enabled ?? false
506
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Default Theme - Development Configuration
3
+ *
4
+ * This file contains development-only settings that should never affect production.
5
+ * Settings like DevKeyring are only rendered in non-production environments.
6
+ *
7
+ * @see core/lib/config/types.ts for DevConfig interface
8
+ */
9
+
10
+ import type { DevConfig } from '@nextsparkjs/core/lib/config/types'
11
+
12
+ export const DEV_CONFIG_OVERRIDES: DevConfig = {
13
+ // =============================================================================
14
+ // DEV KEYRING (Development/QA Only)
15
+ // =============================================================================
16
+ /**
17
+ * DevKeyring - Quick login for Default theme (multi-tenant mode)
18
+ *
19
+ * CORE USERS (from core/migrations/090_sample_data.sql):
20
+ * - superadmin@nextspark.dev (superadmin role) - TMT team owner
21
+ * - developer@nextspark.dev (developer role) - TMT team admin
22
+ *
23
+ * DEMO USERS (from theme/migrations/090_demo_users_teams.sql):
24
+ * - Everpoint Labs (Technology) - Carlos (owner), James (admin), Diego & Emily (members)
25
+ * - Ironvale Global (Consulting) - Ana (owner), Sofia (admin), Michael (member), Sarah (viewer)
26
+ * - Riverstone Ventures (Investment) - Sofia (owner), Emily (admin), Carlos (member)
27
+ */
28
+ devKeyring: {
29
+ enabled: true,
30
+ users: [
31
+ // ========================================
32
+ // DEMO USERS (TMT.dev)
33
+ // ========================================
34
+ {
35
+ id: 'carlos',
36
+ email: 'carlos.mendoza@nextspark.dev',
37
+ name: 'Carlos Mendoza',
38
+ password: 'Test1234',
39
+ teamRoles: 'Everpoint Labs (owner), Riverstone (member)',
40
+ },
41
+ {
42
+ id: 'james',
43
+ email: 'james.wilson@nextspark.dev',
44
+ name: 'James Wilson',
45
+ password: 'Test1234',
46
+ teamRoles: 'Everpoint Labs (admin)',
47
+ },
48
+ {
49
+ id: 'ana',
50
+ email: 'ana.garcia@nextspark.dev',
51
+ name: 'Ana García',
52
+ password: 'Test1234',
53
+ teamRoles: 'Ironvale Global (owner)',
54
+ },
55
+ {
56
+ id: 'sofia',
57
+ email: 'sofia.lopez@nextspark.dev',
58
+ name: 'Sofia López',
59
+ password: 'Test1234',
60
+ teamRoles: 'Riverstone (owner), Ironvale (admin)',
61
+ },
62
+ {
63
+ id: 'diego',
64
+ email: 'diego.ramirez@nextspark.dev',
65
+ name: 'Diego Ramírez',
66
+ password: 'Test1234',
67
+ teamRoles: 'Everpoint Labs (editor)',
68
+ },
69
+ {
70
+ id: 'emily',
71
+ email: 'emily.johnson@nextspark.dev',
72
+ name: 'Emily Johnson',
73
+ password: 'Test1234',
74
+ teamRoles: 'Everpoint (member), Riverstone (admin)',
75
+ },
76
+ {
77
+ id: 'sarah',
78
+ email: 'sarah.davis@nextspark.dev',
79
+ name: 'Sarah Davis',
80
+ password: 'Test1234',
81
+ teamRoles: 'Ironvale Global (viewer)',
82
+ },
83
+ // ========================================
84
+ // CORE USERS (superadmin & developer)
85
+ // ========================================
86
+ {
87
+ id: 'superadmin',
88
+ email: 'superadmin@nextspark.dev',
89
+ name: 'Super Admin',
90
+ password: 'Pandora1234',
91
+ teamRoles: 'TMT (owner) - SUPERADMIN ROLE',
92
+ },
93
+ {
94
+ id: 'developer',
95
+ email: 'developer@nextspark.dev',
96
+ name: 'Developer',
97
+ password: 'Pandora1234',
98
+ teamRoles: 'TMT (admin) - DEVELOPER ROLE',
99
+ },
100
+ ],
101
+ },
102
+ }
103
+
104
+ export default DEV_CONFIG_OVERRIDES