forgebook 0.3.3 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/README.md +994 -72
  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 +182 -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 +62 -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 +95 -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 +204 -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 +323 -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 +29 -5
  187. package/dist/src/addressArgs.js +58 -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 +148 -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 +69 -185
  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 +83 -0
  211. package/dist/src/componentDocs.js +20 -3
  212. package/dist/src/controlCode.d.ts +27 -0
  213. package/dist/src/controlCode.js +41 -0
  214. package/dist/src/frame/callValues.d.ts +19 -0
  215. package/dist/src/frame/callValues.js +58 -0
  216. package/dist/src/frame/canvasScheme.d.ts +33 -0
  217. package/dist/src/frame/canvasScheme.js +67 -0
  218. package/dist/src/frame/controlValues.d.ts +39 -0
  219. package/dist/src/frame/controlValues.js +143 -0
  220. package/dist/src/frame/frame.css +36 -3
  221. package/dist/src/frame/frameStatus.d.ts +16 -1
  222. package/dist/src/frame/frameStatus.js +16 -1
  223. package/dist/src/frame/frameView.js +4 -3
  224. package/dist/src/frame/mountFrame.d.ts +10 -1
  225. package/dist/src/frame/mountFrame.js +160 -55
  226. package/dist/src/frame/panelControls.d.ts +67 -0
  227. package/dist/src/frame/panelControls.js +110 -0
  228. package/dist/src/frame/panelValues.d.ts +35 -0
  229. package/dist/src/frame/panelValues.js +127 -0
  230. package/dist/src/frame/playActions.d.ts +39 -0
  231. package/dist/src/frame/playActions.js +98 -0
  232. package/dist/src/frame/playStepper.d.ts +28 -0
  233. package/dist/src/frame/playStepper.js +38 -0
  234. package/dist/src/frame/playStory.d.ts +9 -1
  235. package/dist/src/frame/playStory.js +49 -3
  236. package/dist/src/frame/renderer.d.ts +34 -1
  237. package/dist/src/frame/renderer.js +24 -0
  238. package/dist/src/frame/shellChannel.d.ts +1 -1
  239. package/dist/src/frame/shellChannel.js +1 -1
  240. package/dist/src/frame/shellCheck.d.ts +17 -0
  241. package/dist/src/frame/shellCheck.js +25 -0
  242. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  243. package/dist/src/frame/shellMessageCheck.js +53 -0
  244. package/dist/src/frame/storyContent.d.ts +50 -0
  245. package/dist/src/frame/storyContent.js +73 -0
  246. package/dist/src/frame/storyModule.d.ts +9 -0
  247. package/dist/src/frame/storyModule.js +20 -2
  248. package/dist/src/frame/storyRun.d.ts +15 -7
  249. package/dist/src/frame/storyRun.js +64 -15
  250. package/dist/src/frame/valueSheets.d.ts +35 -0
  251. package/dist/src/frame/valueSheets.js +99 -0
  252. package/dist/src/hotModules.d.ts +20 -0
  253. package/dist/src/hotModules.js +23 -0
  254. package/dist/src/jsxCode.d.ts +1 -14
  255. package/dist/src/jsxCode.js +46 -10
  256. package/dist/src/liveErrors.d.ts +30 -4
  257. package/dist/src/liveErrors.js +18 -3
  258. package/dist/src/messages.d.ts +77 -27
  259. package/dist/src/messages.js +58 -100
  260. package/dist/src/namedValues.d.ts +2 -26
  261. package/dist/src/namedValues.js +0 -47
  262. package/dist/src/pageConfig.d.ts +2 -0
  263. package/dist/src/playTrace.d.ts +19 -2
  264. package/dist/src/playTrace.js +10 -5
  265. package/dist/src/plugin.d.ts +10 -3
  266. package/dist/src/previewRelay.js +9 -1
  267. package/dist/src/printable.d.ts +12 -0
  268. package/dist/src/printable.js +22 -0
  269. package/dist/src/propsSignature.d.ts +37 -0
  270. package/dist/src/propsSignature.js +40 -0
  271. package/dist/src/search.d.ts +41 -5
  272. package/dist/src/search.js +93 -23
  273. package/dist/src/searchMatch.d.ts +4 -1
  274. package/dist/src/searchMatch.js +26 -5
  275. package/dist/src/searchTypos.d.ts +88 -0
  276. package/dist/src/searchTypos.js +178 -0
  277. package/dist/src/shapeValues.d.ts +86 -0
  278. package/dist/src/shapeValues.js +295 -0
  279. package/dist/src/shell/ApiReference.js +6 -3
  280. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  281. package/dist/src/shell/ApiTableBox.js +11 -0
  282. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  283. package/dist/src/shell/AppearanceMenu.js +9 -6
  284. package/dist/src/shell/AuthoredHome.js +3 -1
  285. package/dist/src/shell/CodeTab.d.ts +12 -6
  286. package/dist/src/shell/CodeTab.js +47 -3
  287. package/dist/src/shell/CodeText.d.ts +1 -1
  288. package/dist/src/shell/CodeText.js +2 -3
  289. package/dist/src/shell/CompareGrid.js +1 -1
  290. package/dist/src/shell/ComponentPage.d.ts +6 -6
  291. package/dist/src/shell/ComponentPage.js +8 -2
  292. package/dist/src/shell/CustomControl.d.ts +34 -0
  293. package/dist/src/shell/CustomControl.js +125 -0
  294. package/dist/src/shell/DocContainers.js +1 -1
  295. package/dist/src/shell/DocPage.js +2 -2
  296. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  297. package/dist/src/shell/DroppedArgsList.js +1 -1
  298. package/dist/src/shell/EmbedPage.js +30 -12
  299. package/dist/src/shell/Example.d.ts +5 -1
  300. package/dist/src/shell/Example.js +16 -8
  301. package/dist/src/shell/FrameView.d.ts +6 -3
  302. package/dist/src/shell/FrameView.js +2 -2
  303. package/dist/src/shell/HomePage.d.ts +3 -1
  304. package/dist/src/shell/HomePage.js +18 -6
  305. package/dist/src/shell/InfoTip.js +2 -2
  306. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  307. package/dist/src/shell/InteractionsTab.js +18 -2
  308. package/dist/src/shell/LazyPage.js +1 -1
  309. package/dist/src/shell/PackageHtml.js +3 -1
  310. package/dist/src/shell/PageWidth.d.ts +29 -0
  311. package/dist/src/shell/PageWidth.js +18 -0
  312. package/dist/src/shell/PinnedControl.js +14 -62
  313. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  314. package/dist/src/shell/PinnedControlMenu.js +72 -0
  315. package/dist/src/shell/PropFields.d.ts +3 -1
  316. package/dist/src/shell/PropFields.js +9 -6
  317. package/dist/src/shell/PropRows.d.ts +22 -11
  318. package/dist/src/shell/PropRows.js +62 -24
  319. package/dist/src/shell/PropsTab.d.ts +12 -5
  320. package/dist/src/shell/PropsTab.js +9 -22
  321. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  322. package/dist/src/shell/RefStoryPage.js +123 -0
  323. package/dist/src/shell/SearchPanel.js +51 -24
  324. package/dist/src/shell/Shell.d.ts +18 -0
  325. package/dist/src/shell/Shell.js +141 -23
  326. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  327. package/dist/src/shell/ShortcutHelp.js +66 -0
  328. package/dist/src/shell/Sidebar.d.ts +17 -4
  329. package/dist/src/shell/Sidebar.js +92 -41
  330. package/dist/src/shell/SidebarDocs.js +2 -2
  331. package/dist/src/shell/SidebarEntries.js +5 -3
  332. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  333. package/dist/src/shell/SidebarHandle.js +4 -4
  334. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  335. package/dist/src/shell/SidebarRefs.js +99 -0
  336. package/dist/src/shell/SidebarSearch.js +37 -9
  337. package/dist/src/shell/SignatureReference.js +3 -1
  338. package/dist/src/shell/Stage.d.ts +10 -2
  339. package/dist/src/shell/Stage.js +29 -49
  340. package/dist/src/shell/StatusBadges.d.ts +54 -0
  341. package/dist/src/shell/StatusBadges.js +77 -0
  342. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  343. package/dist/src/shell/StoryCodeBlock.js +7 -6
  344. package/dist/src/shell/StoryPicker.d.ts +4 -2
  345. package/dist/src/shell/StoryPicker.js +3 -3
  346. package/dist/src/shell/Switch.d.ts +29 -0
  347. package/dist/src/shell/Switch.js +11 -0
  348. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  349. package/dist/src/shell/SwitchGallery.js +17 -0
  350. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  351. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  352. package/dist/src/shell/TagFilter.d.ts +24 -0
  353. package/dist/src/shell/TagFilter.js +45 -0
  354. package/dist/src/shell/TagViews.d.ts +39 -0
  355. package/dist/src/shell/TagViews.js +20 -0
  356. package/dist/src/shell/Toolbar.d.ts +4 -1
  357. package/dist/src/shell/Toolbar.js +17 -7
  358. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  359. package/dist/src/shell/ToolbarControl.js +23 -6
  360. package/dist/src/shell/ViewMenuPanel.js +6 -1
  361. package/dist/src/shell/argChecks.d.ts +22 -0
  362. package/dist/src/shell/argChecks.js +20 -0
  363. package/dist/src/shell/asideStory.js +7 -2
  364. package/dist/src/shell/audienceSections.css +9 -9
  365. package/dist/src/shell/catalogueContext.d.ts +1 -1
  366. package/dist/src/shell/catalogueContext.js +6 -1
  367. package/dist/src/shell/codeSpans.d.ts +27 -0
  368. package/dist/src/shell/codeSpans.js +76 -0
  369. package/dist/src/shell/compareVariants.d.ts +4 -2
  370. package/dist/src/shell/compareVariants.js +16 -8
  371. package/dist/src/shell/composition.d.ts +23 -0
  372. package/dist/src/shell/composition.js +26 -0
  373. package/dist/src/shell/controlCycle.d.ts +1 -1
  374. package/dist/src/shell/controlCycle.js +3 -2
  375. package/dist/src/shell/customControls.d.ts +62 -0
  376. package/dist/src/shell/customControls.js +81 -0
  377. package/dist/src/shell/docPage.css +22 -22
  378. package/dist/src/shell/dockTabs.d.ts +19 -3
  379. package/dist/src/shell/dockTabs.js +29 -20
  380. package/dist/src/shell/embed.css +7 -7
  381. package/dist/src/shell/frameOrder.d.ts +35 -0
  382. package/dist/src/shell/frameOrder.js +45 -0
  383. package/dist/src/shell/framesOrigin.d.ts +7 -0
  384. package/dist/src/shell/framesOrigin.js +1 -1
  385. package/dist/src/shell/galleryPlace.d.ts +20 -0
  386. package/dist/src/shell/galleryPlace.js +26 -0
  387. package/dist/src/shell/icons.d.ts +1 -0
  388. package/dist/src/shell/icons.js +1 -0
  389. package/dist/src/shell/keyboard.d.ts +14 -12
  390. package/dist/src/shell/keyboard.js +21 -6
  391. package/dist/src/shell/laterStrings.d.ts +30 -0
  392. package/dist/src/shell/laterStrings.js +43 -3
  393. package/dist/src/shell/mountShell.js +3 -0
  394. package/dist/src/shell/pageStrings.d.ts +4 -0
  395. package/dist/src/shell/pageStrings.js +4 -0
  396. package/dist/src/shell/pageTagView.d.ts +18 -0
  397. package/dist/src/shell/pageTagView.js +10 -0
  398. package/dist/src/shell/playMemory.d.ts +14 -0
  399. package/dist/src/shell/playMemory.js +8 -0
  400. package/dist/src/shell/propNotes.d.ts +23 -0
  401. package/dist/src/shell/propNotes.js +37 -0
  402. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  403. package/dist/src/shell/refIndexLoad.js +38 -0
  404. package/dist/src/shell/refParts.d.ts +34 -0
  405. package/dist/src/shell/refParts.js +9 -0
  406. package/dist/src/shell/refStory.css +21 -0
  407. package/dist/src/shell/refStrings.d.ts +13 -0
  408. package/dist/src/shell/refStrings.js +21 -0
  409. package/dist/src/shell/search.css +11 -11
  410. package/dist/src/shell/shell.css +376 -169
  411. package/dist/src/shell/shellScheme.js +2 -2
  412. package/dist/src/shell/shortcutHelp.css +64 -0
  413. package/dist/src/shell/stageArgs.d.ts +53 -0
  414. package/dist/src/shell/stageArgs.js +64 -0
  415. package/dist/src/shell/statusBadges.css +51 -0
  416. package/dist/src/shell/strings.d.ts +7 -16
  417. package/dist/src/shell/strings.js +12 -17
  418. package/dist/src/shell/switchGallery.css +104 -0
  419. package/dist/src/shell/tagFilter.css +46 -0
  420. package/dist/src/shell/tagView.d.ts +20 -0
  421. package/dist/src/shell/tagView.js +10 -0
  422. package/dist/src/shell/useAddressArgs.d.ts +9 -0
  423. package/dist/src/shell/useAddressArgs.js +56 -11
  424. package/dist/src/shell/useControlKeys.js +2 -2
  425. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  426. package/dist/src/shell/useEditedProblems.js +40 -0
  427. package/dist/src/shell/useFrameMessages.js +3 -0
  428. package/dist/src/shell/useFrameQueue.d.ts +8 -3
  429. package/dist/src/shell/useFrameQueue.js +42 -12
  430. package/dist/src/shell/useListedTree.d.ts +13 -0
  431. package/dist/src/shell/useListedTree.js +32 -0
  432. package/dist/src/shell/usePageFrames.js +2 -2
  433. package/dist/src/shell/usePopover.d.ts +5 -0
  434. package/dist/src/shell/usePopover.js +7 -1
  435. package/dist/src/shell/useRefIndex.d.ts +22 -0
  436. package/dist/src/shell/useRefIndex.js +36 -0
  437. package/dist/src/shell/useScrollSettled.d.ts +18 -0
  438. package/dist/src/shell/useScrollSettled.js +56 -0
  439. package/dist/src/shell/useScrollStops.d.ts +20 -0
  440. package/dist/src/shell/useScrollStops.js +41 -0
  441. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  442. package/dist/src/shell/useShortcutHelp.js +32 -0
  443. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  444. package/dist/src/shell/useSidebarOverlay.js +12 -4
  445. package/dist/src/shell/useStoryCode.d.ts +2 -1
  446. package/dist/src/shell/useStoryCode.js +12 -7
  447. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  448. package/dist/src/shell/useToolbarLayout.js +2 -2
  449. package/dist/src/shell/useWorstCase.d.ts +8 -2
  450. package/dist/src/shell/useWorstCase.js +2 -2
  451. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  452. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  453. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  454. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  455. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  456. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  457. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  458. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  459. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  460. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  461. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  462. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  463. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  464. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  465. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  466. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  467. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  468. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  469. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  470. package/dist/src/shell/valueEditors/ValueField.js +148 -0
  471. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  472. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  473. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  474. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  475. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  476. package/dist/src/shell/worstArgs.d.ts +8 -5
  477. package/dist/src/shell/worstArgs.js +14 -7
  478. package/dist/src/shellTheme.d.ts +1 -1
  479. package/dist/src/shellTheme.js +15 -1
  480. package/dist/src/shellTheme.types.d.ts +4 -0
  481. package/dist/src/shellWord.d.ts +12 -0
  482. package/dist/src/shellWord.js +15 -0
  483. package/dist/src/sourceFiles.js +2 -1
  484. package/dist/src/storyArgTypes.d.ts +57 -0
  485. package/dist/src/storyArgTypes.js +195 -0
  486. package/dist/src/storyBackground.js +14 -3
  487. package/dist/src/storyCheck.d.ts +99 -3
  488. package/dist/src/storyCheck.js +39 -1
  489. package/dist/src/storyCodeText.d.ts +52 -0
  490. package/dist/src/storyCodeText.js +30 -0
  491. package/dist/src/storyControls.d.ts +103 -0
  492. package/dist/src/storyControls.js +100 -0
  493. package/dist/src/storyStatuses.d.ts +55 -0
  494. package/dist/src/storyStatuses.js +104 -0
  495. package/dist/src/storyTagNames.d.ts +25 -0
  496. package/dist/src/storyTagNames.js +25 -0
  497. package/dist/src/storyTags.d.ts +29 -0
  498. package/dist/src/storyTags.js +85 -0
  499. package/dist/src/storyTree.d.ts +13 -0
  500. package/dist/src/storyTree.js +24 -4
  501. package/dist/src/storybookArgs.d.ts +24 -0
  502. package/dist/src/storybookArgs.js +185 -0
  503. package/dist/src/switches.d.ts +66 -3
  504. package/dist/src/switches.js +42 -1
  505. package/dist/src/valueSchema.d.ts +28 -0
  506. package/dist/src/valueSchema.js +196 -0
  507. package/dist/src/valueShape.d.ts +94 -0
  508. package/dist/src/valueShape.js +25 -0
  509. package/dist/src/viewState.d.ts +8 -3
  510. package/dist/src/viewState.js +27 -10
  511. package/dist/src/vite/adapter.d.ts +40 -2
  512. package/dist/src/vite/adapter.js +1 -0
  513. package/dist/src/vite/agent.types.d.ts +354 -7
  514. package/dist/src/vite/agentApi.d.ts +23 -0
  515. package/dist/src/vite/agentApi.js +90 -17
  516. package/dist/src/vite/agentIndex.d.ts +0 -2
  517. package/dist/src/vite/agentIndex.js +5 -6
  518. package/dist/src/vite/agentRoutes.d.ts +20 -1
  519. package/dist/src/vite/agentRoutes.js +135 -66
  520. package/dist/src/vite/agentStatuses.d.ts +42 -0
  521. package/dist/src/vite/agentStatuses.js +67 -0
  522. package/dist/src/vite/agentStoryCode.d.ts +51 -0
  523. package/dist/src/vite/agentStoryCode.js +44 -0
  524. package/dist/src/vite/agentVisibility.d.ts +47 -0
  525. package/dist/src/vite/agentVisibility.js +174 -0
  526. package/dist/src/vite/appAudit.d.ts +134 -0
  527. package/dist/src/vite/appAudit.js +333 -0
  528. package/dist/src/vite/appBuildOption.d.ts +53 -0
  529. package/dist/src/vite/appBuildOption.js +55 -0
  530. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  531. package/dist/src/vite/appTokenFiles.js +433 -0
  532. package/dist/src/vite/appTokens.d.ts +23 -0
  533. package/dist/src/vite/appTokens.js +275 -0
  534. package/dist/src/vite/argControlsConfig.d.ts +30 -0
  535. package/dist/src/vite/argControlsConfig.js +176 -0
  536. package/dist/src/vite/builtTexts.d.ts +10 -0
  537. package/dist/src/vite/builtTexts.js +59 -22
  538. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  539. package/dist/src/vite/catalogueConfig.js +21 -4
  540. package/dist/src/vite/changeCoverage.d.ts +74 -0
  541. package/dist/src/vite/changeCoverage.js +120 -0
  542. package/dist/src/vite/changedRoute.d.ts +30 -0
  543. package/dist/src/vite/changedRoute.js +197 -0
  544. package/dist/src/vite/checkCode.d.ts +105 -3
  545. package/dist/src/vite/checkCode.js +323 -36
  546. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  547. package/dist/src/vite/checkoutWatch.js +287 -0
  548. package/dist/src/vite/closeWatch.d.ts +8 -0
  549. package/dist/src/vite/closeWatch.js +1 -1
  550. package/dist/src/vite/componentCache.d.ts +8 -0
  551. package/dist/src/vite/componentCache.js +66 -0
  552. package/dist/src/vite/componentGraph.d.ts +71 -0
  553. package/dist/src/vite/componentGraph.js +133 -0
  554. package/dist/src/vite/componentRules.d.ts +33 -0
  555. package/dist/src/vite/componentRules.js +105 -0
  556. package/dist/src/vite/componentScan.d.ts +69 -0
  557. package/dist/src/vite/componentScan.js +418 -0
  558. package/dist/src/vite/compositionCheck.d.ts +15 -0
  559. package/dist/src/vite/compositionCheck.js +243 -0
  560. package/dist/src/vite/config.d.ts +67 -1
  561. package/dist/src/vite/configFile.d.ts +15 -2
  562. package/dist/src/vite/configFile.js +109 -40
  563. package/dist/src/vite/configKeys.d.ts +15 -0
  564. package/dist/src/vite/configKeys.js +172 -0
  565. package/dist/src/vite/configLoadError.d.ts +23 -0
  566. package/dist/src/vite/configLoadError.js +71 -0
  567. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  568. package/dist/src/vite/cssDeclarations.js +290 -0
  569. package/dist/src/vite/cssImports.d.ts +14 -0
  570. package/dist/src/vite/cssImports.js +48 -0
  571. package/dist/src/vite/cssReferences.d.ts +54 -0
  572. package/dist/src/vite/cssReferences.js +157 -0
  573. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  574. package/dist/src/vite/cssTokenValues.js +233 -0
  575. package/dist/src/vite/designTokens.d.ts +24 -0
  576. package/dist/src/vite/designTokens.js +5 -1
  577. package/dist/src/vite/docsExtractor.d.ts +9 -3
  578. package/dist/src/vite/docsExtractor.js +11 -3
  579. package/dist/src/vite/docsProgram.d.ts +17 -4
  580. package/dist/src/vite/docsProgram.js +52 -11
  581. package/dist/src/vite/docsWorker.js +7 -2
  582. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  583. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  584. package/dist/src/vite/fileImports.d.ts +17 -0
  585. package/dist/src/vite/fileImports.js +57 -0
  586. package/dist/src/vite/findComponent.d.ts +10 -2
  587. package/dist/src/vite/findComponent.js +27 -22
  588. package/dist/src/vite/findRoute.js +3 -2
  589. package/dist/src/vite/forcedStates.d.ts +9 -2
  590. package/dist/src/vite/forcedStates.js +12 -3
  591. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  592. package/dist/src/vite/forgebookPlugin.js +55 -73
  593. package/dist/src/vite/frameErrors.d.ts +19 -0
  594. package/dist/src/vite/frameErrors.js +70 -0
  595. package/dist/src/vite/framesServer.d.ts +12 -0
  596. package/dist/src/vite/framesServer.js +21 -4
  597. package/dist/src/vite/functionComponentDocs.js +81 -12
  598. package/dist/src/vite/generatedModules.js +4 -2
  599. package/dist/src/vite/gitChange.d.ts +38 -5
  600. package/dist/src/vite/gitChange.js +71 -11
  601. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  602. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  603. package/dist/src/vite/hotSnippets.d.ts +38 -14
  604. package/dist/src/vite/hotSnippets.js +137 -39
  605. package/dist/src/vite/importedNames.d.ts +37 -0
  606. package/dist/src/vite/importedNames.js +138 -0
  607. package/dist/src/vite/indexFields.d.ts +6 -0
  608. package/dist/src/vite/indexFields.js +21 -0
  609. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  610. package/dist/src/vite/indexStoryFile.js +22 -157
  611. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  612. package/dist/src/vite/jsxCallSites.js +200 -0
  613. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  614. package/dist/src/vite/jsxInScripts.js +138 -0
  615. package/dist/src/vite/jsxTree.d.ts +20 -0
  616. package/dist/src/vite/jsxTree.js +163 -0
  617. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  618. package/dist/src/vite/lineAndColumn.js +18 -0
  619. package/dist/src/vite/lookAlikes.d.ts +65 -0
  620. package/dist/src/vite/lookAlikes.js +228 -0
  621. package/dist/src/vite/nearestToken.d.ts +17 -0
  622. package/dist/src/vite/nearestToken.js +9 -2
  623. package/dist/src/vite/packageEntries.d.ts +42 -0
  624. package/dist/src/vite/packageEntries.js +127 -0
  625. package/dist/src/vite/pages.d.ts +9 -1
  626. package/dist/src/vite/pages.js +119 -4
  627. package/dist/src/vite/pluginConfig.js +4 -0
  628. package/dist/src/vite/pluginIds.d.ts +2 -0
  629. package/dist/src/vite/pluginIds.js +5 -1
  630. package/dist/src/vite/pluginModules.d.ts +81 -11
  631. package/dist/src/vite/pluginModules.js +109 -21
  632. package/dist/src/vite/prebundled.d.ts +57 -15
  633. package/dist/src/vite/prebundled.js +80 -0
  634. package/dist/src/vite/previewTags.d.ts +25 -0
  635. package/dist/src/vite/previewTags.js +56 -0
  636. package/dist/src/vite/projectFiles.d.ts +54 -0
  637. package/dist/src/vite/projectFiles.js +116 -0
  638. package/dist/src/vite/projectPostcss.d.ts +70 -0
  639. package/dist/src/vite/projectPostcss.js +250 -0
  640. package/dist/src/vite/propDocs.d.ts +12 -0
  641. package/dist/src/vite/propDocs.js +187 -60
  642. package/dist/src/vite/propKind.d.ts +40 -0
  643. package/dist/src/vite/propKind.js +71 -0
  644. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  645. package/dist/src/vite/propTypeNotes.js +51 -0
  646. package/dist/src/vite/publishedExports.d.ts +27 -0
  647. package/dist/src/vite/publishedExports.js +298 -0
  648. package/dist/src/vite/realFolder.d.ts +6 -0
  649. package/dist/src/vite/realFolder.js +25 -0
  650. package/dist/src/vite/refsConfig.d.ts +39 -0
  651. package/dist/src/vite/refsConfig.js +54 -0
  652. package/dist/src/vite/reuseCheck.d.ts +45 -0
  653. package/dist/src/vite/reuseCheck.js +260 -0
  654. package/dist/src/vite/runningVersions.d.ts +33 -0
  655. package/dist/src/vite/runningVersions.js +25 -0
  656. package/dist/src/vite/scriptProblems.d.ts +60 -0
  657. package/dist/src/vite/scriptProblems.js +155 -0
  658. package/dist/src/vite/searchModule.js +3 -2
  659. package/dist/src/vite/searchRoute.js +4 -2
  660. package/dist/src/vite/shapeDocs.d.ts +36 -0
  661. package/dist/src/vite/shapeDocs.js +177 -0
  662. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  663. package/dist/src/vite/singleFileComponent.js +83 -0
  664. package/dist/src/vite/sourceText.d.ts +34 -0
  665. package/dist/src/vite/sourceText.js +72 -0
  666. package/dist/src/vite/sourceTokens.d.ts +7 -0
  667. package/dist/src/vite/sourceTokens.js +7 -2
  668. package/dist/src/vite/stackLines.d.ts +49 -0
  669. package/dist/src/vite/stackLines.js +96 -0
  670. package/dist/src/vite/storyCode.d.ts +22 -7
  671. package/dist/src/vite/storyCode.js +263 -37
  672. package/dist/src/vite/storyCoverage.d.ts +48 -0
  673. package/dist/src/vite/storyCoverage.js +179 -0
  674. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  675. package/dist/src/vite/storyFilesModule.js +105 -15
  676. package/dist/src/vite/storyPatterns.d.ts +31 -0
  677. package/dist/src/vite/storyPatterns.js +140 -5
  678. package/dist/src/vite/storyReach.d.ts +10 -2
  679. package/dist/src/vite/storyReach.js +15 -11
  680. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  681. package/dist/src/vite/storyTopLevel.js +146 -0
  682. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  683. package/dist/src/vite/storylessRoutes.js +210 -19
  684. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  685. package/dist/src/vite/switchValuesCheck.js +164 -0
  686. package/dist/src/vite/switchesDocument.d.ts +15 -0
  687. package/dist/src/vite/switchesDocument.js +47 -0
  688. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  689. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  690. package/dist/src/vite/textImports.d.ts +15 -0
  691. package/dist/src/vite/textImports.js +58 -0
  692. package/dist/src/vite/textModules.d.ts +6 -5
  693. package/dist/src/vite/textModules.js +13 -8
  694. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  695. package/dist/src/vite/tokenAnswers.js +11 -7
  696. package/dist/src/vite/typeParameters.d.ts +83 -0
  697. package/dist/src/vite/typeParameters.js +270 -0
  698. package/dist/src/vite/typedControls.d.ts +31 -0
  699. package/dist/src/vite/typedControls.js +66 -0
  700. package/dist/src/vite/unionProps.d.ts +37 -0
  701. package/dist/src/vite/unionProps.js +121 -0
  702. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  703. package/dist/src/vite/unresolvedTokens.js +193 -0
  704. package/dist/src/vite/usageGraph.js +10 -52
  705. package/dist/src/vite/usageGuidance.d.ts +9 -2
  706. package/dist/src/vite/usageGuidance.js +36 -8
  707. package/dist/src/vite/usageImports.d.ts +35 -0
  708. package/dist/src/vite/usageImports.js +280 -0
  709. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  710. package/dist/src/vite/visibilityRoute.js +320 -0
  711. package/dist/src/worstCase.d.ts +2 -0
  712. package/dist/src/worstCase.js +2 -0
  713. package/package.json +28 -8
@@ -23,30 +23,37 @@
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";
56
+ import { withTypedControls } from "./typedControls.js";
50
57
  import { VITE_PATHS } from "./vitePaths.js";
51
58
  /** This module's folder, in the core's package: the core's own dependencies resolve from here, not the project's. */
52
59
  const PACKAGE_DIR = import.meta.dirname;
@@ -64,21 +71,6 @@ const sassOptions = async () => {
64
71
  const DOCS_PAGE_FILE = /\.md$/;
65
72
  /** A TypeScript source file, whose edit may change a component's docs. */
66
73
  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
74
  /**
83
75
  * The page a request names, when it names one: `/` is the shell's.
84
76
  *
@@ -89,31 +81,6 @@ const requestedPage = (url) => {
89
81
  const name = path === "/" ? "index.html" : path.replace(/^\//, "");
90
82
  return PAGE_FILES.find((page) => page === name);
91
83
  };
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
84
  /**
118
85
  * The catalogue's Vite plugin: the story index, the docs, the code and the Markdown of the stories, the forced-states
119
86
  * rewrite of every style sheet and, with a configuration, the catalogue's two pages.
@@ -124,8 +91,8 @@ const docsModuleOf = async (id, watch, isServing, plugins, isKept) => {
124
91
  */
125
92
  export const forgebookPlugin = (options = {}) => {
126
93
  /**
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.
94
+ * The modules of the groups of story files, with the versions served since the pages last reloaded (none while it
95
+ * could not be made), renewed when a story file is added to or removed from what a page may hold.
129
96
  */
130
97
  const filesModules = new Map();
131
98
  // what each pattern's module was served with: an edit of a story file that changes its list reloads the pages
@@ -153,23 +120,29 @@ export const forgebookPlugin = (options = {}) => {
153
120
  if (config === undefined)
154
121
  return undefined;
155
122
  if (id === CONFIG_ID)
156
- return { code: configModule(config, await framesPlacement()), moduleType: "js" };
123
+ return { code: configModule(config, await framesPlacement(), isServing()), moduleType: "js" };
157
124
  return generatedModule(id, config, command);
158
125
  };
159
126
  /** The files followed one by one, so an edit reaches the dev server at once. */
160
127
  const watching = currentCloseWatch();
128
+ /** Git's checkouts, so the files a branch switch rewrites reach the dev server when the system's events do not. */
129
+ const checkouts = currentCheckoutWatch();
161
130
  /** Whether a dev server runs, or a build: tools ask only the former. */
162
131
  let command = "serve";
163
132
  const isServing = () => command === "serve";
164
133
  // the search's indexes, a build reading each component's docs once for its page and its index
165
134
  const search = searchIndexes({
166
- extract: (storyFile) => extractor().extract(storyFile),
135
+ // the catalogue's controls by type are written into the docs here, so every reader of them sees the same panel
136
+ extract: async (storyFile) => withTypedControls(await extractor().extract(storyFile), config?.argControls ?? {}),
167
137
  isServing,
168
138
  track: (id, isPages) => (isPages ? docsModules : searchModules).add(id),
169
139
  isKept: access.isKept
170
140
  });
171
141
  // a build's docs, code and pages of each group's story files, read while the build loads the stories
172
142
  const texts = groupTexts();
143
+ // 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
144
+ // no page to name it on
145
+ const isForgiving = () => isServing() && !isTestRun;
173
146
  // whether an edited story file is drawn anew in its open frames: a dev server's, unless the framework cannot
174
147
  const isRedrawing = () => isServing() && (config?.framework ?? options.framework)?.redrawsEditedStories !== false;
175
148
  /**
@@ -177,8 +150,10 @@ export const forgebookPlugin = (options = {}) => {
177
150
  * still loading TypeScript when the tests end is stopped by Node mid-parse, which aborts the process.
178
151
  */
179
152
  let isTestRun = false;
153
+ const scripts = { ...scriptProblems(), isQuick: options.isQuickScan === true };
180
154
  /** Where answers are kept between starts (`diskCache.ts`): in Vite's cache folder, so what clears it clears them. */
181
155
  let cacheFolder;
156
+ const jsxScripts = jsxInScripts(() => config?.framework ?? options.framework);
182
157
  /** The stamp of the plugin's own code, which makes the kept indexes and code: another version is a miss. */
183
158
  let pluginCode;
184
159
  const keptCache = (kind, isValue) => {
@@ -235,7 +210,7 @@ export const forgebookPlugin = (options = {}) => {
235
210
  * @param pack - writes a module's JSON as its value: as it is, or kept out of a build's JavaScript.
236
211
  * @param startTexts - a build's browser files': starts reading a pattern's docs, code and pages, which its module
237
212
  * imports from the group's texts module; none imports each from its query.
238
- * @throws when a story file cannot be indexed.
213
+ * @throws when a story file cannot be indexed, and no person at a dev server is told instead (a build, a test run).
239
214
  */
240
215
  const storiesModule = async (id, watch, pack, startTexts) => {
241
216
  if (id.startsWith(USAGE_ID_PREFIX)) {
@@ -251,16 +226,14 @@ export const forgebookPlugin = (options = {}) => {
251
226
  }
252
227
  if (!id.startsWith(FILES_PREFIX))
253
228
  return undefined;
254
- filesModules.set(id, undefined);
255
229
  const lists = config?.lists ?? {};
256
230
  const hasUsage = offersUsedIn(lists);
257
231
  // 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)));
232
+ 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
233
  if (!isRedrawing())
261
234
  return { code, moduleType: "js" };
262
- served.keep(id, files);
263
- return { code: `${code}\n${FILES_MODULE_HOT}`, moduleType: "js" };
235
+ served.keep(id, { files, refused });
236
+ return { code: `${code}\n${filesModuleHot(refused)}`, moduleType: "js" };
264
237
  };
265
238
  /**
266
239
  * 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 +315,13 @@ export const forgebookPlugin = (options = {}) => {
342
315
  (await storiesModule(id, watch, pack, startTexts)) ??
343
316
  null);
344
317
  };
318
+ // whatever its mode: a run of Vitest has no page to name a file on, and must fail on it
319
+ const vitestHooks = {
320
+ configureVitest: (context) => {
321
+ isTestRun = true;
322
+ VITEST_HOOKS.configureVitest(context);
323
+ }
324
+ };
345
325
  return {
346
326
  name: "forgebook",
347
327
  enforce: "pre",
@@ -353,7 +333,7 @@ export const forgebookPlugin = (options = {}) => {
353
333
  if (file !== undefined)
354
334
  config = await loadConfigFile(file);
355
335
  }
356
- const pages = config === undefined ? {} : catalogueConfig(config, userConfig);
336
+ const pages = config === undefined ? {} : catalogueConfig(config, userConfig, scripts);
357
337
  return {
358
338
  ...pages,
359
339
  css: {
@@ -382,14 +362,16 @@ export const forgebookPlugin = (options = {}) => {
382
362
  access.noteImported(pattern);
383
363
  return pattern;
384
364
  },
385
- // a warning and not a failure: a theme a reader can still use must not stop a catalogue from building
386
365
  configResolved: (resolved) => {
366
+ jsxScripts.remember(resolved);
367
+ checkAtStart(resolved, config?.shell.problems ?? []);
387
368
  // a dev server's answers only: a build reads everything once, and stamping each answer's files costs it more than
388
369
  // a later build would save
389
370
  if (isServing())
390
371
  cacheFolder = join(resolved.cacheDir, "forgebook");
391
- for (const problem of config?.shell.problems ?? [])
392
- resolved.logger.warn(`Forgebook's shell theme: ${problem}`);
372
+ scripts.start(resolved.logger, cacheFolder);
373
+ if (config !== undefined && !isTestRun)
374
+ sayEmptyStoryGlobs(config, isServing(), resolved.logger);
393
375
  },
394
376
  configureServer: (server) => {
395
377
  access.serve(server, config === undefined ? undefined : pageModulePath(config.dir, AGENT_SOURCES_FILE));
@@ -397,7 +379,9 @@ export const forgebookPlugin = (options = {}) => {
397
379
  access.settle(request.url ?? "/").then(() => next(), next);
398
380
  });
399
381
  // no person waits for a page in a test run
400
- watching.serve(isTestRun ? undefined : server);
382
+ const followed = isTestRun ? undefined : server;
383
+ watching.serve(followed);
384
+ checkouts.serve(followed);
401
385
  server.httpServer?.on("close", () => void docs?.close());
402
386
  // first: the frames' own origin, and the guard that keeps every other origin's page from reading this one
403
387
  if (config !== undefined)
@@ -415,10 +399,7 @@ export const forgebookPlugin = (options = {}) => {
415
399
  };
416
400
  server.middlewares.use(missingHeightsMiddleware(file));
417
401
  }
418
- server.ws.on(LIVE_ERROR_EVENT, (report) => {
419
- if (isLiveErrorReport(report))
420
- live.add(report, new Date());
421
- });
402
+ receiveFrameErrors(server, live);
422
403
  // the catalogue's pages, made here: no HTML file is written
423
404
  server.middlewares.use((request, response, next) => {
424
405
  const page = requestedPage(request.url ?? "/");
@@ -447,6 +428,7 @@ export const forgebookPlugin = (options = {}) => {
447
428
  return;
448
429
  invalidateEverywhere(server, renewed);
449
430
  server.ws.send({ type: "full-reload" });
431
+ pagesReloaded(filesModules);
450
432
  };
451
433
  server.watcher.on("add", refresh);
452
434
  server.watcher.on("unlink", refresh);
@@ -462,21 +444,21 @@ export const forgebookPlugin = (options = {}) => {
462
444
  },
463
445
  // a dev server without an HTTP server of its own (middleware mode) ends its close watch here only
464
446
  closeServer: (context) => {
465
- if (context.reason === "close")
447
+ if (context.reason === "close") {
466
448
  watching.close();
449
+ checkouts.close();
450
+ }
467
451
  },
468
452
  closeBundle: async () => {
469
453
  await docs?.close();
470
454
  },
471
- ...storyFileHotHooks(isRedrawing, served.changedBy, watching),
472
- ...VITEST_HOOKS,
455
+ ...storyFileHotHooks(isRedrawing, served, watching, scripts),
456
+ ...vitestHooks,
473
457
  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;
458
+ // a generated module, a file the server refuses, or a `.js` file whose JSX is compiled as it loads
459
+ const early = (await pagesModule(id)) ?? access.refusal(id) ?? (await jsxScripts.load(id));
460
+ if (early !== null)
461
+ return early;
480
462
  // 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
463
  const watch = (file) => this.addWatchFile(VITE_PATHS.normalize(file));
482
464
  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;