forgebook 0.3.2 → 0.4.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 (693) hide show
  1. package/README.md +917 -74
  2. package/dist/bin/forgebook/agentClient.d.ts +2 -1
  3. package/dist/bin/forgebook/agentClient.js +13 -6
  4. package/dist/bin/forgebook/agentGuide.d.ts +59 -0
  5. package/dist/bin/forgebook/agentGuide.js +203 -0
  6. package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
  7. package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
  8. package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
  9. package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
  10. package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
  11. package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
  12. package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
  13. package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
  14. package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
  15. package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
  16. package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
  17. package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
  18. package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
  19. package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
  20. package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
  21. package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
  22. package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
  23. package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
  24. package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
  25. package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
  26. package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
  27. package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
  28. package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
  29. package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
  30. package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
  31. package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
  32. package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
  33. package/dist/bin/forgebook/agentText.d.ts +23 -3
  34. package/dist/bin/forgebook/agentText.js +175 -28
  35. package/dist/bin/forgebook/agents.md +20 -191
  36. package/dist/bin/forgebook/agentsText.js +2 -1
  37. package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
  38. package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
  39. package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
  40. package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
  41. package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
  42. package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
  43. package/dist/bin/forgebook/auditCommand.d.mts +8 -0
  44. package/dist/bin/forgebook/auditCommand.mjs +75 -0
  45. package/dist/bin/forgebook/auditRun.d.ts +95 -0
  46. package/dist/bin/forgebook/auditRun.js +270 -0
  47. package/dist/bin/forgebook/browserRun.d.ts +21 -0
  48. package/dist/bin/forgebook/browserRun.js +57 -0
  49. package/dist/bin/forgebook/buildFailure.d.ts +7 -0
  50. package/dist/bin/forgebook/buildFailure.js +47 -0
  51. package/dist/bin/forgebook/buildWatch.d.ts +52 -0
  52. package/dist/bin/forgebook/buildWatch.js +137 -0
  53. package/dist/bin/forgebook/builtCatalogue.js +9 -5
  54. package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
  55. package/dist/bin/forgebook/catalogueCommands.js +23 -0
  56. package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
  57. package/dist/bin/forgebook/catalogueVite.js +14 -6
  58. package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
  59. package/dist/bin/forgebook/commandCacheClaim.js +170 -0
  60. package/dist/bin/forgebook/commandServer.d.ts +8 -0
  61. package/dist/bin/forgebook/commandServer.js +61 -13
  62. package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
  63. package/dist/bin/forgebook/graphCommand.d.mts +8 -0
  64. package/dist/bin/forgebook/graphCommand.mjs +84 -0
  65. package/dist/bin/forgebook/guide/commands.md +57 -0
  66. package/dist/bin/forgebook/guide/devices.md +17 -0
  67. package/dist/bin/forgebook/guide/docs-pages.md +13 -0
  68. package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
  69. package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
  70. package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
  71. package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
  72. package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
  73. package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
  74. package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
  75. package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
  76. package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
  77. package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
  78. package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
  79. package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
  80. package/dist/bin/forgebook/guide/links.md +29 -0
  81. package/dist/bin/forgebook/guide/setup.md +23 -0
  82. package/dist/bin/forgebook/guide/stories.md +90 -0
  83. package/dist/bin/forgebook/guide/switches.md +43 -0
  84. package/dist/bin/forgebook/guideCommand.d.mts +13 -0
  85. package/dist/bin/forgebook/guideCommand.mjs +37 -0
  86. package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
  87. package/dist/bin/forgebook/importers/storybook.js +11 -5
  88. package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
  89. package/dist/bin/forgebook/initCommands.d.mts +11 -0
  90. package/dist/bin/forgebook/initCommands.mjs +51 -78
  91. package/dist/bin/forgebook/initConfig.d.ts +5 -3
  92. package/dist/bin/forgebook/initConfig.js +6 -3
  93. package/dist/bin/forgebook/initInstall.d.ts +15 -0
  94. package/dist/bin/forgebook/initInstall.js +77 -0
  95. package/dist/bin/forgebook/initPrint.d.ts +9 -0
  96. package/dist/bin/forgebook/initPrint.js +60 -0
  97. package/dist/bin/forgebook/initRefusals.d.ts +45 -0
  98. package/dist/bin/forgebook/initRefusals.js +91 -0
  99. package/dist/bin/forgebook/initRun.d.ts +28 -0
  100. package/dist/bin/forgebook/initRun.js +311 -0
  101. package/dist/bin/forgebook/mcpCommand.mjs +38 -4
  102. package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
  103. package/dist/bin/forgebook/mcpGraph.js +24 -0
  104. package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
  105. package/dist/bin/forgebook/mcpTokens.js +58 -0
  106. package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
  107. package/dist/bin/forgebook/mcpToolParts.js +10 -0
  108. package/dist/bin/forgebook/mcpTools.d.ts +13 -6
  109. package/dist/bin/forgebook/mcpTools.js +57 -90
  110. package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
  111. package/dist/bin/forgebook/mcpVerify.js +36 -0
  112. package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
  113. package/dist/bin/forgebook/migrate/codemods.js +61 -0
  114. package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
  115. package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
  116. package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
  117. package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
  118. package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
  119. package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
  120. package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
  121. package/dist/bin/forgebook/migrate/migrateText.js +30 -0
  122. package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
  123. package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
  124. package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
  125. package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
  126. package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
  127. package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
  128. package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
  129. package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
  130. package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
  131. package/dist/bin/forgebook/newProject/newProject.js +180 -0
  132. package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
  133. package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
  134. package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
  135. package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
  136. package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
  137. package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
  138. package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
  139. package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
  140. package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
  141. package/dist/bin/forgebook/newProject/projectLook.js +293 -0
  142. package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
  143. package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
  144. package/dist/bin/forgebook/newRepair.d.ts +45 -0
  145. package/dist/bin/forgebook/newRepair.js +157 -0
  146. package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
  147. package/dist/bin/forgebook/newRepairRun.js +148 -0
  148. package/dist/bin/forgebook/newStories.d.ts +23 -1
  149. package/dist/bin/forgebook/newStories.js +101 -11
  150. package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
  151. package/dist/bin/forgebook/newStoriesFile.js +43 -4
  152. package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
  153. package/dist/bin/forgebook/prebundleRun.js +28 -8
  154. package/dist/bin/forgebook/proofCommand.d.mts +15 -0
  155. package/dist/bin/forgebook/proofCommand.mjs +212 -0
  156. package/dist/bin/forgebook/proofRun.d.ts +63 -0
  157. package/dist/bin/forgebook/proofRun.js +412 -0
  158. package/dist/bin/forgebook/proofText.d.ts +36 -0
  159. package/dist/bin/forgebook/proofText.js +131 -0
  160. package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
  161. package/dist/bin/forgebook/proofWorkflow.js +205 -0
  162. package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
  163. package/dist/bin/forgebook/setArgsTool.js +70 -0
  164. package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
  165. package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
  166. package/dist/bin/forgebook/storyCheckRun.js +83 -9
  167. package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
  168. package/dist/bin/forgebook/storyFileIds.js +14 -0
  169. package/dist/bin/forgebook/stressCases.d.ts +31 -0
  170. package/dist/bin/forgebook/stressCases.js +79 -0
  171. package/dist/bin/forgebook/stressRun.d.ts +12 -0
  172. package/dist/bin/forgebook/stressRun.js +61 -0
  173. package/dist/bin/forgebook/stressText.d.ts +27 -0
  174. package/dist/bin/forgebook/stressText.js +46 -0
  175. package/dist/bin/forgebook/verifyBase.d.ts +45 -0
  176. package/dist/bin/forgebook/verifyBase.js +196 -0
  177. package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
  178. package/dist/bin/forgebook/verifyCommand.mjs +125 -0
  179. package/dist/bin/forgebook/verifyRun.d.ts +63 -0
  180. package/dist/bin/forgebook/verifyRun.js +108 -0
  181. package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
  182. package/dist/bin/forgebook/verifyVerdict.js +297 -0
  183. package/dist/bin/forgebook/workflowActions.d.ts +23 -0
  184. package/dist/bin/forgebook/workflowActions.js +23 -0
  185. package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
  186. package/dist/src/addressArgs.d.ts +54 -6
  187. package/dist/src/addressArgs.js +72 -16
  188. package/dist/src/addressArgsParam.d.ts +54 -0
  189. package/dist/src/addressArgsParam.js +51 -0
  190. package/dist/src/addressTexts.d.ts +14 -0
  191. package/dist/src/addressTexts.js +28 -21
  192. package/dist/src/agentIndexFile.d.ts +11 -0
  193. package/dist/src/agentIndexFile.js +11 -0
  194. package/dist/src/argConditions.d.ts +52 -0
  195. package/dist/src/argConditions.js +80 -0
  196. package/dist/src/argControl.d.ts +100 -0
  197. package/dist/src/argControl.js +0 -0
  198. package/dist/src/argExpression.d.ts +21 -0
  199. package/dist/src/argExpression.js +30 -0
  200. package/dist/src/argTypes.d.ts +40 -51
  201. package/dist/src/argTypes.js +66 -184
  202. package/dist/src/argsProps.d.ts +3 -3
  203. package/dist/src/argsProps.js +11 -5
  204. package/dist/src/bundlerErrors.d.ts +29 -0
  205. package/dist/src/bundlerErrors.js +49 -0
  206. package/dist/src/catalogue.d.ts +31 -0
  207. package/dist/src/catalogue.js +13 -2
  208. package/dist/src/catalogueRefs.d.ts +75 -0
  209. package/dist/src/catalogueRefs.js +122 -0
  210. package/dist/src/componentDocs.d.ts +71 -0
  211. package/dist/src/componentDocs.js +15 -2
  212. package/dist/src/frame/callValues.d.ts +19 -0
  213. package/dist/src/frame/callValues.js +58 -0
  214. package/dist/src/frame/canvasScheme.d.ts +33 -0
  215. package/dist/src/frame/canvasScheme.js +67 -0
  216. package/dist/src/frame/frame.css +36 -3
  217. package/dist/src/frame/frameStatus.d.ts +16 -1
  218. package/dist/src/frame/frameStatus.js +16 -1
  219. package/dist/src/frame/frameView.js +4 -3
  220. package/dist/src/frame/mountFrame.d.ts +7 -1
  221. package/dist/src/frame/mountFrame.js +153 -46
  222. package/dist/src/frame/panelValues.d.ts +35 -0
  223. package/dist/src/frame/panelValues.js +127 -0
  224. package/dist/src/frame/playActions.d.ts +39 -0
  225. package/dist/src/frame/playActions.js +98 -0
  226. package/dist/src/frame/playStepper.d.ts +28 -0
  227. package/dist/src/frame/playStepper.js +38 -0
  228. package/dist/src/frame/playStory.d.ts +9 -1
  229. package/dist/src/frame/playStory.js +49 -3
  230. package/dist/src/frame/renderer.d.ts +34 -1
  231. package/dist/src/frame/renderer.js +24 -0
  232. package/dist/src/frame/shellChannel.d.ts +1 -1
  233. package/dist/src/frame/shellChannel.js +1 -1
  234. package/dist/src/frame/shellCheck.d.ts +17 -0
  235. package/dist/src/frame/shellCheck.js +25 -0
  236. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  237. package/dist/src/frame/shellMessageCheck.js +53 -0
  238. package/dist/src/frame/storyContent.d.ts +50 -0
  239. package/dist/src/frame/storyContent.js +73 -0
  240. package/dist/src/frame/storyModule.d.ts +9 -0
  241. package/dist/src/frame/storyModule.js +20 -2
  242. package/dist/src/frame/storyRun.d.ts +15 -7
  243. package/dist/src/frame/storyRun.js +64 -15
  244. package/dist/src/frame/valueSheets.d.ts +35 -0
  245. package/dist/src/frame/valueSheets.js +99 -0
  246. package/dist/src/hotModules.d.ts +20 -0
  247. package/dist/src/hotModules.js +23 -0
  248. package/dist/src/jsxCode.d.ts +1 -14
  249. package/dist/src/jsxCode.js +46 -10
  250. package/dist/src/liveErrors.d.ts +30 -4
  251. package/dist/src/liveErrors.js +18 -3
  252. package/dist/src/messages.d.ts +77 -27
  253. package/dist/src/messages.js +58 -100
  254. package/dist/src/namedValues.d.ts +2 -26
  255. package/dist/src/namedValues.js +0 -47
  256. package/dist/src/pageConfig.d.ts +2 -0
  257. package/dist/src/playTrace.d.ts +19 -2
  258. package/dist/src/playTrace.js +10 -5
  259. package/dist/src/plugin.d.ts +10 -3
  260. package/dist/src/previewRelay.js +9 -1
  261. package/dist/src/printable.d.ts +12 -0
  262. package/dist/src/printable.js +22 -0
  263. package/dist/src/propsSignature.d.ts +37 -0
  264. package/dist/src/propsSignature.js +40 -0
  265. package/dist/src/search.d.ts +41 -5
  266. package/dist/src/search.js +93 -23
  267. package/dist/src/searchMatch.d.ts +4 -1
  268. package/dist/src/searchMatch.js +26 -5
  269. package/dist/src/searchTypos.d.ts +88 -0
  270. package/dist/src/searchTypos.js +178 -0
  271. package/dist/src/shapeValues.d.ts +86 -0
  272. package/dist/src/shapeValues.js +295 -0
  273. package/dist/src/shell/ApiReference.js +6 -3
  274. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  275. package/dist/src/shell/ApiTableBox.js +11 -0
  276. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  277. package/dist/src/shell/AppearanceMenu.js +9 -6
  278. package/dist/src/shell/CodeTab.d.ts +3 -2
  279. package/dist/src/shell/CodeTab.js +3 -2
  280. package/dist/src/shell/CodeText.d.ts +1 -1
  281. package/dist/src/shell/CodeText.js +2 -3
  282. package/dist/src/shell/CompareGrid.js +1 -1
  283. package/dist/src/shell/ComponentPage.d.ts +1 -1
  284. package/dist/src/shell/ComponentPage.js +5 -1
  285. package/dist/src/shell/CustomControl.d.ts +34 -0
  286. package/dist/src/shell/CustomControl.js +132 -0
  287. package/dist/src/shell/DocContainers.js +1 -1
  288. package/dist/src/shell/DocPage.js +2 -2
  289. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  290. package/dist/src/shell/DroppedArgsList.js +1 -1
  291. package/dist/src/shell/EmbedPage.js +58 -14
  292. package/dist/src/shell/Example.d.ts +5 -1
  293. package/dist/src/shell/Example.js +16 -8
  294. package/dist/src/shell/FrameView.d.ts +6 -3
  295. package/dist/src/shell/FrameView.js +2 -2
  296. package/dist/src/shell/HomePage.d.ts +3 -1
  297. package/dist/src/shell/HomePage.js +16 -6
  298. package/dist/src/shell/InfoTip.js +2 -2
  299. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  300. package/dist/src/shell/InteractionsTab.js +18 -2
  301. package/dist/src/shell/LazyPage.js +1 -1
  302. package/dist/src/shell/PackageHtml.js +3 -1
  303. package/dist/src/shell/PinnedControl.js +14 -62
  304. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  305. package/dist/src/shell/PinnedControlMenu.js +72 -0
  306. package/dist/src/shell/PluginBlockHost.js +2 -1
  307. package/dist/src/shell/PluginTabHost.js +19 -2
  308. package/dist/src/shell/PropFields.d.ts +3 -1
  309. package/dist/src/shell/PropFields.js +9 -6
  310. package/dist/src/shell/PropRows.d.ts +23 -2
  311. package/dist/src/shell/PropRows.js +58 -19
  312. package/dist/src/shell/PropsTab.d.ts +12 -5
  313. package/dist/src/shell/PropsTab.js +9 -21
  314. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  315. package/dist/src/shell/RefStoryPage.js +123 -0
  316. package/dist/src/shell/SearchPanel.js +51 -24
  317. package/dist/src/shell/Shell.d.ts +18 -0
  318. package/dist/src/shell/Shell.js +137 -22
  319. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  320. package/dist/src/shell/ShortcutHelp.js +66 -0
  321. package/dist/src/shell/Sidebar.d.ts +17 -4
  322. package/dist/src/shell/Sidebar.js +92 -41
  323. package/dist/src/shell/SidebarDocs.js +2 -2
  324. package/dist/src/shell/SidebarEntries.js +5 -3
  325. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  326. package/dist/src/shell/SidebarHandle.js +4 -4
  327. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  328. package/dist/src/shell/SidebarRefs.js +99 -0
  329. package/dist/src/shell/SidebarSearch.js +37 -9
  330. package/dist/src/shell/SignatureReference.js +3 -1
  331. package/dist/src/shell/Stage.d.ts +10 -2
  332. package/dist/src/shell/Stage.js +35 -60
  333. package/dist/src/shell/StatusBadges.d.ts +54 -0
  334. package/dist/src/shell/StatusBadges.js +77 -0
  335. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  336. package/dist/src/shell/StoryCodeBlock.js +7 -6
  337. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  338. package/dist/src/shell/SwitchGallery.js +17 -0
  339. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  340. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  341. package/dist/src/shell/TagFilter.d.ts +24 -0
  342. package/dist/src/shell/TagFilter.js +45 -0
  343. package/dist/src/shell/TagViews.d.ts +39 -0
  344. package/dist/src/shell/TagViews.js +20 -0
  345. package/dist/src/shell/Toolbar.d.ts +4 -1
  346. package/dist/src/shell/Toolbar.js +17 -7
  347. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  348. package/dist/src/shell/ToolbarControl.js +23 -6
  349. package/dist/src/shell/ViewMenuPanel.js +6 -1
  350. package/dist/src/shell/argChecks.d.ts +22 -0
  351. package/dist/src/shell/argChecks.js +20 -0
  352. package/dist/src/shell/asideStory.d.ts +17 -4
  353. package/dist/src/shell/asideStory.js +21 -4
  354. package/dist/src/shell/audienceSections.css +9 -9
  355. package/dist/src/shell/catalogueContext.d.ts +1 -1
  356. package/dist/src/shell/catalogueContext.js +6 -1
  357. package/dist/src/shell/codeSpans.d.ts +27 -0
  358. package/dist/src/shell/codeSpans.js +76 -0
  359. package/dist/src/shell/compareVariants.d.ts +4 -2
  360. package/dist/src/shell/compareVariants.js +16 -8
  361. package/dist/src/shell/composition.d.ts +23 -0
  362. package/dist/src/shell/composition.js +26 -0
  363. package/dist/src/shell/controlCycle.d.ts +1 -1
  364. package/dist/src/shell/controlCycle.js +3 -2
  365. package/dist/src/shell/customControls.d.ts +55 -0
  366. package/dist/src/shell/customControls.js +70 -0
  367. package/dist/src/shell/docPage.css +22 -22
  368. package/dist/src/shell/dockTabs.d.ts +19 -3
  369. package/dist/src/shell/dockTabs.js +28 -20
  370. package/dist/src/shell/embed.css +7 -7
  371. package/dist/src/shell/framesOrigin.d.ts +7 -0
  372. package/dist/src/shell/framesOrigin.js +1 -1
  373. package/dist/src/shell/galleryPlace.d.ts +20 -0
  374. package/dist/src/shell/galleryPlace.js +26 -0
  375. package/dist/src/shell/icons.d.ts +1 -0
  376. package/dist/src/shell/icons.js +1 -0
  377. package/dist/src/shell/keyboard.d.ts +14 -12
  378. package/dist/src/shell/keyboard.js +21 -6
  379. package/dist/src/shell/laterStrings.d.ts +29 -0
  380. package/dist/src/shell/laterStrings.js +42 -3
  381. package/dist/src/shell/mountShell.js +3 -0
  382. package/dist/src/shell/pageStrings.d.ts +4 -0
  383. package/dist/src/shell/pageStrings.js +4 -0
  384. package/dist/src/shell/pageTagView.d.ts +18 -0
  385. package/dist/src/shell/pageTagView.js +10 -0
  386. package/dist/src/shell/playMemory.d.ts +14 -0
  387. package/dist/src/shell/playMemory.js +8 -0
  388. package/dist/src/shell/propNotes.d.ts +23 -0
  389. package/dist/src/shell/propNotes.js +37 -0
  390. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  391. package/dist/src/shell/refIndexLoad.js +38 -0
  392. package/dist/src/shell/refParts.d.ts +34 -0
  393. package/dist/src/shell/refParts.js +9 -0
  394. package/dist/src/shell/refStory.css +21 -0
  395. package/dist/src/shell/refStrings.d.ts +13 -0
  396. package/dist/src/shell/refStrings.js +21 -0
  397. package/dist/src/shell/search.css +11 -11
  398. package/dist/src/shell/shell.css +348 -168
  399. package/dist/src/shell/shellScheme.js +2 -2
  400. package/dist/src/shell/shortcutHelp.css +64 -0
  401. package/dist/src/shell/stageArgs.d.ts +53 -0
  402. package/dist/src/shell/stageArgs.js +64 -0
  403. package/dist/src/shell/statusBadges.css +51 -0
  404. package/dist/src/shell/strings.d.ts +7 -16
  405. package/dist/src/shell/strings.js +12 -17
  406. package/dist/src/shell/switchGallery.css +104 -0
  407. package/dist/src/shell/tagFilter.css +46 -0
  408. package/dist/src/shell/tagView.d.ts +20 -0
  409. package/dist/src/shell/tagView.js +10 -0
  410. package/dist/src/shell/useAddressArgs.d.ts +27 -2
  411. package/dist/src/shell/useAddressArgs.js +71 -14
  412. package/dist/src/shell/useControlKeys.js +2 -2
  413. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  414. package/dist/src/shell/useEditedProblems.js +40 -0
  415. package/dist/src/shell/useFrameMessages.js +3 -0
  416. package/dist/src/shell/useListedTree.d.ts +13 -0
  417. package/dist/src/shell/useListedTree.js +32 -0
  418. package/dist/src/shell/usePageFrames.js +2 -2
  419. package/dist/src/shell/usePopover.d.ts +5 -0
  420. package/dist/src/shell/usePopover.js +7 -1
  421. package/dist/src/shell/useRefIndex.d.ts +22 -0
  422. package/dist/src/shell/useRefIndex.js +36 -0
  423. package/dist/src/shell/useScrollStops.d.ts +20 -0
  424. package/dist/src/shell/useScrollStops.js +41 -0
  425. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  426. package/dist/src/shell/useShortcutHelp.js +32 -0
  427. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  428. package/dist/src/shell/useSidebarOverlay.js +12 -4
  429. package/dist/src/shell/useStoryCode.d.ts +2 -1
  430. package/dist/src/shell/useStoryCode.js +12 -7
  431. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  432. package/dist/src/shell/useToolbarLayout.js +2 -2
  433. package/dist/src/shell/useWorstCase.d.ts +8 -2
  434. package/dist/src/shell/useWorstCase.js +2 -2
  435. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  436. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  437. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  438. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  439. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  440. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  441. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  442. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  443. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  444. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  445. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  446. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  447. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  448. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  449. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  450. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  451. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  452. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  453. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  454. package/dist/src/shell/valueEditors/ValueField.js +147 -0
  455. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  456. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  457. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  458. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  459. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  460. package/dist/src/shell/worstArgs.d.ts +8 -5
  461. package/dist/src/shell/worstArgs.js +14 -7
  462. package/dist/src/shellTheme.d.ts +1 -1
  463. package/dist/src/shellTheme.js +15 -1
  464. package/dist/src/shellTheme.types.d.ts +4 -0
  465. package/dist/src/shellWord.d.ts +12 -0
  466. package/dist/src/shellWord.js +15 -0
  467. package/dist/src/sourceFiles.js +2 -1
  468. package/dist/src/storyArgTypes.d.ts +57 -0
  469. package/dist/src/storyArgTypes.js +195 -0
  470. package/dist/src/storyBackground.js +14 -3
  471. package/dist/src/storyCheck.d.ts +85 -3
  472. package/dist/src/storyCheck.js +23 -1
  473. package/dist/src/storyCodeText.d.ts +46 -0
  474. package/dist/src/storyCodeText.js +27 -0
  475. package/dist/src/storyControls.d.ts +100 -0
  476. package/dist/src/storyControls.js +100 -0
  477. package/dist/src/storyStatuses.d.ts +55 -0
  478. package/dist/src/storyStatuses.js +104 -0
  479. package/dist/src/storyTagNames.d.ts +25 -0
  480. package/dist/src/storyTagNames.js +25 -0
  481. package/dist/src/storyTags.d.ts +29 -0
  482. package/dist/src/storyTags.js +85 -0
  483. package/dist/src/storyTree.d.ts +13 -0
  484. package/dist/src/storyTree.js +24 -4
  485. package/dist/src/storybookArgs.d.ts +24 -0
  486. package/dist/src/storybookArgs.js +185 -0
  487. package/dist/src/switches.d.ts +66 -3
  488. package/dist/src/switches.js +42 -1
  489. package/dist/src/valueSchema.d.ts +28 -0
  490. package/dist/src/valueSchema.js +196 -0
  491. package/dist/src/valueShape.d.ts +94 -0
  492. package/dist/src/valueShape.js +25 -0
  493. package/dist/src/viewState.d.ts +8 -3
  494. package/dist/src/viewState.js +27 -10
  495. package/dist/src/vite/adapter.d.ts +40 -2
  496. package/dist/src/vite/adapter.js +1 -0
  497. package/dist/src/vite/agent.types.d.ts +347 -7
  498. package/dist/src/vite/agentApi.d.ts +23 -0
  499. package/dist/src/vite/agentApi.js +90 -17
  500. package/dist/src/vite/agentIndex.d.ts +0 -2
  501. package/dist/src/vite/agentIndex.js +5 -6
  502. package/dist/src/vite/agentRoutes.d.ts +20 -1
  503. package/dist/src/vite/agentRoutes.js +106 -65
  504. package/dist/src/vite/agentStatuses.d.ts +42 -0
  505. package/dist/src/vite/agentStatuses.js +67 -0
  506. package/dist/src/vite/agentStoryCode.d.ts +48 -0
  507. package/dist/src/vite/agentStoryCode.js +38 -0
  508. package/dist/src/vite/agentVisibility.d.ts +47 -0
  509. package/dist/src/vite/agentVisibility.js +174 -0
  510. package/dist/src/vite/appAudit.d.ts +134 -0
  511. package/dist/src/vite/appAudit.js +333 -0
  512. package/dist/src/vite/appBuildOption.d.ts +53 -0
  513. package/dist/src/vite/appBuildOption.js +55 -0
  514. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  515. package/dist/src/vite/appTokenFiles.js +433 -0
  516. package/dist/src/vite/appTokens.d.ts +23 -0
  517. package/dist/src/vite/appTokens.js +275 -0
  518. package/dist/src/vite/builtTexts.d.ts +10 -0
  519. package/dist/src/vite/builtTexts.js +59 -22
  520. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  521. package/dist/src/vite/catalogueConfig.js +15 -3
  522. package/dist/src/vite/changeCoverage.d.ts +74 -0
  523. package/dist/src/vite/changeCoverage.js +120 -0
  524. package/dist/src/vite/changedRoute.d.ts +30 -0
  525. package/dist/src/vite/changedRoute.js +197 -0
  526. package/dist/src/vite/checkCode.d.ts +105 -3
  527. package/dist/src/vite/checkCode.js +323 -36
  528. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  529. package/dist/src/vite/checkoutWatch.js +287 -0
  530. package/dist/src/vite/closeWatch.d.ts +8 -0
  531. package/dist/src/vite/closeWatch.js +1 -1
  532. package/dist/src/vite/componentCache.d.ts +8 -0
  533. package/dist/src/vite/componentCache.js +66 -0
  534. package/dist/src/vite/componentGraph.d.ts +71 -0
  535. package/dist/src/vite/componentGraph.js +133 -0
  536. package/dist/src/vite/componentRules.d.ts +33 -0
  537. package/dist/src/vite/componentRules.js +105 -0
  538. package/dist/src/vite/componentScan.d.ts +69 -0
  539. package/dist/src/vite/componentScan.js +418 -0
  540. package/dist/src/vite/compositionCheck.d.ts +15 -0
  541. package/dist/src/vite/compositionCheck.js +243 -0
  542. package/dist/src/vite/config.d.ts +32 -1
  543. package/dist/src/vite/configFile.d.ts +14 -2
  544. package/dist/src/vite/configFile.js +124 -40
  545. package/dist/src/vite/configKeys.d.ts +15 -0
  546. package/dist/src/vite/configKeys.js +171 -0
  547. package/dist/src/vite/configLoadError.d.ts +23 -0
  548. package/dist/src/vite/configLoadError.js +71 -0
  549. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  550. package/dist/src/vite/cssDeclarations.js +290 -0
  551. package/dist/src/vite/cssImports.d.ts +14 -0
  552. package/dist/src/vite/cssImports.js +48 -0
  553. package/dist/src/vite/cssReferences.d.ts +54 -0
  554. package/dist/src/vite/cssReferences.js +157 -0
  555. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  556. package/dist/src/vite/cssTokenValues.js +233 -0
  557. package/dist/src/vite/designTokens.d.ts +24 -0
  558. package/dist/src/vite/designTokens.js +5 -1
  559. package/dist/src/vite/docsExtractor.d.ts +9 -3
  560. package/dist/src/vite/docsExtractor.js +11 -3
  561. package/dist/src/vite/docsProgram.d.ts +17 -4
  562. package/dist/src/vite/docsProgram.js +52 -11
  563. package/dist/src/vite/docsWorker.js +7 -2
  564. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  565. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  566. package/dist/src/vite/fileImports.d.ts +17 -0
  567. package/dist/src/vite/fileImports.js +57 -0
  568. package/dist/src/vite/findComponent.d.ts +10 -2
  569. package/dist/src/vite/findComponent.js +27 -22
  570. package/dist/src/vite/findRoute.js +3 -2
  571. package/dist/src/vite/forcedStates.d.ts +9 -2
  572. package/dist/src/vite/forcedStates.js +12 -3
  573. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  574. package/dist/src/vite/forgebookPlugin.js +52 -72
  575. package/dist/src/vite/frameErrors.d.ts +19 -0
  576. package/dist/src/vite/frameErrors.js +70 -0
  577. package/dist/src/vite/framesServer.d.ts +12 -0
  578. package/dist/src/vite/framesServer.js +21 -4
  579. package/dist/src/vite/functionComponentDocs.js +81 -12
  580. package/dist/src/vite/generatedModules.js +4 -2
  581. package/dist/src/vite/gitChange.d.ts +38 -5
  582. package/dist/src/vite/gitChange.js +71 -11
  583. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  584. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  585. package/dist/src/vite/hotSnippets.d.ts +38 -14
  586. package/dist/src/vite/hotSnippets.js +137 -39
  587. package/dist/src/vite/importedNames.d.ts +37 -0
  588. package/dist/src/vite/importedNames.js +138 -0
  589. package/dist/src/vite/indexFields.d.ts +6 -0
  590. package/dist/src/vite/indexFields.js +21 -0
  591. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  592. package/dist/src/vite/indexStoryFile.js +22 -157
  593. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  594. package/dist/src/vite/jsxCallSites.js +200 -0
  595. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  596. package/dist/src/vite/jsxInScripts.js +138 -0
  597. package/dist/src/vite/jsxTree.d.ts +20 -0
  598. package/dist/src/vite/jsxTree.js +163 -0
  599. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  600. package/dist/src/vite/lineAndColumn.js +18 -0
  601. package/dist/src/vite/lookAlikes.d.ts +65 -0
  602. package/dist/src/vite/lookAlikes.js +228 -0
  603. package/dist/src/vite/nearestToken.d.ts +17 -0
  604. package/dist/src/vite/nearestToken.js +9 -2
  605. package/dist/src/vite/packageEntries.d.ts +42 -0
  606. package/dist/src/vite/packageEntries.js +127 -0
  607. package/dist/src/vite/pages.d.ts +9 -1
  608. package/dist/src/vite/pages.js +108 -4
  609. package/dist/src/vite/pluginConfig.js +4 -0
  610. package/dist/src/vite/pluginIds.d.ts +2 -0
  611. package/dist/src/vite/pluginIds.js +5 -1
  612. package/dist/src/vite/pluginModules.d.ts +81 -11
  613. package/dist/src/vite/pluginModules.js +109 -21
  614. package/dist/src/vite/prebundled.d.ts +57 -15
  615. package/dist/src/vite/prebundled.js +80 -0
  616. package/dist/src/vite/previewTags.d.ts +25 -0
  617. package/dist/src/vite/previewTags.js +56 -0
  618. package/dist/src/vite/projectFiles.d.ts +54 -0
  619. package/dist/src/vite/projectFiles.js +116 -0
  620. package/dist/src/vite/projectPostcss.d.ts +70 -0
  621. package/dist/src/vite/projectPostcss.js +250 -0
  622. package/dist/src/vite/propDocs.d.ts +12 -0
  623. package/dist/src/vite/propDocs.js +130 -58
  624. package/dist/src/vite/propKind.d.ts +40 -0
  625. package/dist/src/vite/propKind.js +71 -0
  626. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  627. package/dist/src/vite/propTypeNotes.js +51 -0
  628. package/dist/src/vite/publishedExports.d.ts +27 -0
  629. package/dist/src/vite/publishedExports.js +298 -0
  630. package/dist/src/vite/realFolder.d.ts +6 -0
  631. package/dist/src/vite/realFolder.js +25 -0
  632. package/dist/src/vite/refsConfig.d.ts +39 -0
  633. package/dist/src/vite/refsConfig.js +54 -0
  634. package/dist/src/vite/reuseCheck.d.ts +45 -0
  635. package/dist/src/vite/reuseCheck.js +260 -0
  636. package/dist/src/vite/runningVersions.d.ts +33 -0
  637. package/dist/src/vite/runningVersions.js +25 -0
  638. package/dist/src/vite/scriptProblems.d.ts +60 -0
  639. package/dist/src/vite/scriptProblems.js +155 -0
  640. package/dist/src/vite/searchModule.js +3 -2
  641. package/dist/src/vite/searchRoute.js +4 -2
  642. package/dist/src/vite/shapeDocs.d.ts +36 -0
  643. package/dist/src/vite/shapeDocs.js +177 -0
  644. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  645. package/dist/src/vite/singleFileComponent.js +83 -0
  646. package/dist/src/vite/sourceText.d.ts +34 -0
  647. package/dist/src/vite/sourceText.js +72 -0
  648. package/dist/src/vite/sourceTokens.d.ts +7 -0
  649. package/dist/src/vite/sourceTokens.js +7 -2
  650. package/dist/src/vite/stackLines.d.ts +49 -0
  651. package/dist/src/vite/stackLines.js +96 -0
  652. package/dist/src/vite/storyCode.d.ts +22 -7
  653. package/dist/src/vite/storyCode.js +263 -37
  654. package/dist/src/vite/storyCoverage.d.ts +48 -0
  655. package/dist/src/vite/storyCoverage.js +179 -0
  656. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  657. package/dist/src/vite/storyFilesModule.js +105 -15
  658. package/dist/src/vite/storyPatterns.d.ts +31 -0
  659. package/dist/src/vite/storyPatterns.js +140 -5
  660. package/dist/src/vite/storyReach.d.ts +10 -2
  661. package/dist/src/vite/storyReach.js +15 -11
  662. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  663. package/dist/src/vite/storyTopLevel.js +146 -0
  664. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  665. package/dist/src/vite/storylessRoutes.js +210 -19
  666. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  667. package/dist/src/vite/switchValuesCheck.js +164 -0
  668. package/dist/src/vite/switchesDocument.d.ts +15 -0
  669. package/dist/src/vite/switchesDocument.js +47 -0
  670. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  671. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  672. package/dist/src/vite/textImports.d.ts +15 -0
  673. package/dist/src/vite/textImports.js +58 -0
  674. package/dist/src/vite/textModules.d.ts +6 -5
  675. package/dist/src/vite/textModules.js +13 -8
  676. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  677. package/dist/src/vite/tokenAnswers.js +11 -7
  678. package/dist/src/vite/typeParameters.d.ts +83 -0
  679. package/dist/src/vite/typeParameters.js +270 -0
  680. package/dist/src/vite/unionProps.d.ts +37 -0
  681. package/dist/src/vite/unionProps.js +121 -0
  682. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  683. package/dist/src/vite/unresolvedTokens.js +193 -0
  684. package/dist/src/vite/usageGraph.js +10 -52
  685. package/dist/src/vite/usageGuidance.d.ts +9 -2
  686. package/dist/src/vite/usageGuidance.js +36 -8
  687. package/dist/src/vite/usageImports.d.ts +35 -0
  688. package/dist/src/vite/usageImports.js +280 -0
  689. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  690. package/dist/src/vite/visibilityRoute.js +320 -0
  691. package/dist/src/worstCase.d.ts +2 -0
  692. package/dist/src/worstCase.js +2 -0
  693. package/package.json +28 -8
@@ -23,30 +23,36 @@
23
23
  import { extname, join, resolve } from "node:path";
24
24
  import { checksA11y, offersUsedIn, readsComponentDocs } from "../catalogue.js";
25
25
  import { SAME_ORIGIN } from "../frameOrigins.js";
26
- import { createLiveErrors, isLiveErrorReport, LIVE_ERROR_EVENT } from "../liveErrors.js";
26
+ import { createLiveErrors } from "../liveErrors.js";
27
27
  import { agentMiddleware, FRAMED_AGENT_PAGES } from "./agentRoutes.js";
28
28
  import { STORY_FILE } from "./autoTitle.js";
29
29
  import { axeBuildAsset } from "./axeScript.js";
30
30
  import { groupTexts } from "./builtTexts.js";
31
31
  import { catalogueConfig } from "./catalogueConfig.js";
32
+ import { currentCheckoutWatch } from "./checkoutWatch.js";
32
33
  import { currentCloseWatch } from "./closeWatch.js";
33
34
  import { findConfigFile, loadConfigFile, packageResolver } from "./configFile.js";
34
35
  import { codeStamp, diskCache } from "./diskCache.js";
35
36
  import { createDocsExtractor, NO_DOCS_EXTRACTOR } from "./docsExtractor.js";
37
+ import { sayEmptyStoryGlobs } from "./emptyStoryGlobs.js";
36
38
  import { devServerAccess, VITEST_HOOKS } from "./fileAccess.js";
37
39
  import { FORCED_STATES_VISITOR } from "./forcedStates.js";
40
+ import { receiveFrameErrors } from "./frameErrors.js";
38
41
  import { builtPlacement } from "./framesConfig.js";
39
42
  import { serveFrames } from "./framesServer.js";
40
43
  import { generatedId, generatedModule } from "./generatedModules.js";
41
44
  import { missingHeightsMiddleware } from "./heightsRoute.js";
42
- import { FILES_MODULE_HOT, renewedModule, servedPatterns, storyFileHotHooks } from "./hotSnippets.js";
45
+ import { filesModuleHot, renewedModule, servedPatterns, storyFileHotHooks } from "./hotSnippets.js";
46
+ import { jsxInScripts } from "./jsxInScripts.js";
43
47
  import { inlineJson, packedJsonOf } from "./packedModule.js";
44
48
  import { AGENT_SOURCES_FILE, configModule, PAGE_FILES, pageHtml, pageModulePath } from "./pages.js";
45
49
  import { CONFIG_ID, DOCS_PAGES_PREFIX, patternId, TOKENS_ID, virtualId } from "./pluginIds.js";
46
- import { docsModule, docsValue, FILES_PREFIX, listingRenewals, patternModule, REACH_ID_PREFIX, reachModule, searchIndexes, USAGE_ID_PREFIX, usageModule } from "./pluginModules.js";
47
- import { isKeptIndex, storyFilesGroupOf } from "./storyFilesModule.js";
50
+ import { docsModule, docsModuleOf, docsValue, FILES_PREFIX, invalidateEverywhere, keptListing, listingRenewals, pagesReloaded, patternModule, REACH_ID_PREFIX, reachModule, searchIndexes, USAGE_ID_PREFIX, usageModule } from "./pluginModules.js";
51
+ import { checkAtStart } from "./runningVersions.js";
52
+ import { scriptProblems } from "./scriptProblems.js";
53
+ import { isKeptIndex } from "./storyFilesModule.js";
48
54
  import { tokensModule } from "./storylessRoutes.js";
49
- import { DOCS_PAGE_QUERY, DOCS_QUERY, HOME_QUERY, RENEWED_QUERIES, TEXT_QUERIES } from "./textQueries.js";
55
+ import { DOCS_QUERY, RENEWED_QUERIES, TEXT_QUERIES } from "./textQueries.js";
50
56
  import { VITE_PATHS } from "./vitePaths.js";
51
57
  /** This module's folder, in the core's package: the core's own dependencies resolve from here, not the project's. */
52
58
  const PACKAGE_DIR = import.meta.dirname;
@@ -64,21 +70,6 @@ const sassOptions = async () => {
64
70
  const DOCS_PAGE_FILE = /\.md$/;
65
71
  /** A TypeScript source file, whose edit may change a component's docs. */
66
72
  const SOURCE_FILE = /\.tsx?$/;
67
- /**
68
- * Renews modules in every environment that loaded them: the agents' routes load them on the server too.
69
- *
70
- * @param server - the dev server.
71
- * @param ids - the modules' ids.
72
- */
73
- const invalidateEverywhere = (server, ids) => {
74
- for (const environment of Object.values(server.environments)) {
75
- for (const id of ids) {
76
- const module = environment.moduleGraph.getModuleById(id);
77
- if (module !== undefined)
78
- environment.moduleGraph.invalidateModule(module);
79
- }
80
- }
81
- };
82
73
  /**
83
74
  * The page a request names, when it names one: `/` is the shell's.
84
75
  *
@@ -89,31 +80,6 @@ const requestedPage = (url) => {
89
80
  const name = path === "/" ? "index.html" : path.replace(/^\//, "");
90
81
  return PAGE_FILES.find((page) => page === name);
91
82
  };
92
- /**
93
- * A docs pages' module, when the id is a pattern's, a page's or the written home's. The Markdown reader loads with the
94
- * first: a catalogue may have no docs pages, and a story's page reads none.
95
- *
96
- * @param id - the module's id.
97
- * @param watch - adds a file whose edit renews the module.
98
- * @param isServing - whether a dev server runs.
99
- * @param plugins - the catalogue's plugins, whose fences a page may draw.
100
- * @param isKept - whether a page its group lists may be read.
101
- */
102
- const docsModuleOf = async (id, watch, isServing, plugins, isKept) => {
103
- const isHome = id.endsWith(HOME_QUERY);
104
- const isPage = id.endsWith(DOCS_PAGE_QUERY);
105
- if (!isHome && !isPage && !id.startsWith(DOCS_PAGES_PREFIX))
106
- return undefined;
107
- const { docPageModule, docPagesModule, homeModule } = await import("./docPagesModule.js");
108
- if (isHome)
109
- return { code: homeModule(id.slice(0, -HOME_QUERY.length), watch, isServing, plugins), moduleType: "js" };
110
- if (isPage) {
111
- const file = id.slice(0, -DOCS_PAGE_QUERY.length);
112
- return { code: docPageModule(file, watch, isServing, plugins), moduleType: "js" };
113
- }
114
- const { root, patterns } = storyFilesGroupOf(id.slice(DOCS_PAGES_PREFIX.length));
115
- return { code: docPagesModule(root, patterns, watch, isServing, plugins, isKept), moduleType: "js" };
116
- };
117
83
  /**
118
84
  * The catalogue's Vite plugin: the story index, the docs, the code and the Markdown of the stories, the forced-states
119
85
  * rewrite of every style sheet and, with a configuration, the catalogue's two pages.
@@ -124,8 +90,8 @@ const docsModuleOf = async (id, watch, isServing, plugins, isKept) => {
124
90
  */
125
91
  export const forgebookPlugin = (options = {}) => {
126
92
  /**
127
- * The modules of the groups of story files, with the files each listed when served (none while it could not be
128
- * made), renewed when a story file is added to or removed from what one lists.
93
+ * The modules of the groups of story files, with the versions served since the pages last reloaded (none while it
94
+ * could not be made), renewed when a story file is added to or removed from what a page may hold.
129
95
  */
130
96
  const filesModules = new Map();
131
97
  // what each pattern's module was served with: an edit of a story file that changes its list reloads the pages
@@ -153,11 +119,13 @@ export const forgebookPlugin = (options = {}) => {
153
119
  if (config === undefined)
154
120
  return undefined;
155
121
  if (id === CONFIG_ID)
156
- return { code: configModule(config, await framesPlacement()), moduleType: "js" };
122
+ return { code: configModule(config, await framesPlacement(), isServing()), moduleType: "js" };
157
123
  return generatedModule(id, config, command);
158
124
  };
159
125
  /** The files followed one by one, so an edit reaches the dev server at once. */
160
126
  const watching = currentCloseWatch();
127
+ /** Git's checkouts, so the files a branch switch rewrites reach the dev server when the system's events do not. */
128
+ const checkouts = currentCheckoutWatch();
161
129
  /** Whether a dev server runs, or a build: tools ask only the former. */
162
130
  let command = "serve";
163
131
  const isServing = () => command === "serve";
@@ -170,6 +138,9 @@ export const forgebookPlugin = (options = {}) => {
170
138
  });
171
139
  // a build's docs, code and pages of each group's story files, read while the build loads the stories
172
140
  const texts = groupTexts();
141
+ // whether a story file that cannot be read is named while the rest draws: a build must fail on it, and a test run has
142
+ // no page to name it on
143
+ const isForgiving = () => isServing() && !isTestRun;
173
144
  // whether an edited story file is drawn anew in its open frames: a dev server's, unless the framework cannot
174
145
  const isRedrawing = () => isServing() && (config?.framework ?? options.framework)?.redrawsEditedStories !== false;
175
146
  /**
@@ -177,8 +148,10 @@ export const forgebookPlugin = (options = {}) => {
177
148
  * still loading TypeScript when the tests end is stopped by Node mid-parse, which aborts the process.
178
149
  */
179
150
  let isTestRun = false;
151
+ const scripts = { ...scriptProblems(), isQuick: options.isQuickScan === true };
180
152
  /** Where answers are kept between starts (`diskCache.ts`): in Vite's cache folder, so what clears it clears them. */
181
153
  let cacheFolder;
154
+ const jsxScripts = jsxInScripts(() => config?.framework ?? options.framework);
182
155
  /** The stamp of the plugin's own code, which makes the kept indexes and code: another version is a miss. */
183
156
  let pluginCode;
184
157
  const keptCache = (kind, isValue) => {
@@ -235,7 +208,7 @@ export const forgebookPlugin = (options = {}) => {
235
208
  * @param pack - writes a module's JSON as its value: as it is, or kept out of a build's JavaScript.
236
209
  * @param startTexts - a build's browser files': starts reading a pattern's docs, code and pages, which its module
237
210
  * imports from the group's texts module; none imports each from its query.
238
- * @throws when a story file cannot be indexed.
211
+ * @throws when a story file cannot be indexed, and no person at a dev server is told instead (a build, a test run).
239
212
  */
240
213
  const storiesModule = async (id, watch, pack, startTexts) => {
241
214
  if (id.startsWith(USAGE_ID_PREFIX)) {
@@ -251,16 +224,14 @@ export const forgebookPlugin = (options = {}) => {
251
224
  }
252
225
  if (!id.startsWith(FILES_PREFIX))
253
226
  return undefined;
254
- filesModules.set(id, undefined);
255
227
  const lists = config?.lists ?? {};
256
228
  const hasUsage = offersUsedIn(lists);
257
229
  // the worker starts while Vite loads the pages, unless the disk keeps the docs; a test run asks for no page
258
- const { files, code } = patternModule(id, watch, { hasDocs: readsComponentDocs(lists), hasUsage, hasReach: hasUsage && isServing() }, indexCache(), isTestRun ? undefined : extractor().warm, startTexts, access.isKept);
259
- filesModules.set(id, new Set(files.map((file) => file.file)));
230
+ const { files, refused, code } = keptListing(filesModules, id, () => patternModule(id, watch, { hasDocs: readsComponentDocs(lists), hasUsage, hasReach: hasUsage && isServing() }, indexCache(), isTestRun ? undefined : extractor().warm, startTexts, access.isKept, isForgiving(), config, scripts.list()));
260
231
  if (!isRedrawing())
261
232
  return { code, moduleType: "js" };
262
- served.keep(id, files);
263
- return { code: `${code}\n${FILES_MODULE_HOT}`, moduleType: "js" };
233
+ served.keep(id, { files, refused });
234
+ return { code: `${code}\n${filesModuleHot(refused)}`, moduleType: "js" };
264
235
  };
265
236
  /**
266
237
  * Tells the docs a source file was added or removed: it may be what an import now finds, so no kept docs are read
@@ -342,6 +313,13 @@ export const forgebookPlugin = (options = {}) => {
342
313
  (await storiesModule(id, watch, pack, startTexts)) ??
343
314
  null);
344
315
  };
316
+ // whatever its mode: a run of Vitest has no page to name a file on, and must fail on it
317
+ const vitestHooks = {
318
+ configureVitest: (context) => {
319
+ isTestRun = true;
320
+ VITEST_HOOKS.configureVitest(context);
321
+ }
322
+ };
345
323
  return {
346
324
  name: "forgebook",
347
325
  enforce: "pre",
@@ -353,7 +331,7 @@ export const forgebookPlugin = (options = {}) => {
353
331
  if (file !== undefined)
354
332
  config = await loadConfigFile(file);
355
333
  }
356
- const pages = config === undefined ? {} : catalogueConfig(config, userConfig);
334
+ const pages = config === undefined ? {} : catalogueConfig(config, userConfig, scripts);
357
335
  return {
358
336
  ...pages,
359
337
  css: {
@@ -382,14 +360,16 @@ export const forgebookPlugin = (options = {}) => {
382
360
  access.noteImported(pattern);
383
361
  return pattern;
384
362
  },
385
- // a warning and not a failure: a theme a reader can still use must not stop a catalogue from building
386
363
  configResolved: (resolved) => {
364
+ jsxScripts.remember(resolved);
365
+ checkAtStart(resolved, config?.shell.problems ?? []);
387
366
  // a dev server's answers only: a build reads everything once, and stamping each answer's files costs it more than
388
367
  // a later build would save
389
368
  if (isServing())
390
369
  cacheFolder = join(resolved.cacheDir, "forgebook");
391
- for (const problem of config?.shell.problems ?? [])
392
- resolved.logger.warn(`Forgebook's shell theme: ${problem}`);
370
+ scripts.start(resolved.logger, cacheFolder);
371
+ if (config !== undefined && !isTestRun)
372
+ sayEmptyStoryGlobs(config, isServing(), resolved.logger);
393
373
  },
394
374
  configureServer: (server) => {
395
375
  access.serve(server, config === undefined ? undefined : pageModulePath(config.dir, AGENT_SOURCES_FILE));
@@ -397,7 +377,9 @@ export const forgebookPlugin = (options = {}) => {
397
377
  access.settle(request.url ?? "/").then(() => next(), next);
398
378
  });
399
379
  // no person waits for a page in a test run
400
- watching.serve(isTestRun ? undefined : server);
380
+ const followed = isTestRun ? undefined : server;
381
+ watching.serve(followed);
382
+ checkouts.serve(followed);
401
383
  server.httpServer?.on("close", () => void docs?.close());
402
384
  // first: the frames' own origin, and the guard that keeps every other origin's page from reading this one
403
385
  if (config !== undefined)
@@ -415,10 +397,7 @@ export const forgebookPlugin = (options = {}) => {
415
397
  };
416
398
  server.middlewares.use(missingHeightsMiddleware(file));
417
399
  }
418
- server.ws.on(LIVE_ERROR_EVENT, (report) => {
419
- if (isLiveErrorReport(report))
420
- live.add(report, new Date());
421
- });
400
+ receiveFrameErrors(server, live);
422
401
  // the catalogue's pages, made here: no HTML file is written
423
402
  server.middlewares.use((request, response, next) => {
424
403
  const page = requestedPage(request.url ?? "/");
@@ -447,6 +426,7 @@ export const forgebookPlugin = (options = {}) => {
447
426
  return;
448
427
  invalidateEverywhere(server, renewed);
449
428
  server.ws.send({ type: "full-reload" });
429
+ pagesReloaded(filesModules);
450
430
  };
451
431
  server.watcher.on("add", refresh);
452
432
  server.watcher.on("unlink", refresh);
@@ -462,21 +442,21 @@ export const forgebookPlugin = (options = {}) => {
462
442
  },
463
443
  // a dev server without an HTTP server of its own (middleware mode) ends its close watch here only
464
444
  closeServer: (context) => {
465
- if (context.reason === "close")
445
+ if (context.reason === "close") {
466
446
  watching.close();
447
+ checkouts.close();
448
+ }
467
449
  },
468
450
  closeBundle: async () => {
469
451
  await docs?.close();
470
452
  },
471
- ...storyFileHotHooks(isRedrawing, served.changedBy, watching),
472
- ...VITEST_HOOKS,
453
+ ...storyFileHotHooks(isRedrawing, served, watching, scripts),
454
+ ...vitestHooks,
473
455
  async load(id) {
474
- const generated = await pagesModule(id);
475
- if (generated !== undefined)
476
- return generated;
477
- const refusal = access.refusal(id);
478
- if (refusal !== undefined)
479
- return refusal;
456
+ // a generated module, a file the server refuses, or a `.js` file whose JSX is compiled as it loads
457
+ const early = (await pagesModule(id)) ?? access.refusal(id) ?? (await jsxScripts.load(id));
458
+ if (early !== null)
459
+ return early;
480
460
  // in Vite's form, the text Vite's module graph knows a file by: a Node path on Windows (`C:\app\x.md`) is another
481
461
  const watch = (file) => this.addWatchFile(VITE_PATHS.normalize(file));
482
462
  const resolveImport = async (specifier, importer) => {
@@ -0,0 +1,19 @@
1
+ /**
2
+ * What the dev server does with the errors the open frames report: keeps each, with the place its stack maps to, and
3
+ * answers the frame with the stack in the lines of the files as written.
4
+ *
5
+ * @remarks
6
+ * The mapping runs here, on the maps of the modules the server served (`stackLines.ts`), so the frame loads no decoder
7
+ * and no map. A stack that cannot be mapped is kept and answered as it came. Used by the plugin's dev server.
8
+ *
9
+ * @module
10
+ */
11
+ import type { ViteDevServer } from "vite";
12
+ import { type LiveErrors } from "../liveErrors.ts";
13
+ /**
14
+ * Listens to the frames' error reports on the dev server's connection.
15
+ *
16
+ * @param server - the dev server.
17
+ * @param live - where the errors are kept.
18
+ */
19
+ export declare const receiveFrameErrors: (server: ViteDevServer, live: LiveErrors) => void;
@@ -0,0 +1,70 @@
1
+ import { isLiveErrorReport, LIVE_ERROR_EVENT, MAPPED_STACK_EVENT } from "../liveErrors.js";
2
+ import { mappedStack } from "./stackLines.js";
3
+ /**
4
+ * The module the dev server served at an address, with its map: none for another address or one it keeps no map of.
5
+ *
6
+ * @param server - the dev server.
7
+ * @param address - the address, as a stack names it: the server's own or its frames' origin, which serve the same
8
+ * modules.
9
+ */
10
+ const servedModule = async (server, address) => {
11
+ let url;
12
+ try {
13
+ const parsed = new URL(address);
14
+ url = `${parsed.pathname}${parsed.search}`;
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ const module = await server.environments.client.moduleGraph.getModuleByUrl(url);
20
+ const map = module?.transformResult?.map;
21
+ if (module?.file == null || map == null || !("version" in map))
22
+ return undefined;
23
+ return { file: module.file, map };
24
+ };
25
+ /**
26
+ * A report's stack mapped, or as it came when the mapping fails.
27
+ *
28
+ * @param server - the dev server.
29
+ * @param stack - the stack the frame sent.
30
+ */
31
+ const mapped = async (server, stack) => {
32
+ try {
33
+ return await mappedStack(stack, (address) => servedModule(server, address), server.config.root);
34
+ }
35
+ catch {
36
+ return { stack };
37
+ }
38
+ };
39
+ /**
40
+ * Keeps a report, its stack swapped for the place it maps to, and answers the frame with the stack mapped.
41
+ *
42
+ * @param server - the dev server.
43
+ * @param live - the errors kept.
44
+ * @param report - the frame's report.
45
+ * @param client - the frame's connection.
46
+ */
47
+ const keep = async (server, live, report, client) => {
48
+ const { stack, ...kept } = report;
49
+ if (stack === undefined) {
50
+ live.add(kept, new Date());
51
+ return;
52
+ }
53
+ const result = await mapped(server, stack);
54
+ live.add(result.place === undefined ? kept : { ...kept, place: result.place }, new Date());
55
+ const answer = { sent: stack, stack: result.stack };
56
+ client.send(MAPPED_STACK_EVENT, answer);
57
+ };
58
+ /**
59
+ * Listens to the frames' error reports on the dev server's connection.
60
+ *
61
+ * @param server - the dev server.
62
+ * @param live - where the errors are kept.
63
+ */
64
+ export const receiveFrameErrors = (server, live) => {
65
+ server.ws.on(LIVE_ERROR_EVENT, (report, client) => {
66
+ if (!isLiveErrorReport(report))
67
+ return;
68
+ keep(server, live, report, client).catch((error) => server.config.logger.error(`Forgebook could not keep a frame's error: ${error instanceof Error ? error.message : String(error)}`));
69
+ });
70
+ };
@@ -3,6 +3,18 @@ import type { ViteDevServer } from "vite";
3
3
  import { type FramesPlacement } from "../frameOrigins.ts";
4
4
  import type { ResolvedConfig } from "./configFile.ts";
5
5
  import type { ResolvedFrames } from "./framesConfig.ts";
6
+ /**
7
+ * The ports the frames try, in order, 0 for any free one: the one the configuration gives, alone; else the catalogue's
8
+ * + 1 and the ones after it, as Vite moves on from a port taken. A catalogue on any free port (a command's own server)
9
+ * gives its frames any free port too: the system hands out such ports in order on some platforms, so the one after the
10
+ * catalogue's is the next process's, which Vite has just found free and is about to take.
11
+ *
12
+ * @param configured - the frames' port the configuration gives (`frames.port`, `--frame-port`); none for the default.
13
+ * @param catalogue - the port the catalogue listens on.
14
+ * @param isCatalogueOnAnyPort - whether the catalogue asked for any free port (`port: 0`).
15
+ * @returns the ports, in order.
16
+ */
17
+ export declare const framesPortTries: (configured: number | undefined, catalogue: number, isCatalogueOnAnyPort: boolean) => readonly number[];
6
18
  /** A Connect middleware. */
7
19
  type Middleware = (request: IncomingMessage, response: ServerResponse, next: (error?: unknown) => void) => void;
8
20
  /** The frames' side of a dev server. */
@@ -22,6 +22,24 @@ import { catalogueAnswer, FRAME_PAGE_PATH, framesAnswer, graphUrlOf, pageEntries
22
22
  import { pageHtml } from "./pages.js";
23
23
  /** How many ports after the default one the frames try before taking any free port. */
24
24
  const PORT_TRIES = 20;
25
+ /**
26
+ * The ports the frames try, in order, 0 for any free one: the one the configuration gives, alone; else the catalogue's
27
+ * + 1 and the ones after it, as Vite moves on from a port taken. A catalogue on any free port (a command's own server)
28
+ * gives its frames any free port too: the system hands out such ports in order on some platforms, so the one after the
29
+ * catalogue's is the next process's, which Vite has just found free and is about to take.
30
+ *
31
+ * @param configured - the frames' port the configuration gives (`frames.port`, `--frame-port`); none for the default.
32
+ * @param catalogue - the port the catalogue listens on.
33
+ * @param isCatalogueOnAnyPort - whether the catalogue asked for any free port (`port: 0`).
34
+ * @returns the ports, in order.
35
+ */
36
+ export const framesPortTries = (configured, catalogue, isCatalogueOnAnyPort) => {
37
+ if (configured !== undefined)
38
+ return [configured];
39
+ if (isCatalogueOnAnyPort)
40
+ return [0];
41
+ return [...Array.from({ length: PORT_TRIES }, (_, index) => catalogue + 1 + index), 0];
42
+ };
25
43
  /**
26
44
  * A header's single value.
27
45
  *
@@ -188,6 +206,8 @@ export const framesServing = (server, frames, frameHtml, framedPages) => {
188
206
  const framesRequests = new WeakSet();
189
207
  const sharedPaths = frames.kind === "isolated" ? frames.paths : [];
190
208
  let framesPort;
209
+ // read before the catalogue listens: once it does, Vite's resolved options name the port it took
210
+ const isCatalogueOnAnyPort = server.config.server.port === 0;
191
211
  let settle = () => undefined;
192
212
  const placed = new Promise((resolvePlacement) => {
193
213
  settle = resolvePlacement;
@@ -283,10 +303,7 @@ export const framesServing = (server, frames, frameHtml, framedPages) => {
283
303
  throw new Error("Forgebook's frames start once the catalogue listens");
284
304
  const framesServer = framesHttpServer(server, server.httpServer, handleFrames);
285
305
  const wanted = frames.port ?? catalogue.port + 1;
286
- // a port the configuration gives is that port; the default moves on, as Vite's own does
287
- const tries = frames.port === undefined
288
- ? [...Array.from({ length: PORT_TRIES }, (_, index) => wanted + index), 0]
289
- : [wanted];
306
+ const tries = framesPortTries(frames.port, catalogue.port, isCatalogueOnAnyPort);
290
307
  const listened = await listenOnFirstFree(framesServer, tries, catalogue.address);
291
308
  if (listened === undefined)
292
309
  throw new Error(`Forgebook's frames: port ${wanted} is taken (frames.port, --frame-port)`);
@@ -19,6 +19,8 @@ import { moduleSummaryOf } from "./moduleSummary.js";
19
19
  import { declarationOrder, declaredSymbol, isForeign, partsOf, propDocs } from "./propDocs.js";
20
20
  import { signatureDocs } from "./signatureDocs.js";
21
21
  import { metaComponent, metaSubcomponents } from "./storyMeta.js";
22
+ import { bindingsOf } from "./typeParameters.js";
23
+ import { propsOfType } from "./unionProps.js";
22
24
  import { guidanceOf } from "./usageGuidance.js";
23
25
  /**
24
26
  * How a component is called: as a function of its props, or constructed with them into something that renders (a
@@ -32,6 +34,37 @@ const componentSignatures = (type) => [
32
34
  .getConstructSignatures()
33
35
  .filter((signature) => signature.getReturnType().getProperty("render") !== undefined)
34
36
  ];
37
+ /**
38
+ * The name an export's component is written by: a default export's symbol is named `default`, its declaration by what
39
+ * the file calls it (`export default function Card`).
40
+ *
41
+ * @param symbol - the declared symbol.
42
+ */
43
+ const writtenName = (symbol) => {
44
+ const [declaration] = symbol.declarations ?? [];
45
+ const name = declaration === undefined ? undefined : ts.getNameOfDeclaration(declaration);
46
+ return symbol.getName() === "default" && name !== undefined && ts.isIdentifier(name)
47
+ ? name.text
48
+ : symbol.getName();
49
+ };
50
+ /**
51
+ * Why a component lists no props although it takes some: it cannot be called with props, its props are `any`, or
52
+ * every one of them is declared outside its package.
53
+ *
54
+ * @param signature - its first call or construct signature, if any.
55
+ * @param propsType - the type of its props, if it takes any.
56
+ * @param listed - how many props it lists.
57
+ * @param all - how many props its props type has, left out ones included.
58
+ */
59
+ const propsNoteOf = (signature, propsType, listed, all) => {
60
+ if (signature === undefined)
61
+ return { reason: "no-signature" };
62
+ if (propsType === undefined || listed > 0)
63
+ return undefined;
64
+ if (propsType.flags & ts.TypeFlags.Any)
65
+ return { reason: "untyped" };
66
+ return all > 0 ? { reason: "outside-package", count: all } : undefined;
67
+ };
35
68
  /**
36
69
  * A component's props, read at the expression that names it.
37
70
  *
@@ -47,9 +80,37 @@ const componentProps = (symbol, expression, checker, storyFile) => {
47
80
  const propsType = propsSymbol === undefined
48
81
  ? undefined
49
82
  : checker.getNonNullableType(checker.getTypeOfSymbolAtLocation(propsSymbol, expression));
50
- const ownProps = declarationOrder((propsType?.getProperties() ?? []).filter((prop) => !isForeign(prop)), dirname(symbol.declarations?.[0]?.getSourceFile().fileName ?? storyFile));
51
- return { propsType, ownProps };
83
+ const { props, variantOnly } = propsType === undefined ? { props: [], variantOnly: new Map() } : propsOfType(propsType, checker);
84
+ const ownProps = declarationOrder(props.filter((prop) => !isForeign(prop)), dirname(symbol.declarations?.[0]?.getSourceFile().fileName ?? storyFile));
85
+ return {
86
+ propsType,
87
+ ownProps,
88
+ variantOnly,
89
+ bindings: propsType === undefined ? new Map() : bindingsOf(propsType, checker),
90
+ propsNote: propsNoteOf(signature, propsType, ownProps.length, props.length)
91
+ };
52
92
  };
93
+ /**
94
+ * The docs of a component's listed props: a prop only some variants declare is never required, and says when it can
95
+ * be passed.
96
+ *
97
+ * @param props - the component's props, as `componentProps` read them.
98
+ * @param checker - the program's checker.
99
+ * @param expression - where the code names the component.
100
+ */
101
+ const listedProps = (props, checker, expression) => props.ownProps.map((prop) => {
102
+ const variant = props.variantOnly.get(prop);
103
+ const { bindings } = props;
104
+ if (variant === undefined)
105
+ return propDocs(prop, checker, expression, { bindings });
106
+ const variants = variant.declarations.filter((declaration) => declaration !== prop);
107
+ const { onlyWhen } = variant;
108
+ return {
109
+ ...propDocs(prop, checker, expression, { variants, bindings }),
110
+ isRequired: false,
111
+ ...(onlyWhen === undefined ? {} : { onlyWhen })
112
+ };
113
+ });
53
114
  /**
54
115
  * The files a component's docs come from: the one declaring it and those declaring its own props.
55
116
  *
@@ -76,13 +137,13 @@ const subcomponentsOf = (source, checker) => {
76
137
  if (symbol === undefined) {
77
138
  return `${source.fileName}: the meta's subcomponent ${subcomponent.name} cannot be resolved`;
78
139
  }
79
- const { ownProps } = componentProps(symbol, subcomponent.expression, checker, source.fileName);
140
+ const props = componentProps(symbol, subcomponent.expression, checker, source.fileName);
80
141
  docs.push({
81
142
  name: subcomponent.name,
82
143
  description: summaryOf(symbol, checker),
83
- props: ownProps.map((prop) => propDocs(prop, checker, subcomponent.expression))
144
+ props: listedProps(props, checker, subcomponent.expression)
84
145
  });
85
- sources.push(...docsSources(symbol, ownProps, source.fileName));
146
+ sources.push(...docsSources(symbol, props.ownProps, source.fileName));
86
147
  }
87
148
  return { docs, sources };
88
149
  };
@@ -96,22 +157,24 @@ const subcomponentsOf = (source, checker) => {
96
157
  * @param subcomponents - the subcomponents' docs and files; none outside a story file.
97
158
  */
98
159
  const componentOf = (symbol, expression, checker, file, subcomponents) => {
99
- const { propsType, ownProps } = componentProps(symbol, expression, checker, file);
100
- const props = ownProps.map((prop) => propDocs(prop, checker, expression));
160
+ const read = componentProps(symbol, expression, checker, file);
161
+ const { propsType, ownProps, propsNote } = read;
162
+ const props = listedProps(read, checker, expression);
101
163
  const parts = partsOf(propsType, checker, expression);
102
164
  const declarationFile = symbol.declarations?.[0]?.getSourceFile();
103
165
  const sources = docsSources(symbol, ownProps, file);
104
166
  const signature = signatureDocs(symbol, expression, checker);
105
167
  return {
106
168
  docs: {
107
- name: symbol.getName(),
169
+ name: writtenName(symbol),
108
170
  description: summaryOf(symbol, checker),
109
171
  summary: declarationFile === undefined ? "" : moduleSummaryOf(declarationFile.text),
110
172
  props,
111
173
  parts,
112
174
  subcomponents: subcomponents.docs,
113
175
  ...guidanceOf(symbol, checker),
114
- ...(signature === undefined ? {} : { signature })
176
+ ...(signature === undefined ? {} : { signature }),
177
+ ...(propsNote === undefined ? {} : { propsNote })
115
178
  },
116
179
  file: sources[0] ?? file,
117
180
  sources: [...new Set([...sources, ...subcomponents.sources])]
@@ -155,7 +218,7 @@ export const functionComponentDocs = (storyFile) => {
155
218
  return typeof component === "string" ? component : component.docs;
156
219
  };
157
220
  /** Whether an export is a component: a name in PascalCase whose value can be called or constructed. */
158
- const isComponentExport = (symbol, checker, node) => /^[A-Z]/.test(symbol.getName()) &&
221
+ const isComponentExport = (symbol, checker, node) => /^[A-Z]/.test(writtenName(symbol)) &&
159
222
  componentSignatures(checker.getTypeOfSymbolAtLocation(symbol, node)).length > 0;
160
223
  /**
161
224
  * A component a file exports, read from its types, for writing its first stories (`forgebook new`).
@@ -175,9 +238,12 @@ export const functionFileComponent = (file, exportName) => {
175
238
  const moduleSymbol = checker.getSymbolAtLocation(source);
176
239
  if (moduleSymbol === undefined)
177
240
  return `${file} exports nothing`;
178
- const components = checker
241
+ const exported = checker
179
242
  .getExportsOfModule(moduleSymbol)
180
243
  .filter((each) => isComponentExport(declaredSymbol(each, checker) ?? each, checker, source));
244
+ // a component exported both by name and as the default is one component, imported by its name unless asked otherwise
245
+ const named = new Set(exported.filter((each) => each.getName() !== "default").map((each) => declaredSymbol(each, checker)));
246
+ const components = exported.filter((each) => each.getName() !== "default" || exportName === "default" || !named.has(declaredSymbol(each, checker)));
181
247
  const chosen = chosenExport(components.map((each) => each.getName()), exportName, file);
182
248
  if (typeof chosen !== "string")
183
249
  return chosen.problem;
@@ -189,5 +255,8 @@ export const functionFileComponent = (file, exportName) => {
189
255
  const name = declaration === undefined ? undefined : ts.getNameOfDeclaration(declaration);
190
256
  if (name === undefined || !ts.isIdentifier(name))
191
257
  return `${file}: ${export_.getName()} has no name to read it at`;
192
- return componentOf(symbol, name, checker, file, { docs: [], sources: [] });
258
+ const component = componentOf(symbol, name, checker, file, { docs: [], sources: [] });
259
+ return typeof component === "string" || export_.getName() !== "default"
260
+ ? component
261
+ : { ...component, isDefaultExport: true };
193
262
  };
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The modules the plugin generates for a catalogue's pages: the shell's and the frame's entries, the project's own
3
- * stories' source, the agents' sources and the pages' HTML, and the ids imports name them by.
3
+ * stories' source, the agents' sources, the galleries' previews and the pages' HTML, and the ids imports name them by.
4
4
  *
5
5
  * @remarks
6
6
  * The configuration's data is not among them: it waits for the frames' placement, which only the plugin knows.
@@ -11,7 +11,7 @@ import { existsSync } from "node:fs";
11
11
  import { checksA11y } from "../catalogue.js";
12
12
  import { axeAddress } from "./axeScript.js";
13
13
  import { builtPlacement } from "./framesConfig.js";
14
- import { agentSourcesModule, frameEntry, PAGE_ENTRIES, PAGE_FILES, pageHtml, pageModuleOf, pageModulePath, shellEntry, storiesSourceModule } from "./pages.js";
14
+ import { agentSourcesModule, frameEntry, PAGE_ENTRIES, PAGE_FILES, pageHtml, pageModuleOf, pageModulePath, SWITCH_PREVIEWS_MODULE, shellEntry, storiesSourceModule, switchPreviewsModule } from "./pages.js";
15
15
  import { VITE_PATHS } from "./vitePaths.js";
16
16
  /** The core's folder, where axe's script is found from. */
17
17
  const PACKAGE_DIR = import.meta.dirname;
@@ -25,6 +25,8 @@ const PACKAGE_DIR = import.meta.dirname;
25
25
  * @param command - whether a dev server runs, or a build: where the frame finds axe's script.
26
26
  */
27
27
  export const generatedModule = (id, config, command) => {
28
+ if (id === `\0${SWITCH_PREVIEWS_MODULE}`)
29
+ return { code: switchPreviewsModule(config), moduleType: "js" };
28
30
  const named = pageModuleOf(id, config.dir);
29
31
  if (named === undefined)
30
32
  return undefined;