reviewflow 3.4.0 → 3.5.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 (205) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/cli/parseCliArgs.d.ts +6 -1
  3. package/dist/cli/parseCliArgs.d.ts.map +1 -1
  4. package/dist/cli/parseCliArgs.js +11 -1
  5. package/dist/cli/parseCliArgs.js.map +1 -1
  6. package/dist/config/projectConfig.d.ts +6 -0
  7. package/dist/config/projectConfig.d.ts.map +1 -1
  8. package/dist/config/projectConfig.js +13 -0
  9. package/dist/config/projectConfig.js.map +1 -1
  10. package/dist/entities/language/language.schema.d.ts +7 -0
  11. package/dist/entities/language/language.schema.d.ts.map +1 -0
  12. package/dist/entities/language/language.schema.js +3 -0
  13. package/dist/entities/language/language.schema.js.map +1 -0
  14. package/dist/frameworks/claude/claudeInvoker.d.ts +1 -1
  15. package/dist/frameworks/claude/claudeInvoker.d.ts.map +1 -1
  16. package/dist/frameworks/claude/claudeInvoker.js +6 -3
  17. package/dist/frameworks/claude/claudeInvoker.js.map +1 -1
  18. package/dist/frameworks/claude/languageDirective.d.ts +3 -0
  19. package/dist/frameworks/claude/languageDirective.d.ts.map +1 -0
  20. package/dist/frameworks/claude/languageDirective.js +9 -0
  21. package/dist/frameworks/claude/languageDirective.js.map +1 -0
  22. package/dist/frameworks/queue/pQueueAdapter.d.ts +2 -0
  23. package/dist/frameworks/queue/pQueueAdapter.d.ts.map +1 -1
  24. package/dist/frameworks/queue/pQueueAdapter.js +1 -1
  25. package/dist/frameworks/queue/pQueueAdapter.js.map +1 -1
  26. package/dist/frameworks/settings/runtimeSettings.d.ts +4 -0
  27. package/dist/frameworks/settings/runtimeSettings.d.ts.map +1 -1
  28. package/dist/frameworks/settings/runtimeSettings.js +8 -1
  29. package/dist/frameworks/settings/runtimeSettings.js.map +1 -1
  30. package/dist/interface-adapters/controllers/http/settings.routes.d.ts.map +1 -1
  31. package/dist/interface-adapters/controllers/http/settings.routes.js +12 -1
  32. package/dist/interface-adapters/controllers/http/settings.routes.js.map +1 -1
  33. package/dist/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
  34. package/dist/interface-adapters/controllers/webhook/github.controller.js +2 -1
  35. package/dist/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  36. package/dist/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
  37. package/dist/interface-adapters/controllers/webhook/gitlab.controller.js +2 -1
  38. package/dist/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
  39. package/dist/interface-adapters/views/dashboard/index.html +974 -393
  40. package/dist/interface-adapters/views/dashboard/modules/assignee.d.ts +7 -0
  41. package/dist/interface-adapters/views/dashboard/modules/assignee.d.ts.map +1 -0
  42. package/dist/interface-adapters/views/dashboard/modules/assignee.js +47 -0
  43. package/dist/interface-adapters/views/dashboard/modules/assignee.js.map +1 -0
  44. package/dist/interface-adapters/views/dashboard/modules/constants.d.ts +7 -0
  45. package/dist/interface-adapters/views/dashboard/modules/constants.d.ts.map +1 -0
  46. package/dist/interface-adapters/views/dashboard/modules/constants.js +6 -0
  47. package/dist/interface-adapters/views/dashboard/modules/constants.js.map +1 -0
  48. package/dist/interface-adapters/views/dashboard/modules/desktopNotifications.d.ts +23 -0
  49. package/dist/interface-adapters/views/dashboard/modules/desktopNotifications.d.ts.map +1 -0
  50. package/dist/interface-adapters/views/dashboard/modules/desktopNotifications.js +37 -0
  51. package/dist/interface-adapters/views/dashboard/modules/desktopNotifications.js.map +1 -0
  52. package/dist/interface-adapters/views/dashboard/modules/formatting.d.ts +23 -0
  53. package/dist/interface-adapters/views/dashboard/modules/formatting.d.ts.map +1 -0
  54. package/dist/interface-adapters/views/dashboard/modules/formatting.js +57 -0
  55. package/dist/interface-adapters/views/dashboard/modules/formatting.js.map +1 -0
  56. package/dist/interface-adapters/views/dashboard/modules/html.d.ts +16 -0
  57. package/dist/interface-adapters/views/dashboard/modules/html.d.ts.map +1 -0
  58. package/dist/interface-adapters/views/dashboard/modules/html.js +68 -0
  59. package/dist/interface-adapters/views/dashboard/modules/html.js.map +1 -0
  60. package/dist/interface-adapters/views/dashboard/modules/i18n.d.ts +11 -0
  61. package/dist/interface-adapters/views/dashboard/modules/i18n.d.ts.map +1 -0
  62. package/dist/interface-adapters/views/dashboard/modules/i18n.js +500 -0
  63. package/dist/interface-adapters/views/dashboard/modules/i18n.js.map +1 -0
  64. package/dist/interface-adapters/views/dashboard/modules/icons.d.ts +13 -0
  65. package/dist/interface-adapters/views/dashboard/modules/icons.d.ts.map +1 -0
  66. package/dist/interface-adapters/views/dashboard/modules/icons.js +29 -0
  67. package/dist/interface-adapters/views/dashboard/modules/icons.js.map +1 -0
  68. package/dist/interface-adapters/views/dashboard/modules/loading.d.ts +30 -0
  69. package/dist/interface-adapters/views/dashboard/modules/loading.d.ts.map +1 -0
  70. package/dist/interface-adapters/views/dashboard/modules/loading.js +48 -0
  71. package/dist/interface-adapters/views/dashboard/modules/loading.js.map +1 -0
  72. package/dist/interface-adapters/views/dashboard/modules/notifications.d.ts +39 -0
  73. package/dist/interface-adapters/views/dashboard/modules/notifications.d.ts.map +1 -0
  74. package/dist/interface-adapters/views/dashboard/modules/notifications.js +131 -0
  75. package/dist/interface-adapters/views/dashboard/modules/notifications.js.map +1 -0
  76. package/dist/interface-adapters/views/dashboard/modules/priority.d.ts +10 -0
  77. package/dist/interface-adapters/views/dashboard/modules/priority.d.ts.map +1 -0
  78. package/dist/interface-adapters/views/dashboard/modules/priority.js +86 -0
  79. package/dist/interface-adapters/views/dashboard/modules/priority.js.map +1 -0
  80. package/dist/interface-adapters/views/dashboard/modules/quality.d.ts +30 -0
  81. package/dist/interface-adapters/views/dashboard/modules/quality.d.ts.map +1 -0
  82. package/dist/interface-adapters/views/dashboard/modules/quality.js +83 -0
  83. package/dist/interface-adapters/views/dashboard/modules/quality.js.map +1 -0
  84. package/dist/interface-adapters/views/dashboard/modules/queueLanes.d.ts +22 -0
  85. package/dist/interface-adapters/views/dashboard/modules/queueLanes.d.ts.map +1 -0
  86. package/dist/interface-adapters/views/dashboard/modules/queueLanes.js +27 -0
  87. package/dist/interface-adapters/views/dashboard/modules/queueLanes.js.map +1 -0
  88. package/dist/interface-adapters/views/dashboard/modules/sessionMetrics.d.ts +54 -0
  89. package/dist/interface-adapters/views/dashboard/modules/sessionMetrics.d.ts.map +1 -0
  90. package/dist/interface-adapters/views/dashboard/modules/sessionMetrics.js +120 -0
  91. package/dist/interface-adapters/views/dashboard/modules/sessionMetrics.js.map +1 -0
  92. package/dist/interface-adapters/views/dashboard/styles.css +1031 -93
  93. package/dist/main/cli.d.ts +41 -1
  94. package/dist/main/cli.d.ts.map +1 -1
  95. package/dist/main/cli.js +228 -88
  96. package/dist/main/cli.js.map +1 -1
  97. package/dist/tests/factories/reviewJob.factory.d.ts.map +1 -1
  98. package/dist/tests/factories/reviewJob.factory.js +1 -0
  99. package/dist/tests/factories/reviewJob.factory.js.map +1 -1
  100. package/dist/tests/units/cli/parseCliArgs.test.js +14 -0
  101. package/dist/tests/units/cli/parseCliArgs.test.js.map +1 -1
  102. package/dist/tests/units/config/projectConfig.test.d.ts +2 -0
  103. package/dist/tests/units/config/projectConfig.test.d.ts.map +1 -0
  104. package/dist/tests/units/config/projectConfig.test.js +69 -0
  105. package/dist/tests/units/config/projectConfig.test.js.map +1 -0
  106. package/dist/tests/units/entities/language/language.schema.test.d.ts +2 -0
  107. package/dist/tests/units/entities/language/language.schema.test.d.ts.map +1 -0
  108. package/dist/tests/units/entities/language/language.schema.test.js +17 -0
  109. package/dist/tests/units/entities/language/language.schema.test.js.map +1 -0
  110. package/dist/tests/units/frameworks/claude/languageDirective.test.d.ts +2 -0
  111. package/dist/tests/units/frameworks/claude/languageDirective.test.d.ts.map +1 -0
  112. package/dist/tests/units/frameworks/claude/languageDirective.test.js +13 -0
  113. package/dist/tests/units/frameworks/claude/languageDirective.test.js.map +1 -0
  114. package/dist/tests/units/frameworks/settings/runtimeSettings.test.d.ts +2 -0
  115. package/dist/tests/units/frameworks/settings/runtimeSettings.test.d.ts.map +1 -0
  116. package/dist/tests/units/frameworks/settings/runtimeSettings.test.js +20 -0
  117. package/dist/tests/units/frameworks/settings/runtimeSettings.test.js.map +1 -0
  118. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
  119. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
  120. package/dist/tests/units/interface-adapters/views/dashboard/modules/assignee.test.d.ts +2 -0
  121. package/dist/tests/units/interface-adapters/views/dashboard/modules/assignee.test.d.ts.map +1 -0
  122. package/dist/tests/units/interface-adapters/views/dashboard/modules/assignee.test.js +35 -0
  123. package/dist/tests/units/interface-adapters/views/dashboard/modules/assignee.test.js.map +1 -0
  124. package/dist/tests/units/interface-adapters/views/dashboard/modules/constants.test.d.ts +2 -0
  125. package/dist/tests/units/interface-adapters/views/dashboard/modules/constants.test.d.ts.map +1 -0
  126. package/dist/tests/units/interface-adapters/views/dashboard/modules/constants.test.js +17 -0
  127. package/dist/tests/units/interface-adapters/views/dashboard/modules/constants.test.js.map +1 -0
  128. package/dist/tests/units/interface-adapters/views/dashboard/modules/desktopNotifications.test.d.ts +2 -0
  129. package/dist/tests/units/interface-adapters/views/dashboard/modules/desktopNotifications.test.d.ts.map +1 -0
  130. package/dist/tests/units/interface-adapters/views/dashboard/modules/desktopNotifications.test.js +54 -0
  131. package/dist/tests/units/interface-adapters/views/dashboard/modules/desktopNotifications.test.js.map +1 -0
  132. package/dist/tests/units/interface-adapters/views/dashboard/modules/formatting.test.d.ts +2 -0
  133. package/dist/tests/units/interface-adapters/views/dashboard/modules/formatting.test.d.ts.map +1 -0
  134. package/dist/tests/units/interface-adapters/views/dashboard/modules/formatting.test.js +95 -0
  135. package/dist/tests/units/interface-adapters/views/dashboard/modules/formatting.test.js.map +1 -0
  136. package/dist/tests/units/interface-adapters/views/dashboard/modules/html.test.d.ts +2 -0
  137. package/dist/tests/units/interface-adapters/views/dashboard/modules/html.test.d.ts.map +1 -0
  138. package/dist/tests/units/interface-adapters/views/dashboard/modules/html.test.js +55 -0
  139. package/dist/tests/units/interface-adapters/views/dashboard/modules/html.test.js.map +1 -0
  140. package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.d.ts +2 -0
  141. package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.d.ts.map +1 -0
  142. package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.js +98 -0
  143. package/dist/tests/units/interface-adapters/views/dashboard/modules/i18n.test.js.map +1 -0
  144. package/dist/tests/units/interface-adapters/views/dashboard/modules/icons.test.d.ts +2 -0
  145. package/dist/tests/units/interface-adapters/views/dashboard/modules/icons.test.d.ts.map +1 -0
  146. package/dist/tests/units/interface-adapters/views/dashboard/modules/icons.test.js +28 -0
  147. package/dist/tests/units/interface-adapters/views/dashboard/modules/icons.test.js.map +1 -0
  148. package/dist/tests/units/interface-adapters/views/dashboard/modules/loading.test.d.ts +2 -0
  149. package/dist/tests/units/interface-adapters/views/dashboard/modules/loading.test.d.ts.map +1 -0
  150. package/dist/tests/units/interface-adapters/views/dashboard/modules/loading.test.js +51 -0
  151. package/dist/tests/units/interface-adapters/views/dashboard/modules/loading.test.js.map +1 -0
  152. package/dist/tests/units/interface-adapters/views/dashboard/modules/notifications.test.d.ts +2 -0
  153. package/dist/tests/units/interface-adapters/views/dashboard/modules/notifications.test.d.ts.map +1 -0
  154. package/dist/tests/units/interface-adapters/views/dashboard/modules/notifications.test.js +43 -0
  155. package/dist/tests/units/interface-adapters/views/dashboard/modules/notifications.test.js.map +1 -0
  156. package/dist/tests/units/interface-adapters/views/dashboard/modules/priority.test.d.ts +2 -0
  157. package/dist/tests/units/interface-adapters/views/dashboard/modules/priority.test.d.ts.map +1 -0
  158. package/dist/tests/units/interface-adapters/views/dashboard/modules/priority.test.js +78 -0
  159. package/dist/tests/units/interface-adapters/views/dashboard/modules/priority.test.js.map +1 -0
  160. package/dist/tests/units/interface-adapters/views/dashboard/modules/quality.test.d.ts +2 -0
  161. package/dist/tests/units/interface-adapters/views/dashboard/modules/quality.test.d.ts.map +1 -0
  162. package/dist/tests/units/interface-adapters/views/dashboard/modules/quality.test.js +87 -0
  163. package/dist/tests/units/interface-adapters/views/dashboard/modules/quality.test.js.map +1 -0
  164. package/dist/tests/units/interface-adapters/views/dashboard/modules/queueLanes.test.d.ts +2 -0
  165. package/dist/tests/units/interface-adapters/views/dashboard/modules/queueLanes.test.d.ts.map +1 -0
  166. package/dist/tests/units/interface-adapters/views/dashboard/modules/queueLanes.test.js +29 -0
  167. package/dist/tests/units/interface-adapters/views/dashboard/modules/queueLanes.test.js.map +1 -0
  168. package/dist/tests/units/interface-adapters/views/dashboard/modules/sessionMetrics.test.d.ts +2 -0
  169. package/dist/tests/units/interface-adapters/views/dashboard/modules/sessionMetrics.test.d.ts.map +1 -0
  170. package/dist/tests/units/interface-adapters/views/dashboard/modules/sessionMetrics.test.js +60 -0
  171. package/dist/tests/units/interface-adapters/views/dashboard/modules/sessionMetrics.test.js.map +1 -0
  172. package/dist/tests/units/main/executeDiscover.test.d.ts +2 -0
  173. package/dist/tests/units/main/executeDiscover.test.d.ts.map +1 -0
  174. package/dist/tests/units/main/executeDiscover.test.js +106 -0
  175. package/dist/tests/units/main/executeDiscover.test.js.map +1 -0
  176. package/dist/tests/units/main/executeInit.test.d.ts +2 -0
  177. package/dist/tests/units/main/executeInit.test.d.ts.map +1 -0
  178. package/dist/tests/units/main/executeInit.test.js +290 -0
  179. package/dist/tests/units/main/executeInit.test.js.map +1 -0
  180. package/dist/tests/units/usecases/cli/addRepositoriesToConfig.usecase.test.d.ts +2 -0
  181. package/dist/tests/units/usecases/cli/addRepositoriesToConfig.usecase.test.d.ts.map +1 -0
  182. package/dist/tests/units/usecases/cli/addRepositoriesToConfig.usecase.test.js +127 -0
  183. package/dist/tests/units/usecases/cli/addRepositoriesToConfig.usecase.test.js.map +1 -0
  184. package/dist/tests/units/usecases/cli/checkInitPrerequisites.test.d.ts +2 -0
  185. package/dist/tests/units/usecases/cli/checkInitPrerequisites.test.d.ts.map +1 -0
  186. package/dist/tests/units/usecases/cli/checkInitPrerequisites.test.js +57 -0
  187. package/dist/tests/units/usecases/cli/checkInitPrerequisites.test.js.map +1 -0
  188. package/dist/usecases/cli/addRepositoriesToConfig.usecase.d.ts +27 -0
  189. package/dist/usecases/cli/addRepositoriesToConfig.usecase.d.ts.map +1 -0
  190. package/dist/usecases/cli/addRepositoriesToConfig.usecase.js +34 -0
  191. package/dist/usecases/cli/addRepositoriesToConfig.usecase.js.map +1 -0
  192. package/dist/usecases/cli/checkInitPrerequisites.d.ts +16 -0
  193. package/dist/usecases/cli/checkInitPrerequisites.d.ts.map +1 -0
  194. package/dist/usecases/cli/checkInitPrerequisites.js +23 -0
  195. package/dist/usecases/cli/checkInitPrerequisites.js.map +1 -0
  196. package/dist/usecases/cli/configureMcp.usecase.d.ts +1 -1
  197. package/dist/usecases/cli/configureMcp.usecase.d.ts.map +1 -1
  198. package/dist/usecases/cli/validateConfig.usecase.d.ts +1 -1
  199. package/dist/usecases/cli/validateConfig.usecase.d.ts.map +1 -1
  200. package/dist/usecases/triggerReview.usecase.d.ts +2 -0
  201. package/dist/usecases/triggerReview.usecase.d.ts.map +1 -1
  202. package/dist/usecases/triggerReview.usecase.js +1 -0
  203. package/dist/usecases/triggerReview.usecase.js.map +1 -1
  204. package/package.json +1 -1
  205. package/templates/SETUP.md +23 -8
@@ -0,0 +1,500 @@
1
+ /** @type {'en' | 'fr'} */
2
+ let currentLanguage = 'en';
3
+
4
+ const translations = {
5
+ en: {
6
+ // Time
7
+ 'time.justNow': 'Just now',
8
+ 'time.minutesAgo': '{{minutes}} min ago',
9
+ 'time.hoursAgo': '{{hours}}h ago',
10
+
11
+ // Phases
12
+ 'phase.initializing': 'Initializing',
13
+ 'phase.agents-running': 'Agents running',
14
+ 'phase.synthesizing': 'Synthesizing',
15
+ 'phase.publishing': 'Publishing',
16
+ 'phase.completed': 'Completed',
17
+
18
+ // Header
19
+ 'header.checkClaude': 'Check Claude',
20
+ 'header.logs': 'Logs',
21
+ 'header.hideLogs': 'Hide Logs',
22
+
23
+ // Cards
24
+ 'card.running': 'Running',
25
+ 'card.queued': 'Queued',
26
+ 'card.completed': 'Completed',
27
+ 'card.claudeCli': 'Claude CLI',
28
+ 'card.model': 'Model',
29
+ 'card.language': 'Language',
30
+ 'card.gitCli': 'Git CLI',
31
+ 'card.gitlabCli': 'GitLab CLI',
32
+ 'card.githubCli': 'GitHub CLI',
33
+
34
+ // Focus strip
35
+ 'strip.now': 'To handle now',
36
+ 'strip.nowMeta': 'Running reviews + MRs pending fix',
37
+ 'strip.next': 'Up next',
38
+ 'strip.nextMeta': 'Queued reviews + MRs pending approval',
39
+ 'strip.blocked': 'Blocking feedback',
40
+ 'strip.blockedMeta': 'MRs with unresolved threads',
41
+ 'strip.modeCompact': 'Compact view',
42
+ 'strip.modeDetailed': 'Detailed view',
43
+
44
+ // Priority lane
45
+ 'lane.nowKicker': 'Take action now',
46
+ 'lane.nowMeta': '{{count}} open thread(s) to resolve',
47
+ 'lane.owner': 'Owner: {{owner}}',
48
+
49
+ // Quality score
50
+ 'quality.kicker': 'Quality score',
51
+ 'quality.target': 'Target {{target}}/10',
52
+ 'quality.notAvailable': 'No score yet',
53
+ 'quality.perfect': 'Perfect quality',
54
+ 'quality.onTarget': 'On target',
55
+ 'quality.belowTarget': 'Needs improvements',
56
+ 'quality.lovableQuality': 'Lovable quality',
57
+ 'quality.progress': 'Progress',
58
+ 'quality.trendUp': 'Improving {{delta}}',
59
+ 'quality.trendDown': 'Dropping {{delta}}',
60
+ 'quality.trendFlat': 'Stable',
61
+ 'quality.trendUnknown': 'No trend yet',
62
+
63
+ // Notifications
64
+ 'notify.reviewStarted': 'Review started for !{{mrNumber}}',
65
+ 'notify.followupStarted': 'Follow-up started for !{{mrNumber}}',
66
+ 'notify.reviewCompleted': 'Review completed for !{{mrNumber}}',
67
+ 'notify.followupCompleted': 'Follow-up completed for !{{mrNumber}}',
68
+ 'notify.reviewFailed': 'Review failed for !{{mrNumber}}',
69
+ 'notify.followupRequested': 'Follow-up requested for !{{mrNumber}}',
70
+ 'notify.desktopTitle': 'Reviewflow alert',
71
+
72
+ // Loading
73
+ 'loading.data': 'Syncing dashboard data...',
74
+ 'loading.section': 'Loading...',
75
+ 'loading.status': 'Refreshing live status...',
76
+ 'loading.reviewFiles': 'Loading review files...',
77
+ 'loading.stats': 'Loading project stats...',
78
+ 'loading.mrTracking': 'Refreshing MR tracking...',
79
+
80
+ // Session metrics
81
+ 'metrics.session': 'Session',
82
+ 'metrics.firstAction': 'First useful action',
83
+ 'metrics.actions': 'actions',
84
+ 'metrics.pending': 'pending',
85
+ 'metrics.priorityResolution': 'Priority resolution',
86
+ 'metrics.breakdown': 'Action breakdown',
87
+ 'metrics.action.followup': 'Followup',
88
+ 'metrics.action.open': 'Open',
89
+ 'metrics.action.approve': 'Approve',
90
+ 'metrics.action.cancelReview': 'Cancel',
91
+ 'metrics.action.syncThreads': 'Sync',
92
+
93
+ // Model options
94
+ 'model.opus': 'Opus (powerful)',
95
+ 'model.sonnet': 'Sonnet (fast)',
96
+
97
+ // Status
98
+ 'status.connecting': 'Connecting...',
99
+ 'status.checking': 'Checking...',
100
+ 'status.loading': 'Loading...',
101
+ 'status.loadProject': 'Load a project...',
102
+ 'status.operational': 'Operational',
103
+ 'status.undefined': 'not set',
104
+
105
+ // Connection
106
+ 'connection.websocket': 'WebSocket real-time',
107
+ 'connection.fallback': 'Fallback polling 5s',
108
+ 'connection.online': 'Online',
109
+ 'connection.onlinePolling': 'Online (polling)',
110
+ 'connection.offline': 'Offline',
111
+ 'connection.disconnected': 'Disconnected',
112
+ 'connection.polling': 'Polling mode',
113
+
114
+ // Project loader
115
+ 'project.selectPlaceholder': '-- Select a project --',
116
+ 'project.inputPlaceholder': 'Or enter a new path...',
117
+ 'project.load': 'Load',
118
+ 'project.removeTooltip': 'Remove from list',
119
+ 'project.removed': 'Project removed',
120
+ 'project.noProjectSelected': 'No project selected',
121
+
122
+ // Login / Auth
123
+ 'login.claude.title': 'Claude is not authenticated',
124
+ 'login.claude.instruction': 'Run this command in a terminal:',
125
+ 'login.claude.reload': 'Then reload this page.',
126
+ 'login.git.title': 'CLI not authenticated',
127
+ 'login.gitlab.title': 'GitLab CLI not authenticated',
128
+ 'login.github.title': 'GitHub CLI not authenticated',
129
+
130
+ // Setup instructions
131
+ 'setup.installAndAuth': '1. Install and authenticate {{cli}}:',
132
+ 'setup.configureWebhook': '2. Configure the {{platform}} webhook:',
133
+ 'setup.webhookPath': 'Settings → Webhooks → Add webhook',
134
+ 'setup.reload': 'Then reload this page.',
135
+ 'setup.github.contentType': 'Content type: application/json',
136
+ 'setup.github.events': 'Events: Pull requests',
137
+ 'setup.gitlab.trigger': 'Trigger: Merge request events',
138
+
139
+ // Sections
140
+ 'section.logs': 'Recent logs',
141
+ 'section.stats': 'Project statistics',
142
+ 'section.activeReviews': 'Active reviews',
143
+ 'section.activeFollowups': 'Active followups',
144
+ 'section.pendingFix': 'Pending fix',
145
+ 'section.pendingApproval': 'Pending approval',
146
+ 'section.queueLanes': 'Priority lanes',
147
+ 'section.completedReviews': 'Completed reviews',
148
+
149
+ // Queue lanes
150
+ 'queueLane.now': 'Handle now',
151
+ 'queueLane.needsFix': 'Needs fixes',
152
+ 'queueLane.readyToApprove': 'Ready for approval',
153
+ 'queueLane.emptyNow': 'No immediate priority',
154
+ 'queueLane.emptyNeedsFix': 'No MR waiting for fixes',
155
+ 'queueLane.emptyReadyToApprove': 'No MR ready to approve',
156
+
157
+ // Empty states
158
+ 'empty.logs': 'No logs',
159
+ 'empty.stats': 'Load a project to see stats',
160
+ 'empty.statsNoData': 'No statistics available',
161
+ 'empty.activeReviews': 'No active reviews',
162
+ 'empty.activeFollowups': 'No follow-up in progress',
163
+ 'empty.pendingFix': 'No MR pending fix',
164
+ 'empty.pendingApproval': 'No MR pending approval',
165
+ 'empty.reviewFiles': 'No review files',
166
+ 'empty.reviewsNoProject': 'Load a project to see reviews',
167
+ 'empty.statsNoProject': 'Load a project to see stats',
168
+ 'empty.serverNotAccessible': 'Server not accessible',
169
+
170
+ // Stats labels
171
+ 'stats.reviews': 'Reviews',
172
+ 'stats.averageScore': 'Average score',
173
+ 'stats.totalTime': 'Total time',
174
+ 'stats.averageTime': 'Average time',
175
+ 'stats.blocking': 'Blocking',
176
+ 'stats.warnings': 'Important',
177
+
178
+ // Review types
179
+ 'review.type.review': 'Review',
180
+ 'review.type.followup': 'Follow-up',
181
+ 'review.description': 'Description',
182
+ 'review.status.running': 'Review in progress',
183
+ 'review.status.queued': 'Waiting in queue',
184
+ 'review.status.completed': 'Review completed',
185
+ 'review.status.failed': 'Action needed',
186
+
187
+ // Buttons
188
+ 'button.cancel': 'Cancel',
189
+ 'button.open': 'Open',
190
+ 'button.followup': 'Run follow-up',
191
+ 'button.autoFollowup': 'Auto follow-up',
192
+ 'button.delete': 'Delete',
193
+ 'button.syncThreads': 'Sync GitLab threads',
194
+
195
+ // MR details
196
+ 'mr.threads.open': '{{count}} open',
197
+ 'mr.threads.resolved': 'Resolved',
198
+ 'mr.threads.openAction': '{{count}} open - fix now',
199
+ 'mr.threads.warningAction': '{{count}} important - review before approve',
200
+ 'mr.threads.resolvedAction': 'All resolved - ready to approve',
201
+ 'mr.detail.source': 'Source:',
202
+ 'mr.detail.target': 'Target:',
203
+ 'mr.detail.created': 'Created:',
204
+ 'mr.detail.lastReview': 'Last review:',
205
+ 'mr.detail.history': 'History ({{count}}):',
206
+ 'mr.review.blocking': '{{count}} blocking',
207
+
208
+ // Logs
209
+ 'logs.errorCount': '{{count}} errors',
210
+
211
+ // Modal
212
+ 'modal.cancel.title': 'Cancel the {{type}} of {{label}} !{{number}} ({{type}})?',
213
+ 'modal.cancel.message': 'This action is irreversible. The review will be stopped immediately.',
214
+ 'modal.back': 'Go back',
215
+ 'modal.confirm': 'Confirm',
216
+
217
+ // Confirm dialogs
218
+ 'confirm.deleteReview': 'Delete {{filename}}?',
219
+ 'confirm.removeProject': 'Remove "{{name}}" from the list?',
220
+ 'confirm.approveMr': 'Mark this {{label}} as approved?',
221
+
222
+ // Success
223
+ 'success.reviewCancelled': 'Review cancelled',
224
+ 'success.reviewAlreadyCompleted': 'This review is already completed',
225
+
226
+ // Errors
227
+ 'error.loading': 'Loading error',
228
+ 'error.loadingStats': 'Error loading stats',
229
+ 'error.loadingConfig': 'Loading error',
230
+ 'error.checkStatus': 'Check error',
231
+ 'error.deleteReview': 'Error deleting review',
232
+ 'error.triggerFollowup': 'Error triggering followup',
233
+ 'error.toggleAutoFollowup': 'Error changing auto follow-up',
234
+ 'error.approveMr': 'Error approving',
235
+ 'error.syncThreads': 'Error syncing threads',
236
+ 'error.cancelReview': 'Error cancelling review',
237
+ 'error.selectOrEnterPath': 'Select or enter a path',
238
+ 'error.projectNotLoaded': 'Load a project first',
239
+ },
240
+ fr: {
241
+ // Time
242
+ 'time.justNow': "À l'instant",
243
+ 'time.minutesAgo': 'Il y a {{minutes}} min',
244
+ 'time.hoursAgo': 'Il y a {{hours}}h',
245
+
246
+ // Phases
247
+ 'phase.initializing': 'Initialisation',
248
+ 'phase.agents-running': 'Agents en cours',
249
+ 'phase.synthesizing': 'Synthèse',
250
+ 'phase.publishing': 'Publication',
251
+ 'phase.completed': 'Terminé',
252
+
253
+ // Header
254
+ 'header.checkClaude': 'Vérifier Claude',
255
+ 'header.logs': 'Logs',
256
+ 'header.hideLogs': 'Masquer Logs',
257
+
258
+ // Cards
259
+ 'card.running': 'En cours',
260
+ 'card.queued': 'En attente',
261
+ 'card.completed': 'Terminées',
262
+ 'card.claudeCli': 'Claude CLI',
263
+ 'card.model': 'Modèle',
264
+ 'card.language': 'Langue',
265
+ 'card.gitCli': 'Git CLI',
266
+ 'card.gitlabCli': 'GitLab CLI',
267
+ 'card.githubCli': 'GitHub CLI',
268
+
269
+ // Focus strip
270
+ 'strip.now': 'À traiter',
271
+ 'strip.nowMeta': 'Reviews en cours + MR en attente de correctif',
272
+ 'strip.next': 'À venir',
273
+ 'strip.nextMeta': 'Reviews en file + MR en attente d’approbation',
274
+ 'strip.blocked': 'Retours bloquants',
275
+ 'strip.blockedMeta': 'MR avec threads non résolus',
276
+ 'strip.modeCompact': 'Vue compacte',
277
+ 'strip.modeDetailed': 'Vue détaillée',
278
+
279
+ // Priority lane
280
+ 'lane.nowKicker': 'Action prioritaire',
281
+ 'lane.nowMeta': '{{count}} thread(s) ouverts à résoudre',
282
+ 'lane.owner': 'Responsable: {{owner}}',
283
+
284
+ // Quality score
285
+ 'quality.kicker': 'Score qualité',
286
+ 'quality.target': 'Cible {{target}}/10',
287
+ 'quality.notAvailable': 'Score indisponible',
288
+ 'quality.perfect': 'Qualité parfaite',
289
+ 'quality.onTarget': 'Objectif atteint',
290
+ 'quality.belowTarget': 'Améliorations requises',
291
+ 'quality.lovableQuality': 'Qualité lovable',
292
+ 'quality.progress': 'Progression',
293
+ 'quality.trendUp': 'En amélioration {{delta}}',
294
+ 'quality.trendDown': 'En baisse {{delta}}',
295
+ 'quality.trendFlat': 'Stable',
296
+ 'quality.trendUnknown': 'Pas de tendance',
297
+
298
+ // Notifications
299
+ 'notify.reviewStarted': 'Review démarrée pour !{{mrNumber}}',
300
+ 'notify.followupStarted': 'Follow-up démarré pour !{{mrNumber}}',
301
+ 'notify.reviewCompleted': 'Review terminée pour !{{mrNumber}}',
302
+ 'notify.followupCompleted': 'Follow-up terminé pour !{{mrNumber}}',
303
+ 'notify.reviewFailed': 'Review en échec pour !{{mrNumber}}',
304
+ 'notify.followupRequested': 'Follow-up demandé pour !{{mrNumber}}',
305
+ 'notify.desktopTitle': 'Alerte Reviewflow',
306
+
307
+ // Loading
308
+ 'loading.data': 'Synchronisation des données du dashboard...',
309
+ 'loading.section': 'Chargement...',
310
+ 'loading.status': 'Rafraîchissement du statut en direct...',
311
+ 'loading.reviewFiles': 'Chargement des fichiers de review...',
312
+ 'loading.stats': 'Chargement des statistiques projet...',
313
+ 'loading.mrTracking': 'Rafraîchissement du suivi MR...',
314
+
315
+ // Session metrics
316
+ 'metrics.session': 'Session',
317
+ 'metrics.firstAction': '1ère action utile',
318
+ 'metrics.actions': 'actions',
319
+ 'metrics.pending': 'en attente',
320
+ 'metrics.priorityResolution': 'Résolution des priorités',
321
+ 'metrics.breakdown': 'Détail des actions',
322
+ 'metrics.action.followup': 'Followup',
323
+ 'metrics.action.open': 'Ouvrir',
324
+ 'metrics.action.approve': 'Approuver',
325
+ 'metrics.action.cancelReview': 'Annuler',
326
+ 'metrics.action.syncThreads': 'Synchroniser',
327
+
328
+ // Model options
329
+ 'model.opus': 'Opus (puissant)',
330
+ 'model.sonnet': 'Sonnet (rapide)',
331
+
332
+ // Status
333
+ 'status.connecting': 'Connexion...',
334
+ 'status.checking': 'Vérification...',
335
+ 'status.loading': 'Chargement...',
336
+ 'status.loadProject': 'Charger un projet...',
337
+ 'status.operational': 'Opérationnel',
338
+ 'status.undefined': 'non défini',
339
+
340
+ // Connection
341
+ 'connection.websocket': 'WebSocket temps réel',
342
+ 'connection.fallback': 'Fallback polling 5s',
343
+ 'connection.online': 'En ligne',
344
+ 'connection.onlinePolling': 'En ligne (polling)',
345
+ 'connection.offline': 'Hors ligne',
346
+ 'connection.disconnected': 'Déconnecté',
347
+ 'connection.polling': 'Mode polling',
348
+
349
+ // Project loader
350
+ 'project.selectPlaceholder': '-- Sélectionner un projet --',
351
+ 'project.inputPlaceholder': 'Ou entrer un nouveau chemin...',
352
+ 'project.load': 'Charger',
353
+ 'project.removeTooltip': 'Retirer de la liste',
354
+ 'project.removed': 'Projet retiré',
355
+ 'project.noProjectSelected': 'Aucun projet sélectionné',
356
+
357
+ // Login / Auth
358
+ 'login.claude.title': "Claude n'est pas authentifié",
359
+ 'login.claude.instruction': 'Exécutez cette commande dans un terminal :',
360
+ 'login.claude.reload': 'Puis rechargez cette page.',
361
+ 'login.git.title': 'CLI non authentifié',
362
+ 'login.gitlab.title': 'GitLab CLI non authentifié',
363
+ 'login.github.title': 'GitHub CLI non authentifié',
364
+
365
+ // Setup instructions
366
+ 'setup.installAndAuth': '1. Installer et authentifier {{cli}} :',
367
+ 'setup.configureWebhook': '2. Configurer le webhook {{platform}} :',
368
+ 'setup.webhookPath': 'Settings → Webhooks → Add webhook',
369
+ 'setup.reload': 'Puis rechargez cette page.',
370
+ 'setup.github.contentType': 'Content type: application/json',
371
+ 'setup.github.events': 'Events: Pull requests',
372
+ 'setup.gitlab.trigger': 'Trigger: Merge request events',
373
+
374
+ // Sections
375
+ 'section.logs': 'Logs récents',
376
+ 'section.stats': 'Statistiques du projet',
377
+ 'section.activeReviews': 'Reviews actives',
378
+ 'section.activeFollowups': 'Followups actifs',
379
+ 'section.pendingFix': 'En attente de correctif',
380
+ 'section.pendingApproval': "En attente d'approbation",
381
+ 'section.queueLanes': 'Priorité',
382
+ 'section.completedReviews': 'Reviews terminées',
383
+
384
+ // Queue lanes
385
+ 'queueLane.now': 'À traiter maintenant',
386
+ 'queueLane.needsFix': 'Corrections requises',
387
+ 'queueLane.readyToApprove': 'Prêtes pour approbation',
388
+ 'queueLane.emptyNow': 'Aucune priorité immédiate',
389
+ 'queueLane.emptyNeedsFix': 'Aucune MR en attente de correction',
390
+ 'queueLane.emptyReadyToApprove': 'Aucune MR prête à approuver',
391
+
392
+ // Empty states
393
+ 'empty.logs': 'Aucun log',
394
+ 'empty.stats': 'Charger un projet pour voir les stats',
395
+ 'empty.statsNoData': 'Aucune statistique disponible',
396
+ 'empty.activeReviews': 'Aucune review en cours',
397
+ 'empty.activeFollowups': 'Aucun follow-up en cours',
398
+ 'empty.pendingFix': 'Aucune MR en attente de correctif',
399
+ 'empty.pendingApproval': "Aucune MR en attente d'approbation",
400
+ 'empty.reviewFiles': 'Aucun fichier de review',
401
+ 'empty.reviewsNoProject': 'Charger un projet pour voir les reviews',
402
+ 'empty.statsNoProject': 'Charger un projet pour voir les stats',
403
+ 'empty.serverNotAccessible': 'Serveur non accessible',
404
+
405
+ // Stats labels
406
+ 'stats.reviews': 'Reviews',
407
+ 'stats.averageScore': 'Score moyen',
408
+ 'stats.totalTime': 'Temps total',
409
+ 'stats.averageTime': 'Durée moyenne',
410
+ 'stats.blocking': 'Bloquants',
411
+ 'stats.warnings': 'Importants',
412
+
413
+ // Review types
414
+ 'review.type.review': 'Review',
415
+ 'review.type.followup': 'Follow-up',
416
+ 'review.description': 'Description',
417
+ 'review.status.running': 'Review en cours',
418
+ 'review.status.queued': 'En attente dans la file',
419
+ 'review.status.completed': 'Review terminée',
420
+ 'review.status.failed': 'Action requise',
421
+
422
+ // Buttons
423
+ 'button.cancel': 'Annuler',
424
+ 'button.open': 'Ouvrir',
425
+ 'button.followup': 'Lancer le follow-up',
426
+ 'button.autoFollowup': 'Auto follow-up',
427
+ 'button.delete': 'Supprimer',
428
+ 'button.syncThreads': 'Synchroniser les threads GitLab',
429
+
430
+ // MR details
431
+ 'mr.threads.open': '{{count}} ouvert(s)',
432
+ 'mr.threads.resolved': 'Résolus',
433
+ 'mr.threads.openAction': '{{count}} ouvert(s) - corriger maintenant',
434
+ 'mr.threads.warningAction': '{{count}} important(s) - vérifier avant approbation',
435
+ 'mr.threads.resolvedAction': 'Tout résolu - prêt à approuver',
436
+ 'mr.detail.source': 'Source :',
437
+ 'mr.detail.target': 'Target :',
438
+ 'mr.detail.created': 'Créée :',
439
+ 'mr.detail.lastReview': 'Dernière review :',
440
+ 'mr.detail.history': 'Historique ({{count}}) :',
441
+ 'mr.review.blocking': '{{count}} bloquant(s)',
442
+
443
+ // Logs
444
+ 'logs.errorCount': '{{count}} erreurs',
445
+
446
+ // Modal
447
+ 'modal.cancel.title': 'Annuler la {{type}} de la {{label}} !{{number}} ({{type}}) ?',
448
+ 'modal.cancel.message': 'Cette action est irréversible. La review sera arrêtée immédiatement.',
449
+ 'modal.back': 'Revenir',
450
+ 'modal.confirm': 'Confirmer',
451
+
452
+ // Confirm dialogs
453
+ 'confirm.deleteReview': 'Supprimer {{filename}} ?',
454
+ 'confirm.removeProject': 'Retirer "{{name}}" de la liste ?',
455
+ 'confirm.approveMr': 'Marquer cette {{label}} comme approuvée ?',
456
+
457
+ // Success
458
+ 'success.reviewCancelled': 'Review annulée',
459
+ 'success.reviewAlreadyCompleted': 'Cette review est déjà terminée',
460
+
461
+ // Errors
462
+ 'error.loading': 'Erreur de chargement',
463
+ 'error.loadingStats': 'Erreur de chargement des stats',
464
+ 'error.loadingConfig': 'Erreur de chargement',
465
+ 'error.checkStatus': 'Erreur de vérification',
466
+ 'error.deleteReview': 'Erreur lors de la suppression',
467
+ 'error.triggerFollowup': 'Erreur lors du déclenchement du followup',
468
+ 'error.toggleAutoFollowup': 'Erreur lors du changement de auto follow-up',
469
+ 'error.approveMr': "Erreur lors de l'approbation",
470
+ 'error.syncThreads': 'Erreur lors de la synchronisation des threads',
471
+ 'error.cancelReview': "Erreur lors de l'annulation",
472
+ 'error.selectOrEnterPath': 'Sélectionnez ou entrez un chemin',
473
+ 'error.projectNotLoaded': "Charger un projet d'abord",
474
+ },
475
+ };
476
+
477
+ /** @returns {'en' | 'fr'} */
478
+ export function getLanguage() {
479
+ return currentLanguage;
480
+ }
481
+
482
+ /** @param {'en' | 'fr'} language */
483
+ export function setLanguage(language) {
484
+ currentLanguage = language;
485
+ }
486
+
487
+ /**
488
+ * @param {string} key
489
+ * @param {Record<string, string | number>} [params]
490
+ * @returns {string}
491
+ */
492
+ export function t(key, params) {
493
+ let value = translations[currentLanguage]?.[key] ?? key;
494
+ if (params) {
495
+ for (const [param, replacement] of Object.entries(params)) {
496
+ value = value.replaceAll(`{{${param}}}`, String(replacement));
497
+ }
498
+ }
499
+ return value;
500
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../../../src/interface-adapters/views/dashboard/modules/i18n.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @param {string} status
3
+ * @returns {string}
4
+ */
5
+ export function getAgentIcon(status: string): string;
6
+ /**
7
+ * @param {string} name
8
+ * @param {string} [className]
9
+ * @returns {string}
10
+ */
11
+ export function icon(name: string, className?: string): string;
12
+ export function refreshIcons(): void;
13
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../../../src/interface-adapters/views/dashboard/modules/icons.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,qCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;GAIG;AACH,2BAJW,MAAM,cACN,MAAM,GACJ,MAAM,CAIlB;AAED,qCAIC"}
@@ -0,0 +1,29 @@
1
+ const agentIconNames = {
2
+ pending: 'clock',
3
+ running: 'loader',
4
+ completed: 'check',
5
+ failed: 'x',
6
+ };
7
+
8
+ /**
9
+ * @param {string} status
10
+ * @returns {string}
11
+ */
12
+ export function getAgentIcon(status) {
13
+ return `<i data-lucide="${agentIconNames[status] || 'help-circle'}"></i>`;
14
+ }
15
+
16
+ /**
17
+ * @param {string} name
18
+ * @param {string} [className]
19
+ * @returns {string}
20
+ */
21
+ export function icon(name, className = '') {
22
+ return `<i data-lucide="${name}" class="${className}"></i>`;
23
+ }
24
+
25
+ export function refreshIcons() {
26
+ if (typeof lucide !== 'undefined') {
27
+ lucide.createIcons();
28
+ }
29
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../../../src/interface-adapters/views/dashboard/modules/icons.js"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAM;IACjC,OAAO,mBAAmB,cAAc,CAAC,MAAM,CAAC,IAAI,aAAa,QAAQ,CAAC;AAC5E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE;IACvC,OAAO,mBAAmB,IAAI,YAAY,SAAS,QAAQ,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @param {{ status: number, reviewFiles: number, stats: number, mrTracking: number }} loadingState
3
+ * @param {{ hasLoadedStatusOnce: boolean }} options
4
+ * @returns {{ showGlobalLoading: boolean, isQuietRefresh: boolean }}
5
+ */
6
+ export function getLoadingPresentation(loadingState: {
7
+ status: number;
8
+ reviewFiles: number;
9
+ stats: number;
10
+ mrTracking: number;
11
+ }, options: {
12
+ hasLoadedStatusOnce: boolean;
13
+ }): {
14
+ showGlobalLoading: boolean;
15
+ isQuietRefresh: boolean;
16
+ };
17
+ /**
18
+ * @param {{ status: number, reviewFiles: number, stats: number, mrTracking: number }} loadingState
19
+ * @param {{ hasLoadedStatusOnce: boolean }} options
20
+ * @returns {string[]}
21
+ */
22
+ export function getQuietRefreshSectionIdentifiers(loadingState: {
23
+ status: number;
24
+ reviewFiles: number;
25
+ stats: number;
26
+ mrTracking: number;
27
+ }, options: {
28
+ hasLoadedStatusOnce: boolean;
29
+ }): string[];
30
+ //# sourceMappingURL=loading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../../../../src/interface-adapters/views/dashboard/modules/loading.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qDAJW;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,WAC1E;IAAE,mBAAmB,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,iBAAiB,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAmBnE;AAED;;;;GAIG;AACH,gEAJW;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,WAC1E;IAAE,mBAAmB,EAAE,OAAO,CAAA;CAAE,GAC9B,MAAM,EAAE,CAoBpB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @param {{ status: number, reviewFiles: number, stats: number, mrTracking: number }} loadingState
3
+ * @param {{ hasLoadedStatusOnce: boolean }} options
4
+ * @returns {{ showGlobalLoading: boolean, isQuietRefresh: boolean }}
5
+ */
6
+ export function getLoadingPresentation(loadingState, options) {
7
+ const isLoading = Object.values(loadingState).some((value) => value > 0);
8
+ if (!isLoading) {
9
+ return {
10
+ showGlobalLoading: false,
11
+ isQuietRefresh: false,
12
+ };
13
+ }
14
+
15
+ const hasHeavyRefresh = loadingState.reviewFiles > 0 || loadingState.stats > 0;
16
+ const hasPollingRefresh = loadingState.status > 0 || loadingState.mrTracking > 0;
17
+ const isQuietRefresh = options.hasLoadedStatusOnce && hasPollingRefresh && !hasHeavyRefresh;
18
+
19
+ return {
20
+ showGlobalLoading: !isQuietRefresh,
21
+ isQuietRefresh,
22
+ };
23
+ }
24
+
25
+ /**
26
+ * @param {{ status: number, reviewFiles: number, stats: number, mrTracking: number }} loadingState
27
+ * @param {{ hasLoadedStatusOnce: boolean }} options
28
+ * @returns {string[]}
29
+ */
30
+ export function getQuietRefreshSectionIdentifiers(loadingState, options) {
31
+ const loadingPresentation = getLoadingPresentation(loadingState, options);
32
+ if (!loadingPresentation.isQuietRefresh) {
33
+ return [];
34
+ }
35
+
36
+ const sectionIdentifiers = [];
37
+ if (loadingState.mrTracking > 0) {
38
+ sectionIdentifiers.push('pending-fix-section');
39
+ }
40
+ if (loadingState.status > 0) {
41
+ sectionIdentifiers.push(
42
+ 'active-reviews-section',
43
+ 'active-followups-section',
44
+ 'completed-reviews-section',
45
+ );
46
+ }
47
+ return sectionIdentifiers;
48
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.js","sourceRoot":"","sources":["../../../../../src/interface-adapters/views/dashboard/modules/loading.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,YAAY,EAAE,OAAO;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,iBAAiB,EAAE,KAAK;YACxB,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,WAAW,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/E,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC;IACjF,MAAM,cAAc,GAAG,OAAO,CAAC,mBAAmB,IAAI,iBAAiB,IAAI,CAAC,eAAe,CAAC;IAE5F,OAAO;QACL,iBAAiB,EAAE,CAAC,cAAc;QAClC,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC,CAAC,YAAY,EAAE,OAAO;IACrE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1E,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAC9B,IAAI,YAAY,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAChC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,kBAAkB,CAAC,IAAI,CACrB,wBAAwB,EACxB,0BAA0B,EAC1B,2BAA2B,CAC5B,CAAC;IACJ,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}