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
@@ -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,29 @@
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";
3
+ import { isComponentDocs } from "../componentDocs.js";
21
4
  import { mergedPreviews, NO_PREVIEW, readPreview } from "../frame/storyModule.js";
22
5
  import { sourceFiles } from "../sourceFiles.js";
23
- import { findComponentByTitle, findStory, storyTree } from "../storyTree.js";
6
+ import { catalogueStatuses } from "../storyStatuses.js";
7
+ import { findStory, storyTree } from "../storyTree.js";
24
8
  import { sourceUsage } from "../usedIn.js";
9
+ import { isValueSchema } from "../valueSchema.js";
25
10
  import { frameAddressOf } from "../viewState.js";
26
- import { storiesDocument, storyDocument, storyLinks } from "./agentApi.js";
11
+ import { customControlNames, storiesDocument, storyDocument } from "./agentApi.js";
27
12
  import { agentIndexAnswer } from "./agentIndexRoute.js";
13
+ import { storiesWithStatus, storyWithStatus } from "./agentStatuses.js";
14
+ import { withStoryCode } from "./agentStoryCode.js";
15
+ import { changedAnswer } from "./changedRoute.js";
28
16
  import { pageAnswer, pagesAnswer } from "./docPagesRoute.js";
17
+ import { emptyStoryGlobs, emptyStoryGlobsMessage } from "./emptyStoryGlobs.js";
29
18
  import { findAnswer } from "./findRoute.js";
30
19
  import { framesOriginOf } from "./framesConfig.js";
31
20
  import { hostOf } from "./framesServer.js";
32
- import { catalogueChangedFiles, changeBase, changedFiles } from "./gitChange.js";
21
+ import { hiddenStoryFolders, hiddenStoryFoldersMessage } from "./hiddenStoryFiles.js";
33
22
  import { AGENT_SOURCES_FILE, pageModulePath } from "./pages.js";
34
23
  import { PREVIEW_ROUTE } from "./previewRoute.js";
35
24
  import { loadPreview } from "./previewRunner.js";
36
25
  import { searchAnswer } from "./searchRoute.js";
37
26
  import { catalogueTokens, STORYLESS_ROUTES } from "./storylessRoutes.js";
38
- import { affectedStories } from "./storyReach.js";
39
27
  /** The path the answers live under. */
40
28
  export const AGENT_API = "/__forgebook/api/";
41
29
  /**
@@ -148,43 +136,19 @@ export const storiesAnswer = async (context) => {
148
136
  const usage = offersUsedIn(config.lists) && params.get("usedIn") === "true"
149
137
  ? await usageBySource(loaded.sources)
150
138
  : 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 };
139
+ // read for each answer: the file an agent has just written ends the problem
140
+ const globs = emptyStoryGlobs(config);
141
+ const hidden = hiddenStoryFolders(config);
142
+ const said = [
143
+ ...(globs.length === 0 ? [] : [emptyStoryGlobsMessage(globs)]),
144
+ ...(hidden.length === 0 ? [] : [hiddenStoryFoldersMessage(hidden)])
145
+ ];
146
+ const listed = said.length === 0 ? tree : { ...tree, problems: [...said, ...tree.problems] };
147
+ const statuses = catalogueStatuses(config.lists.statuses);
148
+ return {
149
+ status: 200,
150
+ body: storiesWithStatus(storiesDocument(config.title, listed, pages, view, usage), listed, statuses)
151
+ };
188
152
  };
189
153
  /**
190
154
  * One story in detail, its component's "Used in" when offered.
@@ -201,28 +165,129 @@ export const storyAnswer = async (context) => {
201
165
  const files = sourceFiles(source);
202
166
  // the story's own file: its module, and the docs of the component its meta names, which its args are for
203
167
  const file = location.story.file;
168
+ const storyModule = await settled(files.stories[file]);
169
+ const docs = await settled(files.docs[file]);
204
170
  const parts = {
205
- module: await settled(files.stories[file]),
206
- docs: await settled(files.docs[file]),
207
- preview: loaded.preview
171
+ module: storyModule,
172
+ docs,
173
+ preview: loaded.preview,
174
+ namedValues: source.namedValues,
175
+ setArgs: params.get("args") ?? undefined,
176
+ customControls: context.server === undefined
177
+ ? undefined
178
+ : await customControlsRead([...customControlNames(storyModule, location), ...typedControlNames(docs)], config, context.server),
179
+ addressTexts: config.framework.addressTexts
208
180
  };
181
+ const code = context.server === undefined
182
+ ? undefined
183
+ : {
184
+ code: await settled(files.code[file]),
185
+ writer: await codeWriterOf(config, context.server),
186
+ namedValues: source.namedValues,
187
+ coders: parts.customControls?.coders ?? {}
188
+ };
209
189
  const index = offersUsedIn(config.lists) ? await sourceUsage(source) : undefined;
210
190
  // a usage that cannot be read leaves "Used in" out, never the story
211
191
  const usage = index === undefined || typeof index === "string" ? undefined : { tree, index };
212
- const document = storyDocument(location, parts, pages, view, usage);
192
+ const module = "value" in storyModule ? storyModule.value : undefined;
193
+ const document = storyWithStatus(withStoryCode(storyDocument(location, parts, pages, view, usage), code, {
194
+ location,
195
+ module,
196
+ preview: loaded.preview
197
+ }), location.component, catalogueStatuses(config.lists.statuses));
213
198
  // an agent must tell docs turned off from a story file that names no component
214
199
  const body = readsComponentDocs(config.lists)
215
200
  ? document
216
201
  : { ...document, componentDocs: "off" };
217
202
  return { status: 200, body };
218
203
  };
204
+ /** Whether a module's `codeOf` is a code writer: a function, as every framework's code module exports it. */
205
+ const isCodeWriter = (value) => typeof value === "function";
206
+ /**
207
+ * The framework's code writer, loaded on the server as the shell imports it; none when it does not load there.
208
+ *
209
+ * @param config - the catalogue's configuration.
210
+ * @param server - what the answers ask of the dev server.
211
+ */
212
+ const codeWriterOf = async (config, server) => {
213
+ try {
214
+ const id = await server.resolveSource(config.framework.pages.code);
215
+ // loading a module that does not resolve would only have Vite log its failure
216
+ const loaded = id === undefined ? undefined : await server.load(id);
217
+ const writer = typeof loaded === "object" && loaded !== null && "codeOf" in loaded ? loaded.codeOf : undefined;
218
+ return isCodeWriter(writer) ? writer : undefined;
219
+ }
220
+ catch {
221
+ // a writer that touches the page as it loads has no code to give an agent; the story's answer stands without it
222
+ return undefined;
223
+ }
224
+ };
225
+ /**
226
+ * The controls the catalogue gives a story's props by type or name, as its component's docs say: their modules load for
227
+ * the story's document too.
228
+ *
229
+ * @param docs - the docs, as the dev server loaded them.
230
+ */
231
+ const typedControlNames = (docs) => "value" in docs && isComponentDocs(docs.value)
232
+ ? docs.value.props.flatMap((prop) => prop.customControl ?? [])
233
+ : [];
234
+ /** How long a control's module may take to load for an answer: one that hangs must not hold every answer with it. */
235
+ const CONTROL_LOAD_MS = 5000;
236
+ /** A control's module as the server reads it: its schema and what writes its values as code; a text says why not. */
237
+ const controlReadOf = async (module, server) => {
238
+ try {
239
+ const id = await server.resolveSource(module);
240
+ const timeout = new Promise((_resolve, reject) => {
241
+ setTimeout(() => reject(new Error(`no answer in ${CONTROL_LOAD_MS} ms`)), CONTROL_LOAD_MS).unref();
242
+ });
243
+ const loaded = await Promise.race([server.load(id ?? module), timeout]);
244
+ const isModule = typeof loaded === "object" && loaded !== null;
245
+ const schema = isModule && "schema" in loaded ? loaded.schema : undefined;
246
+ const toCode = isModule && "toCode" in loaded ? loaded.toCode : undefined;
247
+ if (!isValueSchema(schema))
248
+ return "its module exports no schema Forgebook can read";
249
+ return {
250
+ schema,
251
+ toCode: typeof toCode === "function"
252
+ ? (value, argType) => {
253
+ const code = toCode(value, argType);
254
+ return typeof code === "string" ? code : undefined;
255
+ }
256
+ : undefined
257
+ };
258
+ }
259
+ catch (error) {
260
+ return `its module cannot be read on the server: ${error instanceof Error ? error.message : String(error)}`;
261
+ }
262
+ };
263
+ /**
264
+ * The custom controls a story names, as an agent reads them: only those, each module loaded on the server for its schema.
265
+ * 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
266
+ * checked. Its import runs on the dev server, as a story file's does.
267
+ *
268
+ * @param names - the controls the story names.
269
+ * @param config - the catalogue's configuration.
270
+ * @param server - what the answers ask of the dev server.
271
+ */
272
+ const customControlsRead = async (names, config, server) => {
273
+ const known = names.flatMap((name) => {
274
+ const control = Object.hasOwn(config.argControls, name) ? config.argControls[name] : undefined;
275
+ return control === undefined ? [] : [[name, control.module]];
276
+ });
277
+ const read = await Promise.all(known.map(async ([name, module]) => [name, await controlReadOf(module, server)]));
278
+ return {
279
+ schemas: Object.fromEntries(read.flatMap(([name, each]) => (typeof each === "string" ? [] : [[name, each.schema]]))),
280
+ coders: Object.fromEntries(read.flatMap(([name, each]) => (typeof each === "string" ? [] : [[name, each.toCode]]))),
281
+ problems: Object.fromEntries(read.flatMap(([name, each]) => (typeof each === "string" ? [[name, each]] : [])))
282
+ };
283
+ };
219
284
  /**
220
285
  * Answers one of the API's paths.
221
286
  *
222
287
  * @param server - what the answers ask of the dev server.
223
288
  * @param config - the catalogue's configuration.
224
289
  * @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
290
+ * @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
291
  * tokens, `query` and `limit` for a search, `usedIn=true` for the list's "Used in" (a
227
292
  * story's comes with it when the catalogue offers it).
228
293
  * @param origins - where the catalogue is served (`http://localhost:5173`) and where its frames are, for the links.
@@ -242,7 +307,8 @@ export const agentAnswer = async (server, config, route, params, origins, live)
242
307
  config,
243
308
  params,
244
309
  pages: { page: `${origins.catalogue}/`, frame: `${origins.frames}/frame.html` },
245
- view: params.get("view") ?? ""
310
+ view: params.get("view") ?? "",
311
+ server
246
312
  };
247
313
  if (route === "errors")
248
314
  return errorsAnswer(context, live);
@@ -259,7 +325,10 @@ export const agentAnswer = async (server, config, route, params, origins, live)
259
325
  if (route === "page")
260
326
  return await pageAnswer(context);
261
327
  if (route === "changed")
262
- return await changedAnswer(context);
328
+ return await changedAnswer(context, server.resolveSource);
329
+ // loaded when asked: it reads syntax with TypeScript, which a dev server's thread must not pay for at start
330
+ if (route === "visibility")
331
+ return await (await import("./visibilityRoute.js")).visibilityAnswer(context);
263
332
  if (route === "agent-index")
264
333
  return await agentIndexAnswer(context, await catalogueTokens(config, server.resolveSource));
265
334
  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
+ };