forgebook 0.3.3 → 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 (690) hide show
  1. package/README.md +914 -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 +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 +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 +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 +30 -12
  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/PropFields.d.ts +3 -1
  307. package/dist/src/shell/PropFields.js +9 -6
  308. package/dist/src/shell/PropRows.d.ts +23 -2
  309. package/dist/src/shell/PropRows.js +58 -19
  310. package/dist/src/shell/PropsTab.d.ts +12 -5
  311. package/dist/src/shell/PropsTab.js +9 -21
  312. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  313. package/dist/src/shell/RefStoryPage.js +123 -0
  314. package/dist/src/shell/SearchPanel.js +51 -24
  315. package/dist/src/shell/Shell.d.ts +18 -0
  316. package/dist/src/shell/Shell.js +137 -22
  317. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  318. package/dist/src/shell/ShortcutHelp.js +66 -0
  319. package/dist/src/shell/Sidebar.d.ts +17 -4
  320. package/dist/src/shell/Sidebar.js +92 -41
  321. package/dist/src/shell/SidebarDocs.js +2 -2
  322. package/dist/src/shell/SidebarEntries.js +5 -3
  323. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  324. package/dist/src/shell/SidebarHandle.js +4 -4
  325. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  326. package/dist/src/shell/SidebarRefs.js +99 -0
  327. package/dist/src/shell/SidebarSearch.js +37 -9
  328. package/dist/src/shell/SignatureReference.js +3 -1
  329. package/dist/src/shell/Stage.d.ts +10 -2
  330. package/dist/src/shell/Stage.js +29 -49
  331. package/dist/src/shell/StatusBadges.d.ts +54 -0
  332. package/dist/src/shell/StatusBadges.js +77 -0
  333. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  334. package/dist/src/shell/StoryCodeBlock.js +7 -6
  335. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  336. package/dist/src/shell/SwitchGallery.js +17 -0
  337. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  338. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  339. package/dist/src/shell/TagFilter.d.ts +24 -0
  340. package/dist/src/shell/TagFilter.js +45 -0
  341. package/dist/src/shell/TagViews.d.ts +39 -0
  342. package/dist/src/shell/TagViews.js +20 -0
  343. package/dist/src/shell/Toolbar.d.ts +4 -1
  344. package/dist/src/shell/Toolbar.js +17 -7
  345. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  346. package/dist/src/shell/ToolbarControl.js +23 -6
  347. package/dist/src/shell/ViewMenuPanel.js +6 -1
  348. package/dist/src/shell/argChecks.d.ts +22 -0
  349. package/dist/src/shell/argChecks.js +20 -0
  350. package/dist/src/shell/asideStory.js +7 -2
  351. package/dist/src/shell/audienceSections.css +9 -9
  352. package/dist/src/shell/catalogueContext.d.ts +1 -1
  353. package/dist/src/shell/catalogueContext.js +6 -1
  354. package/dist/src/shell/codeSpans.d.ts +27 -0
  355. package/dist/src/shell/codeSpans.js +76 -0
  356. package/dist/src/shell/compareVariants.d.ts +4 -2
  357. package/dist/src/shell/compareVariants.js +16 -8
  358. package/dist/src/shell/composition.d.ts +23 -0
  359. package/dist/src/shell/composition.js +26 -0
  360. package/dist/src/shell/controlCycle.d.ts +1 -1
  361. package/dist/src/shell/controlCycle.js +3 -2
  362. package/dist/src/shell/customControls.d.ts +55 -0
  363. package/dist/src/shell/customControls.js +70 -0
  364. package/dist/src/shell/docPage.css +22 -22
  365. package/dist/src/shell/dockTabs.d.ts +19 -3
  366. package/dist/src/shell/dockTabs.js +28 -20
  367. package/dist/src/shell/embed.css +7 -7
  368. package/dist/src/shell/framesOrigin.d.ts +7 -0
  369. package/dist/src/shell/framesOrigin.js +1 -1
  370. package/dist/src/shell/galleryPlace.d.ts +20 -0
  371. package/dist/src/shell/galleryPlace.js +26 -0
  372. package/dist/src/shell/icons.d.ts +1 -0
  373. package/dist/src/shell/icons.js +1 -0
  374. package/dist/src/shell/keyboard.d.ts +14 -12
  375. package/dist/src/shell/keyboard.js +21 -6
  376. package/dist/src/shell/laterStrings.d.ts +29 -0
  377. package/dist/src/shell/laterStrings.js +42 -3
  378. package/dist/src/shell/mountShell.js +3 -0
  379. package/dist/src/shell/pageStrings.d.ts +4 -0
  380. package/dist/src/shell/pageStrings.js +4 -0
  381. package/dist/src/shell/pageTagView.d.ts +18 -0
  382. package/dist/src/shell/pageTagView.js +10 -0
  383. package/dist/src/shell/playMemory.d.ts +14 -0
  384. package/dist/src/shell/playMemory.js +8 -0
  385. package/dist/src/shell/propNotes.d.ts +23 -0
  386. package/dist/src/shell/propNotes.js +37 -0
  387. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  388. package/dist/src/shell/refIndexLoad.js +38 -0
  389. package/dist/src/shell/refParts.d.ts +34 -0
  390. package/dist/src/shell/refParts.js +9 -0
  391. package/dist/src/shell/refStory.css +21 -0
  392. package/dist/src/shell/refStrings.d.ts +13 -0
  393. package/dist/src/shell/refStrings.js +21 -0
  394. package/dist/src/shell/search.css +11 -11
  395. package/dist/src/shell/shell.css +348 -168
  396. package/dist/src/shell/shellScheme.js +2 -2
  397. package/dist/src/shell/shortcutHelp.css +64 -0
  398. package/dist/src/shell/stageArgs.d.ts +53 -0
  399. package/dist/src/shell/stageArgs.js +64 -0
  400. package/dist/src/shell/statusBadges.css +51 -0
  401. package/dist/src/shell/strings.d.ts +7 -16
  402. package/dist/src/shell/strings.js +12 -17
  403. package/dist/src/shell/switchGallery.css +104 -0
  404. package/dist/src/shell/tagFilter.css +46 -0
  405. package/dist/src/shell/tagView.d.ts +20 -0
  406. package/dist/src/shell/tagView.js +10 -0
  407. package/dist/src/shell/useAddressArgs.d.ts +9 -0
  408. package/dist/src/shell/useAddressArgs.js +56 -11
  409. package/dist/src/shell/useControlKeys.js +2 -2
  410. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  411. package/dist/src/shell/useEditedProblems.js +40 -0
  412. package/dist/src/shell/useFrameMessages.js +3 -0
  413. package/dist/src/shell/useListedTree.d.ts +13 -0
  414. package/dist/src/shell/useListedTree.js +32 -0
  415. package/dist/src/shell/usePageFrames.js +2 -2
  416. package/dist/src/shell/usePopover.d.ts +5 -0
  417. package/dist/src/shell/usePopover.js +7 -1
  418. package/dist/src/shell/useRefIndex.d.ts +22 -0
  419. package/dist/src/shell/useRefIndex.js +36 -0
  420. package/dist/src/shell/useScrollStops.d.ts +20 -0
  421. package/dist/src/shell/useScrollStops.js +41 -0
  422. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  423. package/dist/src/shell/useShortcutHelp.js +32 -0
  424. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  425. package/dist/src/shell/useSidebarOverlay.js +12 -4
  426. package/dist/src/shell/useStoryCode.d.ts +2 -1
  427. package/dist/src/shell/useStoryCode.js +12 -7
  428. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  429. package/dist/src/shell/useToolbarLayout.js +2 -2
  430. package/dist/src/shell/useWorstCase.d.ts +8 -2
  431. package/dist/src/shell/useWorstCase.js +2 -2
  432. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  433. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  434. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  435. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  436. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  437. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  438. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  439. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  440. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  441. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  442. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  443. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  444. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  445. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  446. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  447. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  448. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  449. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  450. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  451. package/dist/src/shell/valueEditors/ValueField.js +147 -0
  452. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  453. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  454. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  455. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  456. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  457. package/dist/src/shell/worstArgs.d.ts +8 -5
  458. package/dist/src/shell/worstArgs.js +14 -7
  459. package/dist/src/shellTheme.d.ts +1 -1
  460. package/dist/src/shellTheme.js +15 -1
  461. package/dist/src/shellTheme.types.d.ts +4 -0
  462. package/dist/src/shellWord.d.ts +12 -0
  463. package/dist/src/shellWord.js +15 -0
  464. package/dist/src/sourceFiles.js +2 -1
  465. package/dist/src/storyArgTypes.d.ts +57 -0
  466. package/dist/src/storyArgTypes.js +195 -0
  467. package/dist/src/storyBackground.js +14 -3
  468. package/dist/src/storyCheck.d.ts +85 -3
  469. package/dist/src/storyCheck.js +23 -1
  470. package/dist/src/storyCodeText.d.ts +46 -0
  471. package/dist/src/storyCodeText.js +27 -0
  472. package/dist/src/storyControls.d.ts +100 -0
  473. package/dist/src/storyControls.js +100 -0
  474. package/dist/src/storyStatuses.d.ts +55 -0
  475. package/dist/src/storyStatuses.js +104 -0
  476. package/dist/src/storyTagNames.d.ts +25 -0
  477. package/dist/src/storyTagNames.js +25 -0
  478. package/dist/src/storyTags.d.ts +29 -0
  479. package/dist/src/storyTags.js +85 -0
  480. package/dist/src/storyTree.d.ts +13 -0
  481. package/dist/src/storyTree.js +24 -4
  482. package/dist/src/storybookArgs.d.ts +24 -0
  483. package/dist/src/storybookArgs.js +185 -0
  484. package/dist/src/switches.d.ts +66 -3
  485. package/dist/src/switches.js +42 -1
  486. package/dist/src/valueSchema.d.ts +28 -0
  487. package/dist/src/valueSchema.js +196 -0
  488. package/dist/src/valueShape.d.ts +94 -0
  489. package/dist/src/valueShape.js +25 -0
  490. package/dist/src/viewState.d.ts +8 -3
  491. package/dist/src/viewState.js +27 -10
  492. package/dist/src/vite/adapter.d.ts +40 -2
  493. package/dist/src/vite/adapter.js +1 -0
  494. package/dist/src/vite/agent.types.d.ts +347 -7
  495. package/dist/src/vite/agentApi.d.ts +23 -0
  496. package/dist/src/vite/agentApi.js +90 -17
  497. package/dist/src/vite/agentIndex.d.ts +0 -2
  498. package/dist/src/vite/agentIndex.js +5 -6
  499. package/dist/src/vite/agentRoutes.d.ts +20 -1
  500. package/dist/src/vite/agentRoutes.js +106 -65
  501. package/dist/src/vite/agentStatuses.d.ts +42 -0
  502. package/dist/src/vite/agentStatuses.js +67 -0
  503. package/dist/src/vite/agentStoryCode.d.ts +48 -0
  504. package/dist/src/vite/agentStoryCode.js +38 -0
  505. package/dist/src/vite/agentVisibility.d.ts +47 -0
  506. package/dist/src/vite/agentVisibility.js +174 -0
  507. package/dist/src/vite/appAudit.d.ts +134 -0
  508. package/dist/src/vite/appAudit.js +333 -0
  509. package/dist/src/vite/appBuildOption.d.ts +53 -0
  510. package/dist/src/vite/appBuildOption.js +55 -0
  511. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  512. package/dist/src/vite/appTokenFiles.js +433 -0
  513. package/dist/src/vite/appTokens.d.ts +23 -0
  514. package/dist/src/vite/appTokens.js +275 -0
  515. package/dist/src/vite/builtTexts.d.ts +10 -0
  516. package/dist/src/vite/builtTexts.js +59 -22
  517. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  518. package/dist/src/vite/catalogueConfig.js +15 -3
  519. package/dist/src/vite/changeCoverage.d.ts +74 -0
  520. package/dist/src/vite/changeCoverage.js +120 -0
  521. package/dist/src/vite/changedRoute.d.ts +30 -0
  522. package/dist/src/vite/changedRoute.js +197 -0
  523. package/dist/src/vite/checkCode.d.ts +105 -3
  524. package/dist/src/vite/checkCode.js +323 -36
  525. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  526. package/dist/src/vite/checkoutWatch.js +287 -0
  527. package/dist/src/vite/closeWatch.d.ts +8 -0
  528. package/dist/src/vite/closeWatch.js +1 -1
  529. package/dist/src/vite/componentCache.d.ts +8 -0
  530. package/dist/src/vite/componentCache.js +66 -0
  531. package/dist/src/vite/componentGraph.d.ts +71 -0
  532. package/dist/src/vite/componentGraph.js +133 -0
  533. package/dist/src/vite/componentRules.d.ts +33 -0
  534. package/dist/src/vite/componentRules.js +105 -0
  535. package/dist/src/vite/componentScan.d.ts +69 -0
  536. package/dist/src/vite/componentScan.js +418 -0
  537. package/dist/src/vite/compositionCheck.d.ts +15 -0
  538. package/dist/src/vite/compositionCheck.js +243 -0
  539. package/dist/src/vite/config.d.ts +32 -1
  540. package/dist/src/vite/configFile.d.ts +14 -2
  541. package/dist/src/vite/configFile.js +124 -40
  542. package/dist/src/vite/configKeys.d.ts +15 -0
  543. package/dist/src/vite/configKeys.js +171 -0
  544. package/dist/src/vite/configLoadError.d.ts +23 -0
  545. package/dist/src/vite/configLoadError.js +71 -0
  546. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  547. package/dist/src/vite/cssDeclarations.js +290 -0
  548. package/dist/src/vite/cssImports.d.ts +14 -0
  549. package/dist/src/vite/cssImports.js +48 -0
  550. package/dist/src/vite/cssReferences.d.ts +54 -0
  551. package/dist/src/vite/cssReferences.js +157 -0
  552. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  553. package/dist/src/vite/cssTokenValues.js +233 -0
  554. package/dist/src/vite/designTokens.d.ts +24 -0
  555. package/dist/src/vite/designTokens.js +5 -1
  556. package/dist/src/vite/docsExtractor.d.ts +9 -3
  557. package/dist/src/vite/docsExtractor.js +11 -3
  558. package/dist/src/vite/docsProgram.d.ts +17 -4
  559. package/dist/src/vite/docsProgram.js +52 -11
  560. package/dist/src/vite/docsWorker.js +7 -2
  561. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  562. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  563. package/dist/src/vite/fileImports.d.ts +17 -0
  564. package/dist/src/vite/fileImports.js +57 -0
  565. package/dist/src/vite/findComponent.d.ts +10 -2
  566. package/dist/src/vite/findComponent.js +27 -22
  567. package/dist/src/vite/findRoute.js +3 -2
  568. package/dist/src/vite/forcedStates.d.ts +9 -2
  569. package/dist/src/vite/forcedStates.js +12 -3
  570. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  571. package/dist/src/vite/forgebookPlugin.js +52 -72
  572. package/dist/src/vite/frameErrors.d.ts +19 -0
  573. package/dist/src/vite/frameErrors.js +70 -0
  574. package/dist/src/vite/framesServer.d.ts +12 -0
  575. package/dist/src/vite/framesServer.js +21 -4
  576. package/dist/src/vite/functionComponentDocs.js +81 -12
  577. package/dist/src/vite/generatedModules.js +4 -2
  578. package/dist/src/vite/gitChange.d.ts +38 -5
  579. package/dist/src/vite/gitChange.js +71 -11
  580. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  581. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  582. package/dist/src/vite/hotSnippets.d.ts +38 -14
  583. package/dist/src/vite/hotSnippets.js +137 -39
  584. package/dist/src/vite/importedNames.d.ts +37 -0
  585. package/dist/src/vite/importedNames.js +138 -0
  586. package/dist/src/vite/indexFields.d.ts +6 -0
  587. package/dist/src/vite/indexFields.js +21 -0
  588. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  589. package/dist/src/vite/indexStoryFile.js +22 -157
  590. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  591. package/dist/src/vite/jsxCallSites.js +200 -0
  592. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  593. package/dist/src/vite/jsxInScripts.js +138 -0
  594. package/dist/src/vite/jsxTree.d.ts +20 -0
  595. package/dist/src/vite/jsxTree.js +163 -0
  596. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  597. package/dist/src/vite/lineAndColumn.js +18 -0
  598. package/dist/src/vite/lookAlikes.d.ts +65 -0
  599. package/dist/src/vite/lookAlikes.js +228 -0
  600. package/dist/src/vite/nearestToken.d.ts +17 -0
  601. package/dist/src/vite/nearestToken.js +9 -2
  602. package/dist/src/vite/packageEntries.d.ts +42 -0
  603. package/dist/src/vite/packageEntries.js +127 -0
  604. package/dist/src/vite/pages.d.ts +9 -1
  605. package/dist/src/vite/pages.js +108 -4
  606. package/dist/src/vite/pluginConfig.js +4 -0
  607. package/dist/src/vite/pluginIds.d.ts +2 -0
  608. package/dist/src/vite/pluginIds.js +5 -1
  609. package/dist/src/vite/pluginModules.d.ts +81 -11
  610. package/dist/src/vite/pluginModules.js +109 -21
  611. package/dist/src/vite/prebundled.d.ts +57 -15
  612. package/dist/src/vite/prebundled.js +80 -0
  613. package/dist/src/vite/previewTags.d.ts +25 -0
  614. package/dist/src/vite/previewTags.js +56 -0
  615. package/dist/src/vite/projectFiles.d.ts +54 -0
  616. package/dist/src/vite/projectFiles.js +116 -0
  617. package/dist/src/vite/projectPostcss.d.ts +70 -0
  618. package/dist/src/vite/projectPostcss.js +250 -0
  619. package/dist/src/vite/propDocs.d.ts +12 -0
  620. package/dist/src/vite/propDocs.js +130 -58
  621. package/dist/src/vite/propKind.d.ts +40 -0
  622. package/dist/src/vite/propKind.js +71 -0
  623. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  624. package/dist/src/vite/propTypeNotes.js +51 -0
  625. package/dist/src/vite/publishedExports.d.ts +27 -0
  626. package/dist/src/vite/publishedExports.js +298 -0
  627. package/dist/src/vite/realFolder.d.ts +6 -0
  628. package/dist/src/vite/realFolder.js +25 -0
  629. package/dist/src/vite/refsConfig.d.ts +39 -0
  630. package/dist/src/vite/refsConfig.js +54 -0
  631. package/dist/src/vite/reuseCheck.d.ts +45 -0
  632. package/dist/src/vite/reuseCheck.js +260 -0
  633. package/dist/src/vite/runningVersions.d.ts +33 -0
  634. package/dist/src/vite/runningVersions.js +25 -0
  635. package/dist/src/vite/scriptProblems.d.ts +60 -0
  636. package/dist/src/vite/scriptProblems.js +155 -0
  637. package/dist/src/vite/searchModule.js +3 -2
  638. package/dist/src/vite/searchRoute.js +4 -2
  639. package/dist/src/vite/shapeDocs.d.ts +36 -0
  640. package/dist/src/vite/shapeDocs.js +177 -0
  641. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  642. package/dist/src/vite/singleFileComponent.js +83 -0
  643. package/dist/src/vite/sourceText.d.ts +34 -0
  644. package/dist/src/vite/sourceText.js +72 -0
  645. package/dist/src/vite/sourceTokens.d.ts +7 -0
  646. package/dist/src/vite/sourceTokens.js +7 -2
  647. package/dist/src/vite/stackLines.d.ts +49 -0
  648. package/dist/src/vite/stackLines.js +96 -0
  649. package/dist/src/vite/storyCode.d.ts +22 -7
  650. package/dist/src/vite/storyCode.js +263 -37
  651. package/dist/src/vite/storyCoverage.d.ts +48 -0
  652. package/dist/src/vite/storyCoverage.js +179 -0
  653. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  654. package/dist/src/vite/storyFilesModule.js +105 -15
  655. package/dist/src/vite/storyPatterns.d.ts +31 -0
  656. package/dist/src/vite/storyPatterns.js +140 -5
  657. package/dist/src/vite/storyReach.d.ts +10 -2
  658. package/dist/src/vite/storyReach.js +15 -11
  659. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  660. package/dist/src/vite/storyTopLevel.js +146 -0
  661. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  662. package/dist/src/vite/storylessRoutes.js +210 -19
  663. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  664. package/dist/src/vite/switchValuesCheck.js +164 -0
  665. package/dist/src/vite/switchesDocument.d.ts +15 -0
  666. package/dist/src/vite/switchesDocument.js +47 -0
  667. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  668. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  669. package/dist/src/vite/textImports.d.ts +15 -0
  670. package/dist/src/vite/textImports.js +58 -0
  671. package/dist/src/vite/textModules.d.ts +6 -5
  672. package/dist/src/vite/textModules.js +13 -8
  673. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  674. package/dist/src/vite/tokenAnswers.js +11 -7
  675. package/dist/src/vite/typeParameters.d.ts +83 -0
  676. package/dist/src/vite/typeParameters.js +270 -0
  677. package/dist/src/vite/unionProps.d.ts +37 -0
  678. package/dist/src/vite/unionProps.js +121 -0
  679. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  680. package/dist/src/vite/unresolvedTokens.js +193 -0
  681. package/dist/src/vite/usageGraph.js +10 -52
  682. package/dist/src/vite/usageGuidance.d.ts +9 -2
  683. package/dist/src/vite/usageGuidance.js +36 -8
  684. package/dist/src/vite/usageImports.d.ts +35 -0
  685. package/dist/src/vite/usageImports.js +280 -0
  686. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  687. package/dist/src/vite/visibilityRoute.js +320 -0
  688. package/dist/src/worstCase.d.ts +2 -0
  689. package/dist/src/worstCase.js +2 -0
  690. package/package.json +28 -8
@@ -7,8 +7,12 @@
7
7
  */
8
8
  import { isComponentDocs } from "../componentDocs.js";
9
9
  import { embedAddressOf } from "../embedCode.js";
10
+ import { panelArgsOf } from "../frame/panelValues.js";
10
11
  import { NO_PREVIEW, readStory } from "../frame/storyModule.js";
11
12
  import { isLiveErrorReport } from "../liveErrors.js";
13
+ import { controlsOfParameter, excludedControls, panelArgTypesOf } from "../storyArgTypes.js";
14
+ import { checkedSetArgs, customControlProblems, storyControlsOf } from "../storyControls.js";
15
+ import { passesTags } from "../storyTags.js";
12
16
  import { findComponentByTitle } from "../storyTree.js";
13
17
  import { componentAddressOf, frameAddressOf, storyAddressOf } from "../viewState.js";
14
18
  /**
@@ -143,6 +147,14 @@ export const jsonValue = (value) => {
143
147
  };
144
148
  /** Whether a value is a plain object. */
145
149
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
150
+ /** Why a value an agent asked to set was left out, as its answer says it. */
151
+ const DROPPED_REASONS = {
152
+ undeclared: "the story declares no such arg, or does not let it be set",
153
+ type: "it is not of the type its control takes (see `controls`)",
154
+ unreadable: "it is not plain JSON",
155
+ markup: "this framework writes it into HTML, so only plain text can be set",
156
+ control: "its custom control's schema refuses it, or could not be read"
157
+ };
146
158
  /** The docs a story file's docs loader gave, as a document field, with the problem when there is one. */
147
159
  const docsOf = (loaded) => {
148
160
  if ("error" in loaded)
@@ -154,6 +166,51 @@ const docsOf = (loaded) => {
154
166
  return { docs: undefined, problem: `Its component's docs failed: ${value.error}` };
155
167
  return { docs: undefined, problem: undefined };
156
168
  };
169
+ /** The story read from its module, with what kept it from being read among the problems. */
170
+ const loadedStoryOf = (parts, location, problems) => {
171
+ if ("error" in parts.module) {
172
+ problems.push(`Its story file failed to load: ${parts.module.error}`);
173
+ return undefined;
174
+ }
175
+ const read = readStory(parts.module.value, location.story.exportName, parts.preview ?? NO_PREVIEW);
176
+ if (typeof read !== "string")
177
+ return read;
178
+ problems.push(read);
179
+ return undefined;
180
+ };
181
+ /**
182
+ * The custom controls a story names, read from its module before its document is made: their modules load for it.
183
+ *
184
+ * @param module - the story file's module, as the dev server loaded it.
185
+ * @param location - the story's place in the tree.
186
+ */
187
+ export const customControlNames = (module, location) => {
188
+ const loaded = loadedStoryOf({ module, docs: { value: undefined } }, location, []);
189
+ if (loaded === undefined)
190
+ return [];
191
+ return Object.values(panelArgTypesOf(loaded.argTypes, [])).flatMap((each) => each.customControl ?? []);
192
+ };
193
+ /** What a loaded story declares of its args, as the shell reads it from the story's frame. */
194
+ const declarationOf = (loaded, docs, { namedValues = {}, customControls }) => ({
195
+ customSchemas: customControls?.schemas ?? {},
196
+ props: docs?.props ?? [],
197
+ argTypes: panelArgTypesOf(loaded.argTypes, excludedControls(loaded.parameters["controls"])),
198
+ controls: controlsOfParameter(loaded.parameters["controls"]),
199
+ storyArgs: panelArgsOf(loaded.args, namedValues),
200
+ namedValues
201
+ });
202
+ /**
203
+ * A story with the links that carry the values it takes, as a person's link would. Its frame's stays as it is: a frame
204
+ * takes its values from the shell, which checks them, and alone it draws the story's own. Its component's page shows no
205
+ * one story's values.
206
+ */
207
+ const withSetArgLinks = (story, setArgs, pages, view) => {
208
+ if (setArgs === undefined || setArgs.param === "")
209
+ return story;
210
+ const query = new URLSearchParams({ args: setArgs.param }).toString();
211
+ const links = storyLinks(pages, story.id, view === "" ? query : `${view}&${query}`);
212
+ return { ...story, links: { ...links, frame: story.links.frame, component: story.links.component } };
213
+ };
157
214
  /**
158
215
  * One story in detail.
159
216
  *
@@ -165,25 +222,25 @@ const docsOf = (loaded) => {
165
222
  */
166
223
  export const storyDocument = (location, parts, pages, view, usage) => {
167
224
  const component = agentComponent(location, pages, view, usage);
168
- const story = component.stories.find((each) => each.id === location.story.id) ??
225
+ const listedStory = component.stories.find((each) => each.id === location.story.id) ??
169
226
  agentStory(location.story, false, pages, view);
170
227
  const problems = [];
171
- let args = {};
172
- if ("error" in parts.module)
173
- problems.push(`Its story file failed to load: ${parts.module.error}`);
174
- else {
175
- const read = readStory(parts.module.value, location.story.exportName, parts.preview ?? NO_PREVIEW);
176
- if (typeof read === "string")
177
- problems.push(read);
178
- else {
179
- const json = jsonValue(read.args);
180
- if (isRecord(json))
181
- args = json;
182
- }
183
- }
228
+ const loaded = loadedStoryOf(parts, location, problems);
229
+ const json = loaded === undefined ? undefined : jsonValue(loaded.args);
230
+ const args = isRecord(json) ? json : {};
184
231
  const { docs, problem } = docsOf(parts.docs);
185
232
  if (problem !== undefined)
186
233
  problems.push(problem);
234
+ const declaration = loaded === undefined ? undefined : declarationOf(loaded, docs, parts);
235
+ const setArgs = declaration === undefined || parts.setArgs === undefined
236
+ ? undefined
237
+ : checkedSetArgs(parts.setArgs, declaration, parts.addressTexts);
238
+ for (const { name, reason } of setArgs?.dropped ?? []) {
239
+ problems.push(`The value of "${name}" was left out: ${DROPPED_REASONS[reason]}`);
240
+ }
241
+ const story = withSetArgLinks(listedStory, setArgs, pages, view);
242
+ const controls = declaration === undefined ? [] : storyControlsOf(declaration);
243
+ problems.push(...customControlProblems(controls, parts.customControls));
187
244
  return {
188
245
  schema: 1,
189
246
  requiredProps: (docs?.props ?? []).filter((prop) => prop.isRequired).map((prop) => prop.name),
@@ -200,6 +257,8 @@ export const storyDocument = (location, parts, pages, view, usage) => {
200
257
  ...agentDesign(location.story, pages, view),
201
258
  docs,
202
259
  args,
260
+ controls,
261
+ ...(setArgs === undefined ? {} : { setArgs: { accepted: setArgs.accepted, dropped: setArgs.dropped } }),
203
262
  problems
204
263
  };
205
264
  };
@@ -211,10 +270,19 @@ export const storyDocument = (location, parts, pages, view, usage) => {
211
270
  */
212
271
  export const filteredStories = (document, filter) => {
213
272
  const text = filter.component?.toLowerCase();
273
+ const tags = filter.tags ?? [];
214
274
  return {
215
275
  ...document,
216
- components: document.components.filter((component) => (filter.source === undefined || component.source === filter.source) &&
276
+ components: document.components
277
+ .filter((component) => (filter.source === undefined || component.source === filter.source) &&
217
278
  (text === undefined || component.title.toLowerCase().includes(text)))
279
+ .flatMap((component) => {
280
+ if (tags.length === 0)
281
+ return [component];
282
+ // an unlisted story is one the catalogue's lists leave out: a filter of those lists leaves it out too
283
+ const stories = component.stories.filter((story) => !story.isUnlisted && passesTags(story.tags, tags));
284
+ return stories.length === 0 ? [] : [{ ...component, stories }];
285
+ })
218
286
  };
219
287
  };
220
288
  /**
@@ -293,7 +361,8 @@ export const isNearestTokensDocument = (value) => isRecord(value) &&
293
361
  export const isFoundComponentsDocument = (value) => isRecord(value) &&
294
362
  value["schema"] === 1 &&
295
363
  typeof value["query"] === "string" &&
296
- Array.isArray(value["components"]);
364
+ Array.isArray(value["components"]) &&
365
+ Array.isArray(value["corrections"]);
297
366
  /**
298
367
  * Whether a value is a search's document, as a client receives it over HTTP.
299
368
  *
@@ -304,6 +373,7 @@ export const isSearchDocument = (value) => isRecord(value) &&
304
373
  typeof value["query"] === "string" &&
305
374
  typeof value["total"] === "number" &&
306
375
  Array.isArray(value["results"]) &&
376
+ Array.isArray(value["corrections"]) &&
307
377
  Array.isArray(value["problems"]);
308
378
  /**
309
379
  * Whether a value is the changed stories' document, as a client receives it over HTTP.
@@ -313,7 +383,10 @@ export const isSearchDocument = (value) => isRecord(value) &&
313
383
  export const isChangedStoriesDocument = (value) => isRecord(value) &&
314
384
  value["schema"] === 1 &&
315
385
  Array.isArray(value["stories"]) &&
316
- Array.isArray(value["files"]);
386
+ Array.isArray(value["files"]) &&
387
+ Array.isArray(value["uiFiles"]) &&
388
+ Array.isArray(value["outside"]) &&
389
+ (value["outdated"] === undefined || Array.isArray(value["outdated"]));
317
390
  /**
318
391
  * Whether a value is the code check's document, as a client receives it over HTTP.
319
392
  *
@@ -14,8 +14,6 @@ import { type CataloguePages } from "./agentApi.ts";
14
14
  import type { AgentAnswer } from "./agentRoutes.ts";
15
15
  import { type FindableComponent } from "./findComponent.ts";
16
16
  import { type TokenReading } from "./tokenAnswers.ts";
17
- /** The file's name in the built catalogue. */
18
- export declare const AGENT_INDEX_FILE = "forgebook-agent.json";
19
17
  /** A component as a search finds it, with what its answer carries. */
20
18
  export type IndexedComponent = FindableComponent & {
21
19
  /** Its first story's id. */
@@ -1,8 +1,6 @@
1
1
  import { storyLinks } from "./agentApi.js";
2
2
  import { findComponents } from "./findComponent.js";
3
3
  import { TOKEN_ANSWERS } from "./tokenAnswers.js";
4
- /** The file's name in the built catalogue. */
5
- export const AGENT_INDEX_FILE = "forgebook-agent.json";
6
4
  /**
7
5
  * Everything the index says went wrong while it was written, for whoever builds it: a story that failed to load is an
8
6
  * answer with problems, not a missing one.
@@ -55,17 +53,18 @@ const findAnswer = ({ findable }, pages, params) => {
55
53
  const query = params.get("query") ?? "";
56
54
  if (query.trim() === "")
57
55
  return { status: 400, body: { error: "No words to look for" } };
58
- const components = findComponents(findable, query).map((found) => {
59
- const component = findable.find((each) => each.id === found.id);
56
+ const { components: found, corrections } = findComponents(findable, query);
57
+ const components = found.map((match) => {
58
+ const component = findable.find((each) => each.id === match.id);
60
59
  const story = component?.story;
61
60
  return {
62
- ...found,
61
+ ...match,
63
62
  story,
64
63
  links: story === undefined ? undefined : storyLinks(pages, story, ""),
65
64
  ...(component?.guidance === undefined ? {} : { guidance: component.guidance })
66
65
  };
67
66
  });
68
- const body = { schema: 1, query, components };
67
+ const body = { schema: 1, query, components, corrections };
69
68
  return { status: 200, body };
70
69
  };
71
70
  /**
@@ -1,3 +1,20 @@
1
+ /**
2
+ * The dev server's answers to tools and agents, under `/__forgebook/api/`: `stories` (every story) and `story?id=…`
3
+ * (one in detail), `pages` and `page?id=…` (the docs pages), `search?query=…` (everything, by its text), each with an
4
+ * optional `view` (the view's query, `theme=dark&lang=it`) the links open in; and `preview?id=…`, the page that shows a
5
+ * story inside a client that renders apps, the one answer that is not JSON.
6
+ *
7
+ * @remarks
8
+ * The server loads the sources with the same imports the pages use (`AGENT_SOURCES_FILE`), so a tool sees what the
9
+ * shell shows. A story module that fails on Node (it reads `window` while it loads) gives its story a problem in the
10
+ * answer instead of an error. A preview is written for a browser, and only its args and parameters are read here: it
11
+ * loads with what it imports that needs a browser left as placeholders (`previewRunner.ts`), and one that still fails is
12
+ * left out of the answers and named among their problems, so it costs a tool neither the catalogue nor answers changed
13
+ * without a word. Served by the dev server only, where
14
+ * Vite listens (localhost by default); a build has none of it.
15
+ *
16
+ * @module
17
+ */
1
18
  import type { IncomingMessage, ServerResponse } from "node:http";
2
19
  import type { StorySource } from "@forgebook/story-format/source";
3
20
  import { type ViteDevServer } from "vite";
@@ -66,6 +83,8 @@ export declare const ROOT_HEADER = "forgebook-root";
66
83
  export declare const rootHeaderValue: (dir: string) => string;
67
84
  /** What every route reads: the catalogue's sources and tree, its configuration, the query and the links' pages. */
68
85
  export type RouteContext = {
86
+ /** What the answers ask of the dev server; none reads no custom control. */
87
+ readonly server?: AgentServer;
69
88
  /** The sources and the preview, as the dev server loaded them. */
70
89
  readonly loaded: AgentModule;
71
90
  /** The sources' story tree. */
@@ -97,7 +116,7 @@ export declare const storyAnswer: (context: RouteContext) => Promise<AgentAnswer
97
116
  * @param server - what the answers ask of the dev server.
98
117
  * @param config - the catalogue's configuration.
99
118
  * @param route - the path under `AGENT_API` (`stories`, `story`).
100
- * @param params - the query: `id` for a story, `view` for the links, `category`, `name`, `value` and `type` for the
119
+ * @param params - the query: `id` for a story, `view` for the links, `args` for the values to set, `category`, `name`, `value` and `type` for the
101
120
  * tokens, `query` and `limit` for a search, `usedIn=true` for the list's "Used in" (a
102
121
  * story's comes with it when the catalogue offers it).
103
122
  * @param origins - where the catalogue is served (`http://localhost:5173`) and where its frames are, for the links.
@@ -1,41 +1,28 @@
1
- /**
2
- * The dev server's answers to tools and agents, under `/__forgebook/api/`: `stories` (every story) and `story?id=…`
3
- * (one in detail), `pages` and `page?id=…` (the docs pages), `search?query=…` (everything, by its text), each with an
4
- * optional `view` (the view's query, `theme=dark&lang=it`) the links open in; and `preview?id=…`, the page that shows a
5
- * story inside a client that renders apps, the one answer that is not JSON.
6
- *
7
- * @remarks
8
- * The server loads the sources with the same imports the pages use (`AGENT_SOURCES_FILE`), so a tool sees what the
9
- * shell shows. A story module that fails on Node (it reads `window` while it loads) gives its story a problem in the
10
- * answer instead of an error. A preview is written for a browser, and only its args and parameters are read here: it
11
- * loads with what it imports that needs a browser left as placeholders (`previewRunner.ts`), and one that still fails is
12
- * left out of the answers and named among their problems, so it costs a tool neither the catalogue nor answers changed
13
- * without a word. Served by the dev server only, where
14
- * Vite listens (localhost by default); a build has none of it.
15
- *
16
- * @module
17
- */
18
- import { realpath } from "node:fs/promises";
19
1
  import { createIdResolver } from "vite";
20
2
  import { offersUsedIn, readsComponentDocs } from "../catalogue.js";
21
3
  import { mergedPreviews, NO_PREVIEW, readPreview } from "../frame/storyModule.js";
22
4
  import { sourceFiles } from "../sourceFiles.js";
23
- import { findComponentByTitle, findStory, storyTree } from "../storyTree.js";
5
+ import { catalogueStatuses } from "../storyStatuses.js";
6
+ import { findStory, storyTree } from "../storyTree.js";
24
7
  import { sourceUsage } from "../usedIn.js";
8
+ import { isValueSchema } from "../valueSchema.js";
25
9
  import { frameAddressOf } from "../viewState.js";
26
- import { storiesDocument, storyDocument, storyLinks } from "./agentApi.js";
10
+ import { customControlNames, storiesDocument, storyDocument } from "./agentApi.js";
27
11
  import { agentIndexAnswer } from "./agentIndexRoute.js";
12
+ import { storiesWithStatus, storyWithStatus } from "./agentStatuses.js";
13
+ import { withStoryCode } from "./agentStoryCode.js";
14
+ import { changedAnswer } from "./changedRoute.js";
28
15
  import { pageAnswer, pagesAnswer } from "./docPagesRoute.js";
16
+ import { emptyStoryGlobs, emptyStoryGlobsMessage } from "./emptyStoryGlobs.js";
29
17
  import { findAnswer } from "./findRoute.js";
30
18
  import { framesOriginOf } from "./framesConfig.js";
31
19
  import { hostOf } from "./framesServer.js";
32
- import { catalogueChangedFiles, changeBase, changedFiles } from "./gitChange.js";
20
+ import { hiddenStoryFolders, hiddenStoryFoldersMessage } from "./hiddenStoryFiles.js";
33
21
  import { AGENT_SOURCES_FILE, pageModulePath } from "./pages.js";
34
22
  import { PREVIEW_ROUTE } from "./previewRoute.js";
35
23
  import { loadPreview } from "./previewRunner.js";
36
24
  import { searchAnswer } from "./searchRoute.js";
37
25
  import { catalogueTokens, STORYLESS_ROUTES } from "./storylessRoutes.js";
38
- import { affectedStories } from "./storyReach.js";
39
26
  /** The path the answers live under. */
40
27
  export const AGENT_API = "/__forgebook/api/";
41
28
  /**
@@ -148,43 +135,19 @@ export const storiesAnswer = async (context) => {
148
135
  const usage = offersUsedIn(config.lists) && params.get("usedIn") === "true"
149
136
  ? await usageBySource(loaded.sources)
150
137
  : undefined;
151
- return { status: 200, body: storiesDocument(config.title, tree, pages, view, usage) };
152
- };
153
- /** Whether a value is a list of stories with what they reach. */
154
- const isReach = (value) => Array.isArray(value);
155
- /**
156
- * The stories a change touches, read from the files git names and the import graph "Used in" reads.
157
- *
158
- * @param context - what the routes read.
159
- */
160
- const changedAnswer = async ({ config, loaded, tree, params, pages, view }) => {
161
- const since = params.get("since") || "HEAD";
162
- const base = await changeBase(config.dir, since);
163
- if (base === undefined)
164
- return { status: 400, body: { error: `"${since}" names no commit here` } };
165
- const { root, files } = await changedFiles(config.dir, base);
166
- const reaches = await Promise.all(loaded.sources.flatMap((source) => source.files.map(async (group) => {
167
- const reach = await group.reach?.();
168
- return { source: source.id, reach: isReach(reach) ? reach : [] };
169
- })));
170
- const changed = catalogueChangedFiles(config.dir, await realpath(config.dir), root, files);
171
- const stories = reaches.flatMap(({ source, reach }) => affectedStories(reach, changed).flatMap((story) => {
172
- const component = findComponentByTitle(tree, source, story.title)?.component;
173
- const found = [...(component?.stories ?? []), ...(component?.unlisted ?? [])].find((each) => each.exportName === story.exportName);
174
- return found === undefined
175
- ? []
176
- : [{ id: found.id, title: story.title, links: storyLinks(pages, found.id, view) }];
177
- }));
178
- // without the import graph no story is found, which must not read as a change that touches none
179
- const problems = offersUsedIn(config.lists)
180
- ? []
181
- : [
182
- readsComponentDocs(config.lists)
183
- ? "No story is found through the imports: the catalogue turns Used in off (usedIn: false), whose import graph this reads"
184
- : "No story is found through the imports: the catalogue reads no component docs (componentDocs: false), whose programs read the import graph"
185
- ];
186
- const body = { schema: 1, since, files, stories, problems };
187
- return { status: 200, body };
138
+ // read for each answer: the file an agent has just written ends the problem
139
+ const globs = emptyStoryGlobs(config);
140
+ const hidden = hiddenStoryFolders(config);
141
+ const said = [
142
+ ...(globs.length === 0 ? [] : [emptyStoryGlobsMessage(globs)]),
143
+ ...(hidden.length === 0 ? [] : [hiddenStoryFoldersMessage(hidden)])
144
+ ];
145
+ const listed = said.length === 0 ? tree : { ...tree, problems: [...said, ...tree.problems] };
146
+ const statuses = catalogueStatuses(config.lists.statuses);
147
+ return {
148
+ status: 200,
149
+ body: storiesWithStatus(storiesDocument(config.title, listed, pages, view, usage), listed, statuses)
150
+ };
188
151
  };
189
152
  /**
190
153
  * One story in detail, its component's "Used in" when offered.
@@ -201,28 +164,102 @@ export const storyAnswer = async (context) => {
201
164
  const files = sourceFiles(source);
202
165
  // the story's own file: its module, and the docs of the component its meta names, which its args are for
203
166
  const file = location.story.file;
167
+ const storyModule = await settled(files.stories[file]);
204
168
  const parts = {
205
- module: await settled(files.stories[file]),
169
+ module: storyModule,
206
170
  docs: await settled(files.docs[file]),
207
- preview: loaded.preview
171
+ preview: loaded.preview,
172
+ namedValues: source.namedValues,
173
+ setArgs: params.get("args") ?? undefined,
174
+ customControls: context.server === undefined
175
+ ? undefined
176
+ : await customControlsRead(customControlNames(storyModule, location), config, context.server),
177
+ addressTexts: config.framework.addressTexts
208
178
  };
179
+ const code = context.server === undefined
180
+ ? undefined
181
+ : {
182
+ code: await settled(files.code[file]),
183
+ writer: await codeWriterOf(config, context.server),
184
+ namedValues: source.namedValues
185
+ };
209
186
  const index = offersUsedIn(config.lists) ? await sourceUsage(source) : undefined;
210
187
  // a usage that cannot be read leaves "Used in" out, never the story
211
188
  const usage = index === undefined || typeof index === "string" ? undefined : { tree, index };
212
- const document = storyDocument(location, parts, pages, view, usage);
189
+ const module = "value" in storyModule ? storyModule.value : undefined;
190
+ const document = storyWithStatus(withStoryCode(storyDocument(location, parts, pages, view, usage), code, {
191
+ location,
192
+ module,
193
+ preview: loaded.preview
194
+ }), location.component, catalogueStatuses(config.lists.statuses));
213
195
  // an agent must tell docs turned off from a story file that names no component
214
196
  const body = readsComponentDocs(config.lists)
215
197
  ? document
216
198
  : { ...document, componentDocs: "off" };
217
199
  return { status: 200, body };
218
200
  };
201
+ /** Whether a module's `codeOf` is a code writer: a function, as every framework's code module exports it. */
202
+ const isCodeWriter = (value) => typeof value === "function";
203
+ /**
204
+ * The framework's code writer, loaded on the server as the shell imports it; none when it does not load there.
205
+ *
206
+ * @param config - the catalogue's configuration.
207
+ * @param server - what the answers ask of the dev server.
208
+ */
209
+ const codeWriterOf = async (config, server) => {
210
+ try {
211
+ const id = await server.resolveSource(config.framework.pages.code);
212
+ // loading a module that does not resolve would only have Vite log its failure
213
+ const loaded = id === undefined ? undefined : await server.load(id);
214
+ const writer = typeof loaded === "object" && loaded !== null && "codeOf" in loaded ? loaded.codeOf : undefined;
215
+ return isCodeWriter(writer) ? writer : undefined;
216
+ }
217
+ catch {
218
+ // a writer that touches the page as it loads has no code to give an agent; the story's answer stands without it
219
+ return undefined;
220
+ }
221
+ };
222
+ /** How long a control's module may take to load for an answer: one that hangs must not hold every answer with it. */
223
+ const CONTROL_LOAD_MS = 5000;
224
+ /** A control's schema, loaded on the server; a text says why there is none. */
225
+ const controlSchemaOf = async (module, server) => {
226
+ try {
227
+ const id = await server.resolveSource(module);
228
+ const timeout = new Promise((_resolve, reject) => {
229
+ setTimeout(() => reject(new Error(`no answer in ${CONTROL_LOAD_MS} ms`)), CONTROL_LOAD_MS).unref();
230
+ });
231
+ const loaded = await Promise.race([server.load(id ?? module), timeout]);
232
+ const schema = typeof loaded === "object" && loaded !== null && "schema" in loaded ? loaded.schema : undefined;
233
+ return isValueSchema(schema) ? schema : "its module exports no schema Forgebook can read";
234
+ }
235
+ catch (error) {
236
+ return `its module cannot be read on the server: ${error instanceof Error ? error.message : String(error)}`;
237
+ }
238
+ };
239
+ /**
240
+ * The custom controls a story names, as an agent reads them: only those, each module loaded on the server for its schema.
241
+ * A module that cannot load there (it touches the page as it is imported) has no schema to say, and no value of it can be
242
+ * checked. Its import runs on the dev server, as a story file's does.
243
+ *
244
+ * @param names - the controls the story names.
245
+ * @param config - the catalogue's configuration.
246
+ * @param server - what the answers ask of the dev server.
247
+ */
248
+ const customControlsRead = async (names, config, server) => {
249
+ const known = names.filter((name) => Object.hasOwn(config.argControls, name));
250
+ const read = await Promise.all(known.map(async (name) => [name, await controlSchemaOf(config.argControls[name] ?? "", server)]));
251
+ return {
252
+ schemas: Object.fromEntries(read.flatMap(([name, each]) => (typeof each === "string" ? [] : [[name, each]]))),
253
+ problems: Object.fromEntries(read.flatMap(([name, each]) => (typeof each === "string" ? [[name, each]] : [])))
254
+ };
255
+ };
219
256
  /**
220
257
  * Answers one of the API's paths.
221
258
  *
222
259
  * @param server - what the answers ask of the dev server.
223
260
  * @param config - the catalogue's configuration.
224
261
  * @param route - the path under `AGENT_API` (`stories`, `story`).
225
- * @param params - the query: `id` for a story, `view` for the links, `category`, `name`, `value` and `type` for the
262
+ * @param params - the query: `id` for a story, `view` for the links, `args` for the values to set, `category`, `name`, `value` and `type` for the
226
263
  * tokens, `query` and `limit` for a search, `usedIn=true` for the list's "Used in" (a
227
264
  * story's comes with it when the catalogue offers it).
228
265
  * @param origins - where the catalogue is served (`http://localhost:5173`) and where its frames are, for the links.
@@ -242,7 +279,8 @@ export const agentAnswer = async (server, config, route, params, origins, live)
242
279
  config,
243
280
  params,
244
281
  pages: { page: `${origins.catalogue}/`, frame: `${origins.frames}/frame.html` },
245
- view: params.get("view") ?? ""
282
+ view: params.get("view") ?? "",
283
+ server
246
284
  };
247
285
  if (route === "errors")
248
286
  return errorsAnswer(context, live);
@@ -259,7 +297,10 @@ export const agentAnswer = async (server, config, route, params, origins, live)
259
297
  if (route === "page")
260
298
  return await pageAnswer(context);
261
299
  if (route === "changed")
262
- return await changedAnswer(context);
300
+ return await changedAnswer(context, server.resolveSource);
301
+ // loaded when asked: it reads syntax with TypeScript, which a dev server's thread must not pay for at start
302
+ if (route === "visibility")
303
+ return await (await import("./visibilityRoute.js")).visibilityAnswer(context);
263
304
  if (route === "agent-index")
264
305
  return await agentIndexAnswer(context, await catalogueTokens(config, server.resolveSource));
265
306
  return { status: 404, body: { error: `No answer at ${AGENT_API}${route}` } };
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The statuses in the agents' answers: each story's and each component's (`statuses`), and in a story's answer where its
3
+ * component's TSDoc and its meta disagree about deprecation.
4
+ *
5
+ * @remarks
6
+ * A deprecated component has two places to say so: `@deprecated` in its TSDoc, which `check_code` reads to warn where
7
+ * it is imported, and a `deprecated` tag on its meta, which the sidebar, the page and the tag filter read without
8
+ * building its types. A story's answer reads both, so it gives the component as deprecated when either says it, and
9
+ * names the place that does not, so the two are made to agree instead of one being trusted over the other. Pure.
10
+ *
11
+ * @module
12
+ */
13
+ import type { ComponentDocs } from "../componentDocs.ts";
14
+ import { type CatalogueStatus } from "../storyStatuses.ts";
15
+ import type { StoryTree, TreeComponent } from "../storyTree.ts";
16
+ import type { StoriesDocument, StoryDocument } from "./agent.types.ts";
17
+ /**
18
+ * The stories document with each component's and each story's statuses.
19
+ *
20
+ * @param document - the stories document.
21
+ * @param tree - the tree it was made from, whose components hold their meta's tags.
22
+ * @param statuses - the catalogue's statuses.
23
+ */
24
+ export declare const storiesWithStatus: (document: StoriesDocument, tree: StoryTree, statuses: readonly CatalogueStatus[]) => StoriesDocument;
25
+ /**
26
+ * What a component's TSDoc and its meta say of its deprecation, when they disagree: the sentence that names the place
27
+ * to change; none when they agree, when the catalogue has no `deprecated` status, or when there are no docs to read.
28
+ *
29
+ * @param title - the component's title.
30
+ * @param isTagged - whether its meta holds the `deprecated` tag.
31
+ * @param docs - its docs; none when they are not read.
32
+ */
33
+ export declare const deprecationMismatch: (title: string, isTagged: boolean, docs: ComponentDocs | undefined) => string | undefined;
34
+ /**
35
+ * A story's answer with its statuses and its component's, the component deprecated when its TSDoc says so, and the
36
+ * disagreement between the two among the problems.
37
+ *
38
+ * @param document - the story's answer.
39
+ * @param component - its component in the tree, which holds its meta's tags.
40
+ * @param statuses - the catalogue's statuses.
41
+ */
42
+ export declare const storyWithStatus: (document: StoryDocument, component: TreeComponent, statuses: readonly CatalogueStatus[]) => StoryDocument;
@@ -0,0 +1,67 @@
1
+ import { DEPRECATED_STATUS, statusesOf } from "../storyStatuses.js";
2
+ /** The ids of the statuses a list of tags holds. */
3
+ const statusIds = (tags, statuses) => statusesOf(tags, statuses).map((status) => status.id);
4
+ /** A value with its statuses, or as it is when it has none: an answer stays short for what has none. */
5
+ const withStatus = (value, statuses) => statuses.length === 0 ? value : { ...value, statuses };
6
+ /**
7
+ * The stories document with each component's and each story's statuses.
8
+ *
9
+ * @param document - the stories document.
10
+ * @param tree - the tree it was made from, whose components hold their meta's tags.
11
+ * @param statuses - the catalogue's statuses.
12
+ */
13
+ export const storiesWithStatus = (document, tree, statuses) => {
14
+ if (statuses.length === 0)
15
+ return document;
16
+ const tagsById = new Map(tree.sources.flatMap((source) => source.families.flatMap((family) => family.groups.flatMap((group) => group.components.map((component) => [component.id, component.tags])))));
17
+ return {
18
+ ...document,
19
+ components: document.components.map((component) => ({
20
+ ...withStatus(component, statusIds(tagsById.get(component.id) ?? [], statuses)),
21
+ stories: component.stories.map((story) => withStatus(story, statusIds(story.tags, statuses)))
22
+ }))
23
+ };
24
+ };
25
+ /**
26
+ * What a component's TSDoc and its meta say of its deprecation, when they disagree: the sentence that names the place
27
+ * to change; none when they agree, when the catalogue has no `deprecated` status, or when there are no docs to read.
28
+ *
29
+ * @param title - the component's title.
30
+ * @param isTagged - whether its meta holds the `deprecated` tag.
31
+ * @param docs - its docs; none when they are not read.
32
+ */
33
+ export const deprecationMismatch = (title, isTagged, docs) => {
34
+ if (docs === undefined)
35
+ return undefined;
36
+ const isDocumented = docs.guidance?.deprecated !== undefined;
37
+ if (isDocumented && !isTagged)
38
+ return `${title} is @deprecated in its TSDoc, but its meta has no "${DEPRECATED_STATUS}" tag: add tags: ["${DEPRECATED_STATUS}"] to its meta, so the sidebar, its page and the tag filter say so too`;
39
+ if (isTagged && !isDocumented)
40
+ return `${title}'s meta is tagged "${DEPRECATED_STATUS}", but its TSDoc has no @deprecated: add one (and @replacedBy when something replaces it), so check_code warns where it is imported`;
41
+ return undefined;
42
+ };
43
+ /**
44
+ * A story's answer with its statuses and its component's, the component deprecated when its TSDoc says so, and the
45
+ * disagreement between the two among the problems.
46
+ *
47
+ * @param document - the story's answer.
48
+ * @param component - its component in the tree, which holds its meta's tags.
49
+ * @param statuses - the catalogue's statuses.
50
+ */
51
+ export const storyWithStatus = (document, component, statuses) => {
52
+ if (statuses.length === 0)
53
+ return document;
54
+ const own = statusIds(component.tags, statuses);
55
+ const hasDeprecated = statuses.some((status) => status.id === DEPRECATED_STATUS);
56
+ const mismatch = hasDeprecated
57
+ ? deprecationMismatch(component.title, own.includes(DEPRECATED_STATUS), document.docs)
58
+ : undefined;
59
+ const isDocumented = document.docs?.guidance?.deprecated !== undefined;
60
+ const status = hasDeprecated && isDocumented ? statusIds([...component.tags, DEPRECATED_STATUS], statuses) : own;
61
+ return {
62
+ ...document,
63
+ story: withStatus(document.story, statusIds(document.story.tags, statuses)),
64
+ component: withStatus(document.component, status),
65
+ problems: mismatch === undefined ? document.problems : [...document.problems, mismatch]
66
+ };
67
+ };
@@ -0,0 +1,48 @@
1
+ import { type ComponentDocs } from "../componentDocs.ts";
2
+ import type { StoryCodeWriter } from "../frame/renderer.ts";
3
+ import { type LoadedPreview } from "../frame/storyModule.ts";
4
+ import type { ArgValue } from "../messages.ts";
5
+ import type { NamedValues } from "../namedValues.ts";
6
+ import type { StoryLocation } from "../storyTree.ts";
7
+ import type { StoryDocument } from "./agent.types.ts";
8
+ /** What a story's code is written from on the server. */
9
+ export type AgentCodeParts = {
10
+ /** The story file's code, as its `?forgebook-code` module answers, or why it could not be loaded. */
11
+ readonly code: {
12
+ readonly value: unknown;
13
+ } | {
14
+ readonly error: string;
15
+ };
16
+ /** The framework's code writer; none when it does not load on the server. */
17
+ readonly writer: StoryCodeWriter | undefined;
18
+ /** The source's named values, as the frame writes them by name. */
19
+ readonly namedValues: NamedValues | undefined;
20
+ };
21
+ /** The story the code is of, as the story's answer read it. */
22
+ export type AgentCodeStory = {
23
+ /** The story's place in the tree, for its export and its component's name. */
24
+ readonly location: StoryLocation;
25
+ /** The story file's module, as the dev server loaded it. */
26
+ readonly module: unknown;
27
+ /** The catalogue's previews merged, whose args are under every story's. */
28
+ readonly preview: LoadedPreview | undefined;
29
+ /** The values an agent set, by name; none sets nothing. */
30
+ readonly accepted: Readonly<Record<string, ArgValue>> | undefined;
31
+ /** The component's docs, for the name code writes it by; none takes the tree's. */
32
+ readonly docs: ComponentDocs | undefined;
33
+ };
34
+ /**
35
+ * A story's code; none when its module, its file's code or the framework's writer cannot be read.
36
+ *
37
+ * @param parts - the file's code, the framework's writer and the named values.
38
+ * @param story - the story, its module, what an agent set and its component's docs.
39
+ */
40
+ export declare const agentStoryCode: (parts: AgentCodeParts, { location, module, preview, accepted, docs }: AgentCodeStory) => string | undefined;
41
+ /**
42
+ * A story's answer with its code, when it can be written.
43
+ *
44
+ * @param document - the story's answer.
45
+ * @param parts - the file's code, the framework's writer and the named values; none leaves the answer as it is.
46
+ * @param story - the story, its module and the preview.
47
+ */
48
+ export declare const withStoryCode: (document: StoryDocument, parts: AgentCodeParts | undefined, story: Pick<AgentCodeStory, "location" | "module" | "preview">) => StoryDocument;