testeranto 0.173.0 → 0.189.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 (819) hide show
  1. package/CNAME +1 -0
  2. package/README.html +302 -0
  3. package/README.md +24 -4
  4. package/dist/common/src/App.js +43 -0
  5. package/dist/common/src/Node.js +4 -8
  6. package/dist/common/src/PM/PM_WithEslintAndTsc.js +2 -33
  7. package/dist/common/src/PM/base.js +4 -5
  8. package/dist/common/src/PM/layers/base/PM_Base.js +1 -0
  9. package/dist/common/src/PM/layers/base/components/PageOperations.js +1 -0
  10. package/dist/common/src/PM/layers/base/components/PageOperations.testeranto.js +1 -0
  11. package/dist/common/src/PM/layers/linting/components/Linter.js +1 -0
  12. package/dist/common/src/PM/layers/linting/components/TypeChecker.js +1 -0
  13. package/dist/common/src/PM/layers/main/components/SidecarManager.js +1 -0
  14. package/dist/common/src/PM/layers/main/components/TestRunner.js +1 -0
  15. package/dist/common/src/PM/main.js +248 -150
  16. package/dist/common/src/PM/node.js +4 -1
  17. package/dist/common/src/PM/nodeSidecar.js +1 -0
  18. package/dist/common/src/PM/pure.js +15 -7
  19. package/dist/common/src/PM/pureSidecar.js +1 -1
  20. package/dist/common/src/PM/types.js +1 -0
  21. package/dist/common/src/PM/web.js +6 -2
  22. package/dist/common/src/Pure.js +1 -5
  23. package/dist/common/src/Pure.test.js +22 -20
  24. package/dist/common/src/ReportServerLib.js +11 -5
  25. package/dist/common/src/build.js +30 -39
  26. package/dist/common/src/components/SunriseAnimation.js +291 -0
  27. package/dist/common/src/components/SunriseAnimation.test/interface.js +67 -0
  28. package/dist/common/src/components/SunriseAnimation.test/types.js +2 -0
  29. package/dist/common/src/components/TestStatusBadge.js +1 -21
  30. package/dist/common/src/components/pure/AppFrame.js +20 -0
  31. package/dist/common/src/components/pure/AppFrame.test/implementation.js +63 -0
  32. package/dist/common/src/components/pure/AppFrame.test/index.js +14 -0
  33. package/dist/common/src/components/pure/AppFrame.test/specification.js +25 -0
  34. package/dist/common/src/components/pure/AppFrame.test/types.js +3 -0
  35. package/dist/common/src/components/pure/FeaturesReporterView.js +23 -0
  36. package/dist/common/src/components/pure/FeaturesReporterView.test/implementation.js +84 -0
  37. package/dist/common/src/components/pure/FeaturesReporterView.test/index.js +14 -0
  38. package/dist/common/src/components/pure/FeaturesReporterView.test/specification.js +27 -0
  39. package/dist/common/src/components/pure/FeaturesReporterView.test/types.js +2 -0
  40. package/dist/common/src/components/pure/ModalContent.js +86 -0
  41. package/dist/common/src/components/pure/ModalContent.test/implementation.js +33 -0
  42. package/dist/common/src/components/pure/ModalContent.test/index.js +12 -0
  43. package/dist/common/src/components/pure/ModalContent.test/specification.js +19 -0
  44. package/dist/common/src/components/pure/ModalContent.test/types.js +4 -0
  45. package/dist/common/src/components/pure/ProjectPageView.js +53 -76
  46. package/dist/common/src/components/pure/ProjectPageView.test/implementation.js +118 -33
  47. package/dist/common/src/components/pure/ProjectPageView.test/index.js +5 -1
  48. package/dist/common/src/components/pure/ProjectPageView.test/specification.js +15 -2
  49. package/dist/common/src/components/pure/ProjectPageView.test/types.js +2 -0
  50. package/dist/common/src/components/pure/ProjectsPageView.js +66 -0
  51. package/dist/common/src/components/pure/SettingsButton.js +83 -0
  52. package/dist/common/src/components/pure/TestPageView.js +134 -0
  53. package/dist/common/src/components/pure/TestPageView.test/implementation.js +202 -0
  54. package/dist/common/src/components/pure/TestPageView.test/index.js +15 -0
  55. package/dist/common/src/components/pure/TestPageView.test/specification.js +26 -0
  56. package/dist/common/src/components/pure/TestPageView.test/types.js +4 -0
  57. package/dist/common/src/components/pure/ThemeCard.js +15 -0
  58. package/dist/common/src/components/stateful/FeaturesReporter.js +59 -0
  59. package/dist/common/src/components/stateful/ProjectPage.js +100 -0
  60. package/dist/common/src/components/stateful/ProjectsPage.js +92 -0
  61. package/dist/common/src/components/stateful/TestPage.js +133 -0
  62. package/dist/common/src/defaultConfig.js +1 -0
  63. package/dist/common/src/esbuildConfigs/node.js +1 -3
  64. package/dist/common/src/esbuildConfigs/web.js +1 -1
  65. package/dist/common/src/lib/BaseSuite.js +14 -11
  66. package/dist/common/src/lib/BaseSuite.test/mock.js +0 -11
  67. package/dist/common/src/lib/BaseSuite.test/test.js +11 -22
  68. package/dist/common/src/lib/Sidecar.js +1 -0
  69. package/dist/common/src/lib/abstractBase.js +52 -48
  70. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +0 -6
  71. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.implementation.js +3 -1
  72. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.mock.js +28 -17
  73. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.pure.js +2 -2
  74. package/dist/common/src/lib/basebuilder.js +32 -25
  75. package/dist/common/src/lib/classBuilder.js +2 -0
  76. package/dist/common/src/lib/core.test/MockCore.js +0 -14
  77. package/dist/common/src/lib/core.test/core.test.adapter.js +2 -9
  78. package/dist/common/src/lib/core.test/core.test.implementation.js +3 -7
  79. package/dist/common/src/lib/index.js +2 -0
  80. package/dist/common/src/lib/pmProxy.js +208 -100
  81. package/dist/common/src/lib/pmProxy.test/adapter.js +8 -2
  82. package/dist/common/src/lib/pmProxy.test/implementation.js +34 -5
  83. package/dist/common/src/lib/pmProxy.test/mockPMBase.js +9 -0
  84. package/dist/common/src/mothership/index.js +5 -0
  85. package/dist/common/src/mothership/test.js +44 -25
  86. package/dist/common/src/types/features.js +34 -0
  87. package/dist/common/src/utils/api.js +42 -23
  88. package/dist/common/src/utils/featureUtils.js +29 -0
  89. package/dist/common/src/utils/logFiles.js +25 -0
  90. package/dist/common/src/utils/makePrompt.js +115 -0
  91. package/dist/common/src/web.html.js +2 -6
  92. package/dist/common/testeranto.config.js +64 -36
  93. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  94. package/dist/module/src/App.js +9 -17
  95. package/dist/module/src/Node.js +4 -8
  96. package/dist/module/src/PM/PM_WithEslintAndTsc.js +3 -34
  97. package/dist/module/src/PM/base.js +4 -5
  98. package/dist/module/src/PM/layers/base/PM_Base.js +1 -0
  99. package/dist/module/src/PM/layers/base/components/PageOperations.js +1 -0
  100. package/dist/module/src/PM/layers/base/components/PageOperations.testeranto.js +1 -0
  101. package/dist/module/src/PM/layers/linting/components/Linter.js +1 -0
  102. package/dist/module/src/PM/layers/linting/components/TypeChecker.js +1 -0
  103. package/dist/module/src/PM/layers/main/components/SidecarManager.js +1 -0
  104. package/dist/module/src/PM/layers/main/components/TestRunner.js +1 -0
  105. package/dist/module/src/PM/main.js +220 -122
  106. package/dist/module/src/PM/node.js +4 -1
  107. package/dist/module/src/PM/nodeSidecar.js +1 -0
  108. package/dist/module/src/PM/pure.js +15 -7
  109. package/dist/module/src/PM/pureSidecar.js +1 -1
  110. package/dist/module/src/PM/types.js +1 -0
  111. package/dist/module/src/PM/web.js +6 -2
  112. package/dist/module/src/Pure.js +1 -5
  113. package/dist/module/src/Pure.test.js +22 -20
  114. package/dist/module/src/ReportServerLib.js +11 -5
  115. package/dist/module/src/build.js +25 -37
  116. package/dist/module/src/components/SunriseAnimation.test/interface.js +32 -1
  117. package/dist/module/src/components/TestStatusBadge.js +1 -21
  118. package/dist/module/src/components/pure/AppFrame.js +13 -0
  119. package/dist/module/src/components/pure/AppFrame.test/implementation.js +57 -0
  120. package/dist/module/src/components/pure/AppFrame.test/index.js +9 -0
  121. package/dist/module/src/components/pure/AppFrame.test/specification.js +21 -0
  122. package/dist/module/src/components/pure/AppFrame.test/types.js +2 -0
  123. package/dist/module/src/components/pure/FeaturesReporterView.js +16 -0
  124. package/dist/module/src/components/pure/FeaturesReporterView.test/implementation.js +81 -0
  125. package/dist/module/src/components/pure/FeaturesReporterView.test/index.js +9 -0
  126. package/dist/module/src/components/pure/FeaturesReporterView.test/specification.js +23 -0
  127. package/dist/module/src/components/pure/ModalContent.js +79 -0
  128. package/dist/module/src/components/pure/ModalContent.test/implementation.js +30 -0
  129. package/dist/module/src/components/pure/ModalContent.test/index.js +7 -0
  130. package/dist/module/src/components/pure/ModalContent.test/specification.js +15 -0
  131. package/dist/module/src/components/pure/ModalContent.test/types.js +3 -0
  132. package/dist/module/src/components/pure/ProjectPageView.js +54 -77
  133. package/dist/module/src/components/pure/ProjectPageView.test/implementation.js +118 -33
  134. package/dist/module/src/components/pure/ProjectPageView.test/index.js +5 -1
  135. package/dist/module/src/components/pure/ProjectPageView.test/specification.js +15 -2
  136. package/dist/module/src/components/pure/ProjectPageView.test/types.js +2 -0
  137. package/dist/module/src/components/pure/ProjectsPageView.js +5 -4
  138. package/dist/module/src/components/pure/SettingsButton.js +43 -0
  139. package/dist/module/src/components/pure/TestPageView.js +100 -121
  140. package/dist/module/src/components/pure/TestPageView.test/implementation.js +166 -0
  141. package/dist/module/src/components/pure/TestPageView.test/index.js +10 -0
  142. package/dist/module/src/components/pure/TestPageView.test/specification.js +22 -0
  143. package/dist/module/src/components/pure/TestPageView.test/types.js +3 -0
  144. package/dist/module/src/components/pure/ThemeCard.js +8 -0
  145. package/dist/module/src/components/stateful/FeaturesReporter.js +22 -0
  146. package/dist/module/src/components/stateful/ProjectPage.js +1 -1
  147. package/dist/module/src/components/stateful/TestPage.js +25 -11
  148. package/dist/module/src/defaultConfig.js +1 -0
  149. package/dist/module/src/esbuildConfigs/node.js +1 -3
  150. package/dist/module/src/esbuildConfigs/web.js +1 -1
  151. package/dist/module/src/lib/BaseSuite.js +14 -11
  152. package/dist/module/src/lib/BaseSuite.test/mock.js +0 -11
  153. package/dist/module/src/lib/BaseSuite.test/test.js +11 -22
  154. package/dist/module/src/lib/Sidecar.js +1 -0
  155. package/dist/module/src/lib/abstractBase.js +52 -48
  156. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +0 -6
  157. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.implementation.js +3 -1
  158. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.mock.js +28 -17
  159. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.pure.js +1 -1
  160. package/dist/module/src/lib/basebuilder.js +32 -25
  161. package/dist/module/src/lib/classBuilder.js +2 -0
  162. package/dist/module/src/lib/core.test/MockCore.js +0 -14
  163. package/dist/module/src/lib/core.test/core.test.adapter.js +2 -9
  164. package/dist/module/src/lib/core.test/core.test.implementation.js +3 -7
  165. package/dist/module/src/lib/index.js +2 -0
  166. package/dist/module/src/lib/pmProxy.js +208 -100
  167. package/dist/module/src/lib/pmProxy.test/adapter.js +8 -2
  168. package/dist/module/src/lib/pmProxy.test/implementation.js +34 -5
  169. package/dist/module/src/lib/pmProxy.test/mockPMBase.js +9 -0
  170. package/dist/module/src/mothership/index.js +5 -0
  171. package/dist/module/src/mothership/test.js +44 -25
  172. package/dist/module/src/types/features.js +31 -0
  173. package/dist/module/src/utils/api.js +41 -21
  174. package/dist/module/src/utils/featureUtils.js +24 -0
  175. package/dist/module/src/utils/logFiles.js +21 -0
  176. package/dist/module/src/utils/makePrompt.js +108 -0
  177. package/dist/module/src/web.html.js +2 -6
  178. package/dist/module/testeranto.config.js +64 -36
  179. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  180. package/dist/prebuild/App.css +444 -12
  181. package/dist/prebuild/App.js +1318 -1053
  182. package/dist/prebuild/ReportServer.mjs +10 -4
  183. package/dist/prebuild/build.mjs +88 -104
  184. package/dist/prebuild/mothership/index.mjs +5 -0
  185. package/dist/prebuild/run.mjs +360 -232
  186. package/dist/tsconfig.tsbuildinfo +1 -0
  187. package/dist/types/App.d.ts +1 -0
  188. package/dist/types/{src/PM → PM}/base.d.ts +1 -1
  189. package/dist/types/PM/layers/main/components/SidecarManager.d.ts +0 -0
  190. package/dist/types/PM/layers/main/components/TestRunner.d.ts +0 -0
  191. package/dist/types/{src/PM → PM}/main.d.ts +18 -3
  192. package/dist/types/{src/PM → PM}/node.d.ts +1 -1
  193. package/dist/types/{src/PM → PM}/pure.d.ts +7 -4
  194. package/dist/types/PM/types.d.ts +0 -0
  195. package/dist/types/{src/PM → PM}/web.d.ts +2 -2
  196. package/dist/types/ReportServerLib.d.ts +1 -0
  197. package/dist/types/{src/Types.d.ts → Types.d.ts} +1 -0
  198. package/dist/types/components/SunriseAnimation.d.ts +5 -0
  199. package/dist/types/components/SunriseAnimation.test/implementation.d.ts +0 -0
  200. package/dist/types/components/SunriseAnimation.test/index.d.ts +0 -0
  201. package/dist/types/components/SunriseAnimation.test/interface.d.ts +11 -0
  202. package/dist/types/components/SunriseAnimation.test/specification.d.ts +0 -0
  203. package/dist/types/components/SunriseAnimation.test/types.d.ts +39 -0
  204. package/dist/types/components/pure/AppFrame.d.ts +9 -0
  205. package/dist/types/components/pure/AppFrame.test/implementation.d.ts +3 -0
  206. package/dist/types/components/pure/AppFrame.test/index.d.ts +5 -0
  207. package/dist/types/components/pure/AppFrame.test/types.d.ts +33 -0
  208. package/dist/types/components/pure/FeaturesReporterView.d.ts +7 -0
  209. package/dist/types/{src/components/pure/ProjectPageView.test → components/pure/FeaturesReporterView.test}/index.d.ts +1 -2
  210. package/dist/types/components/pure/FeaturesReporterView.test/specification.d.ts +3 -0
  211. package/dist/types/components/pure/FeaturesReporterView.test/types.d.ts +54 -0
  212. package/dist/types/components/pure/ModalContent.d.ts +7 -0
  213. package/dist/types/components/pure/ModalContent.test/implementation.d.ts +3 -0
  214. package/dist/types/components/pure/ModalContent.test/index.d.ts +2 -0
  215. package/dist/types/components/pure/ModalContent.test/specification.d.ts +3 -0
  216. package/dist/types/components/pure/ModalContent.test/types.d.ts +45 -0
  217. package/dist/types/components/pure/ProjectPageView.d.ts +14 -0
  218. package/dist/types/components/pure/ProjectPageView.test/implementation.d.ts +3 -0
  219. package/dist/types/components/pure/ProjectPageView.test/index.d.ts +2 -0
  220. package/dist/types/components/pure/ProjectPageView.test/specification.d.ts +3 -0
  221. package/dist/types/components/pure/ProjectPageView.test/types.d.ts +57 -0
  222. package/dist/types/components/pure/ProjectsPageView.d.ts +29 -0
  223. package/dist/types/components/pure/SettingsButton.d.ts +3 -0
  224. package/dist/types/components/pure/TestPageView.d.ts +15 -0
  225. package/dist/types/components/pure/TestPageView.test/implementation.d.ts +11 -0
  226. package/dist/types/components/pure/TestPageView.test/index.d.ts +32 -0
  227. package/dist/types/components/pure/TestPageView.test/specification.d.ts +11 -0
  228. package/dist/types/components/pure/TestPageView.test/types.d.ts +65 -0
  229. package/dist/types/components/pure/ThemeCard.d.ts +9 -0
  230. package/dist/types/components/stateful/FeaturesReporter.d.ts +2 -0
  231. package/dist/types/components/stateful/ProjectPage.d.ts +1 -0
  232. package/dist/types/components/stateful/ProjectsPage.d.ts +1 -0
  233. package/dist/types/components/stateful/TestPage.d.ts +1 -0
  234. package/dist/types/init-docs.d.ts +1 -0
  235. package/dist/types/{src/lib → lib}/BaseSuite.d.ts +2 -0
  236. package/dist/types/{src/lib → lib}/abstractBase.d.ts +5 -7
  237. package/dist/types/{src/lib → lib}/abstractBase.test/MockGiven.d.ts +1 -1
  238. package/dist/types/lib/baseBuilder.test/baseBuilder.test.pure.d.ts +3 -0
  239. package/dist/types/{src/lib → lib}/index.d.ts +7 -7
  240. package/dist/types/{src/lib → lib}/pmProxy.d.ts +3 -3
  241. package/dist/types/run.d.ts +1 -0
  242. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  243. package/dist/types/types/features.d.ts +7 -0
  244. package/dist/types/{src/utils → utils}/api.d.ts +1 -5
  245. package/dist/types/utils/featureUtils.d.ts +6 -0
  246. package/dist/types/utils/logFiles.d.ts +7 -0
  247. package/dist/types/utils/makePrompt.d.ts +2 -0
  248. package/dist/types/{src/web.html.d.ts → web.html.d.ts} +1 -1
  249. package/docs/index.md +17 -0
  250. package/docs/testing.prompt.txt +1 -3
  251. package/docs.html +28 -10
  252. package/index.d.ts +38 -13
  253. package/index.html +59 -205
  254. package/marketing.md +166 -0
  255. package/package.json +16 -8
  256. package/scripts/compile-docs.js +24 -14
  257. package/smil30/SMIL-anim.mod.xsd +163 -0
  258. package/smil30/SMIL-control.mod.xsd +73 -0
  259. package/smil30/SMIL-layout.mod.xsd +149 -0
  260. package/smil30/SMIL-link.mod.xsd +145 -0
  261. package/smil30/SMIL-media.mod.xsd +1646 -0
  262. package/smil30/SMIL-metainformation.mod.xsd +45 -0
  263. package/smil30/SMIL-smiltext.mod.xsd +353 -0
  264. package/smil30/SMIL-state.mod.xsd +133 -0
  265. package/smil30/SMIL-struct.mod.xsd +70 -0
  266. package/smil30/SMIL-timing.mod.xsd +105 -0
  267. package/smil30/SMIL-transition.mod.xsd +229 -0
  268. package/smil30/SMIL.xsd +63 -0
  269. package/smil30/its.xsd +42 -0
  270. package/smil30/smil-attribs-1.mod.xsd +610 -0
  271. package/smil30/smil-datatypes-1.mod.xsd +72 -0
  272. package/smil30/smil-framework-1.mod.xsd +45 -0
  273. package/smil30/xml.xsd +16 -0
  274. package/src/App.scss +4 -13
  275. package/src/App.tsx +11 -25
  276. package/src/Node.ts +6 -9
  277. package/src/PM/PM_WithEslintAndTsc.ts +7 -93
  278. package/src/PM/__tests__/nodeSidecar.testeranto.ts +2 -0
  279. package/src/PM/base.ts +4 -10
  280. package/src/PM/layers/base/PM_Base.ts +0 -0
  281. package/src/PM/layers/base/components/PageOperations.testeranto.ts +0 -0
  282. package/src/PM/layers/base/components/PageOperations.ts +0 -0
  283. package/src/PM/layers/linting/components/Linter.ts +0 -0
  284. package/src/PM/layers/linting/components/TypeChecker.ts +0 -0
  285. package/src/PM/layers/main/components/SidecarManager.ts +0 -0
  286. package/src/PM/layers/main/components/TestRunner.ts +0 -0
  287. package/src/PM/main.ts +266 -140
  288. package/src/PM/node.ts +6 -1
  289. package/src/PM/nodeSidecar.ts +1 -0
  290. package/src/PM/pure.ts +15 -16
  291. package/src/PM/pureSidecar.ts +1 -1
  292. package/src/PM/types.ts +0 -0
  293. package/src/PM/web.ts +7 -2
  294. package/src/Pure.test.ts +27 -26
  295. package/src/Pure.ts +1 -9
  296. package/src/README.md +66 -0
  297. package/src/ReportServerLib.ts +10 -7
  298. package/src/Types.ts +1 -0
  299. package/src/build.ts +28 -54
  300. package/src/components/{pure/ProjectPageView.test/index.ts → SunriseAnimation.test/index.tsx} +7 -4
  301. package/src/components/SunriseAnimation.test/interface.ts +49 -0
  302. package/src/components/SunriseAnimation.test/types.ts +53 -0
  303. package/src/components/TestStatusBadge.tsx +2 -23
  304. package/src/components/pure/AppFrame.test/implementation.tsx +72 -0
  305. package/src/components/pure/AppFrame.test/index.tsx +22 -0
  306. package/src/components/pure/AppFrame.test/specification.ts +35 -0
  307. package/src/components/pure/AppFrame.test/types.ts +65 -0
  308. package/src/components/pure/AppFrame.tsx +29 -0
  309. package/src/components/pure/FeaturesReporterView.test/implementation.tsx +106 -0
  310. package/src/components/pure/FeaturesReporterView.test/index.tsx +18 -0
  311. package/src/components/pure/FeaturesReporterView.test/specification.ts +39 -0
  312. package/src/components/pure/FeaturesReporterView.test/types.ts +77 -0
  313. package/src/components/pure/FeaturesReporterView.tsx +37 -0
  314. package/src/components/pure/ModalContent.test/implementation.tsx +43 -0
  315. package/src/components/pure/ModalContent.test/index.tsx +15 -0
  316. package/src/components/pure/ModalContent.test/specification.ts +27 -0
  317. package/src/components/pure/ModalContent.test/types.ts +72 -0
  318. package/src/components/pure/ModalContent.tsx +182 -0
  319. package/src/components/pure/ProjectPageView.test/implementation.tsx +135 -36
  320. package/src/components/pure/ProjectPageView.test/index.tsx +20 -0
  321. package/src/components/pure/ProjectPageView.test/specification.ts +15 -2
  322. package/src/components/pure/ProjectPageView.test/types.ts +57 -13
  323. package/src/components/pure/ProjectPageView.tsx +155 -121
  324. package/src/components/pure/ProjectsPageView.tsx +36 -5
  325. package/src/components/pure/SettingsButton.md +1 -0
  326. package/src/components/pure/SettingsButton.tsx +66 -0
  327. package/src/components/pure/TestPageView.test/implementation.ts +194 -0
  328. package/src/components/pure/TestPageView.test/index.tsx +20 -0
  329. package/src/components/pure/TestPageView.test/specification.ts +59 -0
  330. package/src/components/pure/TestPageView.test/types.ts +92 -0
  331. package/src/components/pure/TestPageView.tsx +272 -283
  332. package/src/components/pure/ThemeCard.tsx +34 -0
  333. package/src/components/stateful/FeaturesReporter.tsx +24 -0
  334. package/src/components/stateful/ProjectPage.tsx +4 -3
  335. package/src/components/stateful/TestPage.tsx +27 -18
  336. package/src/defaultConfig.ts +1 -0
  337. package/src/esbuildConfigs/node.ts +1 -1
  338. package/src/esbuildConfigs/web.ts +2 -1
  339. package/src/lib/BaseSuite.test/mock.ts +1 -27
  340. package/src/lib/BaseSuite.test/test.ts +15 -37
  341. package/src/lib/BaseSuite.ts +19 -21
  342. package/src/lib/Sidecar.ts +2 -0
  343. package/src/lib/abstractBase.test/MockGiven.ts +1 -1
  344. package/src/lib/abstractBase.ts +72 -56
  345. package/src/lib/baseBuilder.test/baseBuilder.test.adapter.ts +0 -6
  346. package/src/lib/baseBuilder.test/baseBuilder.test.implementation.ts +3 -1
  347. package/src/lib/baseBuilder.test/baseBuilder.test.mock.ts +27 -17
  348. package/src/lib/baseBuilder.test/baseBuilder.test.pure.ts +1 -1
  349. package/src/lib/basebuilder.ts +46 -41
  350. package/src/lib/classBuilder.ts +3 -0
  351. package/src/lib/core.test/MockCore.ts +0 -23
  352. package/src/lib/core.test/core.test.adapter.ts +6 -12
  353. package/src/lib/core.test/core.test.implementation.ts +7 -10
  354. package/src/lib/core.ts +2 -0
  355. package/src/lib/index.ts +9 -8
  356. package/src/lib/pmProxy.test/adapter.ts +8 -2
  357. package/src/lib/pmProxy.test/implementation.ts +43 -10
  358. package/src/lib/pmProxy.test/mockPMBase.ts +11 -0
  359. package/src/lib/pmProxy.test/types.ts +0 -2
  360. package/src/lib/pmProxy.ts +224 -92
  361. package/src/lib/types.ts +2 -0
  362. package/src/mothership/index.ts +6 -0
  363. package/src/mothership/test.ts +53 -26
  364. package/src/style.md +2 -0
  365. package/src/style.scss +16 -0
  366. package/src/templates/frontpage.html +54 -0
  367. package/src/themes.scss +9 -9
  368. package/src/types/features.ts +38 -0
  369. package/src/utils/api.ts +59 -29
  370. package/src/utils/featureUtils.tsx +42 -0
  371. package/src/utils/logFiles.ts +26 -0
  372. package/src/utils/makePrompt.ts +148 -0
  373. package/src/web.html.ts +6 -6
  374. package/style.css +28 -9
  375. package/testeranto/App.css +444 -12
  376. package/testeranto/App.js +1318 -1053
  377. package/testeranto/bundles/node/core/chunk-JBB5E3XJ.mjs +258 -0
  378. package/testeranto/bundles/node/core/chunk-L67RWZ4W.mjs +899 -0
  379. package/testeranto/bundles/node/core/chunk-ZQRRQYS4.mjs +92 -0
  380. package/testeranto/bundles/node/core/metafile.json +5348 -99
  381. package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +307 -0
  382. package/testeranto/bundles/node/core/src/lib/baseBuilder.test/baseBuilder.test.node.mjs +44 -979
  383. package/testeranto/bundles/node/core/src/lib/classBuilder.test/classBuilder.test.mjs +423 -0
  384. package/testeranto/bundles/node/core/src/lib/core.test/core.test.mjs +505 -0
  385. package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +4804 -0
  386. package/testeranto/bundles/node/core/src/mothership/test.mjs +24588 -0
  387. package/testeranto/bundles/pure/core/chunk-KHJ35R7C.mjs +997 -0
  388. package/testeranto/bundles/pure/core/metafile.json +401 -152
  389. package/testeranto/bundles/pure/core/src/Pure.test.mjs +428 -0
  390. package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +379 -0
  391. package/testeranto/bundles/pure/core/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +34 -893
  392. package/testeranto/bundles/web/core/MPLUSRounded1c-Black-O75GP5JI.ttf +0 -0
  393. package/testeranto/bundles/web/core/MPLUSRounded1c-Bold-R524Q5BH.ttf +0 -0
  394. package/testeranto/bundles/web/core/MPLUSRounded1c-ExtraBold-C6GRMYVT.ttf +0 -0
  395. package/testeranto/bundles/web/core/MPLUSRounded1c-Light-WKN65Y2C.ttf +0 -0
  396. package/testeranto/bundles/web/core/MPLUSRounded1c-Medium-ZC4DWL7C.ttf +0 -0
  397. package/testeranto/bundles/web/core/MPLUSRounded1c-Regular-DT6EKZ3S.ttf +0 -0
  398. package/testeranto/bundles/web/core/MPLUSRounded1c-Thin-YWDNVG6M.ttf +0 -0
  399. package/testeranto/bundles/web/core/chunk-BADF3AZF.mjs +108 -0
  400. package/testeranto/bundles/web/core/chunk-BXV27S2S.mjs +6252 -0
  401. package/testeranto/bundles/web/core/chunk-EIYZKF2C.mjs +223 -0
  402. package/testeranto/bundles/web/core/chunk-FNXFUNA7.mjs +28528 -0
  403. package/testeranto/bundles/web/core/chunk-LU364HVS.mjs +3311 -0
  404. package/testeranto/bundles/web/core/chunk-QWII7WIM.mjs +2281 -0
  405. package/testeranto/bundles/web/core/chunk-VAYOSMXI.mjs +21775 -0
  406. package/testeranto/bundles/web/core/metafile.json +17547 -100
  407. package/testeranto/bundles/web/core/src/components/pure/AppFrame.test/index.css +12105 -0
  408. package/testeranto/bundles/web/core/src/components/pure/AppFrame.test/index.html +15 -0
  409. package/testeranto/bundles/web/core/src/components/pure/AppFrame.test/index.mjs +517 -0
  410. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.html +15 -0
  411. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.mjs +166 -0
  412. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.css +12105 -0
  413. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.html +15 -0
  414. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.mjs +93 -0
  415. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.css +12105 -0
  416. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.html +15 -0
  417. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +343 -0
  418. package/testeranto/bundles/web/core/src/components/pure/TestPageView.test/index.css +12105 -0
  419. package/testeranto/bundles/web/core/src/components/pure/TestPageView.test/index.html +15 -0
  420. package/testeranto/bundles/web/core/src/components/pure/TestPageView.test/index.mjs +483 -0
  421. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.html +15 -0
  422. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.mjs +394 -0
  423. package/testeranto/bundles/web/core/src/lib/baseBuilder.test/baseBuilder.test.web.html +1 -5
  424. package/testeranto/bundles/web/core/src/lib/baseBuilder.test/baseBuilder.test.web.mjs +54 -890
  425. package/testeranto/projects.json +0 -1
  426. package/testeranto/reports/core/config.json +130 -5
  427. package/testeranto/reports/core/src/Pure.test/pure/exit.log +0 -0
  428. package/testeranto/reports/core/src/Pure.test/pure/lint_errors.txt +0 -0
  429. package/testeranto/reports/core/src/Pure.test/pure/message.txt +17 -0
  430. package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +14 -0
  431. package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +106 -0
  432. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/debug.log +0 -0
  433. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/error.log +22 -0
  434. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/exit.log +1 -0
  435. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/info.log +4 -0
  436. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/lint_errors.txt +2 -0
  437. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/message.txt +17 -0
  438. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/prompt.txt +18 -0
  439. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/tests.json +57 -0
  440. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/type_errors.txt +55 -0
  441. package/testeranto/reports/core/src/components/pure/AppFrame.test/index/web/warn.log +0 -0
  442. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log +0 -0
  443. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log +56 -0
  444. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +1 -0
  445. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +2 -0
  446. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/lint_errors.txt +0 -0
  447. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/message.txt +17 -0
  448. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/prompt.txt +16 -0
  449. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/suite-0/given-basicRender/then-4/butThen/features-reporter.png +0 -0
  450. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/tests.json +76 -0
  451. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/type_errors.txt +80 -0
  452. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
  453. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/debug.log +0 -0
  454. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/error.log +0 -0
  455. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/exit.log +0 -0
  456. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/info.log +4 -0
  457. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/lint_errors.txt +0 -0
  458. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/message.txt +17 -0
  459. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/prompt.txt +15 -0
  460. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/suite-0/given-basicRender/then-2/butThen/modal-content.png +0 -0
  461. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/tests.json +42 -0
  462. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/type_errors.txt +65 -0
  463. package/testeranto/reports/core/src/components/pure/ModalContent.test/index/web/warn.log +0 -0
  464. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
  465. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +33 -0
  466. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +1 -0
  467. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +4 -0
  468. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/lint_errors.txt +2 -0
  469. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/message.txt +17 -0
  470. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/prompt.txt +16 -0
  471. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/suite-0/given-basicRender/then-6/butThen/happy-state.png +0 -0
  472. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/suite-0/given-errorHandling/then-1/butThen/error-state.png +0 -0
  473. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/tests.json +99 -0
  474. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/type_errors.txt +91 -0
  475. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
  476. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/debug.log +0 -0
  477. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/error.log +0 -0
  478. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/exit.log +1 -0
  479. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/info.log +2 -0
  480. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/lint_errors.txt +0 -0
  481. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/message.txt +17 -0
  482. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/prompt.txt +18 -0
  483. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/tests.json +69 -0
  484. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/type_errors.txt +111 -0
  485. package/testeranto/reports/core/src/components/pure/TestPageView.test/index/web/warn.log +0 -0
  486. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/exit.log +1 -0
  487. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -0
  488. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/message.txt +17 -0
  489. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +14 -0
  490. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stderr.log +0 -0
  491. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +0 -0
  492. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +31 -0
  493. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +113 -0
  494. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/exit.log +0 -0
  495. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -0
  496. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/message.txt +17 -0
  497. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +15 -0
  498. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +113 -0
  499. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/debug.log +0 -0
  500. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/error.log +1 -0
  501. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/exit.log +1 -0
  502. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/info.log +0 -0
  503. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/lint_errors.txt +0 -0
  504. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/message.txt +17 -0
  505. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/prompt.txt +15 -0
  506. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/tests.json +31 -0
  507. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/type_errors.txt +113 -0
  508. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/warn.log +0 -0
  509. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/exit.log +1 -0
  510. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.txt +0 -2
  511. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/message.txt +16 -1
  512. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +4 -13
  513. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/stderr.log +0 -0
  514. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/stdout.log +2 -0
  515. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/suite-0/given-testInitialization/then-1/butThen/artifact_test.txt +1 -0
  516. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/tests.json +3 -1
  517. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +19 -28
  518. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/exit.log +0 -0
  519. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.txt +0 -2
  520. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/message.txt +16 -1
  521. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +2 -11
  522. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +19 -28
  523. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/debug.log +0 -0
  524. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/error.log +1 -0
  525. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/exit.log +1 -0
  526. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/info.log +0 -0
  527. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/lint_errors.txt +0 -2
  528. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/message.txt +16 -1
  529. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/prompt.txt +4 -13
  530. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/suite-0/given-testInitialization/then-1/butThen/artifact_test.txt +1 -0
  531. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +3 -1
  532. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +18 -27
  533. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/warn.log +0 -0
  534. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/exit.log +1 -0
  535. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/lint_errors.txt +0 -0
  536. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/message.txt +17 -0
  537. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/prompt.txt +17 -0
  538. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/stderr.log +0 -0
  539. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/stdout.log +619 -0
  540. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/tests.json +165 -0
  541. package/testeranto/reports/core/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +140 -0
  542. package/testeranto/reports/core/src/lib/core.test/core.test/node/exit.log +1 -0
  543. package/testeranto/reports/core/src/lib/core.test/core.test/node/lint_errors.txt +21 -0
  544. package/testeranto/reports/core/src/lib/core.test/core.test/node/message.txt +17 -0
  545. package/testeranto/reports/core/src/lib/core.test/core.test/node/prompt.txt +19 -0
  546. package/testeranto/reports/core/src/lib/core.test/core.test/node/stderr.log +0 -0
  547. package/testeranto/reports/core/src/lib/core.test/core.test/node/stdout.log +0 -0
  548. package/testeranto/reports/core/src/lib/core.test/core.test/node/type_errors.txt +64 -0
  549. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
  550. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +23 -0
  551. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
  552. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +17 -0
  553. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +0 -0
  554. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +0 -0
  555. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/tests.json +162 -0
  556. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +78 -0
  557. package/testeranto/reports/core/src/mothership/test/node/exit.log +1 -0
  558. package/testeranto/reports/core/src/mothership/test/node/lint_errors.txt +0 -0
  559. package/testeranto/reports/core/src/mothership/test/node/message.txt +17 -0
  560. package/testeranto/reports/core/src/mothership/test/node/prompt.txt +14 -0
  561. package/testeranto/reports/core/src/mothership/test/node/stderr.log +27 -0
  562. package/testeranto/reports/core/src/mothership/test/node/stdout.log +8 -0
  563. package/testeranto/reports/core/src/mothership/test/node/tests.json +36 -0
  564. package/testeranto/reports/{staticSite/src/ReportServer.test.ts/index → core/src/mothership/test}/node/type_errors.txt +17 -31
  565. package/testeranto/reports/core/summary.json +98 -7
  566. package/testeranto.config.ts +66 -36
  567. package/tsc.log +392 -260
  568. package/tsconfig.common.json +4 -2
  569. package/tsconfig.json +9 -7
  570. package/tsconfig.module.json +3 -2
  571. package/tsconfig.types.json +3 -1
  572. package/videos/download-smil-xsd.sh +29 -0
  573. package/videos/project0/index.md +72 -0
  574. package/videos/project0/narration.json +7 -0
  575. package/videos/project0/narration.ssml +58 -0
  576. package/videos/project0/package.json +21 -0
  577. package/videos/project0/presentation.smil +25 -0
  578. package/videos/project0/smil30/SMIL-anim.mod.xsd +163 -0
  579. package/videos/project0/smil30/SMIL-anim.mod.xsd.1 +163 -0
  580. package/videos/project0/smil30/SMIL-anim.mod.xsd.2 +163 -0
  581. package/videos/project0/smil30/SMIL-control.mod.xsd +73 -0
  582. package/videos/project0/smil30/SMIL-control.mod.xsd.1 +73 -0
  583. package/videos/project0/smil30/SMIL-control.mod.xsd.2 +73 -0
  584. package/videos/project0/smil30/SMIL-layout.mod.xsd +149 -0
  585. package/videos/project0/smil30/SMIL-layout.mod.xsd.1 +149 -0
  586. package/videos/project0/smil30/SMIL-layout.mod.xsd.2 +149 -0
  587. package/videos/project0/smil30/SMIL-link.mod.xsd +145 -0
  588. package/videos/project0/smil30/SMIL-link.mod.xsd.1 +145 -0
  589. package/videos/project0/smil30/SMIL-link.mod.xsd.2 +145 -0
  590. package/videos/project0/smil30/SMIL-media.mod.xsd +1646 -0
  591. package/videos/project0/smil30/SMIL-media.mod.xsd.1 +1646 -0
  592. package/videos/project0/smil30/SMIL-media.mod.xsd.2 +1646 -0
  593. package/videos/project0/smil30/SMIL-metainformation.mod.xsd +45 -0
  594. package/videos/project0/smil30/SMIL-metainformation.mod.xsd.1 +45 -0
  595. package/videos/project0/smil30/SMIL-metainformation.mod.xsd.2 +45 -0
  596. package/videos/project0/smil30/SMIL-smiltext.mod.xsd +353 -0
  597. package/videos/project0/smil30/SMIL-smiltext.mod.xsd.1 +353 -0
  598. package/videos/project0/smil30/SMIL-smiltext.mod.xsd.2 +353 -0
  599. package/videos/project0/smil30/SMIL-state.mod.xsd +133 -0
  600. package/videos/project0/smil30/SMIL-state.mod.xsd.1 +133 -0
  601. package/videos/project0/smil30/SMIL-state.mod.xsd.2 +133 -0
  602. package/videos/project0/smil30/SMIL-struct.mod.xsd +70 -0
  603. package/videos/project0/smil30/SMIL-struct.mod.xsd.1 +70 -0
  604. package/videos/project0/smil30/SMIL-struct.mod.xsd.2 +70 -0
  605. package/videos/project0/smil30/SMIL-timing.mod.xsd +105 -0
  606. package/videos/project0/smil30/SMIL-timing.mod.xsd.1 +105 -0
  607. package/videos/project0/smil30/SMIL-timing.mod.xsd.2 +105 -0
  608. package/videos/project0/smil30/SMIL-transition.mod.xsd +229 -0
  609. package/videos/project0/smil30/SMIL-transition.mod.xsd.1 +229 -0
  610. package/videos/project0/smil30/SMIL-transition.mod.xsd.2 +229 -0
  611. package/videos/project0/smil30/SMIL.xsd +63 -0
  612. package/videos/project0/smil30/SMIL.xsd.1 +63 -0
  613. package/videos/project0/smil30/SMIL.xsd.2 +63 -0
  614. package/videos/project0/smil30/its.xsd +42 -0
  615. package/videos/project0/smil30/its.xsd.1 +42 -0
  616. package/videos/project0/smil30/its.xsd.2 +42 -0
  617. package/videos/project0/smil30/smil-attribs-1.mod.xsd +610 -0
  618. package/videos/project0/smil30/smil-attribs-1.mod.xsd.1 +610 -0
  619. package/videos/project0/smil30/smil-attribs-1.mod.xsd.2 +610 -0
  620. package/videos/project0/smil30/smil-datatypes-1.mod.xsd +72 -0
  621. package/videos/project0/smil30/smil-datatypes-1.mod.xsd.1 +72 -0
  622. package/videos/project0/smil30/smil-datatypes-1.mod.xsd.2 +72 -0
  623. package/videos/project0/smil30/smil-framework-1.mod.xsd +45 -0
  624. package/videos/project0/smil30/smil-framework-1.mod.xsd.1 +45 -0
  625. package/videos/project0/smil30/smil-framework-1.mod.xsd.2 +45 -0
  626. package/videos/project0/smil30/smil-profile-model-1.mod.xsd +1331 -0
  627. package/videos/project0/smil30/smil-profile-model-1.mod.xsd.1 +1331 -0
  628. package/videos/project0/smil30/smil-qname-1.mod.xsd +121 -0
  629. package/videos/project0/smil30/smil-qname-1.mod.xsd.1 +121 -0
  630. package/videos/project0/smil30/xml.xsd +16 -0
  631. package/videos/project0/smil30/xml.xsd.1 +16 -0
  632. package/videos/project0/smil30/xml.xsd.2 +16 -0
  633. package/videos/project0/smil30.xsd +137 -0
  634. package/videos/project0/src/audio/metadata.json +5 -0
  635. package/videos/project0/src/audio/narration.mp3 +0 -0
  636. package/videos/project0/src/motion-canvas.d.ts +1 -0
  637. package/videos/project0/src/project.meta +31 -0
  638. package/videos/project0/src/project.ts +13 -0
  639. package/videos/project0/src/scenes/example.meta +5 -0
  640. package/videos/project0/src/scenes/scene1.meta +3 -0
  641. package/videos/project0/src/scenes/scene1.tsx +129 -0
  642. package/videos/project0/src/scenes/scene2.tsx +132 -0
  643. package/videos/project0/src/scenes/scene3.meta +26 -0
  644. package/videos/project0/src/scenes/scene3.tsx +188 -0
  645. package/videos/project0/tsconfig.json +4 -0
  646. package/videos/project0/vite.config.ts +10 -0
  647. package/videos/trash/output/project.mp4 +0 -0
  648. package/videos/trash/text.mp4 +0 -0
  649. package/videos/trash/video/project.tsx +549 -0
  650. package/videos/trash/video/render.ts +15 -0
  651. package/videos/trash/vite.config.ts +10 -0
  652. package/videos/tts.js +109 -0
  653. package/dist/common/src/components/pure/ProjectPageView.test/adapter.js +0 -20
  654. package/dist/common/src/lib/dailyAnimation.js +0 -130
  655. package/dist/module/src/Footer.js +0 -5
  656. package/dist/module/src/ProjectPage.js +0 -319
  657. package/dist/module/src/ProjectsPage.js +0 -1
  658. package/dist/module/src/SettingsButton.js +0 -157
  659. package/dist/module/src/TestPage.js +0 -271
  660. package/dist/module/src/TestReport.js +0 -368
  661. package/dist/module/src/components/pure/ProjectPageView.test/adapter.js +0 -17
  662. package/dist/module/src/lib/dailyAnimation.js +0 -130
  663. package/dist/types/src/ReportServerLib.d.ts +0 -2
  664. package/dist/types/src/components/pure/ProjectPageView.d.ts +0 -14
  665. package/dist/types/src/components/pure/ProjectPageView.test/adapter.d.ts +0 -3
  666. package/dist/types/src/components/pure/ProjectPageView.test/types.d.ts +0 -39
  667. package/dist/types/src/lib/baseBuilder.test/baseBuilder.test.pure.d.ts +0 -3
  668. package/dist/types/testeranto.config.d.ts +0 -3
  669. package/docs/testing.ai.txt +0 -106
  670. package/src/Footer.tsx +0 -8
  671. package/src/Project.scss +0 -1
  672. package/src/ProjectPage.tsx +0 -459
  673. package/src/ProjectsPage.tsx +0 -1
  674. package/src/ReportApp.scss +0 -1
  675. package/src/SettingsButton.tsx +0 -268
  676. package/src/TestPage.tsx +0 -476
  677. package/src/TestReport.scss +0 -24
  678. package/src/TestReport.tsx +0 -411
  679. package/src/components/pure/ProjectPageView.test/adapter.ts +0 -21
  680. package/src/lib/dailyAnimation.ts +0 -147
  681. package/testeranto/bundles/node/allTests/metafile.json +0 -486
  682. package/testeranto/bundles/node/allTests/src/lib/baseBuilder.test/baseBuilder.test.node.mjs +0 -1182
  683. package/testeranto/bundles/node/staticSite/metafile.json +0 -593
  684. package/testeranto/bundles/node/staticSite/src/ReportServer.test.ts/index.mjs +0 -1594
  685. package/testeranto/bundles/pure/allTests/metafile.json +0 -626
  686. package/testeranto/bundles/pure/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +0 -1094
  687. package/testeranto/bundles/pure/staticSite/metafile.json +0 -8
  688. package/testeranto/bundles/web/allTests/metafile.json +0 -780
  689. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.html +0 -19
  690. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs +0 -1092
  691. package/testeranto/bundles/web/staticSite/metafile.json +0 -8
  692. package/testeranto/reports/allTests/config.json +0 -40
  693. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/bdd_errors.txt +0 -1
  694. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.txt +0 -2
  695. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/logs.txt +0 -33
  696. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/message.txt +0 -2
  697. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +0 -26
  698. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/suite-0/given-testInitialization/then-0/butThen/hello.txt +0 -1
  699. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/tests.json +0 -69
  700. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +0 -74
  701. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.txt +0 -2
  702. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/message.txt +0 -2
  703. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +0 -26
  704. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +0 -74
  705. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/bdd_errors.txt +0 -1
  706. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/lint_errors.txt +0 -2
  707. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt +0 -63
  708. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/message.txt +0 -2
  709. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/prompt.txt +0 -26
  710. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/suite-0/given-testInitialization/then-0/butThen/hello.txt +0 -1
  711. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +0 -69
  712. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +0 -74
  713. package/testeranto/reports/allTests/summary.json +0 -23
  714. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/bdd_errors.txt +0 -1
  715. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/logs.txt +0 -32
  716. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/bdd_errors.txt +0 -1
  717. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt +0 -61
  718. package/testeranto/reports/staticSite/config.json +0 -24
  719. package/testeranto/reports/staticSite/src/ReportServer.test.ts/index/node/lint_errors.txt +0 -5
  720. package/testeranto/reports/staticSite/src/ReportServer.test.ts/index/node/logs.txt +0 -44
  721. package/testeranto/reports/staticSite/src/ReportServer.test.ts/index/node/message.txt +0 -2
  722. package/testeranto/reports/staticSite/src/ReportServer.test.ts/index/node/prompt.txt +0 -23
  723. package/testeranto/reports/staticSite/summary.json +0 -9
  724. package/testeranto/reportsnode_build_errors +0 -17
  725. /package/dist/common/src/{NavBar.js → components/pure/NavBar.js} +0 -0
  726. /package/dist/{types/src/ReportServer.d.ts → module/src/components/SunriseAnimation.test/types.js} +0 -0
  727. /package/dist/{types/src/build.d.ts → module/src/components/pure/FeaturesReporterView.test/types.js} +0 -0
  728. /package/dist/module/src/{NavBar.js → components/pure/NavBar.js} +0 -0
  729. /package/dist/types/{src/CoreTypes.d.ts → CoreTypes.d.ts} +0 -0
  730. /package/dist/types/{src/Init.d.ts → Init.d.ts} +0 -0
  731. /package/dist/types/{src/Node.d.ts → Node.d.ts} +0 -0
  732. /package/dist/types/{src/NodeSidecar.d.ts → NodeSidecar.d.ts} +0 -0
  733. /package/dist/types/{src/PM → PM}/PM_WithEslintAndTsc.d.ts +0 -0
  734. /package/dist/types/{src/PM → PM}/__tests__/nodeSidecar.testeranto.d.ts +0 -0
  735. /package/dist/types/{src/PM → PM}/__tests__/pureSidecar.testeranto.d.ts +0 -0
  736. /package/dist/types/{src/PM → PM}/__tests__/webSidecar.testeranto.d.ts +0 -0
  737. /package/dist/types/{src/PM → PM}/index.d.ts +0 -0
  738. /package/dist/types/{src/components/SunriseAnimation.test/implementation.d.ts → PM/layers/base/PM_Base.d.ts} +0 -0
  739. /package/dist/types/{src/components/SunriseAnimation.test/index.d.ts → PM/layers/base/components/PageOperations.d.ts} +0 -0
  740. /package/dist/types/{src/components/SunriseAnimation.test/interface.d.ts → PM/layers/base/components/PageOperations.testeranto.d.ts} +0 -0
  741. /package/dist/types/{src/components/SunriseAnimation.test/specification.d.ts → PM/layers/linting/components/Linter.d.ts} +0 -0
  742. /package/dist/types/{src/lib/dailyAnimation.d.ts → PM/layers/linting/components/TypeChecker.d.ts} +0 -0
  743. /package/dist/types/{src/PM → PM}/nodeSidecar.d.ts +0 -0
  744. /package/dist/types/{src/PM → PM}/pureSidecar.d.ts +0 -0
  745. /package/dist/types/{src/PM → PM}/sidecar.d.ts +0 -0
  746. /package/dist/types/{src/PM → PM}/webSidecar.d.ts +0 -0
  747. /package/dist/types/{src/Pure.d.ts → Pure.d.ts} +0 -0
  748. /package/dist/types/{src/Pure.test.d.ts → Pure.test.d.ts} +0 -0
  749. /package/dist/types/{src/PureSidecar.d.ts → PureSidecar.d.ts} +0 -0
  750. /package/dist/types/{src/init-docs.d.ts → ReportServer.d.ts} +0 -0
  751. /package/dist/types/{src/ReportServer.test.ts → ReportServer.test.ts}/index.d.ts +0 -0
  752. /package/dist/types/{src/Web.d.ts → Web.d.ts} +0 -0
  753. /package/dist/types/{src/WebSidecar.d.ts → WebSidecar.d.ts} +0 -0
  754. /package/dist/types/{src/run.d.ts → build.d.ts} +0 -0
  755. /package/dist/types/{src/components → components}/TestStatusBadge.d.ts +0 -0
  756. /package/dist/types/{src/components/pure/ProjectPageView.test → components/pure/AppFrame.test}/specification.d.ts +0 -0
  757. /package/dist/types/{src/components/pure/ProjectPageView.test → components/pure/FeaturesReporterView.test}/implementation.d.ts +0 -0
  758. /package/dist/types/{src → components/pure}/NavBar.d.ts +0 -0
  759. /package/dist/types/{src/defaultConfig.d.ts → defaultConfig.d.ts} +0 -0
  760. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/consoleDetectorPlugin.d.ts +0 -0
  761. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/eslint-formatter-testeranto.d.ts +0 -0
  762. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/featuresPlugin.d.ts +0 -0
  763. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/index.d.ts +0 -0
  764. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/inputFilesPlugin.d.ts +0 -0
  765. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/nativeImportDetectorPlugin.d.ts +0 -0
  766. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/node.d.ts +0 -0
  767. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/pure.d.ts +0 -0
  768. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/rebuildPlugin.d.ts +0 -0
  769. /package/dist/types/{src/esbuildConfigs → esbuildConfigs}/web.d.ts +0 -0
  770. /package/dist/types/{src/lib → lib}/BaseSuite.test/mock.d.ts +0 -0
  771. /package/dist/types/{src/lib → lib}/BaseSuite.test/node.test.d.ts +0 -0
  772. /package/dist/types/{src/lib → lib}/BaseSuite.test/pure.test.d.ts +0 -0
  773. /package/dist/types/{src/lib → lib}/BaseSuite.test/test.d.ts +0 -0
  774. /package/dist/types/{src/lib → lib}/BaseSuite.test/web.test.d.ts +0 -0
  775. /package/dist/types/{src/lib → lib}/Sidecar.d.ts +0 -0
  776. /package/dist/types/{src/lib → lib}/abstractBase.test/MockThen.d.ts +0 -0
  777. /package/dist/types/{src/lib → lib}/abstractBase.test/MockWhen.d.ts +0 -0
  778. /package/dist/types/{src/lib → lib}/abstractBase.test/adapter.d.ts +0 -0
  779. /package/dist/types/{src/lib → lib}/abstractBase.test/implementation.d.ts +0 -0
  780. /package/dist/types/{src/lib → lib}/abstractBase.test/index.d.ts +0 -0
  781. /package/dist/types/{src/lib → lib}/abstractBase.test/specification.d.ts +0 -0
  782. /package/dist/types/{src/lib → lib}/abstractBase.test/types.d.ts +0 -0
  783. /package/dist/types/{src/lib → lib}/baseBuilder.test/baseBuilder.test.adapter.d.ts +0 -0
  784. /package/dist/types/{src/lib → lib}/baseBuilder.test/baseBuilder.test.implementation.d.ts +0 -0
  785. /package/dist/types/{src/lib → lib}/baseBuilder.test/baseBuilder.test.mock.d.ts +0 -0
  786. /package/dist/types/{src/lib → lib}/baseBuilder.test/baseBuilder.test.node.d.ts +0 -0
  787. /package/dist/types/{src/lib → lib}/baseBuilder.test/baseBuilder.test.specification.d.ts +0 -0
  788. /package/dist/types/{src/lib → lib}/baseBuilder.test/baseBuilder.test.types.d.ts +0 -0
  789. /package/dist/types/{src/lib → lib}/baseBuilder.test/baseBuilder.test.web.d.ts +0 -0
  790. /package/dist/types/{src/lib → lib}/basebuilder.d.ts +0 -0
  791. /package/dist/types/{src/lib → lib}/classBuilder.d.ts +0 -0
  792. /package/dist/types/{src/lib → lib}/classBuilder.test/classBuilder.test.adapter.d.ts +0 -0
  793. /package/dist/types/{src/lib → lib}/classBuilder.test/classBuilder.test.d.ts +0 -0
  794. /package/dist/types/{src/lib → lib}/classBuilder.test/classBuilder.test.implementation.d.ts +0 -0
  795. /package/dist/types/{src/lib → lib}/classBuilder.test/classBuilder.test.specification.d.ts +0 -0
  796. /package/dist/types/{src/lib → lib}/classBuilder.test/classBuilder.test.types.d.ts +0 -0
  797. /package/dist/types/{src/lib → lib}/classBuilder.test/mock.d.ts +0 -0
  798. /package/dist/types/{src/lib → lib}/core.d.ts +0 -0
  799. /package/dist/types/{src/lib → lib}/core.test/MockCore.d.ts +0 -0
  800. /package/dist/types/{src/lib → lib}/core.test/core.test.adapter.d.ts +0 -0
  801. /package/dist/types/{src/lib → lib}/core.test/core.test.d.ts +0 -0
  802. /package/dist/types/{src/lib → lib}/core.test/core.test.implementation.d.ts +0 -0
  803. /package/dist/types/{src/lib → lib}/core.test/core.test.specification.d.ts +0 -0
  804. /package/dist/types/{src/lib → lib}/core.test/core.test.types.d.ts +0 -0
  805. /package/dist/types/{src/lib → lib}/mocks.test.d.ts +0 -0
  806. /package/dist/types/{src/lib → lib}/pmProxy.test/adapter.d.ts +0 -0
  807. /package/dist/types/{src/lib → lib}/pmProxy.test/implementation.d.ts +0 -0
  808. /package/dist/types/{src/lib → lib}/pmProxy.test/index.d.ts +0 -0
  809. /package/dist/types/{src/lib → lib}/pmProxy.test/mockPM.d.ts +0 -0
  810. /package/dist/types/{src/lib → lib}/pmProxy.test/mockPMBase.d.ts +0 -0
  811. /package/dist/types/{src/lib → lib}/pmProxy.test/specification.d.ts +0 -0
  812. /package/dist/types/{src/lib → lib}/pmProxy.test/types.d.ts +0 -0
  813. /package/dist/types/{src/lib → lib}/types.d.ts +0 -0
  814. /package/dist/types/{src/mothership → mothership}/index.d.ts +0 -0
  815. /package/dist/types/{src/mothership → mothership}/test.d.ts +0 -0
  816. /package/dist/types/{src/utils → utils}/buildTemplates.d.ts +0 -0
  817. /package/dist/types/{src/utils → utils}/queue.d.ts +0 -0
  818. /package/dist/types/{src/utils.d.ts → utils.d.ts} +0 -0
  819. /package/src/{NavBar.tsx → components/pure/NavBar.tsx} +0 -0
@@ -472,7 +472,7 @@
472
472
  }
473
473
  }
474
474
  }
475
- var ReactElement = function(type, key, ref, self, source, owner, props) {
475
+ var ReactElement2 = function(type, key, ref, self, source, owner, props) {
476
476
  var element = {
477
477
  // This tag allows us to uniquely identify this as a React Element
478
478
  $$typeof: REACT_ELEMENT_TYPE,
@@ -573,10 +573,10 @@
573
573
  }
574
574
  }
575
575
  }
576
- return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
576
+ return ReactElement2(type, key, ref, self, source, ReactCurrentOwner.current, props);
577
577
  }
578
578
  function cloneAndReplaceKey(oldElement, newKey) {
579
- var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
579
+ var newElement = ReactElement2(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
580
580
  return newElement;
581
581
  }
582
582
  function cloneElement8(element, config, children) {
@@ -625,7 +625,7 @@
625
625
  }
626
626
  props.children = childArray;
627
627
  }
628
- return ReactElement(element.type, key, ref, self, source, owner, props);
628
+ return ReactElement2(element.type, key, ref, self, source, owner, props);
629
629
  }
630
630
  function isValidElement2(object) {
631
631
  return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
@@ -972,7 +972,7 @@
972
972
  }
973
973
  return lazyType;
974
974
  }
975
- function forwardRef55(render) {
975
+ function forwardRef57(render) {
976
976
  {
977
977
  if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
978
978
  error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).");
@@ -1085,7 +1085,7 @@
1085
1085
  }
1086
1086
  return dispatcher.useContext(Context2);
1087
1087
  }
1088
- function useState23(initialState) {
1088
+ function useState24(initialState) {
1089
1089
  var dispatcher = resolveDispatcher();
1090
1090
  return dispatcher.useState(initialState);
1091
1091
  }
@@ -1097,7 +1097,7 @@
1097
1097
  var dispatcher = resolveDispatcher();
1098
1098
  return dispatcher.useRef(initialValue);
1099
1099
  }
1100
- function useEffect28(create, deps) {
1100
+ function useEffect29(create, deps) {
1101
1101
  var dispatcher = resolveDispatcher();
1102
1102
  return dispatcher.useEffect(create, deps);
1103
1103
  }
@@ -1869,7 +1869,7 @@
1869
1869
  exports.createElement = createElement$1;
1870
1870
  exports.createFactory = createFactory;
1871
1871
  exports.createRef = createRef;
1872
- exports.forwardRef = forwardRef55;
1872
+ exports.forwardRef = forwardRef57;
1873
1873
  exports.isValidElement = isValidElement2;
1874
1874
  exports.lazy = lazy;
1875
1875
  exports.memo = memo2;
@@ -1879,7 +1879,7 @@
1879
1879
  exports.useContext = useContext16;
1880
1880
  exports.useDebugValue = useDebugValue;
1881
1881
  exports.useDeferredValue = useDeferredValue;
1882
- exports.useEffect = useEffect28;
1882
+ exports.useEffect = useEffect29;
1883
1883
  exports.useId = useId2;
1884
1884
  exports.useImperativeHandle = useImperativeHandle2;
1885
1885
  exports.useInsertionEffect = useInsertionEffect;
@@ -1887,7 +1887,7 @@
1887
1887
  exports.useMemo = useMemo15;
1888
1888
  exports.useReducer = useReducer2;
1889
1889
  exports.useRef = useRef22;
1890
- exports.useState = useState23;
1890
+ exports.useState = useState24;
1891
1891
  exports.useSyncExternalStore = useSyncExternalStore;
1892
1892
  exports.useTransition = useTransition2;
1893
1893
  exports.version = ReactVersion;
@@ -2383,9 +2383,9 @@
2383
2383
  if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === "function") {
2384
2384
  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
2385
2385
  }
2386
- var React90 = require_react();
2386
+ var React97 = require_react();
2387
2387
  var Scheduler = require_scheduler();
2388
- var ReactSharedInternals = React90.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
2388
+ var ReactSharedInternals = React97.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
2389
2389
  var suppressWarning = false;
2390
2390
  function setSuppressWarning(newSuppressWarning) {
2391
2391
  {
@@ -3990,7 +3990,7 @@
3990
3990
  {
3991
3991
  if (props.value == null) {
3992
3992
  if (typeof props.children === "object" && props.children !== null) {
3993
- React90.Children.forEach(props.children, function(child) {
3993
+ React97.Children.forEach(props.children, function(child) {
3994
3994
  if (child == null) {
3995
3995
  return;
3996
3996
  }
@@ -12437,7 +12437,7 @@
12437
12437
  }
12438
12438
  }
12439
12439
  var fakeInternalInstance = {};
12440
- var emptyRefsObject = new React90.Component().refs;
12440
+ var emptyRefsObject = new React97.Component().refs;
12441
12441
  var didWarnAboutStateAssignmentForComponent;
12442
12442
  var didWarnAboutUninitializedState;
12443
12443
  var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;
@@ -23514,7 +23514,7 @@
23514
23514
  (function() {
23515
23515
  "use strict";
23516
23516
  var hasOwn = {}.hasOwnProperty;
23517
- function classNames44() {
23517
+ function classNames46() {
23518
23518
  var classes = "";
23519
23519
  for (var i = 0; i < arguments.length; i++) {
23520
23520
  var arg = arguments[i];
@@ -23532,7 +23532,7 @@
23532
23532
  return "";
23533
23533
  }
23534
23534
  if (Array.isArray(arg)) {
23535
- return classNames44.apply(null, arg);
23535
+ return classNames46.apply(null, arg);
23536
23536
  }
23537
23537
  if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
23538
23538
  return arg.toString();
@@ -23555,14 +23555,14 @@
23555
23555
  return value + newClass;
23556
23556
  }
23557
23557
  if (typeof module !== "undefined" && module.exports) {
23558
- classNames44.default = classNames44;
23559
- module.exports = classNames44;
23558
+ classNames46.default = classNames46;
23559
+ module.exports = classNames46;
23560
23560
  } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
23561
23561
  define("classnames", [], function() {
23562
- return classNames44;
23562
+ return classNames46;
23563
23563
  });
23564
23564
  } else {
23565
- window.classNames = classNames44;
23565
+ window.classNames = classNames46;
23566
23566
  }
23567
23567
  })();
23568
23568
  }
@@ -23609,7 +23609,7 @@
23609
23609
  if (true) {
23610
23610
  (function() {
23611
23611
  "use strict";
23612
- var React90 = require_react();
23612
+ var React97 = require_react();
23613
23613
  var REACT_ELEMENT_TYPE = Symbol.for("react.element");
23614
23614
  var REACT_PORTAL_TYPE = Symbol.for("react.portal");
23615
23615
  var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
@@ -23635,7 +23635,7 @@
23635
23635
  }
23636
23636
  return null;
23637
23637
  }
23638
- var ReactSharedInternals = React90.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
23638
+ var ReactSharedInternals = React97.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
23639
23639
  function error(format) {
23640
23640
  {
23641
23641
  {
@@ -24160,7 +24160,7 @@
24160
24160
  });
24161
24161
  }
24162
24162
  }
24163
- var ReactElement = function(type, key, ref, self, source, owner, props) {
24163
+ var ReactElement2 = function(type, key, ref, self, source, owner, props) {
24164
24164
  var element = {
24165
24165
  // This tag allows us to uniquely identify this as a React Element
24166
24166
  $$typeof: REACT_ELEMENT_TYPE,
@@ -24243,7 +24243,7 @@
24243
24243
  defineRefPropWarningGetter(props, displayName);
24244
24244
  }
24245
24245
  }
24246
- return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
24246
+ return ReactElement2(type, key, ref, self, source, ReactCurrentOwner.current, props);
24247
24247
  }
24248
24248
  }
24249
24249
  var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
@@ -25317,10 +25317,10 @@
25317
25317
  });
25318
25318
 
25319
25319
  // src/App.tsx
25320
- var import_react66 = __toESM(require_react(), 1);
25320
+ var import_react71 = __toESM(require_react(), 1);
25321
25321
  var import_client = __toESM(require_client(), 1);
25322
25322
 
25323
- // node_modules/react-router/dist/development/chunk-C37GKA54.mjs
25323
+ // node_modules/react-router/dist/development/chunk-ZYFC6VSF.mjs
25324
25324
  var React = __toESM(require_react(), 1);
25325
25325
  var React2 = __toESM(require_react(), 1);
25326
25326
  var React3 = __toESM(require_react(), 1);
@@ -25588,6 +25588,7 @@
25588
25588
  pathname,
25589
25589
  params,
25590
25590
  data: loaderData[route.id],
25591
+ loaderData: loaderData[route.id],
25591
25592
  handle: route.handle
25592
25593
  };
25593
25594
  }
@@ -27075,7 +27076,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
27075
27076
  return /* @__PURE__ */ React8.createElement(React8.Fragment, null, dataHrefs.map((href) => /* @__PURE__ */ React8.createElement("link", { key: href, rel: "prefetch", as: "fetch", href, ...linkProps })), moduleHrefs.map((href) => /* @__PURE__ */ React8.createElement("link", { key: href, rel: "modulepreload", href, ...linkProps })), keyedPrefetchLinks.map(({ key, link }) => (
27076
27077
  // these don't spread `linkProps` because they are full link descriptors
27077
27078
  // already with their own props
27078
- /* @__PURE__ */ React8.createElement("link", { key, ...link })
27079
+ /* @__PURE__ */ React8.createElement("link", { key, nonce: linkProps.nonce, ...link })
27079
27080
  )));
27080
27081
  }
27081
27082
  function mergeRefs(...refs) {
@@ -27093,7 +27094,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
27093
27094
  try {
27094
27095
  if (isBrowser) {
27095
27096
  window.__reactRouterVersion = // @ts-expect-error
27096
- "7.7.1";
27097
+ "7.8.0";
27097
27098
  }
27098
27099
  } catch (e) {
27099
27100
  }
@@ -27684,6 +27685,85 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
27684
27685
  // src/components/stateful/TestPage.tsx
27685
27686
  var import_react59 = __toESM(require_react(), 1);
27686
27687
 
27688
+ // src/utils/logFiles.ts
27689
+ var NODE_LOG_FILES = ["stdout.log", "stderr.log", "exit.log"];
27690
+ var WEB_LOG_FILES = [
27691
+ "info.log",
27692
+ "debug.log",
27693
+ "error.log",
27694
+ "warn.log",
27695
+ "exit.log"
27696
+ ];
27697
+ var PURE_LOG_FILES = ["exit.log"];
27698
+ var getLogFilesForRuntime = (runtime) => {
27699
+ switch (runtime) {
27700
+ case "node":
27701
+ return NODE_LOG_FILES;
27702
+ case "web":
27703
+ return WEB_LOG_FILES;
27704
+ case "pure":
27705
+ return PURE_LOG_FILES;
27706
+ default:
27707
+ throw new Error(`Unknown runtime: ${runtime}`);
27708
+ }
27709
+ };
27710
+
27711
+ // src/utils/api.ts
27712
+ var fetchTestData = async (projectName, filepath, runTime) => {
27713
+ const basePath = `reports/${projectName}/${filepath.split(".").slice(0, -1).join(".")}/${runTime}`;
27714
+ try {
27715
+ const logFiles = getLogFilesForRuntime(runTime);
27716
+ console.log("mark2", logFiles);
27717
+ const [testRes, ...logRes] = await Promise.all([
27718
+ fetch(`${basePath}/tests.json`),
27719
+ ...logFiles.map((f) => fetch(`${basePath}/${f}`)),
27720
+ fetch(`${basePath}/type_errors.txt`),
27721
+ fetch(`${basePath}/lint_errors.txt`)
27722
+ ]);
27723
+ const logs = {
27724
+ "tests.json": await (await fetch(`${basePath}/tests.json`)).json(),
27725
+ "type_errors.txt": await (await fetch(`${basePath}/type_errors.txt`)).text(),
27726
+ "lint_errors.txt": await (await fetch(`${basePath}/lint_errors.txt`)).text(),
27727
+ "exit.log": await (await fetch(`${basePath}/exit.log`)).text()
27728
+ };
27729
+ if (runTime === "node") {
27730
+ logs["stdout.log"] = await (await fetch(`${basePath}/stdout.log`)).text();
27731
+ logs["stderr.log"] = await (await fetch(`${basePath}/stderr.log`)).text();
27732
+ }
27733
+ if (runTime === "web") {
27734
+ logs["info.log"] = await (await fetch(`${basePath}/info.log`)).text();
27735
+ logs["error.log"] = await (await fetch(`${basePath}/error.log`)).text();
27736
+ logs["debug.log"] = await (await fetch(`${basePath}/debug.log`)).text();
27737
+ logs["warn.log"] = await (await fetch(`${basePath}/warn.log`)).text();
27738
+ }
27739
+ if (!testRes.ok) {
27740
+ return {
27741
+ // testData: null,
27742
+ logs,
27743
+ // typeErrors: await logRes[logFiles.length].text(),
27744
+ // lintErrors: await logRes[logFiles.length + 1].text(),
27745
+ error: "Tests did not complete successfully. Please check the build and runtime logs for errors."
27746
+ };
27747
+ }
27748
+ console.log("mark1", logs);
27749
+ return {
27750
+ // testData: await testRes.json(),
27751
+ logs,
27752
+ // typeErrors: await logRes[logFiles.length].text(),
27753
+ // lintErrors: await logRes[logFiles.length + 1].text(),
27754
+ error: null
27755
+ };
27756
+ } catch (err) {
27757
+ return {
27758
+ // testData: null,
27759
+ logs: {},
27760
+ // typeErrors: "",
27761
+ // lintErrors: "",
27762
+ error: `Failed to load test data: ${err instanceof Error ? err.message : String(err)}`
27763
+ };
27764
+ }
27765
+ };
27766
+
27687
27767
  // src/components/pure/TestPageView.tsx
27688
27768
  var import_react58 = __toESM(require_react(), 1);
27689
27769
 
@@ -27841,6 +27921,18 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
27841
27921
  } = (0, import_react3.useContext)(ThemeContext);
27842
27922
  return prefix || prefixes[defaultPrefix] || defaultPrefix;
27843
27923
  }
27924
+ function useBootstrapBreakpoints() {
27925
+ const {
27926
+ breakpoints
27927
+ } = (0, import_react3.useContext)(ThemeContext);
27928
+ return breakpoints;
27929
+ }
27930
+ function useBootstrapMinBreakpoint() {
27931
+ const {
27932
+ minBreakpoint
27933
+ } = (0, import_react3.useContext)(ThemeContext);
27934
+ return minBreakpoint;
27935
+ }
27844
27936
  function useIsRTL() {
27845
27937
  const {
27846
27938
  dir
@@ -29471,12 +29563,81 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29471
29563
  (0, import_react27.useEffect)(() => () => onUnmount.current(), []);
29472
29564
  }
29473
29565
 
29474
- // node_modules/react-bootstrap/esm/Container.js
29566
+ // node_modules/react-bootstrap/esm/Col.js
29475
29567
  var import_classnames20 = __toESM(require_classnames());
29476
29568
  var React40 = __toESM(require_react());
29477
29569
  var import_jsx_runtime25 = __toESM(require_jsx_runtime());
29478
29570
  "use client";
29479
- var Container = /* @__PURE__ */ React40.forwardRef(({
29571
+ function useCol({
29572
+ as,
29573
+ bsPrefix,
29574
+ className,
29575
+ ...props
29576
+ }) {
29577
+ bsPrefix = useBootstrapPrefix(bsPrefix, "col");
29578
+ const breakpoints = useBootstrapBreakpoints();
29579
+ const minBreakpoint = useBootstrapMinBreakpoint();
29580
+ const spans = [];
29581
+ const classes = [];
29582
+ breakpoints.forEach((brkPoint) => {
29583
+ const propValue = props[brkPoint];
29584
+ delete props[brkPoint];
29585
+ let span;
29586
+ let offset;
29587
+ let order;
29588
+ if (typeof propValue === "object" && propValue != null) {
29589
+ ({
29590
+ span,
29591
+ offset,
29592
+ order
29593
+ } = propValue);
29594
+ } else {
29595
+ span = propValue;
29596
+ }
29597
+ const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : "";
29598
+ if (span)
29599
+ spans.push(span === true ? `${bsPrefix}${infix}` : `${bsPrefix}${infix}-${span}`);
29600
+ if (order != null)
29601
+ classes.push(`order${infix}-${order}`);
29602
+ if (offset != null)
29603
+ classes.push(`offset${infix}-${offset}`);
29604
+ });
29605
+ return [{
29606
+ ...props,
29607
+ className: (0, import_classnames20.default)(className, ...spans, ...classes)
29608
+ }, {
29609
+ as,
29610
+ bsPrefix,
29611
+ spans
29612
+ }];
29613
+ }
29614
+ var Col = /* @__PURE__ */ React40.forwardRef(
29615
+ // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
29616
+ (props, ref) => {
29617
+ const [{
29618
+ className,
29619
+ ...colProps
29620
+ }, {
29621
+ as: Component4 = "div",
29622
+ bsPrefix,
29623
+ spans
29624
+ }] = useCol(props);
29625
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Component4, {
29626
+ ...colProps,
29627
+ ref,
29628
+ className: (0, import_classnames20.default)(className, !spans.length && bsPrefix)
29629
+ });
29630
+ }
29631
+ );
29632
+ Col.displayName = "Col";
29633
+ var Col_default = Col;
29634
+
29635
+ // node_modules/react-bootstrap/esm/Container.js
29636
+ var import_classnames21 = __toESM(require_classnames());
29637
+ var React41 = __toESM(require_react());
29638
+ var import_jsx_runtime26 = __toESM(require_jsx_runtime());
29639
+ "use client";
29640
+ var Container = /* @__PURE__ */ React41.forwardRef(({
29480
29641
  bsPrefix,
29481
29642
  fluid = false,
29482
29643
  // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
@@ -29486,10 +29647,10 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29486
29647
  }, ref) => {
29487
29648
  const prefix = useBootstrapPrefix(bsPrefix, "container");
29488
29649
  const suffix = typeof fluid === "string" ? `-${fluid}` : "-fluid";
29489
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Component4, {
29650
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Component4, {
29490
29651
  ref,
29491
29652
  ...props,
29492
- className: (0, import_classnames20.default)(className, fluid ? `${prefix}${suffix}` : prefix)
29653
+ className: (0, import_classnames21.default)(className, fluid ? `${prefix}${suffix}` : prefix)
29493
29654
  });
29494
29655
  });
29495
29656
  Container.displayName = "Container";
@@ -29599,8 +29760,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29599
29760
  }
29600
29761
 
29601
29762
  // node_modules/@restart/ui/esm/SelectableContext.js
29602
- var React41 = __toESM(require_react());
29603
- var SelectableContext = /* @__PURE__ */ React41.createContext(null);
29763
+ var React42 = __toESM(require_react());
29764
+ var SelectableContext = /* @__PURE__ */ React42.createContext(null);
29604
29765
  var makeEventKey = (eventKey, href = null) => {
29605
29766
  if (eventKey != null)
29606
29767
  return String(eventKey);
@@ -29609,8 +29770,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29609
29770
  var SelectableContext_default = SelectableContext;
29610
29771
 
29611
29772
  // node_modules/@restart/ui/esm/NavContext.js
29612
- var React42 = __toESM(require_react());
29613
- var NavContext = /* @__PURE__ */ React42.createContext(null);
29773
+ var React43 = __toESM(require_react());
29774
+ var NavContext = /* @__PURE__ */ React43.createContext(null);
29614
29775
  NavContext.displayName = "NavContext";
29615
29776
  var NavContext_default = NavContext;
29616
29777
 
@@ -29641,19 +29802,19 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29641
29802
  var useIsomorphicEffect_default2 = isDOM2 || isReactNative2 ? import_react32.useLayoutEffect : import_react32.useEffect;
29642
29803
 
29643
29804
  // node_modules/react-bootstrap/esm/NavbarContext.js
29644
- var React43 = __toESM(require_react());
29805
+ var React44 = __toESM(require_react());
29645
29806
  "use client";
29646
- var context2 = /* @__PURE__ */ React43.createContext(null);
29807
+ var context2 = /* @__PURE__ */ React44.createContext(null);
29647
29808
  context2.displayName = "NavbarContext";
29648
29809
  var NavbarContext_default = context2;
29649
29810
 
29650
29811
  // node_modules/react-bootstrap/esm/ListGroup.js
29651
- var import_classnames22 = __toESM(require_classnames());
29652
- var React48 = __toESM(require_react());
29812
+ var import_classnames23 = __toESM(require_classnames());
29813
+ var React49 = __toESM(require_react());
29653
29814
  var import_warning2 = __toESM(require_warning());
29654
29815
 
29655
29816
  // node_modules/@restart/ui/esm/Nav.js
29656
- var React46 = __toESM(require_react());
29817
+ var React47 = __toESM(require_react());
29657
29818
  var import_react35 = __toESM(require_react());
29658
29819
 
29659
29820
  // node_modules/@restart/ui/node_modules/@restart/hooks/esm/useMergedRefs.js
@@ -29677,14 +29838,14 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29677
29838
  var useMergedRefs_default2 = useMergedRefs2;
29678
29839
 
29679
29840
  // node_modules/@restart/ui/esm/TabContext.js
29680
- var React44 = __toESM(require_react());
29681
- var TabContext = /* @__PURE__ */ React44.createContext(null);
29841
+ var React45 = __toESM(require_react());
29842
+ var TabContext = /* @__PURE__ */ React45.createContext(null);
29682
29843
  var TabContext_default = TabContext;
29683
29844
 
29684
29845
  // node_modules/@restart/ui/esm/NavItem.js
29685
- var React45 = __toESM(require_react());
29846
+ var React46 = __toESM(require_react());
29686
29847
  var import_react34 = __toESM(require_react());
29687
- var import_jsx_runtime26 = __toESM(require_jsx_runtime());
29848
+ var import_jsx_runtime27 = __toESM(require_jsx_runtime());
29688
29849
  var _excluded3 = ["as", "active", "eventKey"];
29689
29850
  function _objectWithoutPropertiesLoose4(r, e) {
29690
29851
  if (null == r)
@@ -29749,7 +29910,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29749
29910
  isActive
29750
29911
  }];
29751
29912
  }
29752
- var NavItem = /* @__PURE__ */ React45.forwardRef((_ref, ref) => {
29913
+ var NavItem = /* @__PURE__ */ React46.forwardRef((_ref, ref) => {
29753
29914
  let {
29754
29915
  as: Component4 = Button_default,
29755
29916
  active,
@@ -29760,7 +29921,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29760
29921
  active
29761
29922
  }, options));
29762
29923
  props[dataAttr("active")] = meta.isActive;
29763
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Component4, Object.assign({}, options, props, {
29924
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Component4, Object.assign({}, options, props, {
29764
29925
  ref
29765
29926
  }));
29766
29927
  });
@@ -29768,7 +29929,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29768
29929
  var NavItem_default = NavItem;
29769
29930
 
29770
29931
  // node_modules/@restart/ui/esm/Nav.js
29771
- var import_jsx_runtime27 = __toESM(require_jsx_runtime());
29932
+ var import_jsx_runtime28 = __toESM(require_jsx_runtime());
29772
29933
  var _excluded4 = ["as", "onSelect", "activeKey", "role", "onKeyDown"];
29773
29934
  function _objectWithoutPropertiesLoose5(r, e) {
29774
29935
  if (null == r)
@@ -29785,7 +29946,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29785
29946
  var noop2 = () => {
29786
29947
  };
29787
29948
  var EVENT_KEY_ATTR = dataAttr("event-key");
29788
- var Nav = /* @__PURE__ */ React46.forwardRef((_ref, ref) => {
29949
+ var Nav = /* @__PURE__ */ React47.forwardRef((_ref, ref) => {
29789
29950
  let {
29790
29951
  // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
29791
29952
  as: Component4 = "div",
@@ -29863,9 +30024,9 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29863
30024
  needsRefocusRef.current = false;
29864
30025
  });
29865
30026
  const mergedRef = useMergedRefs_default2(ref, listNode);
29866
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SelectableContext_default.Provider, {
30027
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SelectableContext_default.Provider, {
29867
30028
  value: handleSelect,
29868
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(NavContext_default.Provider, {
30029
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(NavContext_default.Provider, {
29869
30030
  value: {
29870
30031
  role,
29871
30032
  // used by NavLink to determine it's role
@@ -29873,7 +30034,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29873
30034
  getControlledId: getControlledId || noop2,
29874
30035
  getControllerId: getControllerId || noop2
29875
30036
  },
29876
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Component4, Object.assign({}, props, {
30037
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Component4, Object.assign({}, props, {
29877
30038
  onKeyDown: handleKeyDown,
29878
30039
  ref: mergedRef,
29879
30040
  role
@@ -29887,12 +30048,12 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29887
30048
  });
29888
30049
 
29889
30050
  // node_modules/react-bootstrap/esm/ListGroupItem.js
29890
- var import_classnames21 = __toESM(require_classnames());
29891
- var React47 = __toESM(require_react());
30051
+ var import_classnames22 = __toESM(require_classnames());
30052
+ var React48 = __toESM(require_react());
29892
30053
  var import_warning = __toESM(require_warning());
29893
- var import_jsx_runtime28 = __toESM(require_jsx_runtime());
30054
+ var import_jsx_runtime29 = __toESM(require_jsx_runtime());
29894
30055
  "use client";
29895
- var ListGroupItem = /* @__PURE__ */ React47.forwardRef(({
30056
+ var ListGroupItem = /* @__PURE__ */ React48.forwardRef(({
29896
30057
  bsPrefix,
29897
30058
  active,
29898
30059
  disabled,
@@ -29923,21 +30084,21 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29923
30084
  }
29924
30085
  const Component4 = as || (action ? props.href ? "a" : "button" : "div");
29925
30086
  true ? (0, import_warning.default)(as || !(!action && props.href), "`action=false` and `href` should not be used together.") : void 0;
29926
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Component4, {
30087
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Component4, {
29927
30088
  ref,
29928
30089
  ...props,
29929
30090
  ...navItemProps,
29930
30091
  onClick: handleClick,
29931
- className: (0, import_classnames21.default)(className, bsPrefix, meta.isActive && "active", disabled && "disabled", variant && `${bsPrefix}-${variant}`, action && `${bsPrefix}-action`)
30092
+ className: (0, import_classnames22.default)(className, bsPrefix, meta.isActive && "active", disabled && "disabled", variant && `${bsPrefix}-${variant}`, action && `${bsPrefix}-action`)
29932
30093
  });
29933
30094
  });
29934
30095
  ListGroupItem.displayName = "ListGroupItem";
29935
30096
  var ListGroupItem_default = ListGroupItem;
29936
30097
 
29937
30098
  // node_modules/react-bootstrap/esm/ListGroup.js
29938
- var import_jsx_runtime29 = __toESM(require_jsx_runtime());
30099
+ var import_jsx_runtime30 = __toESM(require_jsx_runtime());
29939
30100
  "use client";
29940
- var ListGroup = /* @__PURE__ */ React48.forwardRef((props, ref) => {
30101
+ var ListGroup = /* @__PURE__ */ React49.forwardRef((props, ref) => {
29941
30102
  const {
29942
30103
  className,
29943
30104
  bsPrefix: initialBsPrefix,
@@ -29956,11 +30117,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29956
30117
  horizontalVariant = horizontal === true ? "horizontal" : `horizontal-${horizontal}`;
29957
30118
  }
29958
30119
  true ? (0, import_warning2.default)(!(horizontal && variant === "flush"), '`variant="flush"` and `horizontal` should not be used together.') : void 0;
29959
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Nav_default, {
30120
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Nav_default, {
29960
30121
  ref,
29961
30122
  ...controlledProps,
29962
30123
  as,
29963
- className: (0, import_classnames22.default)(className, bsPrefix, variant && `${bsPrefix}-${variant}`, horizontalVariant && `${bsPrefix}-${horizontalVariant}`, numbered && `${bsPrefix}-numbered`)
30124
+ className: (0, import_classnames23.default)(className, bsPrefix, variant && `${bsPrefix}-${variant}`, horizontalVariant && `${bsPrefix}-${horizontalVariant}`, numbered && `${bsPrefix}-numbered`)
29964
30125
  });
29965
30126
  });
29966
30127
  ListGroup.displayName = "ListGroup";
@@ -29969,7 +30130,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29969
30130
  });
29970
30131
 
29971
30132
  // node_modules/react-bootstrap/esm/Modal.js
29972
- var import_classnames28 = __toESM(require_classnames());
30133
+ var import_classnames29 = __toESM(require_classnames());
29973
30134
 
29974
30135
  // node_modules/dom-helpers/esm/scrollbarSize.js
29975
30136
  var size;
@@ -29997,7 +30158,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
29997
30158
  }
29998
30159
 
29999
30160
  // node_modules/react-bootstrap/esm/Modal.js
30000
- var React59 = __toESM(require_react());
30161
+ var React60 = __toESM(require_react());
30001
30162
  var import_react45 = __toESM(require_react());
30002
30163
 
30003
30164
  // node_modules/dom-helpers/esm/activeElement.js
@@ -30017,7 +30178,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30017
30178
 
30018
30179
  // node_modules/@restart/ui/esm/Modal.js
30019
30180
  var import_react43 = __toESM(require_react());
30020
- var React51 = __toESM(require_react());
30181
+ var React52 = __toESM(require_react());
30021
30182
  var import_react_dom3 = __toESM(require_react_dom());
30022
30183
 
30023
30184
  // node_modules/@restart/ui/node_modules/@restart/hooks/esm/useUpdatedRef.js
@@ -30201,7 +30362,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30201
30362
  var NoopTransition_default = NoopTransition;
30202
30363
 
30203
30364
  // node_modules/@restart/ui/esm/RTGTransition.js
30204
- var React49 = __toESM(require_react());
30365
+ var React50 = __toESM(require_react());
30205
30366
 
30206
30367
  // node_modules/@restart/ui/esm/useRTGTransitionProps.js
30207
30368
  var import_react41 = __toESM(require_react());
@@ -30272,7 +30433,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30272
30433
  }
30273
30434
 
30274
30435
  // node_modules/@restart/ui/esm/RTGTransition.js
30275
- var import_jsx_runtime30 = __toESM(require_jsx_runtime());
30436
+ var import_jsx_runtime31 = __toESM(require_jsx_runtime());
30276
30437
  var _excluded6 = ["component"];
30277
30438
  function _objectWithoutPropertiesLoose7(r, e) {
30278
30439
  if (null == r)
@@ -30286,19 +30447,19 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30286
30447
  }
30287
30448
  return t;
30288
30449
  }
30289
- var RTGTransition = /* @__PURE__ */ React49.forwardRef((_ref, ref) => {
30450
+ var RTGTransition = /* @__PURE__ */ React50.forwardRef((_ref, ref) => {
30290
30451
  let {
30291
30452
  component: Component4
30292
30453
  } = _ref, props = _objectWithoutPropertiesLoose7(_ref, _excluded6);
30293
30454
  const transitionProps = useRTGTransitionProps(props);
30294
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Component4, Object.assign({
30455
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Component4, Object.assign({
30295
30456
  ref
30296
30457
  }, transitionProps));
30297
30458
  });
30298
30459
  var RTGTransition_default = RTGTransition;
30299
30460
 
30300
30461
  // node_modules/@restart/ui/esm/ImperativeTransition.js
30301
- var import_jsx_runtime31 = __toESM(require_jsx_runtime());
30462
+ var import_jsx_runtime32 = __toESM(require_jsx_runtime());
30302
30463
  function useTransition({
30303
30464
  in: inProp,
30304
30465
  onTransition
@@ -30367,20 +30528,20 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30367
30528
  }
30368
30529
  function renderTransition(component, runTransition, props) {
30369
30530
  if (component) {
30370
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(RTGTransition_default, Object.assign({}, props, {
30531
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RTGTransition_default, Object.assign({}, props, {
30371
30532
  component
30372
30533
  }));
30373
30534
  }
30374
30535
  if (runTransition) {
30375
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ImperativeTransition, Object.assign({}, props, {
30536
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(ImperativeTransition, Object.assign({}, props, {
30376
30537
  transition: runTransition
30377
30538
  }));
30378
30539
  }
30379
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(NoopTransition_default, Object.assign({}, props));
30540
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(NoopTransition_default, Object.assign({}, props));
30380
30541
  }
30381
30542
 
30382
30543
  // node_modules/@restart/ui/esm/Modal.js
30383
- var import_jsx_runtime32 = __toESM(require_jsx_runtime());
30544
+ var import_jsx_runtime33 = __toESM(require_jsx_runtime());
30384
30545
  var _excluded7 = ["show", "role", "className", "style", "children", "backdrop", "keyboard", "onBackdropClick", "onEscapeKeyDown", "transition", "runTransition", "backdropTransition", "runBackdropTransition", "autoFocus", "enforceFocus", "restoreFocus", "restoreFocusOptions", "renderDialog", "renderBackdrop", "manager", "container", "onShow", "onHide", "onExit", "onExited", "onExiting", "onEnter", "onEntering", "onEntered"];
30385
30546
  function _objectWithoutPropertiesLoose8(r, e) {
30386
30547
  if (null == r)
@@ -30441,7 +30602,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30441
30602
  restoreFocus = true,
30442
30603
  restoreFocusOptions,
30443
30604
  renderDialog,
30444
- renderBackdrop = (props) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", Object.assign({}, props)),
30605
+ renderBackdrop = (props) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", Object.assign({}, props)),
30445
30606
  manager: providedManager,
30446
30607
  container: containerRef,
30447
30608
  onShow,
@@ -30564,8 +30725,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30564
30725
  className,
30565
30726
  tabIndex: -1
30566
30727
  });
30567
- let dialog = renderDialog ? renderDialog(dialogProps) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", Object.assign({}, dialogProps, {
30568
- children: /* @__PURE__ */ React51.cloneElement(children, {
30728
+ let dialog = renderDialog ? renderDialog(dialogProps) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", Object.assign({}, dialogProps, {
30729
+ children: /* @__PURE__ */ React52.cloneElement(children, {
30569
30730
  role: "document"
30570
30731
  })
30571
30732
  }));
@@ -30596,8 +30757,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30596
30757
  children: backdropElement
30597
30758
  });
30598
30759
  }
30599
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, {
30600
- children: /* @__PURE__ */ import_react_dom3.default.createPortal(/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, {
30760
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_jsx_runtime33.Fragment, {
30761
+ children: /* @__PURE__ */ import_react_dom3.default.createPortal(/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, {
30601
30762
  children: [backdropElement, dialog]
30602
30763
  }), container)
30603
30764
  });
@@ -30694,20 +30855,20 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30694
30855
  var BootstrapModalManager_default = BootstrapModalManager;
30695
30856
 
30696
30857
  // node_modules/react-bootstrap/esm/ModalBody.js
30697
- var React52 = __toESM(require_react());
30698
- var import_classnames23 = __toESM(require_classnames());
30699
- var import_jsx_runtime33 = __toESM(require_jsx_runtime());
30858
+ var React53 = __toESM(require_react());
30859
+ var import_classnames24 = __toESM(require_classnames());
30860
+ var import_jsx_runtime34 = __toESM(require_jsx_runtime());
30700
30861
  "use client";
30701
- var ModalBody = /* @__PURE__ */ React52.forwardRef(({
30862
+ var ModalBody = /* @__PURE__ */ React53.forwardRef(({
30702
30863
  className,
30703
30864
  bsPrefix,
30704
30865
  as: Component4 = "div",
30705
30866
  ...props
30706
30867
  }, ref) => {
30707
30868
  bsPrefix = useBootstrapPrefix(bsPrefix, "modal-body");
30708
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Component4, {
30869
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Component4, {
30709
30870
  ref,
30710
- className: (0, import_classnames23.default)(className, bsPrefix),
30871
+ className: (0, import_classnames24.default)(className, bsPrefix),
30711
30872
  ...props
30712
30873
  });
30713
30874
  });
@@ -30715,20 +30876,20 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30715
30876
  var ModalBody_default = ModalBody;
30716
30877
 
30717
30878
  // node_modules/react-bootstrap/esm/ModalContext.js
30718
- var React53 = __toESM(require_react());
30879
+ var React54 = __toESM(require_react());
30719
30880
  "use client";
30720
- var ModalContext = /* @__PURE__ */ React53.createContext({
30881
+ var ModalContext = /* @__PURE__ */ React54.createContext({
30721
30882
  onHide() {
30722
30883
  }
30723
30884
  });
30724
30885
  var ModalContext_default = ModalContext;
30725
30886
 
30726
30887
  // node_modules/react-bootstrap/esm/ModalDialog.js
30727
- var import_classnames24 = __toESM(require_classnames());
30728
- var React54 = __toESM(require_react());
30729
- var import_jsx_runtime34 = __toESM(require_jsx_runtime());
30888
+ var import_classnames25 = __toESM(require_classnames());
30889
+ var React55 = __toESM(require_react());
30890
+ var import_jsx_runtime35 = __toESM(require_jsx_runtime());
30730
30891
  "use client";
30731
- var ModalDialog = /* @__PURE__ */ React54.forwardRef(({
30892
+ var ModalDialog = /* @__PURE__ */ React55.forwardRef(({
30732
30893
  bsPrefix,
30733
30894
  className,
30734
30895
  contentClassName,
@@ -30742,12 +30903,12 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30742
30903
  bsPrefix = useBootstrapPrefix(bsPrefix, "modal");
30743
30904
  const dialogClass = `${bsPrefix}-dialog`;
30744
30905
  const fullScreenClass = typeof fullscreen === "string" ? `${bsPrefix}-fullscreen-${fullscreen}` : `${bsPrefix}-fullscreen`;
30745
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", {
30906
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {
30746
30907
  ...props,
30747
30908
  ref,
30748
- className: (0, import_classnames24.default)(dialogClass, className, size2 && `${bsPrefix}-${size2}`, centered && `${dialogClass}-centered`, scrollable && `${dialogClass}-scrollable`, fullscreen && fullScreenClass),
30749
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", {
30750
- className: (0, import_classnames24.default)(`${bsPrefix}-content`, contentClassName),
30909
+ className: (0, import_classnames25.default)(dialogClass, className, size2 && `${bsPrefix}-${size2}`, centered && `${dialogClass}-centered`, scrollable && `${dialogClass}-scrollable`, fullscreen && fullScreenClass),
30910
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {
30911
+ className: (0, import_classnames25.default)(`${bsPrefix}-content`, contentClassName),
30751
30912
  children
30752
30913
  })
30753
30914
  });
@@ -30756,20 +30917,20 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30756
30917
  var ModalDialog_default = ModalDialog;
30757
30918
 
30758
30919
  // node_modules/react-bootstrap/esm/ModalFooter.js
30759
- var React55 = __toESM(require_react());
30760
- var import_classnames25 = __toESM(require_classnames());
30761
- var import_jsx_runtime35 = __toESM(require_jsx_runtime());
30920
+ var React56 = __toESM(require_react());
30921
+ var import_classnames26 = __toESM(require_classnames());
30922
+ var import_jsx_runtime36 = __toESM(require_jsx_runtime());
30762
30923
  "use client";
30763
- var ModalFooter = /* @__PURE__ */ React55.forwardRef(({
30924
+ var ModalFooter = /* @__PURE__ */ React56.forwardRef(({
30764
30925
  className,
30765
30926
  bsPrefix,
30766
30927
  as: Component4 = "div",
30767
30928
  ...props
30768
30929
  }, ref) => {
30769
30930
  bsPrefix = useBootstrapPrefix(bsPrefix, "modal-footer");
30770
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Component4, {
30931
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Component4, {
30771
30932
  ref,
30772
- className: (0, import_classnames25.default)(className, bsPrefix),
30933
+ className: (0, import_classnames26.default)(className, bsPrefix),
30773
30934
  ...props
30774
30935
  });
30775
30936
  });
@@ -30777,16 +30938,16 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30777
30938
  var ModalFooter_default = ModalFooter;
30778
30939
 
30779
30940
  // node_modules/react-bootstrap/esm/ModalHeader.js
30780
- var import_classnames26 = __toESM(require_classnames());
30781
- var React57 = __toESM(require_react());
30941
+ var import_classnames27 = __toESM(require_classnames());
30942
+ var React58 = __toESM(require_react());
30782
30943
 
30783
30944
  // node_modules/react-bootstrap/esm/AbstractModalHeader.js
30784
- var React56 = __toESM(require_react());
30945
+ var React57 = __toESM(require_react());
30785
30946
  var import_react44 = __toESM(require_react());
30786
- var import_jsx_runtime36 = __toESM(require_jsx_runtime());
30787
30947
  var import_jsx_runtime37 = __toESM(require_jsx_runtime());
30948
+ var import_jsx_runtime38 = __toESM(require_jsx_runtime());
30788
30949
  "use client";
30789
- var AbstractModalHeader = /* @__PURE__ */ React56.forwardRef(({
30950
+ var AbstractModalHeader = /* @__PURE__ */ React57.forwardRef(({
30790
30951
  closeLabel = "Close",
30791
30952
  closeVariant,
30792
30953
  closeButton = false,
@@ -30799,10 +30960,10 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30799
30960
  context3 == null || context3.onHide();
30800
30961
  onHide == null || onHide();
30801
30962
  });
30802
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", {
30963
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", {
30803
30964
  ref,
30804
30965
  ...props,
30805
- children: [children, closeButton && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(CloseButton_default, {
30966
+ children: [children, closeButton && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CloseButton_default, {
30806
30967
  "aria-label": closeLabel,
30807
30968
  variant: closeVariant,
30808
30969
  onClick: handleClick
@@ -30813,9 +30974,9 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30813
30974
  var AbstractModalHeader_default = AbstractModalHeader;
30814
30975
 
30815
30976
  // node_modules/react-bootstrap/esm/ModalHeader.js
30816
- var import_jsx_runtime38 = __toESM(require_jsx_runtime());
30977
+ var import_jsx_runtime39 = __toESM(require_jsx_runtime());
30817
30978
  "use client";
30818
- var ModalHeader = /* @__PURE__ */ React57.forwardRef(({
30979
+ var ModalHeader = /* @__PURE__ */ React58.forwardRef(({
30819
30980
  bsPrefix,
30820
30981
  className,
30821
30982
  closeLabel = "Close",
@@ -30823,10 +30984,10 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30823
30984
  ...props
30824
30985
  }, ref) => {
30825
30986
  bsPrefix = useBootstrapPrefix(bsPrefix, "modal-header");
30826
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(AbstractModalHeader_default, {
30987
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(AbstractModalHeader_default, {
30827
30988
  ref,
30828
30989
  ...props,
30829
- className: (0, import_classnames26.default)(className, bsPrefix),
30990
+ className: (0, import_classnames27.default)(className, bsPrefix),
30830
30991
  closeLabel,
30831
30992
  closeButton
30832
30993
  });
@@ -30835,21 +30996,21 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30835
30996
  var ModalHeader_default = ModalHeader;
30836
30997
 
30837
30998
  // node_modules/react-bootstrap/esm/ModalTitle.js
30838
- var React58 = __toESM(require_react());
30839
- var import_classnames27 = __toESM(require_classnames());
30840
- var import_jsx_runtime39 = __toESM(require_jsx_runtime());
30999
+ var React59 = __toESM(require_react());
31000
+ var import_classnames28 = __toESM(require_classnames());
31001
+ var import_jsx_runtime40 = __toESM(require_jsx_runtime());
30841
31002
  "use client";
30842
31003
  var DivStyledAsH42 = divWithClassName_default("h4");
30843
- var ModalTitle = /* @__PURE__ */ React58.forwardRef(({
31004
+ var ModalTitle = /* @__PURE__ */ React59.forwardRef(({
30844
31005
  className,
30845
31006
  bsPrefix,
30846
31007
  as: Component4 = DivStyledAsH42,
30847
31008
  ...props
30848
31009
  }, ref) => {
30849
31010
  bsPrefix = useBootstrapPrefix(bsPrefix, "modal-title");
30850
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Component4, {
31011
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Component4, {
30851
31012
  ref,
30852
- className: (0, import_classnames27.default)(className, bsPrefix),
31013
+ className: (0, import_classnames28.default)(className, bsPrefix),
30853
31014
  ...props
30854
31015
  });
30855
31016
  });
@@ -30857,21 +31018,21 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
30857
31018
  var ModalTitle_default = ModalTitle;
30858
31019
 
30859
31020
  // node_modules/react-bootstrap/esm/Modal.js
30860
- var import_jsx_runtime40 = __toESM(require_jsx_runtime());
31021
+ var import_jsx_runtime41 = __toESM(require_jsx_runtime());
30861
31022
  "use client";
30862
31023
  function DialogTransition(props) {
30863
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Fade_default, {
31024
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Fade_default, {
30864
31025
  ...props,
30865
31026
  timeout: null
30866
31027
  });
30867
31028
  }
30868
31029
  function BackdropTransition(props) {
30869
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Fade_default, {
31030
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Fade_default, {
30870
31031
  ...props,
30871
31032
  timeout: null
30872
31033
  });
30873
31034
  }
30874
- var Modal2 = /* @__PURE__ */ React59.forwardRef(({
31035
+ var Modal2 = /* @__PURE__ */ React60.forwardRef(({
30875
31036
  bsPrefix,
30876
31037
  className,
30877
31038
  style: style2,
@@ -31007,27 +31168,27 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31007
31168
  onExited == null || onExited(node);
31008
31169
  removeEventListener_default(window, "resize", handleWindowResize);
31009
31170
  };
31010
- const renderBackdrop = (0, import_react45.useCallback)((backdropProps) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", {
31171
+ const renderBackdrop = (0, import_react45.useCallback)((backdropProps) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", {
31011
31172
  ...backdropProps,
31012
- className: (0, import_classnames28.default)(`${bsPrefix}-backdrop`, backdropClassName, !animation && "show")
31173
+ className: (0, import_classnames29.default)(`${bsPrefix}-backdrop`, backdropClassName, !animation && "show")
31013
31174
  }), [animation, backdropClassName, bsPrefix]);
31014
31175
  const baseModalStyle = {
31015
31176
  ...style2,
31016
31177
  ...modalStyle
31017
31178
  };
31018
31179
  baseModalStyle.display = "block";
31019
- const renderDialog = (dialogProps) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", {
31180
+ const renderDialog = (dialogProps) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", {
31020
31181
  role: "dialog",
31021
31182
  ...dialogProps,
31022
31183
  style: baseModalStyle,
31023
- className: (0, import_classnames28.default)(className, bsPrefix, animateStaticModal && `${bsPrefix}-static`, !animation && "show"),
31184
+ className: (0, import_classnames29.default)(className, bsPrefix, animateStaticModal && `${bsPrefix}-static`, !animation && "show"),
31024
31185
  onClick: backdrop ? handleClick : void 0,
31025
31186
  onMouseUp: handleMouseUp,
31026
31187
  "data-bs-theme": dataBsTheme,
31027
31188
  "aria-label": ariaLabel,
31028
31189
  "aria-labelledby": ariaLabelledby,
31029
31190
  "aria-describedby": ariaDescribedby,
31030
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Dialog, {
31191
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Dialog, {
31031
31192
  ...props,
31032
31193
  onMouseDown: handleDialogMouseDown,
31033
31194
  className: dialogClassName,
@@ -31035,9 +31196,9 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31035
31196
  children
31036
31197
  })
31037
31198
  });
31038
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ModalContext_default.Provider, {
31199
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ModalContext_default.Provider, {
31039
31200
  value: modalContext,
31040
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Modal_default, {
31201
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Modal_default, {
31041
31202
  show,
31042
31203
  ref: mergedRef,
31043
31204
  backdrop,
@@ -31076,25 +31237,25 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31076
31237
  });
31077
31238
 
31078
31239
  // node_modules/react-bootstrap/esm/Nav.js
31079
- var import_classnames31 = __toESM(require_classnames());
31080
- var React62 = __toESM(require_react());
31240
+ var import_classnames32 = __toESM(require_classnames());
31241
+ var React63 = __toESM(require_react());
31081
31242
  var import_react46 = __toESM(require_react());
31082
31243
 
31083
31244
  // node_modules/react-bootstrap/esm/NavItem.js
31084
- var React60 = __toESM(require_react());
31085
- var import_classnames29 = __toESM(require_classnames());
31086
- var import_jsx_runtime41 = __toESM(require_jsx_runtime());
31245
+ var React61 = __toESM(require_react());
31246
+ var import_classnames30 = __toESM(require_classnames());
31247
+ var import_jsx_runtime42 = __toESM(require_jsx_runtime());
31087
31248
  "use client";
31088
- var NavItem2 = /* @__PURE__ */ React60.forwardRef(({
31249
+ var NavItem2 = /* @__PURE__ */ React61.forwardRef(({
31089
31250
  className,
31090
31251
  bsPrefix,
31091
31252
  as: Component4 = "div",
31092
31253
  ...props
31093
31254
  }, ref) => {
31094
31255
  bsPrefix = useBootstrapPrefix(bsPrefix, "nav-item");
31095
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Component4, {
31256
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Component4, {
31096
31257
  ref,
31097
- className: (0, import_classnames29.default)(className, bsPrefix),
31258
+ className: (0, import_classnames30.default)(className, bsPrefix),
31098
31259
  ...props
31099
31260
  });
31100
31261
  });
@@ -31102,11 +31263,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31102
31263
  var NavItem_default2 = NavItem2;
31103
31264
 
31104
31265
  // node_modules/react-bootstrap/esm/NavLink.js
31105
- var import_classnames30 = __toESM(require_classnames());
31106
- var React61 = __toESM(require_react());
31107
- var import_jsx_runtime42 = __toESM(require_jsx_runtime());
31266
+ var import_classnames31 = __toESM(require_classnames());
31267
+ var React62 = __toESM(require_react());
31268
+ var import_jsx_runtime43 = __toESM(require_jsx_runtime());
31108
31269
  "use client";
31109
- var NavLink2 = /* @__PURE__ */ React61.forwardRef(({
31270
+ var NavLink2 = /* @__PURE__ */ React62.forwardRef(({
31110
31271
  bsPrefix,
31111
31272
  className,
31112
31273
  as: Component4 = Anchor_default,
@@ -31122,21 +31283,21 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31122
31283
  disabled,
31123
31284
  ...props
31124
31285
  });
31125
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Component4, {
31286
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Component4, {
31126
31287
  ...props,
31127
31288
  ...navItemProps,
31128
31289
  ref,
31129
31290
  disabled,
31130
- className: (0, import_classnames30.default)(className, bsPrefix, disabled && "disabled", meta.isActive && "active")
31291
+ className: (0, import_classnames31.default)(className, bsPrefix, disabled && "disabled", meta.isActive && "active")
31131
31292
  });
31132
31293
  });
31133
31294
  NavLink2.displayName = "NavLink";
31134
31295
  var NavLink_default = NavLink2;
31135
31296
 
31136
31297
  // node_modules/react-bootstrap/esm/Nav.js
31137
- var import_jsx_runtime43 = __toESM(require_jsx_runtime());
31298
+ var import_jsx_runtime44 = __toESM(require_jsx_runtime());
31138
31299
  "use client";
31139
- var Nav2 = /* @__PURE__ */ React62.forwardRef((uncontrolledProps, ref) => {
31300
+ var Nav2 = /* @__PURE__ */ React63.forwardRef((uncontrolledProps, ref) => {
31140
31301
  const {
31141
31302
  as = "div",
31142
31303
  bsPrefix: initialBsPrefix,
@@ -31165,11 +31326,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31165
31326
  cardHeaderBsPrefix
31166
31327
  } = cardHeaderContext);
31167
31328
  }
31168
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Nav_default, {
31329
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Nav_default, {
31169
31330
  as,
31170
31331
  ref,
31171
31332
  activeKey,
31172
- className: (0, import_classnames31.default)(className, {
31333
+ className: (0, import_classnames32.default)(className, {
31173
31334
  [bsPrefix]: !isNavbar,
31174
31335
  [`${navbarBsPrefix}-nav`]: isNavbar,
31175
31336
  [`${navbarBsPrefix}-nav-scroll`]: isNavbar && navbarScroll,
@@ -31188,16 +31349,16 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31188
31349
  });
31189
31350
 
31190
31351
  // node_modules/react-bootstrap/esm/Navbar.js
31191
- var import_classnames40 = __toESM(require_classnames());
31192
- var React73 = __toESM(require_react());
31352
+ var import_classnames41 = __toESM(require_classnames());
31353
+ var React74 = __toESM(require_react());
31193
31354
  var import_react53 = __toESM(require_react());
31194
31355
 
31195
31356
  // node_modules/react-bootstrap/esm/NavbarBrand.js
31196
- var import_classnames32 = __toESM(require_classnames());
31197
- var React63 = __toESM(require_react());
31198
- var import_jsx_runtime44 = __toESM(require_jsx_runtime());
31357
+ var import_classnames33 = __toESM(require_classnames());
31358
+ var React64 = __toESM(require_react());
31359
+ var import_jsx_runtime45 = __toESM(require_jsx_runtime());
31199
31360
  "use client";
31200
- var NavbarBrand = /* @__PURE__ */ React63.forwardRef(({
31361
+ var NavbarBrand = /* @__PURE__ */ React64.forwardRef(({
31201
31362
  bsPrefix,
31202
31363
  className,
31203
31364
  as,
@@ -31205,31 +31366,31 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31205
31366
  }, ref) => {
31206
31367
  bsPrefix = useBootstrapPrefix(bsPrefix, "navbar-brand");
31207
31368
  const Component4 = as || (props.href ? "a" : "span");
31208
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Component4, {
31369
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Component4, {
31209
31370
  ...props,
31210
31371
  ref,
31211
- className: (0, import_classnames32.default)(className, bsPrefix)
31372
+ className: (0, import_classnames33.default)(className, bsPrefix)
31212
31373
  });
31213
31374
  });
31214
31375
  NavbarBrand.displayName = "NavbarBrand";
31215
31376
  var NavbarBrand_default = NavbarBrand;
31216
31377
 
31217
31378
  // node_modules/react-bootstrap/esm/NavbarCollapse.js
31218
- var React64 = __toESM(require_react());
31379
+ var React65 = __toESM(require_react());
31219
31380
  var import_react47 = __toESM(require_react());
31220
- var import_jsx_runtime45 = __toESM(require_jsx_runtime());
31381
+ var import_jsx_runtime46 = __toESM(require_jsx_runtime());
31221
31382
  "use client";
31222
- var NavbarCollapse = /* @__PURE__ */ React64.forwardRef(({
31383
+ var NavbarCollapse = /* @__PURE__ */ React65.forwardRef(({
31223
31384
  children,
31224
31385
  bsPrefix,
31225
31386
  ...props
31226
31387
  }, ref) => {
31227
31388
  bsPrefix = useBootstrapPrefix(bsPrefix, "navbar-collapse");
31228
31389
  const context3 = (0, import_react47.useContext)(NavbarContext_default);
31229
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Collapse_default, {
31390
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Collapse_default, {
31230
31391
  in: !!(context3 && context3.expanded),
31231
31392
  ...props,
31232
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", {
31393
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", {
31233
31394
  ref,
31234
31395
  className: bsPrefix,
31235
31396
  children
@@ -31240,12 +31401,12 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31240
31401
  var NavbarCollapse_default = NavbarCollapse;
31241
31402
 
31242
31403
  // node_modules/react-bootstrap/esm/NavbarToggle.js
31243
- var import_classnames33 = __toESM(require_classnames());
31244
- var React65 = __toESM(require_react());
31404
+ var import_classnames34 = __toESM(require_classnames());
31405
+ var React66 = __toESM(require_react());
31245
31406
  var import_react48 = __toESM(require_react());
31246
- var import_jsx_runtime46 = __toESM(require_jsx_runtime());
31407
+ var import_jsx_runtime47 = __toESM(require_jsx_runtime());
31247
31408
  "use client";
31248
- var NavbarToggle = /* @__PURE__ */ React65.forwardRef(({
31409
+ var NavbarToggle = /* @__PURE__ */ React66.forwardRef(({
31249
31410
  bsPrefix,
31250
31411
  className,
31251
31412
  children,
@@ -31269,13 +31430,13 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31269
31430
  if (Component4 === "button") {
31270
31431
  props.type = "button";
31271
31432
  }
31272
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Component4, {
31433
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Component4, {
31273
31434
  ...props,
31274
31435
  ref,
31275
31436
  onClick: handleClick,
31276
31437
  "aria-label": label,
31277
- className: (0, import_classnames33.default)(className, bsPrefix, !expanded && "collapsed"),
31278
- children: children || /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", {
31438
+ className: (0, import_classnames34.default)(className, bsPrefix, !expanded && "collapsed"),
31439
+ children: children || /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", {
31279
31440
  className: `${bsPrefix}-icon`
31280
31441
  })
31281
31442
  });
@@ -31284,11 +31445,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31284
31445
  var NavbarToggle_default = NavbarToggle;
31285
31446
 
31286
31447
  // node_modules/react-bootstrap/esm/NavbarOffcanvas.js
31287
- var React71 = __toESM(require_react());
31448
+ var React72 = __toESM(require_react());
31288
31449
  var import_react52 = __toESM(require_react());
31289
31450
 
31290
31451
  // node_modules/react-bootstrap/esm/Offcanvas.js
31291
- var import_classnames38 = __toESM(require_classnames());
31452
+ var import_classnames39 = __toESM(require_classnames());
31292
31453
 
31293
31454
  // node_modules/@restart/hooks/esm/useMediaQuery.js
31294
31455
  var import_react49 = __toESM(require_react());
@@ -31398,24 +31559,24 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31398
31559
  var useBreakpoint_default = useBreakpoint;
31399
31560
 
31400
31561
  // node_modules/react-bootstrap/esm/Offcanvas.js
31401
- var React70 = __toESM(require_react());
31562
+ var React71 = __toESM(require_react());
31402
31563
  var import_react51 = __toESM(require_react());
31403
31564
 
31404
31565
  // node_modules/react-bootstrap/esm/OffcanvasBody.js
31405
- var React66 = __toESM(require_react());
31406
- var import_classnames34 = __toESM(require_classnames());
31407
- var import_jsx_runtime47 = __toESM(require_jsx_runtime());
31566
+ var React67 = __toESM(require_react());
31567
+ var import_classnames35 = __toESM(require_classnames());
31568
+ var import_jsx_runtime48 = __toESM(require_jsx_runtime());
31408
31569
  "use client";
31409
- var OffcanvasBody = /* @__PURE__ */ React66.forwardRef(({
31570
+ var OffcanvasBody = /* @__PURE__ */ React67.forwardRef(({
31410
31571
  className,
31411
31572
  bsPrefix,
31412
31573
  as: Component4 = "div",
31413
31574
  ...props
31414
31575
  }, ref) => {
31415
31576
  bsPrefix = useBootstrapPrefix(bsPrefix, "offcanvas-body");
31416
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Component4, {
31577
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Component4, {
31417
31578
  ref,
31418
- className: (0, import_classnames34.default)(className, bsPrefix),
31579
+ className: (0, import_classnames35.default)(className, bsPrefix),
31419
31580
  ...props
31420
31581
  });
31421
31582
  });
@@ -31423,15 +31584,15 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31423
31584
  var OffcanvasBody_default = OffcanvasBody;
31424
31585
 
31425
31586
  // node_modules/react-bootstrap/esm/OffcanvasToggling.js
31426
- var import_classnames35 = __toESM(require_classnames());
31427
- var React67 = __toESM(require_react());
31428
- var import_jsx_runtime48 = __toESM(require_jsx_runtime());
31587
+ var import_classnames36 = __toESM(require_classnames());
31588
+ var React68 = __toESM(require_react());
31589
+ var import_jsx_runtime49 = __toESM(require_jsx_runtime());
31429
31590
  "use client";
31430
31591
  var transitionStyles = {
31431
31592
  [ENTERING]: "show",
31432
31593
  [ENTERED]: "show"
31433
31594
  };
31434
- var OffcanvasToggling = /* @__PURE__ */ React67.forwardRef(({
31595
+ var OffcanvasToggling = /* @__PURE__ */ React68.forwardRef(({
31435
31596
  bsPrefix,
31436
31597
  className,
31437
31598
  children,
@@ -31442,7 +31603,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31442
31603
  ...props
31443
31604
  }, ref) => {
31444
31605
  bsPrefix = useBootstrapPrefix(bsPrefix, "offcanvas");
31445
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TransitionWrapper_default, {
31606
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(TransitionWrapper_default, {
31446
31607
  ref,
31447
31608
  addEndListener: transitionEndListener,
31448
31609
  in: inProp,
@@ -31451,9 +31612,9 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31451
31612
  appear,
31452
31613
  ...props,
31453
31614
  childRef: getChildRef(children),
31454
- children: (status, innerProps) => /* @__PURE__ */ React67.cloneElement(children, {
31615
+ children: (status, innerProps) => /* @__PURE__ */ React68.cloneElement(children, {
31455
31616
  ...innerProps,
31456
- className: (0, import_classnames35.default)(className, children.props.className, (status === ENTERING || status === EXITING) && `${bsPrefix}-toggling`, transitionStyles[status])
31617
+ className: (0, import_classnames36.default)(className, children.props.className, (status === ENTERING || status === EXITING) && `${bsPrefix}-toggling`, transitionStyles[status])
31457
31618
  })
31458
31619
  });
31459
31620
  });
@@ -31461,11 +31622,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31461
31622
  var OffcanvasToggling_default = OffcanvasToggling;
31462
31623
 
31463
31624
  // node_modules/react-bootstrap/esm/OffcanvasHeader.js
31464
- var import_classnames36 = __toESM(require_classnames());
31465
- var React68 = __toESM(require_react());
31466
- var import_jsx_runtime49 = __toESM(require_jsx_runtime());
31625
+ var import_classnames37 = __toESM(require_classnames());
31626
+ var React69 = __toESM(require_react());
31627
+ var import_jsx_runtime50 = __toESM(require_jsx_runtime());
31467
31628
  "use client";
31468
- var OffcanvasHeader = /* @__PURE__ */ React68.forwardRef(({
31629
+ var OffcanvasHeader = /* @__PURE__ */ React69.forwardRef(({
31469
31630
  bsPrefix,
31470
31631
  className,
31471
31632
  closeLabel = "Close",
@@ -31473,10 +31634,10 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31473
31634
  ...props
31474
31635
  }, ref) => {
31475
31636
  bsPrefix = useBootstrapPrefix(bsPrefix, "offcanvas-header");
31476
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(AbstractModalHeader_default, {
31637
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(AbstractModalHeader_default, {
31477
31638
  ref,
31478
31639
  ...props,
31479
- className: (0, import_classnames36.default)(className, bsPrefix),
31640
+ className: (0, import_classnames37.default)(className, bsPrefix),
31480
31641
  closeLabel,
31481
31642
  closeButton
31482
31643
  });
@@ -31485,21 +31646,21 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31485
31646
  var OffcanvasHeader_default = OffcanvasHeader;
31486
31647
 
31487
31648
  // node_modules/react-bootstrap/esm/OffcanvasTitle.js
31488
- var React69 = __toESM(require_react());
31489
- var import_classnames37 = __toESM(require_classnames());
31490
- var import_jsx_runtime50 = __toESM(require_jsx_runtime());
31649
+ var React70 = __toESM(require_react());
31650
+ var import_classnames38 = __toESM(require_classnames());
31651
+ var import_jsx_runtime51 = __toESM(require_jsx_runtime());
31491
31652
  "use client";
31492
31653
  var DivStyledAsH52 = divWithClassName_default("h5");
31493
- var OffcanvasTitle = /* @__PURE__ */ React69.forwardRef(({
31654
+ var OffcanvasTitle = /* @__PURE__ */ React70.forwardRef(({
31494
31655
  className,
31495
31656
  bsPrefix,
31496
31657
  as: Component4 = DivStyledAsH52,
31497
31658
  ...props
31498
31659
  }, ref) => {
31499
31660
  bsPrefix = useBootstrapPrefix(bsPrefix, "offcanvas-title");
31500
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Component4, {
31661
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Component4, {
31501
31662
  ref,
31502
- className: (0, import_classnames37.default)(className, bsPrefix),
31663
+ className: (0, import_classnames38.default)(className, bsPrefix),
31503
31664
  ...props
31504
31665
  });
31505
31666
  });
@@ -31507,21 +31668,21 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31507
31668
  var OffcanvasTitle_default = OffcanvasTitle;
31508
31669
 
31509
31670
  // node_modules/react-bootstrap/esm/Offcanvas.js
31510
- var import_jsx_runtime51 = __toESM(require_jsx_runtime());
31511
31671
  var import_jsx_runtime52 = __toESM(require_jsx_runtime());
31512
31672
  var import_jsx_runtime53 = __toESM(require_jsx_runtime());
31673
+ var import_jsx_runtime54 = __toESM(require_jsx_runtime());
31513
31674
  "use client";
31514
31675
  function DialogTransition2(props) {
31515
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(OffcanvasToggling_default, {
31676
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(OffcanvasToggling_default, {
31516
31677
  ...props
31517
31678
  });
31518
31679
  }
31519
31680
  function BackdropTransition2(props) {
31520
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Fade_default, {
31681
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Fade_default, {
31521
31682
  ...props
31522
31683
  });
31523
31684
  }
31524
- var Offcanvas = /* @__PURE__ */ React70.forwardRef(({
31685
+ var Offcanvas = /* @__PURE__ */ React71.forwardRef(({
31525
31686
  bsPrefix,
31526
31687
  className,
31527
31688
  children,
@@ -31585,21 +31746,21 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31585
31746
  node.style.visibility = "";
31586
31747
  onExited == null || onExited(...args);
31587
31748
  };
31588
- const renderBackdrop = (0, import_react51.useCallback)((backdropProps) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {
31749
+ const renderBackdrop = (0, import_react51.useCallback)((backdropProps) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {
31589
31750
  ...backdropProps,
31590
- className: (0, import_classnames38.default)(`${bsPrefix}-backdrop`, backdropClassName)
31751
+ className: (0, import_classnames39.default)(`${bsPrefix}-backdrop`, backdropClassName)
31591
31752
  }), [backdropClassName, bsPrefix]);
31592
- const renderDialog = (dialogProps) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {
31753
+ const renderDialog = (dialogProps) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {
31593
31754
  ...dialogProps,
31594
31755
  ...props,
31595
- className: (0, import_classnames38.default)(className, responsive ? `${bsPrefix}-${responsive}` : bsPrefix, `${bsPrefix}-${placement}`),
31756
+ className: (0, import_classnames39.default)(className, responsive ? `${bsPrefix}-${responsive}` : bsPrefix, `${bsPrefix}-${placement}`),
31596
31757
  "aria-labelledby": ariaLabelledby,
31597
31758
  children
31598
31759
  });
31599
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime52.Fragment, {
31600
- children: [!showOffcanvas && (responsive || renderStaticNode) && renderDialog({}), /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ModalContext_default.Provider, {
31760
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime53.Fragment, {
31761
+ children: [!showOffcanvas && (responsive || renderStaticNode) && renderDialog({}), /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ModalContext_default.Provider, {
31601
31762
  value: modalContext,
31602
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Modal_default, {
31763
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Modal_default, {
31603
31764
  show: showOffcanvas,
31604
31765
  ref,
31605
31766
  backdrop,
@@ -31635,9 +31796,9 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31635
31796
  });
31636
31797
 
31637
31798
  // node_modules/react-bootstrap/esm/NavbarOffcanvas.js
31638
- var import_jsx_runtime54 = __toESM(require_jsx_runtime());
31799
+ var import_jsx_runtime55 = __toESM(require_jsx_runtime());
31639
31800
  "use client";
31640
- var NavbarOffcanvas = /* @__PURE__ */ React71.forwardRef(({
31801
+ var NavbarOffcanvas = /* @__PURE__ */ React72.forwardRef(({
31641
31802
  onHide,
31642
31803
  ...props
31643
31804
  }, ref) => {
@@ -31646,7 +31807,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31646
31807
  context3 == null || context3.onToggle == null || context3.onToggle();
31647
31808
  onHide == null || onHide();
31648
31809
  });
31649
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Offcanvas_default, {
31810
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Offcanvas_default, {
31650
31811
  ref,
31651
31812
  show: !!(context3 != null && context3.expanded),
31652
31813
  ...props,
@@ -31658,20 +31819,20 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31658
31819
  var NavbarOffcanvas_default = NavbarOffcanvas;
31659
31820
 
31660
31821
  // node_modules/react-bootstrap/esm/NavbarText.js
31661
- var React72 = __toESM(require_react());
31662
- var import_classnames39 = __toESM(require_classnames());
31663
- var import_jsx_runtime55 = __toESM(require_jsx_runtime());
31822
+ var React73 = __toESM(require_react());
31823
+ var import_classnames40 = __toESM(require_classnames());
31824
+ var import_jsx_runtime56 = __toESM(require_jsx_runtime());
31664
31825
  "use client";
31665
- var NavbarText = /* @__PURE__ */ React72.forwardRef(({
31826
+ var NavbarText = /* @__PURE__ */ React73.forwardRef(({
31666
31827
  className,
31667
31828
  bsPrefix,
31668
31829
  as: Component4 = "span",
31669
31830
  ...props
31670
31831
  }, ref) => {
31671
31832
  bsPrefix = useBootstrapPrefix(bsPrefix, "navbar-text");
31672
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Component4, {
31833
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Component4, {
31673
31834
  ref,
31674
- className: (0, import_classnames39.default)(className, bsPrefix),
31835
+ className: (0, import_classnames40.default)(className, bsPrefix),
31675
31836
  ...props
31676
31837
  });
31677
31838
  });
@@ -31679,9 +31840,9 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31679
31840
  var NavbarText_default = NavbarText;
31680
31841
 
31681
31842
  // node_modules/react-bootstrap/esm/Navbar.js
31682
- var import_jsx_runtime56 = __toESM(require_jsx_runtime());
31843
+ var import_jsx_runtime57 = __toESM(require_jsx_runtime());
31683
31844
  "use client";
31684
- var Navbar = /* @__PURE__ */ React73.forwardRef((props, ref) => {
31845
+ var Navbar = /* @__PURE__ */ React74.forwardRef((props, ref) => {
31685
31846
  const {
31686
31847
  bsPrefix: initialBsPrefix,
31687
31848
  expand = true,
@@ -31719,14 +31880,14 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31719
31880
  expanded: !!expanded,
31720
31881
  expand
31721
31882
  }), [bsPrefix, expanded, expand, onToggle]);
31722
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(NavbarContext_default.Provider, {
31883
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(NavbarContext_default.Provider, {
31723
31884
  value: navbarContext,
31724
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(SelectableContext_default.Provider, {
31885
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectableContext_default.Provider, {
31725
31886
  value: handleCollapse,
31726
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Component4, {
31887
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Component4, {
31727
31888
  ref,
31728
31889
  ...controlledProps,
31729
- className: (0, import_classnames40.default)(className, bsPrefix, expand && expandClass, variant && `${bsPrefix}-${variant}`, bg && `bg-${bg}`, sticky && `sticky-${sticky}`, fixed && `fixed-${fixed}`)
31890
+ className: (0, import_classnames41.default)(className, bsPrefix, expand && expandClass, variant && `${bsPrefix}-${variant}`, bg && `bg-${bg}`, sticky && `sticky-${sticky}`, fixed && `fixed-${fixed}`)
31730
31891
  })
31731
31892
  })
31732
31893
  });
@@ -31740,17 +31901,58 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31740
31901
  Toggle: NavbarToggle_default
31741
31902
  });
31742
31903
 
31904
+ // node_modules/react-bootstrap/esm/Row.js
31905
+ var import_classnames42 = __toESM(require_classnames());
31906
+ var React75 = __toESM(require_react());
31907
+ var import_jsx_runtime58 = __toESM(require_jsx_runtime());
31908
+ "use client";
31909
+ var Row = /* @__PURE__ */ React75.forwardRef(({
31910
+ bsPrefix,
31911
+ className,
31912
+ // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
31913
+ as: Component4 = "div",
31914
+ ...props
31915
+ }, ref) => {
31916
+ const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, "row");
31917
+ const breakpoints = useBootstrapBreakpoints();
31918
+ const minBreakpoint = useBootstrapMinBreakpoint();
31919
+ const sizePrefix = `${decoratedBsPrefix}-cols`;
31920
+ const classes = [];
31921
+ breakpoints.forEach((brkPoint) => {
31922
+ const propValue = props[brkPoint];
31923
+ delete props[brkPoint];
31924
+ let cols;
31925
+ if (propValue != null && typeof propValue === "object") {
31926
+ ({
31927
+ cols
31928
+ } = propValue);
31929
+ } else {
31930
+ cols = propValue;
31931
+ }
31932
+ const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : "";
31933
+ if (cols != null)
31934
+ classes.push(`${sizePrefix}${infix}-${cols}`);
31935
+ });
31936
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Component4, {
31937
+ ref,
31938
+ ...props,
31939
+ className: (0, import_classnames42.default)(className, decoratedBsPrefix, ...classes)
31940
+ });
31941
+ });
31942
+ Row.displayName = "Row";
31943
+ var Row_default = Row;
31944
+
31743
31945
  // node_modules/react-bootstrap/esm/Tab.js
31744
31946
  var import_prop_types4 = __toESM(require_prop_types());
31745
31947
 
31746
31948
  // node_modules/@restart/ui/esm/Tabs.js
31747
- var React75 = __toESM(require_react());
31949
+ var React77 = __toESM(require_react());
31748
31950
  var import_react55 = __toESM(require_react());
31749
31951
 
31750
31952
  // node_modules/@restart/ui/esm/TabPanel.js
31751
- var React74 = __toESM(require_react());
31953
+ var React76 = __toESM(require_react());
31752
31954
  var import_react54 = __toESM(require_react());
31753
- var import_jsx_runtime57 = __toESM(require_jsx_runtime());
31955
+ var import_jsx_runtime59 = __toESM(require_jsx_runtime());
31754
31956
  var _excluded8 = ["active", "eventKey", "mountOnEnter", "transition", "unmountOnExit", "role", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited"];
31755
31957
  var _excluded22 = ["activeKey", "getControlledId", "getControllerId"];
31756
31958
  var _excluded32 = ["as"];
@@ -31822,7 +32024,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31822
32024
  onExited
31823
32025
  }];
31824
32026
  }
31825
- var TabPanel = /* @__PURE__ */ React74.forwardRef(
32027
+ var TabPanel = /* @__PURE__ */ React76.forwardRef(
31826
32028
  // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
31827
32029
  (_ref2, ref) => {
31828
32030
  let {
@@ -31840,11 +32042,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31840
32042
  unmountOnExit,
31841
32043
  transition: Transition2 = NoopTransition_default
31842
32044
  }] = useTabPanel(props);
31843
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(TabContext_default.Provider, {
32045
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(TabContext_default.Provider, {
31844
32046
  value: null,
31845
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(SelectableContext_default.Provider, {
32047
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(SelectableContext_default.Provider, {
31846
32048
  value: null,
31847
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Transition2, {
32049
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Transition2, {
31848
32050
  in: isActive,
31849
32051
  onEnter,
31850
32052
  onEntering,
@@ -31854,7 +32056,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31854
32056
  onExited,
31855
32057
  mountOnEnter,
31856
32058
  unmountOnExit,
31857
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Component4, Object.assign({}, tabPanelProps, {
32059
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Component4, Object.assign({}, tabPanelProps, {
31858
32060
  ref,
31859
32061
  hidden: !isActive,
31860
32062
  "aria-hidden": !isActive
@@ -31868,7 +32070,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31868
32070
  var TabPanel_default = TabPanel;
31869
32071
 
31870
32072
  // node_modules/@restart/ui/esm/Tabs.js
31871
- var import_jsx_runtime58 = __toESM(require_jsx_runtime());
32073
+ var import_jsx_runtime60 = __toESM(require_jsx_runtime());
31872
32074
  var Tabs = (props) => {
31873
32075
  const {
31874
32076
  id: userId,
@@ -31893,9 +32095,9 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31893
32095
  getControlledId: (key) => generateChildId(key, "tabpane"),
31894
32096
  getControllerId: (key) => generateChildId(key, "tab")
31895
32097
  }), [onSelect, activeKey, transition, mountOnEnter, unmountOnExit, generateChildId]);
31896
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(TabContext_default.Provider, {
32098
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(TabContext_default.Provider, {
31897
32099
  value: tabContext,
31898
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(SelectableContext_default.Provider, {
32100
+ children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(SelectableContext_default.Provider, {
31899
32101
  value: onSelect || null,
31900
32102
  children
31901
32103
  })
@@ -31913,11 +32115,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31913
32115
  }
31914
32116
 
31915
32117
  // node_modules/react-bootstrap/esm/TabContainer.js
31916
- var import_jsx_runtime59 = __toESM(require_jsx_runtime());
32118
+ var import_jsx_runtime61 = __toESM(require_jsx_runtime());
31917
32119
  var TabContainer = ({
31918
32120
  transition,
31919
32121
  ...props
31920
- }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Tabs_default, {
32122
+ }) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Tabs_default, {
31921
32123
  ...props,
31922
32124
  transition: getTabTransitionComponent(transition)
31923
32125
  });
@@ -31925,20 +32127,20 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31925
32127
  var TabContainer_default = TabContainer;
31926
32128
 
31927
32129
  // node_modules/react-bootstrap/esm/TabContent.js
31928
- var React76 = __toESM(require_react());
31929
- var import_classnames41 = __toESM(require_classnames());
31930
- var import_jsx_runtime60 = __toESM(require_jsx_runtime());
32130
+ var React78 = __toESM(require_react());
32131
+ var import_classnames43 = __toESM(require_classnames());
32132
+ var import_jsx_runtime62 = __toESM(require_jsx_runtime());
31931
32133
  "use client";
31932
- var TabContent = /* @__PURE__ */ React76.forwardRef(({
32134
+ var TabContent = /* @__PURE__ */ React78.forwardRef(({
31933
32135
  className,
31934
32136
  bsPrefix,
31935
32137
  as: Component4 = "div",
31936
32138
  ...props
31937
32139
  }, ref) => {
31938
32140
  bsPrefix = useBootstrapPrefix(bsPrefix, "tab-content");
31939
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Component4, {
32141
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Component4, {
31940
32142
  ref,
31941
- className: (0, import_classnames41.default)(className, bsPrefix),
32143
+ className: (0, import_classnames43.default)(className, bsPrefix),
31942
32144
  ...props
31943
32145
  });
31944
32146
  });
@@ -31946,11 +32148,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31946
32148
  var TabContent_default = TabContent;
31947
32149
 
31948
32150
  // node_modules/react-bootstrap/esm/TabPane.js
31949
- var import_classnames42 = __toESM(require_classnames());
31950
- var React77 = __toESM(require_react());
31951
- var import_jsx_runtime61 = __toESM(require_jsx_runtime());
32151
+ var import_classnames44 = __toESM(require_classnames());
32152
+ var React79 = __toESM(require_react());
32153
+ var import_jsx_runtime63 = __toESM(require_jsx_runtime());
31952
32154
  "use client";
31953
- var TabPane = /* @__PURE__ */ React77.forwardRef(({
32155
+ var TabPane = /* @__PURE__ */ React79.forwardRef(({
31954
32156
  bsPrefix,
31955
32157
  transition,
31956
32158
  ...props
@@ -31976,11 +32178,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31976
32178
  transition: getTabTransitionComponent(transition)
31977
32179
  });
31978
32180
  const prefix = useBootstrapPrefix(bsPrefix, "tab-pane");
31979
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TabContext_default.Provider, {
32181
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(TabContext_default.Provider, {
31980
32182
  value: null,
31981
- children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectableContext_default.Provider, {
32183
+ children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(SelectableContext_default.Provider, {
31982
32184
  value: null,
31983
- children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Transition2, {
32185
+ children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Transition2, {
31984
32186
  in: isActive,
31985
32187
  onEnter,
31986
32188
  onEntering,
@@ -31990,10 +32192,10 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
31990
32192
  onExited,
31991
32193
  mountOnEnter,
31992
32194
  unmountOnExit,
31993
- children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Component4, {
32195
+ children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Component4, {
31994
32196
  ...rest,
31995
32197
  ref,
31996
- className: (0, import_classnames42.default)(className, prefix, isActive && "active")
32198
+ className: (0, import_classnames44.default)(className, prefix, isActive && "active")
31997
32199
  })
31998
32200
  })
31999
32201
  })
@@ -32033,11 +32235,11 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32033
32235
  });
32034
32236
 
32035
32237
  // node_modules/react-bootstrap/esm/Table.js
32036
- var import_classnames43 = __toESM(require_classnames());
32037
- var React78 = __toESM(require_react());
32038
- var import_jsx_runtime62 = __toESM(require_jsx_runtime());
32238
+ var import_classnames45 = __toESM(require_classnames());
32239
+ var React80 = __toESM(require_react());
32240
+ var import_jsx_runtime64 = __toESM(require_jsx_runtime());
32039
32241
  "use client";
32040
- var Table = /* @__PURE__ */ React78.forwardRef(({
32242
+ var Table = /* @__PURE__ */ React80.forwardRef(({
32041
32243
  bsPrefix,
32042
32244
  className,
32043
32245
  striped,
@@ -32050,8 +32252,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32050
32252
  ...props
32051
32253
  }, ref) => {
32052
32254
  const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, "table");
32053
- const classes = (0, import_classnames43.default)(className, decoratedBsPrefix, variant && `${decoratedBsPrefix}-${variant}`, size2 && `${decoratedBsPrefix}-${size2}`, striped && `${decoratedBsPrefix}-${typeof striped === "string" ? `striped-${striped}` : "striped"}`, bordered && `${decoratedBsPrefix}-bordered`, borderless && `${decoratedBsPrefix}-borderless`, hover && `${decoratedBsPrefix}-hover`);
32054
- const table = /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("table", {
32255
+ const classes = (0, import_classnames45.default)(className, decoratedBsPrefix, variant && `${decoratedBsPrefix}-${variant}`, size2 && `${decoratedBsPrefix}-${size2}`, striped && `${decoratedBsPrefix}-${typeof striped === "string" ? `striped-${striped}` : "striped"}`, bordered && `${decoratedBsPrefix}-bordered`, borderless && `${decoratedBsPrefix}-borderless`, hover && `${decoratedBsPrefix}-hover`);
32256
+ const table = /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("table", {
32055
32257
  ...props,
32056
32258
  className: classes,
32057
32259
  ref
@@ -32061,7 +32263,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32061
32263
  if (typeof responsive === "string") {
32062
32264
  responsiveClass = `${responsiveClass}-${responsive}`;
32063
32265
  }
32064
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", {
32266
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", {
32065
32267
  className: responsiveClass,
32066
32268
  children: table
32067
32269
  });
@@ -32071,7 +32273,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32071
32273
  Table.displayName = "Table";
32072
32274
  var Table_default = Table;
32073
32275
 
32074
- // src/NavBar.tsx
32276
+ // src/components/pure/NavBar.tsx
32075
32277
  var import_react56 = __toESM(require_react(), 1);
32076
32278
  var NavBar = ({
32077
32279
  title,
@@ -32130,63 +32332,78 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32130
32332
  // src/components/TestStatusBadge.tsx
32131
32333
  var import_react57 = __toESM(require_react(), 1);
32132
32334
  var TestStatusBadge = (props) => {
32133
- console.groupCollapsed(`[TestStatusBadge] Rendering for ${props.testName}`);
32134
- console.log("Raw props:", JSON.parse(JSON.stringify(props)));
32135
32335
  const hasTests = props.testsExist !== false;
32136
32336
  const testCompleted = props.runTimeErrors !== -1;
32137
32337
  const hasRuntimeErrors = props.runTimeErrors > 0;
32138
- console.log("Status flags:", {
32139
- hasTests,
32140
- testCompleted,
32141
- hasRuntimeErrors,
32142
- typeErrors: props.typeErrors,
32143
- staticErrors: props.staticErrors
32144
- });
32145
32338
  let bddStatus;
32146
32339
  if (!hasTests) {
32147
- console.warn("No tests.json found - marking as failed");
32148
32340
  bddStatus = { text: "\u274C No Tests", variant: "danger" };
32149
32341
  } else if (!testCompleted) {
32150
- console.warn("Test did not complete (runTimeErrors=-1) - marking as failed");
32151
32342
  bddStatus = { text: "\u274C No Tests", variant: "danger" };
32152
32343
  } else if (hasRuntimeErrors) {
32153
- console.warn(`Test failed with ${props.runTimeErrors} runtime errors`);
32154
32344
  bddStatus = { text: `\u274C BDD (${props.runTimeErrors})`, variant: "danger" };
32155
32345
  } else {
32156
- console.log("Test passed all runtime checks");
32157
32346
  bddStatus = { text: "\u2705 BDD", variant: "success" };
32158
32347
  }
32159
32348
  if (props.variant === "compact") {
32160
- console.log("Rendering compact badge:", bddStatus);
32161
32349
  console.groupEnd();
32162
32350
  return /* @__PURE__ */ import_react57.default.createElement(Badge_default, { bg: bddStatus.variant }, bddStatus.text);
32163
32351
  }
32164
- console.log("Rendering full badge set with:", {
32165
- bddStatus,
32166
- typeErrors: props.typeErrors,
32167
- staticErrors: props.staticErrors
32168
- });
32169
- console.groupEnd();
32170
32352
  return /* @__PURE__ */ import_react57.default.createElement("div", { className: "d-flex gap-2" }, /* @__PURE__ */ import_react57.default.createElement(Badge_default, { bg: bddStatus.variant }, bddStatus.text));
32171
32353
  };
32172
32354
 
32173
32355
  // src/components/pure/TestPageView.tsx
32174
32356
  var TestPageView = ({
32175
- route,
32176
- setRoute,
32177
- navigate,
32178
32357
  projectName,
32179
- testName: testName2,
32358
+ testName,
32180
32359
  decodedTestPath,
32181
32360
  runtime,
32182
- testData,
32183
- logs,
32184
- typeErrors,
32185
- lintErrors,
32186
32361
  testsExist,
32187
- errorCounts
32362
+ errorCounts,
32363
+ logs
32188
32364
  }) => {
32189
- return /* @__PURE__ */ import_react58.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react58.default.createElement(
32365
+ const [activeTab, setActiveTab] = import_react58.default.useState("tests.json");
32366
+ const renderTestResults = (testData) => {
32367
+ return /* @__PURE__ */ import_react58.default.createElement("div", { className: "test-results" }, testData.givens.map((given, i) => /* @__PURE__ */ import_react58.default.createElement("div", { key: i, className: "mb-4 card" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "card-header bg-primary text-white" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("h4", null, "Given: ", given.name), given.features && given.features.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react58.default.createElement("small", null, "Features:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, given.features.map((feature, fi) => /* @__PURE__ */ import_react58.default.createElement("li", { key: fi }, feature.startsWith("http") ? /* @__PURE__ */ import_react58.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer", className: "text-white" }, new URL(feature).hostname) : /* @__PURE__ */ import_react58.default.createElement("span", { className: "text-white" }, feature)))))), given.artifacts && given.artifacts.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "dropdown" }, /* @__PURE__ */ import_react58.default.createElement(
32368
+ "button",
32369
+ {
32370
+ className: "btn btn-sm btn-light dropdown-toggle",
32371
+ type: "button",
32372
+ "data-bs-toggle": "dropdown"
32373
+ },
32374
+ "Artifacts (",
32375
+ given.artifacts.length,
32376
+ ")"
32377
+ ), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "dropdown-menu dropdown-menu-end" }, given.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
32378
+ "a",
32379
+ {
32380
+ className: "dropdown-item",
32381
+ href: `reports/${projectName}/${testName.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
32382
+ target: "_blank",
32383
+ rel: "noopener noreferrer"
32384
+ },
32385
+ artifact.split("/").pop()
32386
+ ))))))), /* @__PURE__ */ import_react58.default.createElement("div", { className: "card-body" }, given.whens.map((when, j) => /* @__PURE__ */ import_react58.default.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-start" }, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("strong", null, "When:"), " ", when.name, when.features && when.features.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react58.default.createElement("small", null, "Features:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, when.features.map((feature, fi) => /* @__PURE__ */ import_react58.default.createElement("li", { key: fi }, feature.startsWith("http") ? /* @__PURE__ */ import_react58.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname) : feature)))), when.error && /* @__PURE__ */ import_react58.default.createElement("pre", { className: "mt-2" }, when.error))), when.artifacts && when.artifacts.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "ms-3" }, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Artifacts:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, when.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
32387
+ "a",
32388
+ {
32389
+ href: `reports/${projectName}/${testName.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
32390
+ target: "_blank",
32391
+ className: "text-white",
32392
+ rel: "noopener noreferrer"
32393
+ },
32394
+ artifact.split("/").pop()
32395
+ )))))))), given.thens.map((then, k) => /* @__PURE__ */ import_react58.default.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-start" }, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Then:"), " ", then.name, then.features && then.features.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react58.default.createElement("small", null, "Features:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, then.features.map((feature, fi) => /* @__PURE__ */ import_react58.default.createElement("li", { key: fi }, feature.startsWith("http") ? /* @__PURE__ */ import_react58.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname) : feature)))), then.error && /* @__PURE__ */ import_react58.default.createElement("pre", { className: "mt-2" }, then.error))), then.artifacts && then.artifacts.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "ms-3" }, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Artifacts:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, then.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
32396
+ "a",
32397
+ {
32398
+ href: `reports/${projectName}/${testName.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
32399
+ target: "_blank",
32400
+ className: "text-white",
32401
+ rel: "noopener noreferrer"
32402
+ },
32403
+ artifact.split("/").pop()
32404
+ ))))))))))));
32405
+ };
32406
+ return /* @__PURE__ */ import_react58.default.createElement(Container_default, { fluid: true, className: "px-0" }, /* @__PURE__ */ import_react58.default.createElement(
32190
32407
  NavBar,
32191
32408
  {
32192
32409
  title: decodedTestPath,
@@ -32199,35 +32416,6 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32199
32416
  text: runtime
32200
32417
  },
32201
32418
  className: "pe-none d-flex align-items-center gap-2"
32202
- },
32203
- {
32204
- to: `#results`,
32205
- label: /* @__PURE__ */ import_react58.default.createElement(
32206
- TestStatusBadge,
32207
- {
32208
- testName: decodedTestPath,
32209
- testsExist,
32210
- runTimeErrors: errorCounts.runTimeErrors,
32211
- variant: "compact"
32212
- }
32213
- ),
32214
- className: !testsExist || errorCounts.runTimeErrors > 0 ? "text-danger fw-bold" : "",
32215
- active: route === "results"
32216
- },
32217
- {
32218
- to: `#logs`,
32219
- label: `Runtime logs`,
32220
- active: route === "logs"
32221
- },
32222
- {
32223
- to: `#types`,
32224
- label: errorCounts.typeErrors > 0 ? `tsc (\u274C * ${errorCounts.typeErrors})` : "tsc \u2705 ",
32225
- active: route === "types"
32226
- },
32227
- {
32228
- to: `#lint`,
32229
- label: errorCounts.staticErrors > 0 ? `eslint (\u274C *${errorCounts.staticErrors}) ` : "eslint \u2705",
32230
- active: route === "lint"
32231
32419
  }
32232
32420
  ],
32233
32421
  rightContent: /* @__PURE__ */ import_react58.default.createElement(
@@ -32236,8 +32424,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32236
32424
  variant: "info",
32237
32425
  onClick: async () => {
32238
32426
  try {
32239
- const promptPath = `testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/prompt.txt`;
32240
- const messagePath = `testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/message.txt`;
32427
+ const promptPath = `testeranto/reports/${projectName}/${testName.split(".").slice(0, -1).join(".")}/${runtime}/prompt.txt`;
32428
+ const messagePath = `testeranto/reports/${projectName}/${testName.split(".").slice(0, -1).join(".")}/${runtime}/message.txt`;
32241
32429
  const command = `aider --load ${promptPath} --message-file ${messagePath}`;
32242
32430
  await navigator.clipboard.writeText(command);
32243
32431
  alert("Copied aider command to clipboard!");
@@ -32251,101 +32439,42 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32251
32439
  "\u{1F916}"
32252
32440
  )
32253
32441
  }
32254
- ), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Container, { activeKey: route, onSelect: (k) => {
32255
- if (k) {
32256
- setRoute(k);
32257
- navigate(`#${k}`, { replace: true });
32258
- }
32259
- } }, /* @__PURE__ */ import_react58.default.createElement(Tab_default.Content, { className: "mt-3" }, /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "results" }, !testsExist ? /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "danger", className: "mt-3" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "Tests did not run to completion"), /* @__PURE__ */ import_react58.default.createElement("p", null, "The test results file (tests.json) was not found or could not be loaded."), /* @__PURE__ */ import_react58.default.createElement("div", { className: "mt-3" }, /* @__PURE__ */ import_react58.default.createElement(
32260
- Button_default2,
32261
- {
32262
- variant: "outline-light",
32263
- onClick: () => setRoute("logs"),
32264
- className: "me-2"
32265
- },
32266
- "View Runtime Logs"
32267
- ), /* @__PURE__ */ import_react58.default.createElement(
32268
- Button_default2,
32269
- {
32270
- variant: "outline-light",
32271
- onClick: () => navigate(`/projects/${projectName}#${runtime}`)
32272
- },
32273
- "View Build Logs"
32274
- ))) : testData ? /* @__PURE__ */ import_react58.default.createElement("div", { className: "test-results" }, testData.givens.map((given, i) => /* @__PURE__ */ import_react58.default.createElement("div", { key: i, className: "mb-4 card" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "card-header bg-primary text-white" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("h4", null, "Given: ", given.name), given.features?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react58.default.createElement("small", null, "Features:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, given.features.map((feature, fi) => /* @__PURE__ */ import_react58.default.createElement("li", { key: fi }, feature.startsWith("http") ? /* @__PURE__ */ import_react58.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer", className: "text-white" }, new URL(feature).hostname) : /* @__PURE__ */ import_react58.default.createElement("span", { className: "text-white" }, feature)))))), given.artifacts?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "dropdown" }, /* @__PURE__ */ import_react58.default.createElement(
32275
- "button",
32276
- {
32277
- className: "btn btn-sm btn-light dropdown-toggle",
32278
- type: "button",
32279
- "data-bs-toggle": "dropdown"
32280
- },
32281
- "Artifacts (",
32282
- given.artifacts.length,
32283
- ")"
32284
- ), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "dropdown-menu dropdown-menu-end" }, given.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
32285
- "a",
32286
- {
32287
- className: "dropdown-item",
32288
- href: `/testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
32289
- target: "_blank",
32290
- rel: "noopener noreferrer"
32291
- },
32292
- artifact.split("/").pop()
32293
- ))))))), /* @__PURE__ */ import_react58.default.createElement("div", { className: "card-body" }, given.whens.map((when, j) => /* @__PURE__ */ import_react58.default.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-start" }, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("strong", null, "When:"), " ", when.name, when.features?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react58.default.createElement("small", null, "Features:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, when.features.map((feature, fi) => /* @__PURE__ */ import_react58.default.createElement("li", { key: fi }, feature.startsWith("http") ? /* @__PURE__ */ import_react58.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname) : feature)))), when.error && /* @__PURE__ */ import_react58.default.createElement("pre", { className: "mt-2" }, when.error))), when.artifacts?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "ms-3" }, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Artifacts:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, when.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
32294
- "a",
32295
- {
32296
- href: `/testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
32297
- target: "_blank",
32298
- className: "text-white",
32299
- rel: "noopener noreferrer"
32300
- },
32301
- artifact.split("/").pop()
32302
- )))))))), given.thens.map((then, k) => /* @__PURE__ */ import_react58.default.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between align-items-start" }, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("div", null, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Then:"), " ", then.name, then.features?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react58.default.createElement("small", null, "Features:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, then.features.map((feature, fi) => /* @__PURE__ */ import_react58.default.createElement("li", { key: fi }, feature.startsWith("http") ? /* @__PURE__ */ import_react58.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname) : feature)))), then.error && /* @__PURE__ */ import_react58.default.createElement("pre", { className: "mt-2" }, then.error))), then.artifacts?.length > 0 && /* @__PURE__ */ import_react58.default.createElement("div", { className: "ms-3" }, /* @__PURE__ */ import_react58.default.createElement("strong", null, "Artifacts:"), /* @__PURE__ */ import_react58.default.createElement("ul", { className: "list-unstyled" }, then.artifacts.map((artifact, ai) => /* @__PURE__ */ import_react58.default.createElement("li", { key: ai }, /* @__PURE__ */ import_react58.default.createElement(
32303
- "a",
32304
- {
32305
- href: `/testeranto/reports/${projectName}/${testName2.split(".").slice(0, -1).join(".")}/${runtime}/${artifact}`,
32306
- target: "_blank",
32307
- className: "text-white",
32308
- rel: "noopener noreferrer"
32309
- },
32310
- artifact.split("/").pop()
32311
- )))))))))))) : /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "warning" }, "No test results found")), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "logs" }, logs === void 0 ? /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "danger" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "Logs file missing"), /* @__PURE__ */ import_react58.default.createElement("p", null, "The runtime logs file (logs.txt) was not found."), /* @__PURE__ */ import_react58.default.createElement("p", null, "This suggests the test may not have executed properly.")) : logs === "" ? /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "success" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "No runtime logs"), /* @__PURE__ */ import_react58.default.createElement("p", null, "The test executed successfully with no log output.")) : /* @__PURE__ */ import_react58.default.createElement("pre", { className: "bg-dark text-white p-3" }, logs)), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "types" }, typeErrors ? /* @__PURE__ */ import_react58.default.createElement("pre", { className: "bg-dark text-white p-3" }, typeErrors) : /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "warning" }, "No type errors found")), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "lint" }, lintErrors ? /* @__PURE__ */ import_react58.default.createElement("pre", { className: "bg-dark text-white p-3" }, lintErrors) : /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "warning" }, "No lint errors found")), /* @__PURE__ */ import_react58.default.createElement(Tab_default.Pane, { eventKey: "coverage" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "coverage-report" }, /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "info" }, "Coverage reports coming soon!"), /* @__PURE__ */ import_react58.default.createElement("div", { className: "coverage-stats" }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "stat-card bg-success text-white" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "85%"), /* @__PURE__ */ import_react58.default.createElement("p", null, "Lines Covered")), /* @__PURE__ */ import_react58.default.createElement("div", { className: "stat-card bg-warning text-dark" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "72%"), /* @__PURE__ */ import_react58.default.createElement("p", null, "Branches Covered")), /* @__PURE__ */ import_react58.default.createElement("div", { className: "stat-card bg-info text-white" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "91%"), /* @__PURE__ */ import_react58.default.createElement("p", null, "Functions Covered"))))))));
32312
- };
32313
-
32314
- // src/utils/api.ts
32315
- var fetchTestData = async (projectName, filepath, runTime) => {
32316
- const basePath = `reports/${projectName}/${filepath.split(".").slice(0, -1).join(".")}/${runTime}`;
32317
- try {
32318
- const [testRes, logsRes, typeRes, lintRes] = await Promise.all([
32319
- fetch(`${basePath}/tests.json`),
32320
- fetch(`${basePath}/logs.txt`),
32321
- fetch(`${basePath}/type_errors.txt`),
32322
- fetch(`${basePath}/lint_errors.txt`)
32323
- ]);
32324
- if (!testRes.ok) {
32325
- return {
32326
- testData: null,
32327
- logs: await logsRes.text(),
32328
- typeErrors: await typeRes.text(),
32329
- lintErrors: await lintRes.text(),
32330
- error: "Tests did not complete successfully. Please check the build and runtime logs for errors."
32331
- };
32442
+ ), /* @__PURE__ */ import_react58.default.createElement(Row_default, { className: "g-0" }, /* @__PURE__ */ import_react58.default.createElement(Col_default, { sm: 3, className: "border-end" }, /* @__PURE__ */ import_react58.default.createElement(Nav_default2, { variant: "pills", className: "flex-column" }, Object.keys(logs).map((logName) => {
32443
+ const displayName = logName.replace(".json", "").replace(/_/g, " ");
32444
+ let statusIndicator = null;
32445
+ if (logName === "type_errors.txt" && errorCounts.typeErrors > 0) {
32446
+ statusIndicator = /* @__PURE__ */ import_react58.default.createElement("span", { className: "ms-1" }, "\u274C ", errorCounts.typeErrors);
32447
+ } else if (logName === "lint_errors.txt" && errorCounts.staticErrors > 0) {
32448
+ statusIndicator = /* @__PURE__ */ import_react58.default.createElement("span", { className: "ms-1" }, "\u274C ", errorCounts.staticErrors);
32449
+ } else if (logName === "stderr.log" && errorCounts.runTimeErrors > 0) {
32450
+ statusIndicator = /* @__PURE__ */ import_react58.default.createElement("span", { className: "ms-1" }, "\u274C ", errorCounts.runTimeErrors);
32451
+ } else if (logName === "exit.log" && logs["exit.log"]?.trim() !== "0") {
32452
+ statusIndicator = /* @__PURE__ */ import_react58.default.createElement("span", { className: "ms-1" }, "\u26A0\uFE0F");
32453
+ } else if (logName === "tests.json" && logs["tests.json"]) {
32454
+ statusIndicator = /* @__PURE__ */ import_react58.default.createElement("div", { className: "ms-1" }, /* @__PURE__ */ import_react58.default.createElement(
32455
+ TestStatusBadge,
32456
+ {
32457
+ testName: decodedTestPath,
32458
+ testsExist,
32459
+ runTimeErrors: errorCounts.runTimeErrors,
32460
+ typeErrors: errorCounts.typeErrors,
32461
+ staticErrors: errorCounts.staticErrors,
32462
+ variant: "compact",
32463
+ className: "mt-1"
32464
+ }
32465
+ ));
32332
32466
  }
32333
- return {
32334
- testData: await testRes.json(),
32335
- logs: await logsRes.text(),
32336
- typeErrors: await typeRes.text(),
32337
- lintErrors: await lintRes.text(),
32338
- error: null
32339
- };
32340
- } catch (err) {
32341
- return {
32342
- testData: null,
32343
- logs: "",
32344
- typeErrors: "",
32345
- lintErrors: "",
32346
- error: `Failed to load test data: ${err instanceof Error ? err.message : String(err)}`
32347
- };
32348
- }
32467
+ return /* @__PURE__ */ import_react58.default.createElement(Nav_default2.Item, { key: logName }, /* @__PURE__ */ import_react58.default.createElement(
32468
+ Nav_default2.Link,
32469
+ {
32470
+ eventKey: logName,
32471
+ active: activeTab === logName,
32472
+ onClick: () => setActiveTab(logName),
32473
+ className: "d-flex flex-column align-items-start"
32474
+ },
32475
+ /* @__PURE__ */ import_react58.default.createElement("div", { className: "d-flex justify-content-between w-100" }, /* @__PURE__ */ import_react58.default.createElement("span", { className: "text-capitalize" }, displayName), statusIndicator)
32476
+ ));
32477
+ }))), /* @__PURE__ */ import_react58.default.createElement(Col_default, { sm: 9 }, /* @__PURE__ */ import_react58.default.createElement("div", { className: "p-3" }, !testsExist && activeTab === "tests.json" ? /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "danger" }, /* @__PURE__ */ import_react58.default.createElement("h4", null, "Tests did not run to completion"), /* @__PURE__ */ import_react58.default.createElement("p", null, "The test results file (tests.json) was not found or could not be loaded.")) : activeTab === "tests.json" && logs["tests.json"] ? typeof logs["tests.json"] === "string" ? renderTestResults(JSON.parse(logs["tests.json"])) : renderTestResults(logs["tests.json"]) : logs[activeTab] ? /* @__PURE__ */ import_react58.default.createElement("pre", { className: "bg-dark text-white p-3" }, /* @__PURE__ */ import_react58.default.createElement("code", null, typeof logs[activeTab] === "string" ? logs[activeTab] : JSON.stringify(logs[activeTab], null, 2))) : /* @__PURE__ */ import_react58.default.createElement(Alert_default, { variant: "info" }, "No content available for this log")))));
32349
32478
  };
32350
32479
 
32351
32480
  // src/components/stateful/TestPage.tsx
@@ -32361,11 +32490,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32361
32490
  setRoute("results");
32362
32491
  }
32363
32492
  }, [location.hash]);
32364
- const [testName2, setTestName] = (0, import_react59.useState)("");
32365
- const [testData, setTestData] = (0, import_react59.useState)(null);
32366
- const [logs, setLogs] = (0, import_react59.useState)("");
32367
- const [typeErrors, setTypeErrors] = (0, import_react59.useState)("");
32368
- const [lintErrors, setLintErrors] = (0, import_react59.useState)("");
32493
+ const [testName, setTestName] = (0, import_react59.useState)("");
32494
+ const [logs, setLogs] = (0, import_react59.useState)({});
32369
32495
  const [loading, setLoading] = (0, import_react59.useState)(true);
32370
32496
  const [error, setError] = (0, import_react59.useState)(null);
32371
32497
  const [testsExist, setTestsExist] = (0, import_react59.useState)(true);
@@ -32387,11 +32513,16 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32387
32513
  const fetchData = async () => {
32388
32514
  try {
32389
32515
  const testResponse = await fetchTestData(projectName, testPath, runtime);
32390
- setTestData(testResponse.testData);
32391
- setTestsExist(!!testResponse.testData);
32392
- setLogs(testResponse.logs === null ? void 0 : testResponse.logs);
32393
- setTypeErrors(testResponse.typeErrors);
32394
- setLintErrors(testResponse.lintErrors);
32516
+ console.log("testResponse", testResponse);
32517
+ const receivedLogs = await testResponse.logs;
32518
+ if (receivedLogs["tests.json"] && typeof receivedLogs["tests.json"] === "string") {
32519
+ try {
32520
+ receivedLogs["tests.json"] = JSON.parse(receivedLogs["tests.json"]);
32521
+ } catch (e) {
32522
+ console.error("Failed to parse tests.json:", e);
32523
+ }
32524
+ }
32525
+ setLogs(receivedLogs);
32395
32526
  try {
32396
32527
  const summaryResponse = await fetch(`reports/${projectName}/summary.json`);
32397
32528
  if (!summaryResponse.ok)
@@ -32420,6 +32551,8 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32420
32551
  };
32421
32552
  fetchData();
32422
32553
  }, []);
32554
+ if (!logs)
32555
+ return /* @__PURE__ */ import_react59.default.createElement("div", null, "loading...");
32423
32556
  return /* @__PURE__ */ import_react59.default.createElement(
32424
32557
  TestPageView,
32425
32558
  {
@@ -32427,172 +32560,668 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32427
32560
  setRoute,
32428
32561
  navigate,
32429
32562
  projectName,
32430
- testName: testName2,
32563
+ testName,
32431
32564
  decodedTestPath,
32432
32565
  runtime,
32433
- testData,
32434
32566
  logs,
32435
- typeErrors,
32436
- lintErrors,
32437
- loading,
32438
- error,
32439
32567
  testsExist,
32440
- errorCounts,
32441
- summary
32568
+ errorCounts
32442
32569
  }
32443
32570
  );
32444
32571
  };
32445
32572
 
32446
- // src/SettingsButton.tsx
32573
+ // src/components/stateful/ProjectPage.tsx
32447
32574
  var import_react61 = __toESM(require_react(), 1);
32448
32575
 
32449
- // src/components/SunriseAnimation.tsx
32576
+ // src/components/pure/ProjectPageView.tsx
32450
32577
  var import_react60 = __toESM(require_react(), 1);
32451
- var SunriseAnimation = ({ active }) => {
32452
- const [position, setPosition] = (0, import_react60.useState)(0);
32453
- const [dimensions, setDimensions] = (0, import_react60.useState)({ width: 0, height: 0 });
32454
- const animationIdRef = (0, import_react60.useRef)(null);
32455
- (0, import_react60.useEffect)(() => {
32456
- setDimensions({
32457
- width: window.innerWidth,
32458
- height: window.innerHeight
32459
- });
32460
- const handleResize = () => {
32461
- setDimensions({
32462
- width: window.innerWidth,
32463
- height: window.innerHeight
32464
- });
32465
- };
32466
- window.addEventListener("resize", handleResize);
32467
- return () => {
32468
- window.removeEventListener("resize", handleResize);
32578
+ var BuildLogViewer = ({ logs, runtime }) => {
32579
+ if (!logs)
32580
+ return /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "info" }, "Loading ", runtime.toLowerCase(), " build logs...");
32581
+ const hasErrors = logs.errors?.length > 0;
32582
+ const hasWarnings = logs.warnings?.length > 0;
32583
+ const [activeTab, setActiveTab] = import_react60.default.useState("summary");
32584
+ return /* @__PURE__ */ import_react60.default.createElement("div", null, /* @__PURE__ */ import_react60.default.createElement(Tab_default.Container, { activeKey: activeTab, onSelect: (k) => setActiveTab(k || "summary") }, /* @__PURE__ */ import_react60.default.createElement(Nav_default2, { variant: "tabs", className: "mb-3" }, /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Link, { eventKey: "summary" }, "Build Summary")), /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Link, { eventKey: "warnings" }, hasWarnings ? `\u26A0\uFE0F Warnings (${logs.warnings.length})` : "Warnings")), /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Link, { eventKey: "errors" }, hasErrors ? `\u274C Errors (${logs.errors.length})` : "Errors"))), /* @__PURE__ */ import_react60.default.createElement(Tab_default.Content, null, /* @__PURE__ */ import_react60.default.createElement(Tab_default.Pane, { eventKey: "summary" }, /* @__PURE__ */ import_react60.default.createElement(Card_default, null, /* @__PURE__ */ import_react60.default.createElement(Card_default.Header, { className: "d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react60.default.createElement("h5", null, "Build Summary"), /* @__PURE__ */ import_react60.default.createElement("div", null, hasErrors && /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "danger", className: "me-2" }, logs.errors.length, " Error", logs.errors.length !== 1 ? "s" : ""), hasWarnings && /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "warning", text: "dark" }, logs.warnings.length, " Warning", logs.warnings.length !== 1 ? "s" : ""), !hasErrors && !hasWarnings && /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "success" }, "Build Successful"))), /* @__PURE__ */ import_react60.default.createElement(Card_default.Body, null, /* @__PURE__ */ import_react60.default.createElement("div", { className: "mb-3" }, /* @__PURE__ */ import_react60.default.createElement("h6", null, "Input Files (", Object.keys(logs.metafile?.inputs || {}).length, ")"), /* @__PURE__ */ import_react60.default.createElement(ListGroup_default, { className: "max-h-200 overflow-auto" }, Object.keys(logs.metafile?.inputs || {}).map((file) => /* @__PURE__ */ import_react60.default.createElement(ListGroup_default.Item, { key: file, className: "py-2" }, /* @__PURE__ */ import_react60.default.createElement("code", null, file), /* @__PURE__ */ import_react60.default.createElement("div", { className: "text-muted small" }, logs.metafile.inputs[file].bytes, " bytes"))))), /* @__PURE__ */ import_react60.default.createElement("div", null, /* @__PURE__ */ import_react60.default.createElement("h6", null, "Output Files (", Object.keys(logs.metafile?.outputs || {}).length, ")"), /* @__PURE__ */ import_react60.default.createElement(ListGroup_default, { className: "max-h-200 overflow-auto" }, Object.keys(logs.metafile?.outputs || {}).map((file) => /* @__PURE__ */ import_react60.default.createElement(ListGroup_default.Item, { key: file, className: "py-2" }, /* @__PURE__ */ import_react60.default.createElement("code", null, file), /* @__PURE__ */ import_react60.default.createElement("div", { className: "text-muted small" }, logs.metafile.outputs[file].bytes, " bytes", logs.metafile.outputs[file].entryPoint && /* @__PURE__ */ import_react60.default.createElement("span", { className: "ms-2 badge bg-info" }, "Entry Point"))))))))), /* @__PURE__ */ import_react60.default.createElement(Tab_default.Pane, { eventKey: "warnings" }, hasWarnings ? /* @__PURE__ */ import_react60.default.createElement(Card_default, { className: "border-warning" }, /* @__PURE__ */ import_react60.default.createElement(Card_default.Header, { className: "bg-warning text-white d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react60.default.createElement("span", null, "Build Warnings (", logs.warnings.length, ")"), /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "light", text: "dark" }, (/* @__PURE__ */ new Date()).toLocaleString())), /* @__PURE__ */ import_react60.default.createElement(Card_default.Body, { className: "p-0" }, /* @__PURE__ */ import_react60.default.createElement(ListGroup_default, { variant: "flush" }, logs.warnings.map((warn, i) => /* @__PURE__ */ import_react60.default.createElement(ListGroup_default.Item, { key: i, className: "text-warning" }, /* @__PURE__ */ import_react60.default.createElement("div", { className: "d-flex justify-content-between" }, /* @__PURE__ */ import_react60.default.createElement("strong", null, warn.location?.file || "Unknown file", warn.location?.line && `:${warn.location.line}`), /* @__PURE__ */ import_react60.default.createElement("small", { className: "text-muted" }, warn.pluginName ? `[${warn.pluginName}]` : "")), /* @__PURE__ */ import_react60.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react60.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, JSON.stringify(warn)))))))) : /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "info" }, "No warnings found")), /* @__PURE__ */ import_react60.default.createElement(Tab_default.Pane, { eventKey: "errors" }, hasErrors ? /* @__PURE__ */ import_react60.default.createElement(Card_default, { className: "border-danger" }, /* @__PURE__ */ import_react60.default.createElement(Card_default.Header, { className: "bg-danger text-white d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react60.default.createElement("span", null, "Build Errors (", logs.errors.length, ")"), /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "light", text: "dark" }, (/* @__PURE__ */ new Date()).toLocaleString())), /* @__PURE__ */ import_react60.default.createElement(Card_default.Body, { className: "p-0" }, /* @__PURE__ */ import_react60.default.createElement(ListGroup_default, { variant: "flush" }, logs.errors.map((err, i) => /* @__PURE__ */ import_react60.default.createElement(ListGroup_default.Item, { key: i, className: "text-danger" }, /* @__PURE__ */ import_react60.default.createElement("div", { className: "d-flex justify-content-between" }, /* @__PURE__ */ import_react60.default.createElement("strong", null, err.location?.file || "Unknown file", err.location?.line && `:${err.location.line}`), /* @__PURE__ */ import_react60.default.createElement("small", { className: "text-muted" }, err.pluginName ? `[${err.pluginName}]` : "")), /* @__PURE__ */ import_react60.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react60.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, JSON.stringify(err)))))))) : /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "success" }, /* @__PURE__ */ import_react60.default.createElement("h5", null, "No Errors Found"), /* @__PURE__ */ import_react60.default.createElement("p", { className: "mb-0" }, "The build completed without any errors."))))));
32585
+ };
32586
+ var ProjectPageView = ({
32587
+ summary,
32588
+ nodeLogs,
32589
+ webLogs,
32590
+ pureLogs,
32591
+ config,
32592
+ loading,
32593
+ error,
32594
+ projectName,
32595
+ activeTab,
32596
+ setActiveTab
32597
+ }) => {
32598
+ if (loading)
32599
+ return /* @__PURE__ */ import_react60.default.createElement("div", null, "Loading project data...");
32600
+ if (error)
32601
+ return /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
32602
+ if (!summary)
32603
+ return /* @__PURE__ */ import_react60.default.createElement(Alert_default, { variant: "warning" }, "No data found for project");
32604
+ const testStatuses = Object.entries(summary).map(([testName, testData]) => {
32605
+ const runTime = config.tests?.find((t) => t[0] === testName)?.[1] || "node";
32606
+ return {
32607
+ testName,
32608
+ testsExist: testData.testsExist !== false,
32609
+ runTimeErrors: Number(testData.runTimeErrors) || 0,
32610
+ typeErrors: Number(testData.typeErrors) || 0,
32611
+ staticErrors: Number(testData.staticErrors) || 0,
32612
+ runTime
32469
32613
  };
32470
- }, []);
32471
- const ANIMATION_DURATION = 1e4;
32472
- const UPDATE_INTERVAL = 50;
32473
- (0, import_react60.useEffect)(() => {
32474
- if (!active) {
32475
- if (animationIdRef.current) {
32476
- cancelAnimationFrame(animationIdRef.current);
32477
- animationIdRef.current = null;
32478
- }
32479
- return;
32614
+ });
32615
+ return /* @__PURE__ */ import_react60.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react60.default.createElement(
32616
+ NavBar,
32617
+ {
32618
+ title: projectName,
32619
+ backLink: "/"
32480
32620
  }
32481
- console.log("Starting animation with duration:", ANIMATION_DURATION, "ms");
32482
- let startTime = performance.now();
32483
- let lastUpdateTime = 0;
32484
- const animate = (timestamp) => {
32485
- if (!active)
32486
- return;
32487
- const elapsed = (timestamp - startTime) % ANIMATION_DURATION;
32488
- const progress = elapsed / ANIMATION_DURATION;
32489
- if (timestamp - lastUpdateTime >= UPDATE_INTERVAL) {
32490
- const newPos = Math.cos(progress * Math.PI * 2);
32491
- setPosition(newPos);
32492
- lastUpdateTime = timestamp;
32493
- }
32494
- animationIdRef.current = requestAnimationFrame(animate);
32495
- };
32496
- animationIdRef.current = requestAnimationFrame(animate);
32497
- return () => {
32498
- if (animationIdRef.current) {
32499
- cancelAnimationFrame(animationIdRef.current);
32500
- animationIdRef.current = null;
32501
- }
32502
- };
32503
- }, [active]);
32504
- const yPos = dimensions.height * (1 - position);
32505
- const normalizedPos = (position + 1) / 2;
32506
- if (!active)
32507
- return null;
32508
- return /* @__PURE__ */ import_react60.default.createElement("div", { id: "sunrise", style: {
32509
- width: "100vw",
32510
- height: "100vh",
32511
- position: "fixed",
32512
- top: 0,
32513
- left: 0,
32514
- backgroundColor: "transparent",
32515
- overflow: "hidden",
32516
- pointerEvents: "none"
32517
- } }, /* @__PURE__ */ import_react60.default.createElement("div", { id: "daily-bg", style: {
32518
- position: "absolute",
32519
- top: 0,
32520
- left: 0,
32521
- width: "100%",
32522
- height: "100%",
32523
- backgroundColor: "rgba(0,0,0,0.3)",
32524
- zIndex: -1001
32525
- } }), "Stars Container", /* @__PURE__ */ import_react60.default.createElement(
32526
- "div",
32621
+ ), /* @__PURE__ */ import_react60.default.createElement(Row_default, { className: "g-0" }, /* @__PURE__ */ import_react60.default.createElement(Col_default, { sm: 3, className: "border-end" }, /* @__PURE__ */ import_react60.default.createElement(Nav_default2, { variant: "pills", className: "flex-column" }, /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react60.default.createElement(
32622
+ Nav_default2.Link,
32527
32623
  {
32528
- id: "starsContainer",
32529
- style: {
32530
- perspective: 350,
32531
- perspectiveOrigin: "50% 300%",
32532
- overflow: "hidden",
32533
- position: "absolute",
32534
- top: 0,
32535
- left: "-50%",
32536
- width: "200%",
32537
- height: "50%",
32538
- zIndex: -1e3,
32539
- opacity: Math.max(0, 0.5 - normalizedPos * 0.5)
32540
- }
32624
+ active: activeTab === "tests",
32625
+ onClick: () => setActiveTab("tests"),
32626
+ className: "d-flex flex-column align-items-start"
32541
32627
  },
32542
- /* @__PURE__ */ import_react60.default.createElement(
32543
- "div",
32544
- {
32545
- id: "stars",
32546
- style: {
32547
- backgroundRepeat: "repeat",
32548
- position: "absolute",
32549
- width: "200%",
32550
- height: "200%",
32551
- left: "-50%",
32552
- bottom: 0,
32553
- opacity: 0.5,
32554
- transform: "rotateX(-90deg)"
32555
- }
32556
- }
32557
- )
32558
- ), /* @__PURE__ */ import_react60.default.createElement(
32559
- "div",
32628
+ /* @__PURE__ */ import_react60.default.createElement("div", { className: "d-flex justify-content-between w-100" }, /* @__PURE__ */ import_react60.default.createElement("span", null, "Tests"), testStatuses.some((t) => t.runTimeErrors > 0) ? /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "danger" }, "\u274C") : testStatuses.some((t) => t.typeErrors > 0 || t.staticErrors > 0) ? /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "warning", text: "dark" }, "\u26A0\uFE0F") : /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "success" }, "\u2713"))
32629
+ )), /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react60.default.createElement(
32630
+ Nav_default2.Link,
32560
32631
  {
32561
- id: "sun",
32562
- style: {
32563
- position: "absolute",
32564
- top: 0,
32565
- left: "50%",
32566
- transform: `translateX(-50%) translateY(${yPos}px)`,
32567
- width: "100%",
32568
- height: "50%",
32569
- background: `radial-gradient(50% ${yPos}px, circle, rgba(242,248,247,1) 0%,rgba(249,249,28,1) 3%,rgba(247,214,46,1) 8%,rgba(248,200,95,1) 12%,rgba(201,165,132,1) 30%,rgba(115,130,133,1) 51%,rgba(46,97,122,1) 85%,rgba(24,75,106,1) 100%)`,
32570
- zIndex: -900,
32571
- opacity: 0.5
32572
- }
32573
- }
32574
- ), /* @__PURE__ */ import_react60.default.createElement(
32575
- "div",
32632
+ active: activeTab === "node",
32633
+ onClick: () => setActiveTab("node"),
32634
+ className: "d-flex justify-content-between align-items-center"
32635
+ },
32636
+ "Node build logs",
32637
+ nodeLogs?.errors?.length ? /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "danger" }, "\u274C ", nodeLogs.errors.length) : nodeLogs?.warnings?.length ? /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "warning", text: "dark" }, "\u26A0\uFE0F") : null
32638
+ )), /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react60.default.createElement(
32639
+ Nav_default2.Link,
32576
32640
  {
32577
- id: "sunDay",
32578
- style: {
32579
- position: "absolute",
32580
- top: 0,
32581
- left: 0,
32582
- width: "100%",
32583
- height: "50%",
32584
- background: `radial-gradient(50% ${yPos}px, circle, rgba(252,255,251,0.9) 0%,rgba(253,250,219,0.4) 30%,rgba(226,219,197,0.01) 70%,rgba(226,219,197,0.0) 70%,rgba(201,165,132,0) 100%)`,
32585
- zIndex: -800,
32586
- opacity: Math.max(0, 1 - yPos / dimensions.height)
32587
- }
32588
- }
32589
- ), /* @__PURE__ */ import_react60.default.createElement(
32590
- "div",
32641
+ active: activeTab === "web",
32642
+ onClick: () => setActiveTab("web"),
32643
+ className: "d-flex justify-content-between align-items-center"
32644
+ },
32645
+ "Web build logs",
32646
+ webLogs?.errors?.length ? /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "danger" }, "\u274C ", webLogs.errors.length) : webLogs?.warnings?.length ? /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "warning", text: "dark" }, "\u26A0\uFE0F") : null
32647
+ )), /* @__PURE__ */ import_react60.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react60.default.createElement(
32648
+ Nav_default2.Link,
32591
32649
  {
32592
- id: "sunSet",
32593
- style: {
32594
- position: "absolute",
32595
- top: 0,
32650
+ active: activeTab === "pure",
32651
+ onClick: () => setActiveTab("pure"),
32652
+ className: "d-flex justify-content-between align-items-center"
32653
+ },
32654
+ "Pure build logs",
32655
+ pureLogs?.errors?.length ? /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "danger" }, "\u274C ", pureLogs.errors.length) : pureLogs?.warnings?.length ? /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "warning", text: "dark" }, "\u26A0\uFE0F") : null
32656
+ )))), /* @__PURE__ */ import_react60.default.createElement(Col_default, { sm: 9 }, /* @__PURE__ */ import_react60.default.createElement("div", { className: "p-3" }, activeTab === "tests" ? /* @__PURE__ */ import_react60.default.createElement(Table_default, { striped: true, bordered: true, hover: true }, /* @__PURE__ */ import_react60.default.createElement("thead", null, /* @__PURE__ */ import_react60.default.createElement("tr", null, /* @__PURE__ */ import_react60.default.createElement("th", null, "Test"), /* @__PURE__ */ import_react60.default.createElement("th", null, "Runtime"), /* @__PURE__ */ import_react60.default.createElement("th", null, "Status"), /* @__PURE__ */ import_react60.default.createElement("th", null, "Type Errors"), /* @__PURE__ */ import_react60.default.createElement("th", null, "Lint Errors"))), /* @__PURE__ */ import_react60.default.createElement("tbody", null, testStatuses.map((test) => /* @__PURE__ */ import_react60.default.createElement("tr", { key: test.testName, "data-testid": `test-row-${test.testName}` }, /* @__PURE__ */ import_react60.default.createElement("td", null, /* @__PURE__ */ import_react60.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}` }, test.testName)), /* @__PURE__ */ import_react60.default.createElement("td", null, /* @__PURE__ */ import_react60.default.createElement(Badge_default, { bg: "secondary", className: "ms-2" }, test.runTime)), /* @__PURE__ */ import_react60.default.createElement("td", null, /* @__PURE__ */ import_react60.default.createElement(
32657
+ TestStatusBadge,
32658
+ {
32659
+ testName: test.testName,
32660
+ testsExist: test.testsExist,
32661
+ runTimeErrors: test.runTimeErrors,
32662
+ typeErrors: test.typeErrors,
32663
+ staticErrors: test.staticErrors
32664
+ }
32665
+ )), /* @__PURE__ */ import_react60.default.createElement("td", null, /* @__PURE__ */ import_react60.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}#types` }, test.typeErrors > 0 ? `\u274C ${test.typeErrors}` : "\u2705")), /* @__PURE__ */ import_react60.default.createElement("td", null, /* @__PURE__ */ import_react60.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}#lint` }, test.staticErrors > 0 ? `\u274C ${test.staticErrors}` : "\u2705")))))) : activeTab === "node" ? /* @__PURE__ */ import_react60.default.createElement(BuildLogViewer, { logs: nodeLogs, runtime: "Node" }) : activeTab === "web" ? /* @__PURE__ */ import_react60.default.createElement(BuildLogViewer, { logs: webLogs, runtime: "Web" }) : activeTab === "pure" ? /* @__PURE__ */ import_react60.default.createElement(BuildLogViewer, { logs: pureLogs, runtime: "Pure" }) : null))));
32666
+ };
32667
+
32668
+ // src/components/stateful/ProjectPage.tsx
32669
+ var ProjectPage = () => {
32670
+ const [summary, setSummary] = (0, import_react61.useState)(null);
32671
+ const [nodeLogs, setNodeLogs] = (0, import_react61.useState)(null);
32672
+ const [webLogs, setWebLogs] = (0, import_react61.useState)(null);
32673
+ const [pureLogs, setPureLogs] = (0, import_react61.useState)(null);
32674
+ const [config, setConfig] = (0, import_react61.useState)({});
32675
+ const [loading, setLoading] = (0, import_react61.useState)(true);
32676
+ const [error, setError] = (0, import_react61.useState)(null);
32677
+ const [projectName, setProjectName] = (0, import_react61.useState)("");
32678
+ const navigate = useNavigate();
32679
+ const location = useLocation();
32680
+ const [route, setRoute] = (0, import_react61.useState)("tests");
32681
+ (0, import_react61.useEffect)(() => {
32682
+ const hash = location.hash.replace("#", "");
32683
+ if (hash && ["tests", "node", "web", "pure"].includes(hash)) {
32684
+ setRoute(hash);
32685
+ } else {
32686
+ setRoute("tests");
32687
+ }
32688
+ }, [location.hash]);
32689
+ const { projectName: name } = useParams();
32690
+ (0, import_react61.useEffect)(() => {
32691
+ if (!name)
32692
+ return;
32693
+ setProjectName(name);
32694
+ const fetchData = async () => {
32695
+ try {
32696
+ const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
32697
+ fetch(`reports/${name}/summary.json`),
32698
+ fetch(`bundles/node/${name}/metafile.json`),
32699
+ fetch(`bundles/web/${name}/metafile.json`),
32700
+ fetch(`bundles/pure/${name}/metafile.json`),
32701
+ fetch(`reports/${name}/config.json`)
32702
+ ]);
32703
+ const [summaryData, nodeData, webData, pureData, configData] = await Promise.all([
32704
+ summaryRes.ok ? summaryRes.json() : {},
32705
+ nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
32706
+ webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
32707
+ pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
32708
+ configRes.ok ? configRes.json() : { tests: [] }
32709
+ ]);
32710
+ setSummary(summaryData);
32711
+ setNodeLogs(nodeData);
32712
+ setWebLogs(webData);
32713
+ setPureLogs(pureData);
32714
+ setConfig(configData);
32715
+ } catch (err) {
32716
+ setError(err instanceof Error ? err.message : "Unknown error");
32717
+ } finally {
32718
+ setLoading(false);
32719
+ }
32720
+ };
32721
+ fetchData();
32722
+ }, [name]);
32723
+ return /* @__PURE__ */ import_react61.default.createElement(
32724
+ ProjectPageView,
32725
+ {
32726
+ summary,
32727
+ nodeLogs,
32728
+ webLogs,
32729
+ pureLogs,
32730
+ config,
32731
+ loading,
32732
+ error,
32733
+ projectName,
32734
+ activeTab: route,
32735
+ setActiveTab: setRoute
32736
+ }
32737
+ );
32738
+ };
32739
+
32740
+ // src/components/stateful/ProjectsPage.tsx
32741
+ var import_react63 = __toESM(require_react(), 1);
32742
+
32743
+ // src/components/pure/ProjectsPageView.tsx
32744
+ var import_react62 = __toESM(require_react(), 1);
32745
+ var ProjectsPageView = ({
32746
+ projects,
32747
+ summaries,
32748
+ configs,
32749
+ loading,
32750
+ error,
32751
+ navigate
32752
+ }) => {
32753
+ const getStatusIcon = (status) => {
32754
+ switch (status) {
32755
+ case "success":
32756
+ return "\u2705";
32757
+ case "failed":
32758
+ return "\u274C";
32759
+ case "warning":
32760
+ return "\u26A0\uFE0F";
32761
+ default:
32762
+ return "\u2753";
32763
+ }
32764
+ };
32765
+ if (loading)
32766
+ return /* @__PURE__ */ import_react62.default.createElement("div", null, "Loading projects...");
32767
+ if (error)
32768
+ return /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
32769
+ return /* @__PURE__ */ import_react62.default.createElement("div", { className: "p-3" }, /* @__PURE__ */ import_react62.default.createElement(NavBar, { title: "Testeranto", backLink: void 0 }), /* @__PURE__ */ import_react62.default.createElement(Table_default, { striped: true, bordered: true, hover: true, responsive: true }, /* @__PURE__ */ import_react62.default.createElement("thead", null, /* @__PURE__ */ import_react62.default.createElement("tr", null, /* @__PURE__ */ import_react62.default.createElement("th", null, "Project"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Tests"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Node"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Web"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Pure"))), /* @__PURE__ */ import_react62.default.createElement("tbody", null, projects.map((project) => /* @__PURE__ */ import_react62.default.createElement("tr", { key: project.name }, /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement("a", { href: "#", onClick: (e) => {
32770
+ e.preventDefault();
32771
+ navigate(`/projects/${project.name}`);
32772
+ } }, project.name)), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement("div", { style: { maxHeight: "200px", overflowY: "auto" } }, summaries[project.name] ? Object.keys(summaries[project.name]).map((testName) => {
32773
+ const testData = summaries[project.name][testName];
32774
+ const runTime = configs[project.name]?.tests?.find((t) => t[0] === testName)?.[1] || "node";
32775
+ const hasRuntimeErrors = testData.runTimeErrors > 0;
32776
+ const hasStaticErrors = testData.typeErrors > 0 || testData.staticErrors > 0;
32777
+ return /* @__PURE__ */ import_react62.default.createElement("div", { key: testName }, /* @__PURE__ */ import_react62.default.createElement(
32778
+ "a",
32779
+ {
32780
+ href: `#/projects/${project.name}/tests/${encodeURIComponent(testName)}/${runTime}`
32781
+ },
32782
+ hasRuntimeErrors ? "\u274C " : hasStaticErrors ? "\u26A0\uFE0F " : "",
32783
+ testName.split("/").pop() || testName
32784
+ ));
32785
+ }) : /* @__PURE__ */ import_react62.default.createElement("div", null, "Loading tests..."))), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement(
32786
+ "a",
32787
+ {
32788
+ href: `#/projects/${project.name}#node`
32789
+ },
32790
+ getStatusIcon(project.nodeStatus),
32791
+ " Node build logs"
32792
+ )), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement(
32793
+ "a",
32794
+ {
32795
+ href: `#/projects/${project.name}#web`
32796
+ },
32797
+ getStatusIcon(project.webStatus),
32798
+ " Web build logs"
32799
+ )), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement(
32800
+ "a",
32801
+ {
32802
+ href: `#/projects/${project.name}#pure`
32803
+ },
32804
+ getStatusIcon(project.pureStatus),
32805
+ " Pure build logs"
32806
+ )))))));
32807
+ };
32808
+
32809
+ // src/components/stateful/ProjectsPage.tsx
32810
+ var ProjectsPage = () => {
32811
+ const [projects, setProjects] = (0, import_react63.useState)([]);
32812
+ const [summaries, setSummaries] = (0, import_react63.useState)({});
32813
+ const [loading, setLoading] = (0, import_react63.useState)(true);
32814
+ const [error, setError] = (0, import_react63.useState)(null);
32815
+ const [configs, setConfigs] = (0, import_react63.useState)({});
32816
+ const navigate = useNavigate();
32817
+ (0, import_react63.useEffect)(() => {
32818
+ const fetchProjects = async () => {
32819
+ try {
32820
+ const projectsRes = await fetch(`projects.json`);
32821
+ const projectNames = await projectsRes.json();
32822
+ const projectsData = await Promise.all(
32823
+ projectNames.map(async (name) => {
32824
+ const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
32825
+ fetch(`reports/${name}/summary.json`),
32826
+ fetch(`bundles/node/${name}/metafile.json`),
32827
+ fetch(`bundles/web/${name}/metafile.json`),
32828
+ fetch(`bundles/pure/${name}/metafile.json`),
32829
+ fetch(`reports/${name}/config.json`)
32830
+ ]);
32831
+ const [summary, nodeData, webData, pureData, configData] = await Promise.all([
32832
+ summaryRes.json(),
32833
+ nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
32834
+ webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
32835
+ pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
32836
+ configRes.json()
32837
+ ]);
32838
+ setSummaries((prev) => ({ ...prev, [name]: summary }));
32839
+ setConfigs((prev) => ({ ...prev, [name]: configData }));
32840
+ return {
32841
+ name,
32842
+ testCount: Object.keys(summary).length,
32843
+ nodeStatus: nodeData.errors?.length ? "failed" : nodeData.warnings?.length ? "warning" : "success",
32844
+ webStatus: webData.errors?.length ? "failed" : webData.warnings?.length ? "warning" : "success",
32845
+ pureStatus: pureData.errors?.length ? "failed" : pureData.warnings?.length ? "warning" : "success"
32846
+ };
32847
+ })
32848
+ );
32849
+ setProjects(projectsData);
32850
+ } catch (err) {
32851
+ setError(err instanceof Error ? err.message : "Unknown error");
32852
+ } finally {
32853
+ setLoading(false);
32854
+ }
32855
+ };
32856
+ fetchProjects();
32857
+ }, []);
32858
+ return /* @__PURE__ */ import_react63.default.createElement(
32859
+ ProjectsPageView,
32860
+ {
32861
+ projects,
32862
+ summaries,
32863
+ configs,
32864
+ loading,
32865
+ error,
32866
+ navigate
32867
+ }
32868
+ );
32869
+ };
32870
+
32871
+ // src/components/pure/AppFrame.tsx
32872
+ var import_react68 = __toESM(require_react(), 1);
32873
+
32874
+ // src/components/pure/SettingsButton.tsx
32875
+ var import_react67 = __toESM(require_react(), 1);
32876
+
32877
+ // src/components/pure/ModalContent.tsx
32878
+ var import_react65 = __toESM(require_react(), 1);
32879
+
32880
+ // src/components/pure/ThemeCard.tsx
32881
+ var import_react64 = __toESM(require_react(), 1);
32882
+ var ThemeCard = ({
32883
+ theme,
32884
+ handleThemeChange,
32885
+ value,
32886
+ title,
32887
+ description,
32888
+ style: style2
32889
+ }) => /* @__PURE__ */ import_react64.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react64.default.createElement(
32890
+ "div",
32891
+ {
32892
+ className: `card theme-card ${theme === value ? "border-primary" : ""}`,
32893
+ onClick: () => handleThemeChange({
32894
+ target: { value }
32895
+ }),
32896
+ style: style2
32897
+ },
32898
+ /* @__PURE__ */ import_react64.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react64.default.createElement("h5", { className: "card-title mb-1" }, title), /* @__PURE__ */ import_react64.default.createElement("p", { className: "small text-muted mb-0" }, description))
32899
+ ));
32900
+
32901
+ // src/components/pure/ModalContent.tsx
32902
+ var ModalContent = ({
32903
+ theme,
32904
+ handleThemeChange
32905
+ }) => /* @__PURE__ */ import_react65.default.createElement(import_react65.default.Fragment, null, /* @__PURE__ */ import_react65.default.createElement(Modal_default2.Header, { closeButton: true, className: "border-0" }, /* @__PURE__ */ import_react65.default.createElement(Modal_default2.Title, { className: "d-flex align-items-center" }, /* @__PURE__ */ import_react65.default.createElement("i", { className: "bi bi-palette-fill me-2" }), /* @__PURE__ */ import_react65.default.createElement("span", null, "Settings"))), /* @__PURE__ */ import_react65.default.createElement("div", { className: "alert alert-warning mx-3 mt-2 mb-0" }, /* @__PURE__ */ import_react65.default.createElement("i", { className: "bi bi-exclamation-triangle-fill me-2" }), /* @__PURE__ */ import_react65.default.createElement("strong", null, "Warning:"), ' Themes are an experimental feature. Only "Business casual" is fully supported at this time.'), /* @__PURE__ */ import_react65.default.createElement(Modal_default2.Body, { className: "p-0" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "p-3" }, /* @__PURE__ */ import_react65.default.createElement("div", { className: "row g-3" }, /* @__PURE__ */ import_react65.default.createElement(
32906
+ ThemeCard,
32907
+ {
32908
+ theme,
32909
+ handleThemeChange,
32910
+ value: "system",
32911
+ title: "9 to 5",
32912
+ description: "Follows your OS theme",
32913
+ style: {
32914
+ background: "linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%)",
32915
+ borderColor: "#adb5bd"
32916
+ }
32917
+ }
32918
+ ), /* @__PURE__ */ import_react65.default.createElement(
32919
+ ThemeCard,
32920
+ {
32921
+ theme,
32922
+ handleThemeChange,
32923
+ value: "light",
32924
+ title: "Business casual",
32925
+ description: "Clean & professional",
32926
+ style: {
32927
+ background: "linear-gradient(135deg, #ffffff 0%, #f1f3f5 100%)",
32928
+ borderColor: "#ced4da",
32929
+ color: "#212529",
32930
+ borderWidth: "2px"
32931
+ }
32932
+ }
32933
+ ), /* @__PURE__ */ import_react65.default.createElement(
32934
+ ThemeCard,
32935
+ {
32936
+ theme,
32937
+ handleThemeChange,
32938
+ value: "dark",
32939
+ title: "Business formal",
32940
+ description: "Premium & focused",
32941
+ style: {
32942
+ background: "linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)",
32943
+ borderColor: "#4ecdc4",
32944
+ color: "#f8f9fa",
32945
+ borderWidth: "2px"
32946
+ }
32947
+ }
32948
+ ), /* @__PURE__ */ import_react65.default.createElement(
32949
+ ThemeCard,
32950
+ {
32951
+ theme,
32952
+ handleThemeChange,
32953
+ value: "light-vibrant",
32954
+ title: "Office Party",
32955
+ description: "Colorful & fun",
32956
+ style: {
32957
+ background: "linear-gradient(135deg, #ff2d75 0%, #00e5ff 100%)",
32958
+ borderColor: "#ffeb3b",
32959
+ color: "#fff"
32960
+ }
32961
+ }
32962
+ ), /* @__PURE__ */ import_react65.default.createElement(
32963
+ ThemeCard,
32964
+ {
32965
+ theme,
32966
+ handleThemeChange,
32967
+ value: "dark-vibrant",
32968
+ title: "After Party",
32969
+ description: "Neon nightlife",
32970
+ style: {
32971
+ background: "linear-gradient(135deg, #16213e 0%, #e94560 100%)",
32972
+ borderColor: "#00e5ff",
32973
+ color: "#fff"
32974
+ }
32975
+ }
32976
+ ), /* @__PURE__ */ import_react65.default.createElement(
32977
+ ThemeCard,
32978
+ {
32979
+ theme,
32980
+ handleThemeChange,
32981
+ value: "sepia",
32982
+ title: "WFH",
32983
+ description: "Vintage warmth",
32984
+ style: {
32985
+ background: "linear-gradient(135deg, #f4ecd8 0%, #d0b88f 100%)",
32986
+ borderColor: "#8b6b4a",
32987
+ color: "#3a3226"
32988
+ }
32989
+ }
32990
+ ), /* @__PURE__ */ import_react65.default.createElement(
32991
+ ThemeCard,
32992
+ {
32993
+ theme,
32994
+ handleThemeChange,
32995
+ value: "light-grayscale",
32996
+ title: "Serious Business",
32997
+ description: "Simple & distraction-free",
32998
+ style: {
32999
+ background: "linear-gradient(135deg, #f5f5f5 0%, #e0e0e0 100%)",
33000
+ borderColor: "#666",
33001
+ color: "#333",
33002
+ borderWidth: "2px"
33003
+ }
33004
+ }
33005
+ ), /* @__PURE__ */ import_react65.default.createElement(
33006
+ ThemeCard,
33007
+ {
33008
+ theme,
33009
+ handleThemeChange,
33010
+ value: "dark-grayscale",
33011
+ title: "Very Serious business",
33012
+ description: "Maximum readability",
33013
+ style: {
33014
+ background: "linear-gradient(135deg, #111 0%, #333 100%)",
33015
+ borderColor: "#ff6b6b",
33016
+ color: "#e0e0e0",
33017
+ borderWidth: "2px"
33018
+ }
33019
+ }
33020
+ ), /* @__PURE__ */ import_react65.default.createElement(
33021
+ ThemeCard,
33022
+ {
33023
+ theme,
33024
+ handleThemeChange,
33025
+ value: "daily",
33026
+ title: "Dreaming of PTO",
33027
+ description: "Sunrise, sunset",
33028
+ style: {
33029
+ background: "linear-gradient(135deg, #6eafff 0%, #f9fbf0 100%)",
33030
+ borderColor: "#f7d62e",
33031
+ color: "#00192d"
33032
+ }
33033
+ }
33034
+ ), /* @__PURE__ */ import_react65.default.createElement(
33035
+ ThemeCard,
33036
+ {
33037
+ theme,
33038
+ handleThemeChange,
33039
+ value: "protanopia",
33040
+ title: "Protanopia",
33041
+ description: "Red-blind mode",
33042
+ style: {
33043
+ background: "linear-gradient(135deg, #f8f9fa 0%, #e0e8ff 100%)",
33044
+ borderColor: "#3366cc",
33045
+ color: "#333"
33046
+ }
33047
+ }
33048
+ ), /* @__PURE__ */ import_react65.default.createElement(
33049
+ ThemeCard,
33050
+ {
33051
+ theme,
33052
+ handleThemeChange,
33053
+ value: "deuteranopia",
33054
+ title: "Deuteranopia",
33055
+ description: "Green-blind mode",
33056
+ style: {
33057
+ background: "linear-gradient(135deg, #f8f9fa 0%, #ffe0e0 100%)",
33058
+ borderColor: "#cc6633",
33059
+ color: "#333"
33060
+ }
33061
+ }
33062
+ ), /* @__PURE__ */ import_react65.default.createElement(
33063
+ ThemeCard,
33064
+ {
33065
+ theme,
33066
+ handleThemeChange,
33067
+ value: "tritanopia",
33068
+ title: "Tritanopia",
33069
+ description: "Blue-blind mode",
33070
+ style: {
33071
+ background: "linear-gradient(135deg, #f8f9fa 0%, #e0ffe0 100%)",
33072
+ borderColor: "#00aa66",
33073
+ color: "#333"
33074
+ }
33075
+ }
33076
+ )))));
33077
+
33078
+ // src/components/SunriseAnimation.tsx
33079
+ var import_react66 = __toESM(require_react(), 1);
33080
+ var SunriseAnimation = ({ active }) => {
33081
+ const [position, setPosition] = (0, import_react66.useState)(0);
33082
+ const [dimensions, setDimensions] = (0, import_react66.useState)({ width: 0, height: 0 });
33083
+ const animationIdRef = (0, import_react66.useRef)(null);
33084
+ (0, import_react66.useEffect)(() => {
33085
+ setDimensions({
33086
+ width: window.innerWidth,
33087
+ height: window.innerHeight
33088
+ });
33089
+ const handleResize = () => {
33090
+ setDimensions({
33091
+ width: window.innerWidth,
33092
+ height: window.innerHeight
33093
+ });
33094
+ };
33095
+ window.addEventListener("resize", handleResize);
33096
+ return () => {
33097
+ window.removeEventListener("resize", handleResize);
33098
+ };
33099
+ }, []);
33100
+ const ANIMATION_DURATION = 1e4;
33101
+ const UPDATE_INTERVAL = 50;
33102
+ (0, import_react66.useEffect)(() => {
33103
+ if (!active) {
33104
+ if (animationIdRef.current) {
33105
+ cancelAnimationFrame(animationIdRef.current);
33106
+ animationIdRef.current = null;
33107
+ }
33108
+ return;
33109
+ }
33110
+ console.log("Starting animation with duration:", ANIMATION_DURATION, "ms");
33111
+ let startTime = performance.now();
33112
+ let lastUpdateTime = 0;
33113
+ const animate = (timestamp) => {
33114
+ if (!active)
33115
+ return;
33116
+ const elapsed = (timestamp - startTime) % ANIMATION_DURATION;
33117
+ const progress = elapsed / ANIMATION_DURATION;
33118
+ if (timestamp - lastUpdateTime >= UPDATE_INTERVAL) {
33119
+ const newPos = Math.cos(progress * Math.PI * 2);
33120
+ setPosition(newPos);
33121
+ lastUpdateTime = timestamp;
33122
+ }
33123
+ animationIdRef.current = requestAnimationFrame(animate);
33124
+ };
33125
+ animationIdRef.current = requestAnimationFrame(animate);
33126
+ return () => {
33127
+ if (animationIdRef.current) {
33128
+ cancelAnimationFrame(animationIdRef.current);
33129
+ animationIdRef.current = null;
33130
+ }
33131
+ };
33132
+ }, [active]);
33133
+ const yPos = dimensions.height * (1 - position);
33134
+ const normalizedPos = (position + 1) / 2;
33135
+ if (!active)
33136
+ return null;
33137
+ return /* @__PURE__ */ import_react66.default.createElement("div", { id: "sunrise", style: {
33138
+ width: "100vw",
33139
+ height: "100vh",
33140
+ position: "fixed",
33141
+ top: 0,
33142
+ left: 0,
33143
+ backgroundColor: "transparent",
33144
+ overflow: "hidden",
33145
+ pointerEvents: "none"
33146
+ } }, /* @__PURE__ */ import_react66.default.createElement("div", { id: "daily-bg", style: {
33147
+ position: "absolute",
33148
+ top: 0,
33149
+ left: 0,
33150
+ width: "100%",
33151
+ height: "100%",
33152
+ backgroundColor: "rgba(0,0,0,0.3)",
33153
+ zIndex: -1001
33154
+ } }), "Stars Container", /* @__PURE__ */ import_react66.default.createElement(
33155
+ "div",
33156
+ {
33157
+ id: "starsContainer",
33158
+ style: {
33159
+ perspective: 350,
33160
+ perspectiveOrigin: "50% 300%",
33161
+ overflow: "hidden",
33162
+ position: "absolute",
33163
+ top: 0,
33164
+ left: "-50%",
33165
+ width: "200%",
33166
+ height: "50%",
33167
+ zIndex: -1e3,
33168
+ opacity: Math.max(0, 0.5 - normalizedPos * 0.5)
33169
+ }
33170
+ },
33171
+ /* @__PURE__ */ import_react66.default.createElement(
33172
+ "div",
33173
+ {
33174
+ id: "stars",
33175
+ style: {
33176
+ backgroundRepeat: "repeat",
33177
+ position: "absolute",
33178
+ width: "200%",
33179
+ height: "200%",
33180
+ left: "-50%",
33181
+ bottom: 0,
33182
+ opacity: 0.5,
33183
+ transform: "rotateX(-90deg)"
33184
+ }
33185
+ }
33186
+ )
33187
+ ), /* @__PURE__ */ import_react66.default.createElement(
33188
+ "div",
33189
+ {
33190
+ id: "sun",
33191
+ style: {
33192
+ position: "absolute",
33193
+ top: 0,
33194
+ left: "50%",
33195
+ transform: `translateX(-50%) translateY(${yPos}px)`,
33196
+ width: "100%",
33197
+ height: "50%",
33198
+ background: `radial-gradient(50% ${yPos}px, circle, rgba(242,248,247,1) 0%,rgba(249,249,28,1) 3%,rgba(247,214,46,1) 8%,rgba(248,200,95,1) 12%,rgba(201,165,132,1) 30%,rgba(115,130,133,1) 51%,rgba(46,97,122,1) 85%,rgba(24,75,106,1) 100%)`,
33199
+ zIndex: -900,
33200
+ opacity: 0.5
33201
+ }
33202
+ }
33203
+ ), /* @__PURE__ */ import_react66.default.createElement(
33204
+ "div",
33205
+ {
33206
+ id: "sunDay",
33207
+ style: {
33208
+ position: "absolute",
33209
+ top: 0,
33210
+ left: 0,
33211
+ width: "100%",
33212
+ height: "50%",
33213
+ background: `radial-gradient(50% ${yPos}px, circle, rgba(252,255,251,0.9) 0%,rgba(253,250,219,0.4) 30%,rgba(226,219,197,0.01) 70%,rgba(226,219,197,0.0) 70%,rgba(201,165,132,0) 100%)`,
33214
+ zIndex: -800,
33215
+ opacity: Math.max(0, 1 - yPos / dimensions.height)
33216
+ }
33217
+ }
33218
+ ), /* @__PURE__ */ import_react66.default.createElement(
33219
+ "div",
33220
+ {
33221
+ id: "sunSet",
33222
+ style: {
33223
+ position: "absolute",
33224
+ top: 0,
32596
33225
  left: 0,
32597
33226
  width: "100%",
32598
33227
  height: "50%",
@@ -32601,7 +33230,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32601
33230
  opacity: Math.max(0, yPos / dimensions.height - 0.2)
32602
33231
  }
32603
33232
  }
32604
- ), /* @__PURE__ */ import_react60.default.createElement(
33233
+ ), /* @__PURE__ */ import_react66.default.createElement(
32605
33234
  "div",
32606
33235
  {
32607
33236
  id: "sky",
@@ -32616,7 +33245,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32616
33245
  opacity: Math.max(0, 1 - yPos / dimensions.height)
32617
33246
  }
32618
33247
  }
32619
- ), /* @__PURE__ */ import_react60.default.createElement(
33248
+ ), /* @__PURE__ */ import_react66.default.createElement(
32620
33249
  "div",
32621
33250
  {
32622
33251
  id: "horizon",
@@ -32631,7 +33260,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32631
33260
  opacity: Math.max(0, yPos > dimensions.height / 2 ? (dimensions.height - yPos) / (dimensions.height / 2) + 0.2 : yPos / (dimensions.height / 2))
32632
33261
  }
32633
33262
  }
32634
- ), /* @__PURE__ */ import_react60.default.createElement(
33263
+ ), /* @__PURE__ */ import_react66.default.createElement(
32635
33264
  "div",
32636
33265
  {
32637
33266
  id: "horizonNight",
@@ -32646,7 +33275,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32646
33275
  opacity: Math.max(0, (yPos - dimensions.height * 4 / 5) / (dimensions.height - dimensions.height * 4 / 5))
32647
33276
  }
32648
33277
  }
32649
- ), /* @__PURE__ */ import_react60.default.createElement(
33278
+ ), /* @__PURE__ */ import_react66.default.createElement(
32650
33279
  "div",
32651
33280
  {
32652
33281
  id: "moon",
@@ -32661,7 +33290,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32661
33290
  opacity: Math.max(0, (yPos - dimensions.height * 9 / 10) / (dimensions.height - dimensions.height * 9 / 10))
32662
33291
  }
32663
33292
  }
32664
- ), /* @__PURE__ */ import_react60.default.createElement(
33293
+ ), /* @__PURE__ */ import_react66.default.createElement(
32665
33294
  "div",
32666
33295
  {
32667
33296
  id: "water",
@@ -32676,7 +33305,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32676
33305
  zIndex: -400
32677
33306
  }
32678
33307
  }
32679
- ), /* @__PURE__ */ import_react60.default.createElement(
33308
+ ), /* @__PURE__ */ import_react66.default.createElement(
32680
33309
  "div",
32681
33310
  {
32682
33311
  id: "waterReflectionContainer",
@@ -32693,7 +33322,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32693
33322
  transform: `translateY(${dimensions.height - yPos}px)`
32694
33323
  }
32695
33324
  },
32696
- /* @__PURE__ */ import_react60.default.createElement(
33325
+ /* @__PURE__ */ import_react66.default.createElement(
32697
33326
  "div",
32698
33327
  {
32699
33328
  id: "waterReflectionMiddle",
@@ -32710,7 +33339,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32710
33339
  }
32711
33340
  }
32712
33341
  )
32713
- ), /* @__PURE__ */ import_react60.default.createElement(
33342
+ ), /* @__PURE__ */ import_react66.default.createElement(
32714
33343
  "div",
32715
33344
  {
32716
33345
  id: "waterDistance",
@@ -32725,7 +33354,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32725
33354
  opacity: Math.max(0, yPos / dimensions.height + 0.6)
32726
33355
  }
32727
33356
  }
32728
- ), /* @__PURE__ */ import_react60.default.createElement(
33357
+ ), /* @__PURE__ */ import_react66.default.createElement(
32729
33358
  "div",
32730
33359
  {
32731
33360
  id: "darknessOverlaySky",
@@ -32740,7 +33369,7 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32740
33369
  zIndex: -50
32741
33370
  }
32742
33371
  }
32743
- ), /* @__PURE__ */ import_react60.default.createElement(
33372
+ ), /* @__PURE__ */ import_react66.default.createElement(
32744
33373
  "div",
32745
33374
  {
32746
33375
  id: "darknessOverlay",
@@ -32749,507 +33378,143 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
32749
33378
  opacity: Math.max(0, (yPos - dimensions.height / 2) / (dimensions.height / 2)),
32750
33379
  position: "absolute",
32751
33380
  bottom: 0,
32752
- left: 0,
32753
- width: "100%",
32754
- height: "50%",
32755
- zIndex: -5
32756
- }
32757
- }
32758
- ), /* @__PURE__ */ import_react60.default.createElement(
32759
- "div",
32760
- {
32761
- id: "oceanRipple",
32762
- style: {
32763
- backgroundImage: "repeating-linear-gradient(175deg, rgba(165,165,165,0.08) 43%,rgba(175,175,175,0.08) 45%,rgba(235,235,235,0.08) 49%,rgba(195,195,195,0.08) 50%,rgba(165,165,165,0.08) 54%)",
32764
- opacity: 0.5,
32765
- position: "absolute",
32766
- left: "0%",
32767
- bottom: 0,
32768
- width: "100%",
32769
- height: "50%",
32770
- zIndex: -10
32771
- }
32772
- }
32773
- ));
32774
- };
32775
- var SunriseAnimation_default = SunriseAnimation;
32776
-
32777
- // src/SettingsButton.tsx
32778
- var SettingsButton = ({ className }) => {
32779
- (0, import_react61.useEffect)(() => {
32780
- return () => {
32781
- };
32782
- }, []);
32783
- const [showModal, setShowModal] = (0, import_react61.useState)(false);
32784
- const [theme, setTheme] = (0, import_react61.useState)(localStorage.getItem("theme") || "system");
32785
- const handleThemeChange = (e) => {
32786
- const newTheme = e.target.value;
32787
- setTheme(newTheme);
32788
- localStorage.setItem("theme", newTheme);
32789
- let themeToApply = newTheme;
32790
- if (newTheme === "system") {
32791
- themeToApply = window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
32792
- }
32793
- document.documentElement.setAttribute("data-bs-theme", themeToApply);
32794
- };
32795
- return /* @__PURE__ */ import_react61.default.createElement(import_react61.default.Fragment, null, /* @__PURE__ */ import_react61.default.createElement("div", { id: "settings-button" }, /* @__PURE__ */ import_react61.default.createElement(
32796
- "button",
32797
- {
32798
- className: `btn btn-sm btn-outline-secondary ${className}`,
32799
- onClick: () => setShowModal(true)
32800
- },
32801
- /* @__PURE__ */ import_react61.default.createElement("div", { id: "gear-icon-settings" }, "\u2699\uFE0F")
32802
- )), /* @__PURE__ */ import_react61.default.createElement(SunriseAnimation_default, { active: theme === "daily" }), /* @__PURE__ */ import_react61.default.createElement(Modal_default2, { show: showModal, onHide: () => setShowModal(false), size: "lg" }, /* @__PURE__ */ import_react61.default.createElement(Modal_default2.Header, { closeButton: true, className: "border-0" }, /* @__PURE__ */ import_react61.default.createElement(Modal_default2.Title, { className: "d-flex align-items-center" }, /* @__PURE__ */ import_react61.default.createElement("i", { className: "bi bi-palette-fill me-2" }), /* @__PURE__ */ import_react61.default.createElement("span", null, "Settings"))), /* @__PURE__ */ import_react61.default.createElement("div", { className: "alert alert-warning mx-3 mt-2 mb-0" }, /* @__PURE__ */ import_react61.default.createElement("i", { className: "bi bi-exclamation-triangle-fill me-2" }), /* @__PURE__ */ import_react61.default.createElement("strong", null, "Warning:"), ' Themes are an experimental feature. Only "Business casual" is fully supported at this time.'), /* @__PURE__ */ import_react61.default.createElement(Modal_default2.Body, { className: "p-0" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "p-3" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "row g-3" }, /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32803
- "div",
32804
- {
32805
- className: `card theme-card ${theme === "system" ? "border-primary" : ""}`,
32806
- onClick: () => handleThemeChange({ target: { value: "system" } }),
32807
- style: {
32808
- background: "linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%)",
32809
- borderColor: "#adb5bd"
32810
- }
32811
- },
32812
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-0" }, "9 to 5"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Follows your OS theme"))
32813
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32814
- "div",
32815
- {
32816
- className: `card theme-card ${theme === "light" ? "border-primary" : ""}`,
32817
- onClick: () => handleThemeChange({ target: { value: "light" } }),
32818
- style: {
32819
- background: "linear-gradient(135deg, #ffffff 0%, #f1f3f5 100%)",
32820
- borderColor: "#ced4da",
32821
- color: "#212529",
32822
- borderWidth: "2px"
32823
- }
32824
- },
32825
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Business casual"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Clean & professional"))
32826
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32827
- "div",
32828
- {
32829
- className: `card theme-card ${theme === "dark" ? "border-primary" : ""}`,
32830
- onClick: () => handleThemeChange({ target: { value: "dark" } }),
32831
- style: {
32832
- background: "linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)",
32833
- borderColor: "#4ecdc4",
32834
- color: "#f8f9fa",
32835
- borderWidth: "2px"
32836
- }
32837
- },
32838
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Business formal"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Premium & focused"))
32839
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32840
- "div",
32841
- {
32842
- className: `card theme-card ${theme === "light-vibrant" ? "border-primary" : ""}`,
32843
- onClick: () => handleThemeChange({ target: { value: "light-vibrant" } }),
32844
- style: {
32845
- background: "linear-gradient(135deg, #ff2d75 0%, #00e5ff 100%)",
32846
- borderColor: "#ffeb3b",
32847
- color: "#fff"
32848
- }
32849
- },
32850
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Office Party"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Colorful & fun"))
32851
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32852
- "div",
32853
- {
32854
- className: `card theme-card ${theme === "dark-vibrant" ? "border-primary" : ""}`,
32855
- onClick: () => handleThemeChange({ target: { value: "dark-vibrant" } }),
32856
- style: {
32857
- background: "linear-gradient(135deg, #16213e 0%, #e94560 100%)",
32858
- borderColor: "#00e5ff",
32859
- color: "#fff"
32860
- }
32861
- },
32862
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "After Party"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Neon nightlife"))
32863
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32864
- "div",
32865
- {
32866
- className: `card theme-card ${theme === "sepia" ? "border-primary" : ""}`,
32867
- onClick: () => handleThemeChange({ target: { value: "sepia" } }),
32868
- style: {
32869
- background: "linear-gradient(135deg, #f4ecd8 0%, #d0b88f 100%)",
32870
- borderColor: "#8b6b4a",
32871
- color: "#3a3226"
32872
- }
32873
- },
32874
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "WFH"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Vintage warmth"))
32875
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32876
- "div",
32877
- {
32878
- className: `card theme-card ${theme === "light-grayscale" ? "border-primary" : ""}`,
32879
- onClick: () => handleThemeChange({ target: { value: "light-grayscale" } }),
32880
- style: {
32881
- background: "linear-gradient(135deg, #f5f5f5 0%, #e0e0e0 100%)",
32882
- borderColor: "#666",
32883
- color: "#333",
32884
- borderWidth: "2px"
32885
- }
32886
- },
32887
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Serious Business"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Simple & distraction-free"))
32888
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32889
- "div",
32890
- {
32891
- className: `card theme-card ${theme === "dark-grayscale" ? "border-primary" : ""}`,
32892
- onClick: () => handleThemeChange({ target: { value: "dark-grayscale" } }),
32893
- style: {
32894
- background: "linear-gradient(135deg, #111 0%, #333 100%)",
32895
- borderColor: "#ff6b6b",
32896
- color: "#e0e0e0",
32897
- borderWidth: "2px"
32898
- }
32899
- },
32900
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Very Serious business"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Maximum readability"))
32901
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32902
- "div",
32903
- {
32904
- className: `card theme-card ${theme === "daily" ? "border-primary" : ""}`,
32905
- onClick: () => handleThemeChange({ target: { value: "daily" } }),
32906
- style: {
32907
- background: "linear-gradient(135deg, #6eafff 0%, #f9fbf0 100%)",
32908
- borderColor: "#f7d62e",
32909
- color: "#00192d"
32910
- }
32911
- },
32912
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-1" }, "Dreaming of PTO"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Sunrise, sunset"))
32913
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32914
- "div",
32915
- {
32916
- className: `card theme-card ${theme === "protanopia" ? "border-primary" : ""}`,
32917
- onClick: () => handleThemeChange({ target: { value: "protanopia" } }),
32918
- style: {
32919
- background: "linear-gradient(135deg, #f8f9fa 0%, #e0e8ff 100%)",
32920
- borderColor: "#3366cc",
32921
- color: "#333"
32922
- }
32923
- },
32924
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-0" }, "Protanopia"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Red-blind mode"))
32925
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
32926
- "div",
32927
- {
32928
- className: `card theme-card ${theme === "deuteranopia" ? "border-primary" : ""}`,
32929
- onClick: () => handleThemeChange({ target: { value: "deuteranopia" } }),
32930
- style: {
32931
- background: "linear-gradient(135deg, #f8f9fa 0%, #ffe0e0 100%)",
32932
- borderColor: "#cc6633",
32933
- color: "#333"
33381
+ left: 0,
33382
+ width: "100%",
33383
+ height: "50%",
33384
+ zIndex: -5
32934
33385
  }
32935
- },
32936
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-0" }, "Deuteranopia"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Green-blind mode"))
32937
- )), /* @__PURE__ */ import_react61.default.createElement("div", { className: "col-md-4" }, /* @__PURE__ */ import_react61.default.createElement(
33386
+ }
33387
+ ), /* @__PURE__ */ import_react66.default.createElement(
32938
33388
  "div",
32939
33389
  {
32940
- className: `card theme-card ${theme === "tritanopia" ? "border-primary" : ""}`,
32941
- onClick: () => handleThemeChange({ target: { value: "tritanopia" } }),
33390
+ id: "oceanRipple",
32942
33391
  style: {
32943
- background: "linear-gradient(135deg, #f8f9fa 0%, #e0ffe0 100%)",
32944
- borderColor: "#00aa66",
32945
- color: "#333"
33392
+ backgroundImage: "repeating-linear-gradient(175deg, rgba(165,165,165,0.08) 43%,rgba(175,175,175,0.08) 45%,rgba(235,235,235,0.08) 49%,rgba(195,195,195,0.08) 50%,rgba(165,165,165,0.08) 54%)",
33393
+ opacity: 0.5,
33394
+ position: "absolute",
33395
+ left: "0%",
33396
+ bottom: 0,
33397
+ width: "100%",
33398
+ height: "50%",
33399
+ zIndex: -10
32946
33400
  }
32947
- },
32948
- /* @__PURE__ */ import_react61.default.createElement("div", { className: "card-body text-center p-3" }, /* @__PURE__ */ import_react61.default.createElement("h5", { className: "card-title mb-0" }, "Tritanopia"), /* @__PURE__ */ import_react61.default.createElement("p", { className: "small text-muted mb-0" }, "Blue-blind mode"))
32949
- ))))), /* @__PURE__ */ import_react61.default.createElement(Modal_default2.Footer, { className: "border-0" }, /* @__PURE__ */ import_react61.default.createElement(Button_default2, { variant: "btn-primary", onClick: () => setShowModal(false) }, "Done"))));
33401
+ }
33402
+ ));
32950
33403
  };
33404
+ var SunriseAnimation_default = SunriseAnimation;
32951
33405
 
32952
- // src/components/stateful/ProjectPage.tsx
32953
- var import_react63 = __toESM(require_react(), 1);
32954
-
32955
- // src/components/pure/ProjectPageView.tsx
32956
- var import_react62 = __toESM(require_react(), 1);
32957
- var BuildLogViewer = ({ logs, runtime }) => {
32958
- if (!logs)
32959
- return /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "info" }, "Loading ", runtime.toLowerCase(), " build logs...");
32960
- const hasErrors = logs.errors?.length > 0;
32961
- const hasWarnings = logs.warnings?.length > 0;
32962
- const [activeTab, setActiveTab] = import_react62.default.useState("summary");
32963
- return /* @__PURE__ */ import_react62.default.createElement("div", null, /* @__PURE__ */ import_react62.default.createElement(Tab_default.Container, { activeKey: activeTab, onSelect: (k) => setActiveTab(k || "summary") }, /* @__PURE__ */ import_react62.default.createElement(Nav_default2, { variant: "tabs", className: "mb-3" }, /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Link, { eventKey: "summary" }, "Build Summary")), /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Link, { eventKey: "warnings" }, hasWarnings ? `\u26A0\uFE0F Warnings (${logs.warnings.length})` : "Warnings")), /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Item, null, /* @__PURE__ */ import_react62.default.createElement(Nav_default2.Link, { eventKey: "errors" }, hasErrors ? `\u274C Errors (${logs.errors.length})` : "Errors"))), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Content, null, /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "summary" }, /* @__PURE__ */ import_react62.default.createElement(Card_default, null, /* @__PURE__ */ import_react62.default.createElement(Card_default.Header, { className: "d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react62.default.createElement("h5", null, "Build Summary"), /* @__PURE__ */ import_react62.default.createElement("div", null, hasErrors && /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "danger", className: "me-2" }, logs.errors.length, " Error", logs.errors.length !== 1 ? "s" : ""), hasWarnings && /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "warning", text: "dark" }, logs.warnings.length, " Warning", logs.warnings.length !== 1 ? "s" : ""), !hasErrors && !hasWarnings && /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "success" }, "Build Successful"))), /* @__PURE__ */ import_react62.default.createElement(Card_default.Body, null, /* @__PURE__ */ import_react62.default.createElement("div", { className: "mb-3" }, /* @__PURE__ */ import_react62.default.createElement("h6", null, "Input Files (", Object.keys(logs.metafile?.inputs || {}).length, ")"), /* @__PURE__ */ import_react62.default.createElement(ListGroup_default, { className: "max-h-200 overflow-auto" }, Object.keys(logs.metafile?.inputs || {}).map((file) => /* @__PURE__ */ import_react62.default.createElement(ListGroup_default.Item, { key: file, className: "py-2" }, /* @__PURE__ */ import_react62.default.createElement("code", null, file), /* @__PURE__ */ import_react62.default.createElement("div", { className: "text-muted small" }, logs.metafile.inputs[file].bytes, " bytes"))))), /* @__PURE__ */ import_react62.default.createElement("div", null, /* @__PURE__ */ import_react62.default.createElement("h6", null, "Output Files (", Object.keys(logs.metafile?.outputs || {}).length, ")"), /* @__PURE__ */ import_react62.default.createElement(ListGroup_default, { className: "max-h-200 overflow-auto" }, Object.keys(logs.metafile?.outputs || {}).map((file) => /* @__PURE__ */ import_react62.default.createElement(ListGroup_default.Item, { key: file, className: "py-2" }, /* @__PURE__ */ import_react62.default.createElement("code", null, file), /* @__PURE__ */ import_react62.default.createElement("div", { className: "text-muted small" }, logs.metafile.outputs[file].bytes, " bytes", logs.metafile.outputs[file].entryPoint && /* @__PURE__ */ import_react62.default.createElement("span", { className: "ms-2 badge bg-info" }, "Entry Point"))))))))), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "warnings" }, hasWarnings ? /* @__PURE__ */ import_react62.default.createElement(Card_default, { className: "border-warning" }, /* @__PURE__ */ import_react62.default.createElement(Card_default.Header, { className: "bg-warning text-white d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react62.default.createElement("span", null, "Build Warnings (", logs.warnings.length, ")"), /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "light", text: "dark" }, (/* @__PURE__ */ new Date()).toLocaleString())), /* @__PURE__ */ import_react62.default.createElement(Card_default.Body, { className: "p-0" }, /* @__PURE__ */ import_react62.default.createElement(ListGroup_default, { variant: "flush" }, logs.warnings.map((warn, i) => /* @__PURE__ */ import_react62.default.createElement(ListGroup_default.Item, { key: i, className: "text-warning" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "d-flex justify-content-between" }, /* @__PURE__ */ import_react62.default.createElement("strong", null, warn.location?.file || "Unknown file", warn.location?.line && `:${warn.location.line}`), /* @__PURE__ */ import_react62.default.createElement("small", { className: "text-muted" }, warn.pluginName ? `[${warn.pluginName}]` : "")), /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react62.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, warn.text || warn.message || JSON.stringify(warn))), warn.detail && /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-1 small text-muted" }, /* @__PURE__ */ import_react62.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, warn.detail))))))) : /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "info" }, "No warnings found")), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "errors" }, hasErrors ? /* @__PURE__ */ import_react62.default.createElement(Card_default, { className: "border-danger" }, /* @__PURE__ */ import_react62.default.createElement(Card_default.Header, { className: "bg-danger text-white d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react62.default.createElement("span", null, "Build Errors (", logs.errors.length, ")"), /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "light", text: "dark" }, (/* @__PURE__ */ new Date()).toLocaleString())), /* @__PURE__ */ import_react62.default.createElement(Card_default.Body, { className: "p-0" }, /* @__PURE__ */ import_react62.default.createElement(ListGroup_default, { variant: "flush" }, logs.errors.map((err, i) => /* @__PURE__ */ import_react62.default.createElement(ListGroup_default.Item, { key: i, className: "text-danger" }, /* @__PURE__ */ import_react62.default.createElement("div", { className: "d-flex justify-content-between" }, /* @__PURE__ */ import_react62.default.createElement("strong", null, err.location?.file || "Unknown file", err.location?.line && `:${err.location.line}`), /* @__PURE__ */ import_react62.default.createElement("small", { className: "text-muted" }, err.pluginName ? `[${err.pluginName}]` : "")), /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-1" }, /* @__PURE__ */ import_react62.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, err.text || err.message || JSON.stringify(err))), err.detail && /* @__PURE__ */ import_react62.default.createElement("div", { className: "mt-1 small text-muted" }, /* @__PURE__ */ import_react62.default.createElement("pre", { className: "mb-0 p-2 bg-light rounded" }, err.detail))))))) : /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "success" }, /* @__PURE__ */ import_react62.default.createElement("h5", null, "No Errors Found"), /* @__PURE__ */ import_react62.default.createElement("p", { className: "mb-0" }, "The build completed without any errors."))))));
32964
- };
32965
- var ProjectPageView = ({
32966
- summary,
32967
- nodeLogs,
32968
- webLogs,
32969
- pureLogs,
32970
- config,
32971
- loading,
32972
- error,
32973
- projectName,
32974
- route,
32975
- setRoute,
32976
- navigate
32977
- }) => {
32978
- if (loading)
32979
- return /* @__PURE__ */ import_react62.default.createElement("div", null, "Loading project data...");
32980
- if (error)
32981
- return /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
32982
- if (!summary)
32983
- return /* @__PURE__ */ import_react62.default.createElement(Alert_default, { variant: "warning" }, "No data found for project");
32984
- const testStatuses = Object.entries(summary).map(([testName2, testData]) => {
32985
- const runTime = config.tests?.find((t) => t[0] === testName2)?.[1] || "node";
32986
- return {
32987
- testName: testName2,
32988
- testsExist: testData.testsExist !== false,
32989
- runTimeErrors: Number(testData.runTimeErrors) || 0,
32990
- typeErrors: Number(testData.typeErrors) || 0,
32991
- staticErrors: Number(testData.staticErrors) || 0,
32992
- runTime
33406
+ // src/components/pure/SettingsButton.tsx
33407
+ var SettingsButton = ({ className }) => {
33408
+ (0, import_react67.useEffect)(() => {
33409
+ return () => {
32993
33410
  };
32994
- });
32995
- return /* @__PURE__ */ import_react62.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react62.default.createElement(
32996
- NavBar,
32997
- {
32998
- title: projectName,
32999
- backLink: "/",
33000
- navItems: [
33001
- {
33002
- to: `#tests`,
33003
- label: testStatuses.some((t) => t.runTimeErrors > 0) ? "\u274C Tests" : testStatuses.some((t) => t.typeErrors > 0 || t.staticErrors > 0) ? "\u26A0\uFE0F Tests" : "\u2705 Tests",
33004
- active: route === "tests",
33005
- className: testStatuses.some((t) => t.runTimeErrors > 0) ? "text-danger fw-bold" : testStatuses.some((t) => t.typeErrors > 0 || t.staticErrors > 0) ? "text-warning fw-bold" : ""
33006
- },
33007
- {
33008
- to: `#node`,
33009
- label: nodeLogs?.errors?.length ? "\u274C Node Build" : nodeLogs?.warnings?.length ? "\u26A0\uFE0F Node Build" : "Node Build",
33010
- active: route === "node",
33011
- className: nodeLogs?.errors?.length ? "text-danger fw-bold" : nodeLogs?.warnings?.length ? "text-warning fw-bold" : ""
33012
- },
33013
- {
33014
- to: `#web`,
33015
- label: webLogs?.errors?.length ? "\u274C Web Build" : webLogs?.warnings?.length ? "\u26A0\uFE0F Web Build" : "Web Build",
33016
- active: route === "web",
33017
- className: webLogs?.errors?.length ? "text-danger fw-bold" : webLogs?.warnings?.length ? "text-warning fw-bold" : ""
33018
- },
33019
- {
33020
- to: `#pure`,
33021
- label: pureLogs?.errors?.length ? "\u274C Pure Build" : pureLogs?.warnings?.length ? "\u26A0\uFE0F Pure Build" : "Pure Build",
33022
- active: route === "pure",
33023
- className: pureLogs?.errors?.length ? "text-danger fw-bold" : pureLogs?.warnings?.length ? "text-warning fw-bold" : ""
33024
- }
33025
- ]
33411
+ }, []);
33412
+ const [showModal, setShowModal] = (0, import_react67.useState)(false);
33413
+ (0, import_react67.useEffect)(() => {
33414
+ let themeToApply = theme;
33415
+ if (theme === "system") {
33416
+ themeToApply = window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
33026
33417
  }
33027
- ), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Container, { activeKey: route, onSelect: (k) => {
33028
- if (k) {
33029
- setRoute(k);
33030
- navigate(`#${k}`, { replace: true });
33418
+ document.documentElement.setAttribute("data-bs-theme", themeToApply);
33419
+ }, []);
33420
+ const [theme, setTheme] = (0, import_react67.useState)(localStorage.getItem("theme") || "system");
33421
+ const handleThemeChange = (e) => {
33422
+ const newTheme = e.target.value;
33423
+ setTheme(newTheme);
33424
+ localStorage.setItem("theme", newTheme);
33425
+ let themeToApply = newTheme;
33426
+ if (newTheme === "system") {
33427
+ themeToApply = window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
33031
33428
  }
33032
- } }, /* @__PURE__ */ import_react62.default.createElement(Tab_default.Content, null, /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "tests" }, /* @__PURE__ */ import_react62.default.createElement(Table_default, { striped: true, bordered: true, hover: true }, /* @__PURE__ */ import_react62.default.createElement("thead", null, /* @__PURE__ */ import_react62.default.createElement("tr", null, /* @__PURE__ */ import_react62.default.createElement("th", null, "Test"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Runtime"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Status"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Type Errors"), /* @__PURE__ */ import_react62.default.createElement("th", null, "Lint Errors"))), /* @__PURE__ */ import_react62.default.createElement("tbody", null, testStatuses.map((test) => /* @__PURE__ */ import_react62.default.createElement("tr", { key: test.testName }, /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}` }, test.testName)), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement(Badge_default, { bg: "secondary", className: "ms-2" }, test.runTime)), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement(
33033
- TestStatusBadge,
33429
+ document.documentElement.setAttribute("data-bs-theme", themeToApply);
33430
+ };
33431
+ return /* @__PURE__ */ import_react67.default.createElement(import_react67.default.Fragment, null, /* @__PURE__ */ import_react67.default.createElement("div", { id: "settings-button" }, /* @__PURE__ */ import_react67.default.createElement(
33432
+ "button",
33034
33433
  {
33035
- testName: test.testName,
33036
- testsExist: test.testsExist,
33037
- runTimeErrors: test.runTimeErrors
33038
- }
33039
- )), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}#types` }, test.typeErrors > 0 ? `\u274C ${test.typeErrors}` : "\u2705")), /* @__PURE__ */ import_react62.default.createElement("td", null, /* @__PURE__ */ import_react62.default.createElement("a", { href: `#/projects/${projectName}/tests/${encodeURIComponent(test.testName)}/${test.runTime}#lint` }, test.staticErrors > 0 ? `\u274C ${test.staticErrors}` : "\u2705"))))))), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "node" }, /* @__PURE__ */ import_react62.default.createElement(BuildLogViewer, { logs: nodeLogs, runtime: "Node" })), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "web" }, /* @__PURE__ */ import_react62.default.createElement(BuildLogViewer, { logs: webLogs, runtime: "Web" })), /* @__PURE__ */ import_react62.default.createElement(Tab_default.Pane, { eventKey: "pure" }, /* @__PURE__ */ import_react62.default.createElement(BuildLogViewer, { logs: pureLogs, runtime: "Pure" })))));
33434
+ className: `btn btn-sm btn-outline-secondary ${className}`,
33435
+ onClick: () => setShowModal(true)
33436
+ },
33437
+ /* @__PURE__ */ import_react67.default.createElement("div", { id: "gear-icon-settings" }, "\u2699\uFE0F")
33438
+ )), /* @__PURE__ */ import_react67.default.createElement(SunriseAnimation_default, { active: theme === "daily" }), /* @__PURE__ */ import_react67.default.createElement(Modal_default2, { show: showModal, onHide: () => setShowModal(false), size: "lg" }, /* @__PURE__ */ import_react67.default.createElement(ModalContent, { theme, handleThemeChange }), /* @__PURE__ */ import_react67.default.createElement(Modal_default2.Footer, { className: "border-0" }, /* @__PURE__ */ import_react67.default.createElement(Button_default2, { variant: "btn-primary", onClick: () => setShowModal(false) }, "Done"))));
33040
33439
  };
33041
33440
 
33042
- // src/components/stateful/ProjectPage.tsx
33043
- var ProjectPage = () => {
33044
- const [summary, setSummary] = (0, import_react63.useState)(null);
33045
- const [nodeLogs, setNodeLogs] = (0, import_react63.useState)(null);
33046
- const [webLogs, setWebLogs] = (0, import_react63.useState)(null);
33047
- const [pureLogs, setPureLogs] = (0, import_react63.useState)(null);
33048
- const [config, setConfig] = (0, import_react63.useState)({});
33049
- const [loading, setLoading] = (0, import_react63.useState)(true);
33050
- const [error, setError] = (0, import_react63.useState)(null);
33051
- const [projectName, setProjectName] = (0, import_react63.useState)("");
33052
- const navigate = useNavigate();
33053
- const location = useLocation();
33054
- const [route, setRoute] = (0, import_react63.useState)("tests");
33055
- (0, import_react63.useEffect)(() => {
33056
- const hash = location.hash.replace("#", "");
33057
- if (hash && ["tests", "node", "web", "pure"].includes(hash)) {
33058
- setRoute(hash);
33059
- } else {
33060
- setRoute("tests");
33061
- }
33062
- }, [location.hash]);
33063
- const { projectName: name } = useParams();
33064
- (0, import_react63.useEffect)(() => {
33065
- if (!name)
33066
- return;
33067
- setProjectName(name);
33068
- const fetchData = async () => {
33069
- try {
33070
- const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
33071
- fetch(`reports/${name}/summary.json`),
33072
- fetch(`bundles/node/${name}/metafile.json`),
33073
- fetch(`bundles/web/${name}/metafile.json`),
33074
- fetch(`bundles/pure/${name}/metafile.json`),
33075
- fetch(`reports/${name}/config.json`)
33076
- ]);
33077
- const [summaryData, nodeData, webData, pureData, configData] = await Promise.all([
33078
- summaryRes.ok ? summaryRes.json() : {},
33079
- nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
33080
- webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
33081
- pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
33082
- configRes.ok ? configRes.json() : { tests: [] }
33083
- ]);
33084
- setSummary(summaryData);
33085
- setNodeLogs(nodeData);
33086
- setWebLogs(webData);
33087
- setPureLogs(pureData);
33088
- setConfig(configData);
33089
- } catch (err) {
33090
- setError(err instanceof Error ? err.message : "Unknown error");
33091
- } finally {
33092
- setLoading(false);
33093
- }
33094
- };
33095
- fetchData();
33096
- }, [name]);
33097
- return /* @__PURE__ */ import_react63.default.createElement(
33098
- ProjectPageView,
33099
- {
33100
- summary,
33101
- nodeLogs,
33102
- webLogs,
33103
- pureLogs,
33104
- config,
33105
- loading,
33106
- error,
33107
- projectName,
33108
- route,
33109
- setRoute,
33110
- navigate
33111
- }
33112
- );
33441
+ // src/components/pure/AppFrame.tsx
33442
+ var AppFrame = ({ children }) => {
33443
+ return /* @__PURE__ */ import_react68.default.createElement("div", { className: "d-flex flex-column min-vh-100", key: window.location.pathname }, /* @__PURE__ */ import_react68.default.createElement("main", { className: "flex-grow-1 p-3" }, /* @__PURE__ */ import_react68.default.createElement(Container_default, { fluid: true }, children)), /* @__PURE__ */ import_react68.default.createElement("footer", { className: "bg-light py-2 d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react68.default.createElement(SettingsButton, null), /* @__PURE__ */ import_react68.default.createElement(Container_default, { className: "text-end", fluid: true }, "made with \u2764\uFE0F and ", /* @__PURE__ */ import_react68.default.createElement("a", { href: "https://www.npmjs.com/package/testeranto" }, "testeranto"))));
33113
33444
  };
33114
33445
 
33115
- // src/components/stateful/ProjectsPage.tsx
33116
- var import_react65 = __toESM(require_react(), 1);
33446
+ // src/components/stateful/FeaturesReporter.tsx
33447
+ var import_react70 = __toESM(require_react(), 1);
33117
33448
 
33118
- // src/components/pure/ProjectsPageView.tsx
33119
- var import_react64 = __toESM(require_react(), 1);
33120
- var ProjectsPageView = ({
33121
- projects,
33122
- summaries,
33123
- configs,
33124
- loading,
33125
- error,
33126
- navigate
33127
- }) => {
33128
- const getStatusIcon = (status) => {
33129
- switch (status) {
33130
- case "success":
33131
- return "\u2705";
33132
- case "failed":
33133
- return "\u274C";
33134
- case "warning":
33135
- return "\u26A0\uFE0F";
33136
- default:
33137
- return "\u2753";
33138
- }
33139
- };
33140
- if (loading)
33141
- return /* @__PURE__ */ import_react64.default.createElement("div", null, "Loading projects...");
33142
- if (error)
33143
- return /* @__PURE__ */ import_react64.default.createElement(Alert_default, { variant: "danger" }, "Error: ", error);
33144
- return /* @__PURE__ */ import_react64.default.createElement("div", { className: "p-3" }, /* @__PURE__ */ import_react64.default.createElement(NavBar, { title: "Testeranto", backLink: null }), /* @__PURE__ */ import_react64.default.createElement(Table_default, { striped: true, bordered: true, hover: true, responsive: true }, /* @__PURE__ */ import_react64.default.createElement("thead", null, /* @__PURE__ */ import_react64.default.createElement("tr", null, /* @__PURE__ */ import_react64.default.createElement("th", null, "Project"), /* @__PURE__ */ import_react64.default.createElement("th", null, "Tests"), /* @__PURE__ */ import_react64.default.createElement("th", null, "Node"), /* @__PURE__ */ import_react64.default.createElement("th", null, "Web"), /* @__PURE__ */ import_react64.default.createElement("th", null, "Pure"))), /* @__PURE__ */ import_react64.default.createElement("tbody", null, projects.map((project) => /* @__PURE__ */ import_react64.default.createElement("tr", { key: project.name }, /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement("a", { href: "#", onClick: (e) => {
33145
- e.preventDefault();
33146
- navigate(`/projects/${project.name}`);
33147
- } }, project.name)), /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement("div", { style: { maxHeight: "200px", overflowY: "auto" } }, summaries[project.name] ? Object.keys(summaries[project.name]).map((testName2) => {
33148
- const testData = summaries[project.name][testName2];
33149
- const runTime = configs[project.name].tests.find((t) => t[0] === testName2)[1];
33150
- const hasRuntimeErrors = testData.runTimeErrors > 0;
33151
- const hasStaticErrors = testData.typeErrors > 0 || testData.staticErrors > 0;
33152
- return /* @__PURE__ */ import_react64.default.createElement("div", { key: testName2 }, /* @__PURE__ */ import_react64.default.createElement(
33153
- "a",
33154
- {
33155
- href: `#/projects/${project.name}/tests/${encodeURIComponent(testName2)}/${runTime}`
33156
- },
33157
- hasRuntimeErrors ? "\u274C " : hasStaticErrors ? "\u26A0\uFE0F " : "",
33158
- testName2.split("/").pop()
33159
- ));
33160
- }) : /* @__PURE__ */ import_react64.default.createElement("div", null, "Loading tests..."))), /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement(
33161
- "a",
33162
- {
33163
- href: `#/projects/${project.name}#node`
33164
- },
33165
- getStatusIcon(project.nodeStatus),
33166
- " Node build logs"
33167
- )), /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement(
33168
- "a",
33169
- {
33170
- href: `#/projects/${project.name}#web`
33171
- },
33172
- getStatusIcon(project.webStatus),
33173
- " Web build logs"
33174
- )), /* @__PURE__ */ import_react64.default.createElement("td", null, /* @__PURE__ */ import_react64.default.createElement(
33175
- "a",
33176
- {
33177
- href: `#/projects/${project.name}#pure`
33178
- },
33179
- getStatusIcon(project.pureStatus),
33180
- " Pure build logs"
33181
- )))))));
33449
+ // src/components/pure/FeaturesReporterView.tsx
33450
+ var import_react69 = __toESM(require_react(), 1);
33451
+ var FeaturesReporterView = ({ treeData }) => {
33452
+ return /* @__PURE__ */ import_react69.default.createElement("div", { className: "features-reporter" }, /* @__PURE__ */ import_react69.default.createElement("h1", null, "File Structure"), /* @__PURE__ */ import_react69.default.createElement("div", { className: "tree-container" }, treeData.map((project) => /* @__PURE__ */ import_react69.default.createElement("div", { key: project.name, className: "project" }, /* @__PURE__ */ import_react69.default.createElement("h3", null, project.name), /* @__PURE__ */ import_react69.default.createElement("ul", { className: "file-tree" }, project.children?.map((file) => renderFile(file)))))));
33182
33453
  };
33454
+ function renderFile(node) {
33455
+ return /* @__PURE__ */ import_react69.default.createElement("li", { key: node.name }, /* @__PURE__ */ import_react69.default.createElement("span", null, node.name), node.children && /* @__PURE__ */ import_react69.default.createElement("ul", null, node.children.map((child) => renderFile(child))));
33456
+ }
33183
33457
 
33184
- // src/components/stateful/ProjectsPage.tsx
33185
- var ProjectsPage = () => {
33186
- const [projects, setProjects] = (0, import_react65.useState)([]);
33187
- const [summaries, setSummaries] = (0, import_react65.useState)({});
33188
- const [loading, setLoading] = (0, import_react65.useState)(true);
33189
- const [error, setError] = (0, import_react65.useState)(null);
33190
- const [configs, setConfigs] = (0, import_react65.useState)({});
33191
- const navigate = useNavigate();
33192
- (0, import_react65.useEffect)(() => {
33458
+ // src/types/features.ts
33459
+ function buildTree(projects) {
33460
+ return projects.map((projectName) => ({
33461
+ name: projectName,
33462
+ type: "project",
33463
+ children: [{
33464
+ name: "src",
33465
+ type: "file",
33466
+ children: [{
33467
+ name: "components",
33468
+ type: "file",
33469
+ children: [{
33470
+ name: "pure",
33471
+ type: "file",
33472
+ children: [
33473
+ { name: "AppFrame.test", type: "file", path: "src/components/pure/AppFrame.test" },
33474
+ { name: "FeaturesReporterView.test", type: "file", path: "src/components/pure/FeaturesReporterView.test" },
33475
+ { name: "ProjectPageView.test", type: "file", path: "src/components/pure/ProjectPageView.test" }
33476
+ ]
33477
+ }]
33478
+ }, {
33479
+ name: "lib",
33480
+ type: "file",
33481
+ children: [{
33482
+ name: "baseBuilder.test",
33483
+ type: "file",
33484
+ path: "src/lib/baseBuilder.test"
33485
+ }]
33486
+ }]
33487
+ }]
33488
+ }));
33489
+ }
33490
+
33491
+ // src/components/stateful/FeaturesReporter.tsx
33492
+ var FeaturesReporter = () => {
33493
+ const [treeData, setTreeData] = (0, import_react70.useState)([]);
33494
+ (0, import_react70.useEffect)(() => {
33193
33495
  const fetchProjects = async () => {
33194
33496
  try {
33195
- const projectsRes = await fetch(`projects.json`);
33196
- const projectNames = await projectsRes.json();
33197
- const projectsData = await Promise.all(
33198
- projectNames.map(async (name) => {
33199
- const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
33200
- fetch(`reports/${name}/summary.json`),
33201
- fetch(`bundles/node/${name}/metafile.json`),
33202
- fetch(`bundles/web/${name}/metafile.json`),
33203
- fetch(`bundles/pure/${name}/metafile.json`),
33204
- fetch(`reports/${name}/config.json`)
33205
- ]);
33206
- const [summary, nodeData, webData, pureData, configData] = await Promise.all([
33207
- summaryRes.json(),
33208
- nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
33209
- webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
33210
- pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
33211
- configRes.json()
33212
- ]);
33213
- setSummaries((prev) => ({ ...prev, [name]: summary }));
33214
- setConfigs((prev) => ({ ...prev, [name]: configData }));
33215
- return {
33216
- name,
33217
- testCount: Object.keys(summary).length,
33218
- nodeStatus: nodeData.errors?.length ? "failed" : nodeData.warnings?.length ? "warning" : "success",
33219
- webStatus: webData.errors?.length ? "failed" : webData.warnings?.length ? "warning" : "success",
33220
- pureStatus: pureData.errors?.length ? "failed" : pureData.warnings?.length ? "warning" : "success"
33221
- };
33222
- })
33223
- );
33224
- setProjects(projectsData);
33225
- } catch (err) {
33226
- setError(err instanceof Error ? err.message : "Unknown error");
33227
- } finally {
33228
- setLoading(false);
33497
+ const response = await fetch("testeranto/projects.json");
33498
+ if (!response.ok)
33499
+ throw new Error("Failed to fetch projects");
33500
+ const projectNames = await response.json();
33501
+ setTreeData(buildTree(projectNames));
33502
+ } catch (error) {
33503
+ console.error("Error loading projects:", error);
33229
33504
  }
33230
33505
  };
33231
33506
  fetchProjects();
33232
33507
  }, []);
33233
- return /* @__PURE__ */ import_react65.default.createElement(
33234
- ProjectsPageView,
33235
- {
33236
- projects,
33237
- summaries,
33238
- configs,
33239
- loading,
33240
- error,
33241
- navigate
33242
- }
33243
- );
33508
+ return /* @__PURE__ */ import_react70.default.createElement(FeaturesReporterView, { treeData });
33244
33509
  };
33245
33510
 
33246
33511
  // src/App.tsx
33247
33512
  var App = () => {
33248
- return /* @__PURE__ */ import_react66.default.createElement(HashRouter, null, /* @__PURE__ */ import_react66.default.createElement("div", { className: "d-flex flex-column min-vh-100", key: window.location.pathname }, /* @__PURE__ */ import_react66.default.createElement("main", { className: "flex-grow-1 p-3" }, /* @__PURE__ */ import_react66.default.createElement(Container_default, { fluid: true }, /* @__PURE__ */ import_react66.default.createElement(Routes, null, /* @__PURE__ */ import_react66.default.createElement(Route, { path: "/", element: /* @__PURE__ */ import_react66.default.createElement(ProjectsPage, null) }), /* @__PURE__ */ import_react66.default.createElement(Route, { path: "/projects/:projectName", element: /* @__PURE__ */ import_react66.default.createElement(ProjectPage, null) }), /* @__PURE__ */ import_react66.default.createElement(Route, { path: "/projects/:projectName/tests/*", element: /* @__PURE__ */ import_react66.default.createElement(TestPage, null) }), /* @__PURE__ */ import_react66.default.createElement(Route, { path: "/projects/:projectName#:tab", element: /* @__PURE__ */ import_react66.default.createElement(ProjectPage, null) })))), /* @__PURE__ */ import_react66.default.createElement("footer", { className: "bg-light py-3 d-flex justify-content-between align-items-center" }, /* @__PURE__ */ import_react66.default.createElement("div", { className: "ms-3" }, /* @__PURE__ */ import_react66.default.createElement(SettingsButton, null)), /* @__PURE__ */ import_react66.default.createElement(Container_default, { className: "text-end", fluid: true }, "made with \u2764\uFE0F and ", /* @__PURE__ */ import_react66.default.createElement("a", { href: "https://www.npmjs.com/package/testeranto" }, "testeranto")))));
33513
+ return /* @__PURE__ */ import_react71.default.createElement(HashRouter, null, /* @__PURE__ */ import_react71.default.createElement(AppFrame, null, /* @__PURE__ */ import_react71.default.createElement(Routes, null, /* @__PURE__ */ import_react71.default.createElement(Route, { path: "/", element: /* @__PURE__ */ import_react71.default.createElement(ProjectsPage, null) }), /* @__PURE__ */ import_react71.default.createElement(Route, { path: "/projects/:projectName", element: /* @__PURE__ */ import_react71.default.createElement(ProjectPage, null) }), /* @__PURE__ */ import_react71.default.createElement(Route, { path: "/projects/:projectName/tests/*", element: /* @__PURE__ */ import_react71.default.createElement(TestPage, null) }), /* @__PURE__ */ import_react71.default.createElement(Route, { path: "/projects/:projectName#:tab", element: /* @__PURE__ */ import_react71.default.createElement(ProjectPage, null) }), /* @__PURE__ */ import_react71.default.createElement(Route, { path: "/features-reporter", element: /* @__PURE__ */ import_react71.default.createElement(FeaturesReporter, null) }))));
33249
33514
  };
33250
33515
  if (typeof window !== "undefined") {
33251
33516
  window.App = App;
33252
- window.React = import_react66.default;
33517
+ window.React = import_react71.default;
33253
33518
  window.ReactDOM = import_client.default;
33254
33519
  }
33255
33520
  })();
@@ -33336,9 +33601,9 @@ object-assign/index.js:
33336
33601
  @license MIT
33337
33602
  *)
33338
33603
 
33339
- react-router/dist/development/chunk-C37GKA54.mjs:
33604
+ react-router/dist/development/chunk-ZYFC6VSF.mjs:
33340
33605
  (**
33341
- * react-router v7.7.1
33606
+ * react-router v7.8.0
33342
33607
  *
33343
33608
  * Copyright (c) Remix Software Inc.
33344
33609
  *
@@ -33350,7 +33615,7 @@ react-router/dist/development/chunk-C37GKA54.mjs:
33350
33615
 
33351
33616
  react-router/dist/development/index.mjs:
33352
33617
  (**
33353
- * react-router v7.7.1
33618
+ * react-router v7.8.0
33354
33619
  *
33355
33620
  * Copyright (c) Remix Software Inc.
33356
33621
  *