creevey 0.10.0-beta.9 → 0.10.0-rc.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 (348) hide show
  1. package/AUTHORS +2 -0
  2. package/CHANGELOG.md +281 -0
  3. package/README.md +19 -41
  4. package/dist/client/addon/components/Addon.js +18 -8
  5. package/dist/client/addon/components/Addon.js.map +1 -1
  6. package/dist/client/addon/components/Panel.js +2 -2
  7. package/dist/client/addon/components/Panel.js.map +1 -1
  8. package/dist/client/addon/components/TestSelect.js +2 -2
  9. package/dist/client/addon/components/TestSelect.js.map +1 -1
  10. package/dist/client/addon/components/Tools.js +19 -9
  11. package/dist/client/addon/components/Tools.js.map +1 -1
  12. package/dist/client/addon/controller.d.ts +1 -1
  13. package/dist/client/addon/controller.js +3 -3
  14. package/dist/client/addon/controller.js.map +1 -1
  15. package/dist/client/addon/decorator.d.ts +1 -1
  16. package/dist/client/addon/makeDecorator.d.ts +9 -0
  17. package/dist/client/addon/makeDecorator.js +48 -0
  18. package/dist/client/addon/makeDecorator.js.map +1 -0
  19. package/dist/client/addon/manager.js +38 -39
  20. package/dist/client/addon/manager.js.map +1 -1
  21. package/dist/client/addon/preset.d.ts +0 -1
  22. package/dist/client/addon/preset.js +3 -2
  23. package/dist/client/addon/preset.js.map +1 -1
  24. package/dist/client/addon/preview.d.ts +1 -1
  25. package/dist/client/addon/withCreevey.d.ts +5 -3
  26. package/dist/client/addon/withCreevey.js +5 -20
  27. package/dist/client/addon/withCreevey.js.map +1 -1
  28. package/dist/client/shared/components/ImagesView/BlendView.d.ts +2 -2
  29. package/dist/client/shared/components/ImagesView/BlendView.js +18 -8
  30. package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -1
  31. package/dist/client/shared/components/ImagesView/ImagesView.js +1 -1
  32. package/dist/client/shared/components/ImagesView/ImagesView.js.map +1 -1
  33. package/dist/client/shared/components/ImagesView/SideBySideView.d.ts +2 -2
  34. package/dist/client/shared/components/ImagesView/SideBySideView.js +19 -9
  35. package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -1
  36. package/dist/client/shared/components/ImagesView/SlideView.d.ts +2 -2
  37. package/dist/client/shared/components/ImagesView/SlideView.js +19 -9
  38. package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -1
  39. package/dist/client/shared/components/ImagesView/SwapView.d.ts +2 -2
  40. package/dist/client/shared/components/ImagesView/SwapView.js +19 -9
  41. package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
  42. package/dist/client/shared/components/ImagesView/common.d.ts +1 -1
  43. package/dist/client/shared/components/PageFooter/PageFooter.js +1 -1
  44. package/dist/client/shared/components/PageFooter/PageFooter.js.map +1 -1
  45. package/dist/client/shared/components/PageFooter/Paging.js +1 -1
  46. package/dist/client/shared/components/PageFooter/Paging.js.map +1 -1
  47. package/dist/client/shared/components/PageHeader/ImagePreview.d.ts +2 -2
  48. package/dist/client/shared/components/PageHeader/ImagePreview.js +1 -1
  49. package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
  50. package/dist/client/shared/components/PageHeader/PageHeader.js +34 -13
  51. package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -1
  52. package/dist/client/shared/components/ResultsPage.d.ts +2 -2
  53. package/dist/client/shared/components/ResultsPage.js +22 -10
  54. package/dist/client/shared/components/ResultsPage.js.map +1 -1
  55. package/dist/client/shared/creeveyClientApi.js +18 -1
  56. package/dist/client/shared/creeveyClientApi.js.map +1 -1
  57. package/dist/client/shared/helpers.d.ts +1 -3
  58. package/dist/client/shared/helpers.js +4 -19
  59. package/dist/client/shared/helpers.js.map +1 -1
  60. package/dist/client/web/CreeveyApp.d.ts +1 -0
  61. package/dist/client/web/CreeveyApp.js +22 -9
  62. package/dist/client/web/CreeveyApp.js.map +1 -1
  63. package/dist/client/web/CreeveyContext.d.ts +1 -0
  64. package/dist/client/web/CreeveyContext.js +18 -7
  65. package/dist/client/web/CreeveyContext.js.map +1 -1
  66. package/dist/client/web/CreeveyLoader.d.ts +1 -1
  67. package/dist/client/web/CreeveyLoader.js +3 -3
  68. package/dist/client/web/CreeveyLoader.js.map +1 -1
  69. package/dist/client/web/CreeveyView/SideBar/Checkbox.d.ts +4 -4
  70. package/dist/client/web/CreeveyView/SideBar/Checkbox.js +36 -6
  71. package/dist/client/web/CreeveyView/SideBar/Checkbox.js.map +1 -1
  72. package/dist/client/web/CreeveyView/SideBar/Search.js +18 -8
  73. package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
  74. package/dist/client/web/CreeveyView/SideBar/SideBar.js +26 -12
  75. package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
  76. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +28 -17
  77. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
  78. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +32 -12
  79. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -1
  80. package/dist/client/web/CreeveyView/SideBar/SuiteLink.d.ts +6 -6
  81. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +20 -11
  82. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
  83. package/dist/client/web/CreeveyView/SideBar/TestLink.js +20 -11
  84. package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
  85. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +2 -2
  86. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js +2 -2
  87. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js.map +1 -1
  88. package/dist/client/web/CreeveyView/SideBar/TestsStatus.d.ts +2 -2
  89. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js +3 -2
  90. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js.map +1 -1
  91. package/dist/client/web/CreeveyView/SideBar/Toggle.js +1 -1
  92. package/dist/client/web/CreeveyView/SideBar/Toggle.js.map +1 -1
  93. package/dist/client/web/KeyboardEventsContext.js +17 -7
  94. package/dist/client/web/KeyboardEventsContext.js.map +1 -1
  95. package/dist/client/web/assets/index-CtSq3IhG.js +518 -0
  96. package/dist/client/web/index.html +1 -1
  97. package/dist/client/web/index.js +26 -11
  98. package/dist/client/web/index.js.map +1 -1
  99. package/dist/client/web/themes.d.ts +2 -0
  100. package/dist/client/web/themes.js +22 -0
  101. package/dist/client/web/themes.js.map +1 -0
  102. package/dist/creevey.d.ts +1 -1
  103. package/dist/creevey.js +122 -41
  104. package/dist/creevey.js.map +1 -1
  105. package/dist/index.d.ts +1 -0
  106. package/dist/playwright/generator.d.ts +25 -0
  107. package/dist/playwright/generator.js +243 -0
  108. package/dist/playwright/generator.js.map +1 -0
  109. package/dist/playwright/helpers.d.ts +2 -0
  110. package/dist/playwright/helpers.js +29 -0
  111. package/dist/playwright/helpers.js.map +1 -0
  112. package/dist/playwright/reporter.d.ts +83 -0
  113. package/dist/playwright/reporter.js +334 -0
  114. package/dist/playwright/reporter.js.map +1 -0
  115. package/dist/playwright/setup.d.ts +3 -0
  116. package/dist/playwright/setup.js +72 -0
  117. package/dist/playwright/setup.js.map +1 -0
  118. package/dist/playwright.d.ts +1 -0
  119. package/dist/playwright.js +3 -1
  120. package/dist/playwright.js.map +1 -1
  121. package/dist/server/compare.d.ts +18 -0
  122. package/dist/server/compare.js +182 -0
  123. package/dist/server/compare.js.map +1 -0
  124. package/dist/server/config.d.ts +3 -3
  125. package/dist/server/config.js +75 -8
  126. package/dist/server/config.js.map +1 -1
  127. package/dist/server/connection.d.ts +3 -0
  128. package/dist/server/connection.js +28 -0
  129. package/dist/server/connection.js.map +1 -0
  130. package/dist/server/docker.d.ts +1 -1
  131. package/dist/server/docker.js +54 -32
  132. package/dist/server/docker.js.map +1 -1
  133. package/dist/server/index.d.ts +2 -2
  134. package/dist/server/index.js +161 -64
  135. package/dist/server/index.js.map +1 -1
  136. package/dist/server/master/api.d.ts +11 -6
  137. package/dist/server/master/api.js +88 -25
  138. package/dist/server/master/api.js.map +1 -1
  139. package/dist/server/master/handlers/capture-handler.d.ts +5 -0
  140. package/dist/server/master/handlers/capture-handler.js +25 -0
  141. package/dist/server/master/handlers/capture-handler.js.map +1 -0
  142. package/dist/server/master/handlers/index.d.ts +4 -0
  143. package/dist/server/master/handlers/index.js +21 -0
  144. package/dist/server/master/handlers/index.js.map +1 -0
  145. package/dist/server/master/handlers/ping-handler.d.ts +2 -0
  146. package/dist/server/master/handlers/ping-handler.js +8 -0
  147. package/dist/server/master/handlers/ping-handler.js.map +1 -0
  148. package/dist/server/master/handlers/static-handler.d.ts +1 -0
  149. package/dist/server/master/handlers/static-handler.js +20 -0
  150. package/dist/server/master/handlers/static-handler.js.map +1 -0
  151. package/dist/server/master/handlers/stories-handler.d.ts +4 -0
  152. package/dist/server/master/handlers/stories-handler.js +24 -0
  153. package/dist/server/master/handlers/stories-handler.js.map +1 -0
  154. package/dist/server/master/master.js +7 -24
  155. package/dist/server/master/master.js.map +1 -1
  156. package/dist/server/master/pool.d.ts +1 -0
  157. package/dist/server/master/pool.js +5 -3
  158. package/dist/server/master/pool.js.map +1 -1
  159. package/dist/server/master/queue.d.ts +1 -1
  160. package/dist/server/master/queue.js +14 -6
  161. package/dist/server/master/queue.js.map +1 -1
  162. package/dist/server/master/runner.d.ts +6 -6
  163. package/dist/server/master/runner.js +98 -130
  164. package/dist/server/master/runner.js.map +1 -1
  165. package/dist/server/master/server.d.ts +1 -1
  166. package/dist/server/master/server.js +193 -88
  167. package/dist/server/master/server.js.map +1 -1
  168. package/dist/server/master/start.d.ts +1 -2
  169. package/dist/server/master/start.js +13 -29
  170. package/dist/server/master/start.js.map +1 -1
  171. package/dist/server/master/testsManager.d.ts +81 -0
  172. package/dist/server/master/testsManager.js +282 -0
  173. package/dist/server/master/testsManager.js.map +1 -0
  174. package/dist/server/playwright/docker-file.d.ts +1 -1
  175. package/dist/server/playwright/docker-file.js +17 -8
  176. package/dist/server/playwright/docker-file.js.map +1 -1
  177. package/dist/server/playwright/docker.d.ts +2 -1
  178. package/dist/server/playwright/docker.js +10 -2
  179. package/dist/server/playwright/docker.js.map +1 -1
  180. package/dist/server/playwright/index-source.mjs +16 -0
  181. package/dist/server/playwright/internal.d.ts +7 -7
  182. package/dist/server/playwright/internal.js +137 -79
  183. package/dist/server/playwright/internal.js.map +1 -1
  184. package/dist/server/playwright/webdriver.d.ts +3 -3
  185. package/dist/server/playwright/webdriver.js +0 -6
  186. package/dist/server/playwright/webdriver.js.map +1 -1
  187. package/dist/server/providers/browser.js +4 -3
  188. package/dist/server/providers/browser.js.map +1 -1
  189. package/dist/server/providers/hybrid.js +2 -2
  190. package/dist/server/providers/hybrid.js.map +1 -1
  191. package/dist/server/report.d.ts +10 -0
  192. package/dist/server/report.js +45 -0
  193. package/dist/server/report.js.map +1 -0
  194. package/dist/server/reporters/creevey.d.ts +7 -0
  195. package/dist/server/reporters/creevey.js +63 -0
  196. package/dist/server/reporters/creevey.js.map +1 -0
  197. package/dist/server/reporters/index.d.ts +2 -0
  198. package/dist/server/reporters/index.js +16 -0
  199. package/dist/server/reporters/index.js.map +1 -0
  200. package/dist/server/reporters/junit.d.ts +16 -0
  201. package/dist/server/reporters/junit.js +167 -0
  202. package/dist/server/reporters/junit.js.map +1 -0
  203. package/dist/server/reporters/teamcity.d.ts +7 -0
  204. package/dist/server/reporters/teamcity.js +60 -0
  205. package/dist/server/reporters/teamcity.js.map +1 -0
  206. package/dist/server/selenium/internal.d.ts +3 -3
  207. package/dist/server/selenium/internal.js +48 -34
  208. package/dist/server/selenium/internal.js.map +1 -1
  209. package/dist/server/selenium/selenoid.js +12 -6
  210. package/dist/server/selenium/selenoid.js.map +1 -1
  211. package/dist/server/selenium/webdriver.d.ts +3 -3
  212. package/dist/server/selenium/webdriver.js +4 -8
  213. package/dist/server/selenium/webdriver.js.map +1 -1
  214. package/dist/server/shutdown.d.ts +1 -0
  215. package/dist/server/shutdown.js +23 -0
  216. package/dist/server/shutdown.js.map +1 -0
  217. package/dist/server/stories.d.ts +0 -1
  218. package/dist/server/stories.js +0 -12
  219. package/dist/server/stories.js.map +1 -1
  220. package/dist/server/telemetry.js +3 -3
  221. package/dist/server/telemetry.js.map +1 -1
  222. package/dist/server/testsFiles/parser.js +45 -5
  223. package/dist/server/testsFiles/parser.js.map +1 -1
  224. package/dist/server/utils.d.ts +23 -0
  225. package/dist/server/utils.js +113 -13
  226. package/dist/server/utils.js.map +1 -1
  227. package/dist/server/webdriver.d.ts +1 -1
  228. package/dist/server/worker/context.d.ts +3 -0
  229. package/dist/server/worker/context.js +15 -0
  230. package/dist/server/worker/context.js.map +1 -0
  231. package/dist/server/worker/match-image.d.ts +8 -12
  232. package/dist/server/worker/match-image.js +11 -178
  233. package/dist/server/worker/match-image.js.map +1 -1
  234. package/dist/server/worker/start.d.ts +2 -2
  235. package/dist/server/worker/start.js +27 -63
  236. package/dist/server/worker/start.js.map +1 -1
  237. package/dist/shared/index.d.ts +1 -1
  238. package/dist/shared/index.js +9 -7
  239. package/dist/shared/index.js.map +1 -1
  240. package/dist/types.d.ts +84 -43
  241. package/dist/types.js +65 -1
  242. package/dist/types.js.map +1 -1
  243. package/docs/cli.md +80 -0
  244. package/docs/config.md +179 -165
  245. package/docs/examples/playwright-reporer/playwright.config.ts +37 -0
  246. package/docs/migration-0.9-to-0.10.md +144 -0
  247. package/docs/playwright-reporter.md +357 -0
  248. package/docs/storybook.md +60 -0
  249. package/docs/tests.md +50 -45
  250. package/package.json +78 -83
  251. package/playwright.config.mts +46 -0
  252. package/src/client/addon/components/Addon.tsx +1 -1
  253. package/src/client/addon/components/Panel.tsx +2 -2
  254. package/src/client/addon/components/TestSelect.tsx +2 -2
  255. package/src/client/addon/components/Tools.tsx +2 -2
  256. package/src/client/addon/controller.ts +4 -4
  257. package/src/client/addon/makeDecorator.ts +69 -0
  258. package/src/client/addon/manager.ts +38 -37
  259. package/src/client/addon/preset.ts +2 -1
  260. package/src/client/addon/withCreevey.ts +10 -18
  261. package/src/client/shared/components/ImagesView/BlendView.tsx +1 -1
  262. package/src/client/shared/components/ImagesView/ImagesView.tsx +1 -1
  263. package/src/client/shared/components/ImagesView/SideBySideView.tsx +2 -2
  264. package/src/client/shared/components/ImagesView/SlideView.tsx +2 -2
  265. package/src/client/shared/components/ImagesView/SwapView.tsx +2 -2
  266. package/src/client/shared/components/ImagesView/common.ts +1 -1
  267. package/src/client/shared/components/PageFooter/PageFooter.tsx +1 -1
  268. package/src/client/shared/components/PageFooter/Paging.tsx +1 -1
  269. package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -1
  270. package/src/client/shared/components/PageHeader/PageHeader.tsx +23 -7
  271. package/src/client/shared/components/ResultsPage.tsx +6 -4
  272. package/src/client/shared/creeveyClientApi.ts +19 -1
  273. package/src/client/shared/helpers.ts +4 -24
  274. package/src/client/web/CreeveyApp.tsx +5 -2
  275. package/src/client/web/CreeveyContext.tsx +2 -0
  276. package/src/client/web/CreeveyLoader.tsx +2 -2
  277. package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +3 -3
  278. package/src/client/web/CreeveyView/SideBar/Search.tsx +1 -1
  279. package/src/client/web/CreeveyView/SideBar/SideBar.tsx +11 -6
  280. package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +21 -19
  281. package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +20 -5
  282. package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +10 -8
  283. package/src/client/web/CreeveyView/SideBar/TestLink.tsx +9 -7
  284. package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +2 -2
  285. package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +3 -2
  286. package/src/client/web/CreeveyView/SideBar/Toggle.tsx +1 -1
  287. package/src/client/web/index.tsx +10 -5
  288. package/src/client/web/themes.ts +24 -0
  289. package/src/creevey.ts +92 -38
  290. package/src/playwright/generator.ts +322 -0
  291. package/src/playwright/helpers.ts +31 -0
  292. package/src/playwright/reporter.ts +381 -0
  293. package/src/playwright/setup.ts +84 -0
  294. package/src/playwright.ts +1 -0
  295. package/src/server/compare.ts +260 -0
  296. package/src/server/config.ts +52 -9
  297. package/src/server/connection.ts +26 -0
  298. package/src/server/docker.ts +62 -34
  299. package/src/server/index.ts +161 -79
  300. package/src/server/master/api.ts +94 -28
  301. package/src/server/master/handlers/capture-handler.ts +20 -0
  302. package/src/server/master/handlers/index.ts +4 -0
  303. package/src/server/master/handlers/ping-handler.ts +6 -0
  304. package/src/server/master/handlers/static-handler.ts +16 -0
  305. package/src/server/master/handlers/stories-handler.ts +20 -0
  306. package/src/server/master/master.ts +10 -27
  307. package/src/server/master/pool.ts +7 -3
  308. package/src/server/master/queue.ts +21 -7
  309. package/src/server/master/runner.ts +123 -134
  310. package/src/server/master/server.ts +214 -101
  311. package/src/server/master/start.ts +19 -41
  312. package/src/server/master/testsManager.ts +316 -0
  313. package/src/server/playwright/docker-file.ts +20 -8
  314. package/src/server/playwright/docker.ts +16 -3
  315. package/src/server/playwright/index-source.mjs +16 -0
  316. package/src/server/playwright/internal.ts +169 -96
  317. package/src/server/playwright/webdriver.ts +4 -10
  318. package/src/server/providers/browser.ts +4 -3
  319. package/src/server/providers/hybrid.ts +2 -3
  320. package/src/server/report.ts +51 -0
  321. package/src/server/reporters/creevey.ts +71 -0
  322. package/src/server/reporters/index.ts +11 -0
  323. package/src/server/reporters/junit.ts +207 -0
  324. package/src/server/reporters/teamcity.ts +74 -0
  325. package/src/server/selenium/internal.ts +62 -45
  326. package/src/server/selenium/selenoid.ts +13 -6
  327. package/src/server/selenium/webdriver.ts +8 -12
  328. package/src/server/shutdown.ts +19 -0
  329. package/src/server/stories.ts +1 -12
  330. package/src/server/telemetry.ts +3 -3
  331. package/src/server/testsFiles/parser.ts +52 -4
  332. package/src/server/utils.ts +123 -14
  333. package/src/server/webdriver.ts +1 -1
  334. package/src/server/worker/context.ts +14 -0
  335. package/src/server/worker/match-image.ts +16 -248
  336. package/src/server/worker/start.ts +32 -75
  337. package/src/shared/index.ts +10 -8
  338. package/src/types.ts +91 -58
  339. package/types/global.d.ts +1 -0
  340. package/dist/client/web/assets/index-BE9CL5_G.js +0 -591
  341. package/dist/server/reporter.d.ts +0 -26
  342. package/dist/server/reporter.js +0 -108
  343. package/dist/server/reporter.js.map +0 -1
  344. package/dist/server/update.d.ts +0 -2
  345. package/dist/server/update.js +0 -53
  346. package/dist/server/update.js.map +0 -1
  347. package/src/server/reporter.ts +0 -139
  348. package/src/server/update.ts +0 -74
@@ -1,6 +1,6 @@
1
1
  import React, { JSX, useCallback, useEffect, useRef, useState } from 'react';
2
- import { Loader } from '@storybook/components';
3
- import { styled, withTheme } from '@storybook/theming';
2
+ import { Loader } from 'storybook/internal/components';
3
+ import { styled, withTheme } from 'storybook/theming';
4
4
  import { ViewPropsWithTheme, getBorderColor, themeBorderColors } from './common.js';
5
5
  import { useApplyScale, useCalcScale, useLoadImages } from '../../helpers.js';
6
6
  import { readyForCapture } from '../../../addon/readyForCapture.js';
@@ -1,4 +1,4 @@
1
- import { Color, Theme } from '@storybook/theming';
1
+ import { Color, Theme } from 'storybook/theming';
2
2
 
3
3
  export const themeBorderColors = {
4
4
  actual: 'negative',
@@ -1,5 +1,5 @@
1
1
  import React, { JSX } from 'react';
2
- import { styled, withTheme } from '@storybook/theming';
2
+ import { styled, withTheme } from 'storybook/theming';
3
3
  import { Paging } from './Paging.js';
4
4
 
5
5
  export interface PageFooterProps {
@@ -1,5 +1,5 @@
1
1
  import React, { JSX } from 'react';
2
- import { TabButton } from '@storybook/components';
2
+ import { TabButton } from 'storybook/internal/components';
3
3
 
4
4
  export interface PagingProps {
5
5
  activePage: string;
@@ -1,5 +1,5 @@
1
1
  import React, { JSX } from 'react';
2
- import { styled, withTheme, Theme } from '@storybook/theming';
2
+ import { styled, withTheme, Theme } from 'storybook/theming';
3
3
 
4
4
  const IMG_SIZE = 64;
5
5
  const DIAG_LENGTH = (2 * (IMG_SIZE - 8) ** 2) ** (1 / 2);
@@ -1,11 +1,12 @@
1
- import React, { JSX, useEffect } from 'react';
2
- import { Tabs } from '@storybook/components';
1
+ import React, { JSX, useContext, useEffect } from 'react';
2
+ import { Tabs } from 'storybook/internal/components';
3
3
  import { CloseAltIcon } from '@storybook/icons';
4
- import { styled, withTheme, Theme } from '@storybook/theming';
4
+ import { styled, withTheme, Theme } from 'storybook/theming';
5
5
  import { ImagesViewMode, Images } from '../../../../types.js';
6
6
  import { getImageUrl } from '../../helpers.js';
7
7
  import { ImagePreview } from './ImagePreview.js';
8
8
  import { viewModes } from '../../viewMode.js';
9
+ import { CreeveyContext } from '../../../web/CreeveyContext.js';
9
10
 
10
11
  interface PageHeaderProps {
11
12
  title: string[];
@@ -20,14 +21,14 @@ interface PageHeaderProps {
20
21
  }
21
22
 
22
23
  const Container = styled.div({
23
- margin: '24px 44px 0',
24
+ marginTop: '24px',
24
25
  });
25
26
 
26
27
  const ErrorContainer = withTheme(
27
28
  styled.div<{ theme: Theme }>(({ theme }) => ({
28
29
  marginTop: '8px',
29
30
  padding: '8px',
30
- background: theme.background.negative,
31
+ background: `${theme.background.negative}20`,
31
32
  color: theme.color.negative,
32
33
  borderRadius: '2px',
33
34
  display: 'flex',
@@ -47,8 +48,19 @@ const ErrorContainer = withTheme(
47
48
  })),
48
49
  );
49
50
 
51
+ const UpdateModeBanner = withTheme(
52
+ styled.div(({ theme }) => ({
53
+ padding: '8px 32px',
54
+ backgroundColor: `${theme.color.positive}20`,
55
+ color: theme.color.positive,
56
+ fontSize: '12px',
57
+ textAlign: 'center',
58
+ fontWeight: 'bold',
59
+ })),
60
+ );
61
+
50
62
  const H1 = styled.h1({
51
- margin: 0,
63
+ marginLeft: '44px',
52
64
  marginBottom: '8px',
53
65
  });
54
66
 
@@ -76,6 +88,7 @@ export function PageHeader({
76
88
  onImageChange,
77
89
  onViewModeChange,
78
90
  }: PageHeaderProps): JSX.Element | null {
91
+ const { isReport, isUpdateMode } = useContext(CreeveyContext);
79
92
  const imageEntires = Object.entries(images) as [string, Images][];
80
93
 
81
94
  const handleViewModeChange = (mode: string): void => {
@@ -110,7 +123,7 @@ export function PageHeader({
110
123
  <ImagePreview
111
124
  key={name}
112
125
  imageName={name}
113
- url={`${getImageUrl(title, name)}/${image.actual}`}
126
+ url={`${getImageUrl(title, name, isReport)}/${image.actual}`}
114
127
  isActive={name === imageName}
115
128
  onClick={onImageChange}
116
129
  error={imagesWithError.includes(name)}
@@ -118,6 +131,9 @@ export function PageHeader({
118
131
  ))}
119
132
  </ImagesEntriesContainer>
120
133
  ) : null}
134
+ {isUpdateMode && (
135
+ <UpdateModeBanner>Update Mode: Review and approve screenshots from previous test runs</UpdateModeBanner>
136
+ )}
121
137
  {showViewModes && (
122
138
  <Tabs selected={viewMode} actions={{ onSelect: handleViewModeChange }}>
123
139
  {viewModes.map((x) => (
@@ -1,12 +1,13 @@
1
- import React, { JSX, useCallback, useEffect, useState } from 'react';
2
- import { Placeholder, ScrollArea } from '@storybook/components';
3
- import { styled, withTheme, Theme } from '@storybook/theming';
1
+ import React, { JSX, useCallback, useContext, useEffect, useState } from 'react';
2
+ import { Placeholder, ScrollArea } from 'storybook/internal/components';
3
+ import { styled, withTheme, Theme } from 'storybook/theming';
4
4
  import { ImagesView } from './ImagesView/ImagesView.js';
5
5
  import { PageHeader } from './PageHeader/PageHeader.js';
6
6
  import { PageFooter } from './PageFooter/PageFooter.js';
7
7
  import { getImageUrl } from '../helpers.js';
8
8
  import { getViewMode, VIEW_MODE_KEY, viewModes } from '../viewMode.js';
9
9
  import { ImagesViewMode, TestResult } from '../../../types.js';
10
+ import { CreeveyContext } from '../../web/CreeveyContext.js';
10
11
 
11
12
  interface ResultsPageProps {
12
13
  path: string[];
@@ -65,8 +66,9 @@ export function ResultsPageInternal({
65
66
  onRetryChange,
66
67
  }: ResultsPageProps): JSX.Element {
67
68
  const result = results[retry - 1] ?? {};
69
+ const { isReport } = useContext(CreeveyContext);
68
70
  const [viewMode, setViewMode] = useState<ImagesViewMode>(getViewMode());
69
- const url = getImageUrl(path, imageName);
71
+ const url = getImageUrl(path, imageName, isReport);
70
72
  const image = result.images?.[imageName];
71
73
  const canApprove = Boolean(image && approved?.[imageName] != retry - 1 && result.status != 'success');
72
74
  const hasDiffAndExpect = canApprove && Boolean(image?.diff && image.expect);
@@ -12,9 +12,11 @@ export interface CreeveyClientApi {
12
12
 
13
13
  export async function initCreeveyClientApi(): Promise<CreeveyClientApi> {
14
14
  let clientApiResolver: (api: CreeveyClientApi) => void = noop;
15
+ let clientApiRejecter: (error: Error | Event) => void = noop;
15
16
  const updateListeners = new Set<(update: CreeveyUpdate) => void>();
16
17
  let statusRequest: Promise<CreeveyStatus> | null = null;
17
18
  let statusResolver: (status: CreeveyStatus) => void = noop;
19
+ let isUpdateMode = false;
18
20
 
19
21
  const ws = new WebSocket(`ws://${getConnectionUrl()}`);
20
22
 
@@ -22,12 +24,24 @@ export async function initCreeveyClientApi(): Promise<CreeveyClientApi> {
22
24
  ws.send(JSON.stringify(request));
23
25
  }
24
26
 
27
+ ws.addEventListener('error', (event) => {
28
+ clientApiRejecter(event);
29
+ });
30
+
25
31
  ws.addEventListener('open', () => {
26
32
  clientApiResolver({
27
33
  start(ids: string[]) {
34
+ if (isUpdateMode) {
35
+ console.warn('Tests cannot be started in Update Mode. This mode is for approving screenshots only.');
36
+ return;
37
+ }
28
38
  send({ type: 'start', payload: ids });
29
39
  },
30
40
  stop() {
41
+ if (isUpdateMode) {
42
+ console.warn('Tests cannot be stopped in Update Mode. This mode is for approving screenshots only.');
43
+ return;
44
+ }
31
45
  send({ type: 'stop' });
32
46
  },
33
47
  approve(id: string, retry: number, image: string) {
@@ -57,6 +71,7 @@ export async function initCreeveyClientApi(): Promise<CreeveyClientApi> {
57
71
  fn(data.payload);
58
72
  });
59
73
  if (data.type == 'status') {
74
+ isUpdateMode = data.payload.isUpdateMode;
60
75
  statusResolver(data.payload);
61
76
  statusResolver = noop;
62
77
  statusRequest = null;
@@ -64,5 +79,8 @@ export async function initCreeveyClientApi(): Promise<CreeveyClientApi> {
64
79
  });
65
80
  // TODO Reconnect
66
81
 
67
- return new Promise((resolve) => (clientApiResolver = resolve));
82
+ return new Promise((resolve, reject) => {
83
+ clientApiResolver = resolve;
84
+ clientApiRejecter = reject;
85
+ });
68
86
  }
@@ -1,4 +1,3 @@
1
- import { themes, ThemeVars } from '@storybook/theming';
2
1
  import { parse, stringify } from 'qs';
3
2
  import { RefObject, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
4
3
  import { TestData, isTest, isDefined, TestStatus, CreeveySuite, CreeveyTest, CreeveyStatus } from '../../types.js';
@@ -300,12 +299,14 @@ export function getConnectionUrl(): string {
300
299
  .join(':');
301
300
  }
302
301
 
303
- export function getImageUrl(path: string[], imageName: string): string {
302
+ export function getImageUrl(path: string[], imageName: string, isReport?: boolean): string {
304
303
  // path => [title, story, test, browser]
305
304
  const browser = path.slice(-1)[0];
306
305
  const imagesUrl = window.location.host
307
306
  ? `${window.location.protocol}//${getConnectionUrl()}${
308
- window.location.pathname == '/' ? '/report' : window.location.pathname.split('/').slice(0, -1).join('/')
307
+ window.location.pathname == '/' && !isReport
308
+ ? '/report'
309
+ : window.location.pathname.split('/').slice(0, -1).join('/')
309
310
  }/${encodeURI(path.slice(0, -1).join('/'))}`
310
311
  : encodeURI(path.slice(0, -1).join('/'));
311
312
 
@@ -393,27 +394,6 @@ export function useCalcScale(diffImageRef: RefObject<HTMLImageElement>, loaded:
393
394
  return scale;
394
395
  }
395
396
 
396
- const CREEVEY_THEME = 'Creevey_theme';
397
-
398
- function isTheme(theme?: string | null): theme is ThemeVars['base'] {
399
- return isDefined(theme) && Object.prototype.hasOwnProperty.call(themes, theme);
400
- }
401
-
402
- function initialTheme(): ThemeVars['base'] {
403
- const theme = localStorage.getItem(CREEVEY_THEME);
404
- return isTheme(theme) ? theme : 'light';
405
- }
406
-
407
- export function useTheme(): [ThemeVars['base'], (theme: ThemeVars['base']) => void] {
408
- const [theme, setTheme] = useState<ThemeVars['base']>(initialTheme());
409
-
410
- useEffect(() => {
411
- localStorage.setItem(CREEVEY_THEME, theme);
412
- }, [theme]);
413
-
414
- return [theme, setTheme];
415
- }
416
-
417
397
  export function setSearchParams(testPath: string[]): void {
418
398
  const pageUrl = `?${stringify({ testPath })}`;
419
399
  window.history.pushState({ testPath }, '', pageUrl);
@@ -1,6 +1,6 @@
1
1
  import React, { JSX, useCallback, useEffect, useMemo, useState } from 'react';
2
2
  import { useImmer } from 'use-immer';
3
- import { ensure, styled, ThemeProvider, themes, withTheme } from '@storybook/theming';
3
+ import { ensure, styled, ThemeProvider, themes, withTheme } from 'storybook/theming';
4
4
  import { CreeveyUpdate, CreeveySuite, isDefined, CreeveyTest } from '../../types.js';
5
5
  import { CreeveyClientApi } from '../shared/creeveyClientApi.js';
6
6
  import {
@@ -11,7 +11,6 @@ import {
11
11
  getTestByPath,
12
12
  removeTests,
13
13
  getTestPath,
14
- useTheme,
15
14
  setSearchParams,
16
15
  getTestPathFromSearch,
17
16
  CreeveyViewFilter,
@@ -22,6 +21,7 @@ import { KeyboardEvents } from './KeyboardEventsContext.js';
22
21
  import { SideBar } from './CreeveyView/SideBar/index.js';
23
22
  import { ResultsPage } from '../shared/components/ResultsPage.js';
24
23
  import { Toggle } from './CreeveyView/SideBar/Toggle.js';
24
+ import { useTheme } from './themes.js';
25
25
 
26
26
  export interface CreeveyAppProps {
27
27
  api?: CreeveyClientApi;
@@ -29,6 +29,7 @@ export interface CreeveyAppProps {
29
29
  tests: CreeveySuite;
30
30
  isRunning: boolean;
31
31
  isReport: boolean;
32
+ isUpdateMode: boolean;
32
33
  };
33
34
  }
34
35
 
@@ -137,6 +138,7 @@ export function CreeveyApp({ api, initialState }: CreeveyAppProps): JSX.Element
137
138
  }, [handleImageApproveNew, handleGoToNextFailedTest]);
138
139
 
139
140
  const handleApproveAll = useCallback(() => {
141
+ // TODO Update handled incorrectly
140
142
  api?.approveAll();
141
143
  }, [api]);
142
144
 
@@ -213,6 +215,7 @@ export function CreeveyApp({ api, initialState }: CreeveyAppProps): JSX.Element
213
215
  onSuiteToggle: handleSuiteToggle,
214
216
  sidebarFocusedItem,
215
217
  setSidebarFocusedItem,
218
+ isUpdateMode: initialState.isUpdateMode,
216
219
  }}
217
220
  >
218
221
  <ThemeProvider theme={ensure(themes[theme])}>
@@ -7,6 +7,7 @@ export type FocusableItem = null | SuitePath;
7
7
  export interface CreeveyContextType {
8
8
  isReport: boolean;
9
9
  isRunning: boolean;
10
+ isUpdateMode: boolean;
10
11
  onStop: () => void;
11
12
  onImageNext?: () => void;
12
13
  onImageApprove?: () => void;
@@ -21,6 +22,7 @@ export interface CreeveyContextType {
21
22
  export const CreeveyContext = React.createContext<CreeveyContextType>({
22
23
  isReport: true,
23
24
  isRunning: false,
25
+ isUpdateMode: false,
24
26
  onImageNext: noop,
25
27
  onImageApprove: noop,
26
28
  onApproveAll: noop,
@@ -1,6 +1,6 @@
1
1
  import React, { JSX } from 'react';
2
- import { styled, withTheme, Theme, keyframes, ensure, ThemeProvider, themes, Keyframes } from '@storybook/theming';
3
- import { useTheme } from '../shared/helpers.js';
2
+ import { styled, withTheme, Theme, keyframes, ensure, ThemeProvider, themes, Keyframes } from 'storybook/theming';
3
+ import { useTheme } from './themes.js';
4
4
 
5
5
  const Container = withTheme(
6
6
  styled.div(({ theme }) => ({
@@ -1,5 +1,5 @@
1
- import React, { JSX } from 'react';
2
- import { styled, Theme, withTheme } from '@storybook/theming';
1
+ import React, { Component, JSX } from 'react';
2
+ import { styled, Theme, withTheme } from 'storybook/theming';
3
3
  import { CircleIcon, CheckIcon } from '@storybook/icons';
4
4
  import { transparentize } from 'polished';
5
5
 
@@ -76,7 +76,7 @@ export const CheckboxContainer = styled.span({
76
76
  lineHeight: '18px',
77
77
  });
78
78
 
79
- export class Checkbox extends React.Component<CheckboxProps, CheckboxState> {
79
+ export class Checkbox extends Component<CheckboxProps, CheckboxState> {
80
80
  state: CheckboxState = { indeterminate: false };
81
81
 
82
82
  handleIndeterminateChange = (value: boolean): void => {
@@ -1,6 +1,6 @@
1
1
  import React, { JSX, ChangeEvent, useRef, useState } from 'react';
2
2
  import { SearchIcon, CloseAltIcon } from '@storybook/icons';
3
- import { styled, Theme, withTheme } from '@storybook/theming';
3
+ import { styled, Theme, withTheme } from 'storybook/theming';
4
4
  import { useCreeveyContext } from '../../CreeveyContext.js';
5
5
 
6
6
  interface SearchProps {
@@ -1,7 +1,7 @@
1
1
  import React, { JSX, createContext } from 'react';
2
2
  import { transparentize } from 'polished';
3
- import { ScrollArea } from '@storybook/components';
4
- import { styled, Theme, withTheme } from '@storybook/theming';
3
+ import { ScrollArea } from 'storybook/internal/components';
4
+ import { styled, Theme, withTheme } from 'storybook/theming';
5
5
  import { SideBarHeader } from './SideBarHeader.js';
6
6
  import { CreeveySuite, CreeveyTest, noop, isTest } from '../../../../types.js';
7
7
  import {
@@ -47,6 +47,12 @@ const ScrollContainer = styled.div({
47
47
  left: '0',
48
48
  });
49
49
 
50
+ const StyledScrollArea = styled(ScrollArea)({
51
+ '& > [data-state="visible"]': {
52
+ zIndex: 5,
53
+ },
54
+ });
55
+
50
56
  const Shadow = withTheme(
51
57
  styled.div<{ theme: Theme; position: 'top' | 'bottom' }>(({ theme, position }) => ({
52
58
  [position]: '0px',
@@ -62,14 +68,13 @@ const SelectAllContainer = styled.div({
62
68
  });
63
69
 
64
70
  const TestsContainer = styled.div({
65
- marginBottom: '8px',
66
71
  position: 'relative',
67
72
  height: '100%',
68
73
  });
69
74
 
70
75
  const Divider = withTheme(
71
76
  styled.div<{ theme: Theme; position: 'top' | 'bottom' }>(({ theme, position }) => ({
72
- ...(position === 'top' ? { position: 'absolute' } : { position: 'relative', bottom: '8px', marginBottom: '-8px' }),
77
+ ...(position === 'top' ? { position: 'absolute' } : { position: 'relative', bottom: '8px' }),
73
78
  height: '8px',
74
79
  width: '100%',
75
80
  zIndex: 4,
@@ -102,7 +107,7 @@ export function SideBar({ rootSuite, testId, onOpenTest, filter, setFilter }: Si
102
107
  canStart={countCheckedTests !== 0}
103
108
  />
104
109
  <ScrollContainer>
105
- <ScrollArea vertical>
110
+ <StyledScrollArea vertical>
106
111
  <Shadow position="top" />
107
112
  <TestsContainer>
108
113
  <Divider position="top" />
@@ -120,7 +125,7 @@ export function SideBar({ rootSuite, testId, onOpenTest, filter, setFilter }: Si
120
125
  )}
121
126
  </TestsContainer>
122
127
  <Divider position="bottom" />
123
- </ScrollArea>
128
+ </StyledScrollArea>
124
129
  <Shadow position="bottom" />
125
130
  </ScrollContainer>
126
131
  <SideBarFooter />
@@ -1,6 +1,6 @@
1
1
  import React, { JSX, useCallback, useEffect, useState } from 'react';
2
- import { styled, withTheme } from '@storybook/theming';
3
- import { Button } from '@storybook/components';
2
+ import { styled, withTheme } from 'storybook/theming';
3
+ import { Button } from 'storybook/internal/components';
4
4
  import { ChevronRightIcon } from '@storybook/icons';
5
5
  import { useCreeveyContext } from '../../CreeveyContext.js';
6
6
 
@@ -48,23 +48,25 @@ export function SideBarFooter(): JSX.Element {
48
48
  }, [handleKeyDown, handleKeyUp]);
49
49
 
50
50
  return (
51
- <Sticky>
52
- <Container>
53
- {isAlt ? (
54
- <Button variant="outline" size="medium" onClick={onImageNext} disabled={!onImageApprove}>
55
- Next
56
- <ChevronRightIcon />
51
+ <>
52
+ <Sticky>
53
+ <Container>
54
+ {isAlt ? (
55
+ <Button variant="outline" size="medium" onClick={onImageNext} disabled={!onImageApprove}>
56
+ Next
57
+ <ChevronRightIcon />
58
+ </Button>
59
+ ) : (
60
+ <Button variant="solid" size="medium" onClick={onImageApprove} disabled={!onImageApprove}>
61
+ Approve
62
+ <ChevronRightIcon />
63
+ </Button>
64
+ )}
65
+ <Button variant="outline" size="medium" onClick={onApproveAll}>
66
+ Approve all
57
67
  </Button>
58
- ) : (
59
- <Button variant="solid" size="medium" onClick={onImageApprove} disabled={!onImageApprove}>
60
- Approve
61
- <ChevronRightIcon />
62
- </Button>
63
- )}
64
- <Button variant="outline" size="medium" onClick={onApproveAll}>
65
- Approve all
66
- </Button>
67
- </Container>
68
- </Sticky>
68
+ </Container>
69
+ </Sticky>
70
+ </>
69
71
  );
70
72
  }
@@ -1,7 +1,7 @@
1
1
  import React, { JSX, useContext, useState } from 'react';
2
- import { Button as NativeButton } from '@storybook/components';
2
+ import { Button as NativeButton } from 'storybook/internal/components';
3
3
  import { StopIcon, PlayIcon } from '@storybook/icons';
4
- import { styled, withTheme } from '@storybook/theming';
4
+ import { styled, withTheme } from 'storybook/theming';
5
5
  import { CreeveyContext } from '../../CreeveyContext.js';
6
6
  import { TestsStatus, TestsStatusProps } from './TestsStatus.js';
7
7
  import { TestStatus } from '../../../../types.js';
@@ -36,6 +36,7 @@ const Container = styled.div({
36
36
  const Header = styled.h2({
37
37
  fontWeight: 'normal',
38
38
  margin: 0,
39
+ padding: '2px 6px',
39
40
  });
40
41
 
41
42
  const Button = withTheme(
@@ -58,12 +59,23 @@ const Button = withTheme(
58
59
  })),
59
60
  );
60
61
 
62
+ const UpdateModeDescription = withTheme(
63
+ styled.div(({ theme }) => ({
64
+ fontSize: '0.8em',
65
+ marginTop: '4px',
66
+ padding: '2px 6px',
67
+ color: theme.color.positive,
68
+ backgroundColor: `${theme.color.positive}20`,
69
+ })),
70
+ );
71
+
61
72
  const MarginContainer = styled.div<{ left?: string; right?: string; top?: string; bottom?: string }>(
62
73
  ({ left, right, top, bottom }) => ({
63
74
  marginLeft: left ?? 0,
64
75
  marginRight: right ?? 0,
65
76
  marginTop: top ?? 0,
66
77
  marginBottom: bottom ?? 0,
78
+ padding: '2px 6px',
67
79
  }),
68
80
  );
69
81
 
@@ -92,7 +104,7 @@ export function SideBarHeader({
92
104
  onFilterChange,
93
105
  canStart,
94
106
  }: SideBarHeaderProps): JSX.Element {
95
- const { isReport, isRunning } = useContext(CreeveyContext);
107
+ const { isReport, isRunning, isUpdateMode } = useContext(CreeveyContext);
96
108
  const [filterInput, setFilterInput] = useState('');
97
109
 
98
110
  const handleClickByStatus = (status: TestStatus): void => {
@@ -115,9 +127,12 @@ export function SideBarHeader({
115
127
  <Container>
116
128
  <div>
117
129
  <Header>colin.creevey</Header>
130
+ {isUpdateMode && (
131
+ <UpdateModeDescription>Review and approve screenshots from previous test runs</UpdateModeDescription>
132
+ )}
118
133
  <TestsStatus {...testsStatus} onClickByStatus={handleClickByStatus} />
119
134
  </div>
120
- {isReport ? null : (
135
+ {isReport || isUpdateMode ? null : (
121
136
  <MarginContainer top="10px">
122
137
  {isRunning ? (
123
138
  <Button variant="outline" onClick={onStop}>
@@ -131,7 +146,7 @@ export function SideBarHeader({
131
146
  </MarginContainer>
132
147
  )}
133
148
  </Container>
134
- <MarginContainer top="24px" bottom="24px">
149
+ <MarginContainer top="12px" bottom="12px">
135
150
  <Search onChange={handleInputFilterChange} value={filterInput} />
136
151
  </MarginContainer>
137
152
  </Sticky>
@@ -1,6 +1,6 @@
1
1
  import React, { JSX, useRef, useEffect, useMemo } from 'react';
2
2
  import { ChevronDownIcon, ChevronRightIcon } from '@storybook/icons';
3
- import { styled, withTheme, Theme } from '@storybook/theming';
3
+ import { styled, withTheme, Theme } from 'storybook/theming';
4
4
  import { Checkbox, CheckboxContainer } from './Checkbox.js';
5
5
  import { TestStatusIcon } from './TestStatusIcon.js';
6
6
  import { CreeveySuite, isTest } from '../../../../types.js';
@@ -78,7 +78,7 @@ export const SuiteTitle = styled.span({
78
78
  });
79
79
 
80
80
  export function SuiteLink({ title, suite, 'data-testid': dataTid }: SuiteLinkProps): JSX.Element {
81
- const { onSuiteOpen, onSuiteToggle, sidebarFocusedItem, setSidebarFocusedItem } = useCreeveyContext();
81
+ const { onSuiteOpen, onSuiteToggle, sidebarFocusedItem, setSidebarFocusedItem, isUpdateMode } = useCreeveyContext();
82
82
  const checkboxRef = useRef<Checkbox>(null);
83
83
  const buttonRef = useRef<HTMLButtonElement | null>(null);
84
84
 
@@ -117,12 +117,14 @@ export function SuiteLink({ title, suite, 'data-testid': dataTid }: SuiteLinkPro
117
117
  return (
118
118
  <Container focused={isSuiteFocused}>
119
119
  <CheckboxContainer>
120
- <Checkbox
121
- ref={checkboxRef}
122
- checked={suite.skip ? false : suite.checked}
123
- disabled={Boolean(suite.skip)}
124
- onValueChange={handleCheck}
125
- />
120
+ {!isUpdateMode && (
121
+ <Checkbox
122
+ ref={checkboxRef}
123
+ checked={suite.skip ? false : suite.checked}
124
+ disabled={Boolean(suite.skip)}
125
+ onValueChange={handleCheck}
126
+ />
127
+ )}
126
128
  </CheckboxContainer>
127
129
  <Button onClick={handleOpen} onFocus={handleFocus} data-testid={dataTid} ref={buttonRef}>
128
130
  <SuiteContainer padding={(suite.path.length - 1) * 8}>
@@ -6,7 +6,7 @@ import { SideBarContext } from './SideBar.js';
6
6
  import { Button, Container, SuiteContainer, SuiteTitle } from './SuiteLink.js';
7
7
  import { Checkbox, CheckboxContainer } from './Checkbox.js';
8
8
  import { getTestPath } from '../../../shared/helpers.js';
9
- import { styled } from '@storybook/theming';
9
+ import { styled } from 'storybook/theming';
10
10
 
11
11
  export interface TestLinkProps {
12
12
  title: string;
@@ -19,7 +19,7 @@ const TestContainer = styled(SuiteContainer)({
19
19
  });
20
20
 
21
21
  export function TestLink({ title, opened, test }: TestLinkProps): JSX.Element {
22
- const { onSuiteToggle, sidebarFocusedItem, setSidebarFocusedItem } = useCreeveyContext();
22
+ const { onSuiteToggle, sidebarFocusedItem, setSidebarFocusedItem, isUpdateMode } = useCreeveyContext();
23
23
  const { onOpenTest } = useContext(SideBarContext);
24
24
  const buttonRef = useRef<HTMLButtonElement | null>(null);
25
25
 
@@ -55,11 +55,13 @@ export function TestLink({ title, opened, test }: TestLinkProps): JSX.Element {
55
55
  {/* NOTE Little hack to allow click on checkbox and don't trigger Button click */}
56
56
  {/* We can use other approach, but checkbox has vertical-align: top */}
57
57
  <CheckboxContainer>
58
- <Checkbox
59
- checked={test.skip ? false : test.checked}
60
- disabled={Boolean(test.skip)}
61
- onValueChange={handleCheck}
62
- />
58
+ {!isUpdateMode && (
59
+ <Checkbox
60
+ checked={test.skip ? false : test.checked}
61
+ disabled={Boolean(test.skip)}
62
+ onValueChange={handleCheck}
63
+ />
64
+ )}
63
65
  </CheckboxContainer>
64
66
  <Button onClick={handleOpen} disabled={emptyResults} ref={buttonRef}>
65
67
  <TestContainer padding={(testPath.length + 1) * 8}>
@@ -1,6 +1,6 @@
1
1
  import React, { JSX } from 'react';
2
- import { styled, withTheme, Theme } from '@storybook/theming';
3
- import { Loader } from '@storybook/components';
2
+ import { styled, withTheme, Theme } from 'storybook/theming';
3
+ import { Loader } from 'storybook/internal/components';
4
4
  import { CrossIcon, CheckIcon, CircleHollowIcon, ThumbsUpIcon, AlertIcon, TimeIcon } from '@storybook/icons';
5
5
  import { TestStatus } from '../../../../types.js';
6
6
 
@@ -1,7 +1,7 @@
1
1
  import React, { JSX } from 'react';
2
- import { IconButton } from '@storybook/components';
2
+ import { IconButton } from 'storybook/internal/components';
3
3
  import { TimeIcon, CheckIcon, CrossIcon, ThumbsUpIcon } from '@storybook/icons';
4
- import { styled, withTheme, Theme } from '@storybook/theming';
4
+ import { styled, withTheme, Theme } from 'storybook/theming';
5
5
  import { TestStatus } from '../../../../types.js';
6
6
  import { CreeveyTestsStatus } from '../../../shared/helpers.js';
7
7
 
@@ -15,6 +15,7 @@ const Container = styled.div({
15
15
  alignItems: 'center',
16
16
  fontSize: '14px',
17
17
  lineHeight: '22px',
18
+ padding: '2px 6px',
18
19
  });
19
20
 
20
21
  const IconContainer = styled.div<{ color?: string }>(({ color }) => ({
@@ -1,5 +1,5 @@
1
1
  import React, { JSX } from 'react';
2
- import { styled, withTheme } from '@storybook/theming';
2
+ import { styled, withTheme } from 'storybook/theming';
3
3
  import { opacify } from 'polished';
4
4
 
5
5
  const Container = withTheme(