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
@@ -8,7 +8,8 @@
8
8
  * when it runs (the core has no browser), and reads the report back through `isStoryCheckReport`, since it crossed a
9
9
  * dynamic import. The problems are those the catalogue's browser tests fail on, with the same messages: a frame that
10
10
  * could not show its story, axe's rules, spills, overlays past the frame, and the page's errors (a failed play among
11
- * them: its rejection reaches the page). Pure.
11
+ * them: its rejection reaches the page). A story its frame gave up on is neither passed nor failed: `notVerified` says
12
+ * so. Pure.
12
13
  *
13
14
  * @module
14
15
  */
@@ -31,6 +32,8 @@ export type StoryProblem = {
31
32
  export type StoryCheckStory = {
32
33
  /** The story's id. */
33
34
  readonly id: string;
35
+ /** Its file, as the catalogue lists it: what a report names when the story cannot be shown. */
36
+ readonly file?: string;
34
37
  /**
35
38
  * The id an earlier rule gave it, when it differs from `id`: a baseline stored under that id is still its baseline
36
39
  * until `forgebook shot --update` stores one under its id.
@@ -57,6 +60,8 @@ export type StoryCheckRequest = {
57
60
  readonly views: readonly string[];
58
61
  /** Check every variant the catalogue's browser tests check instead of the views given. */
59
62
  readonly isAllVariants: boolean;
63
+ /** How many pages to open at once; one by default. */
64
+ readonly concurrency?: number;
60
65
  /** The model that judges what axe cannot see; none leaves the pages on this machine. */
61
66
  readonly semantic?: SemanticModel;
62
67
  };
@@ -86,6 +91,19 @@ export type StoryCheckResult = {
86
91
  readonly frame: string;
87
92
  /** The problems; none when it passes. */
88
93
  readonly problems: readonly StoryProblem[];
94
+ /**
95
+ * Why the story's checks did not run: its frame gave up waiting for what it loads, or cannot tell (status `pending`),
96
+ * so no check saw the story in its final state. Absent when they ran; present, the story has not passed, whatever
97
+ * `problems` holds.
98
+ */
99
+ readonly notVerified?: string;
100
+ /** Whether the story drew nothing a reader could see: no text, and no element with a size. Absent otherwise. */
101
+ readonly isBlank?: boolean;
102
+ /**
103
+ * Whether the frame did not wait for what the story loads, as it asks (`parameters.suspense.expected`): the checks read
104
+ * it as it first drew. Absent otherwise.
105
+ */
106
+ readonly isNotAwaited?: boolean;
89
107
  /** What the model judged, when one was asked; a text says why it could not. */
90
108
  readonly judgements?: readonly StoryJudgement[] | string;
91
109
  };
@@ -98,6 +116,67 @@ export type StoryCheckReport = {
98
116
  /** `"off"` when the catalogue checks no accessibility (`a11y: false`): no result ran axe. Absent when it does. */
99
117
  readonly a11y?: "off";
100
118
  };
119
+ /** One case of a stress run: the values given, the window, the view, and what it found that the plain story does not. */
120
+ export type StressCase = {
121
+ /** Its name: `long-text`, `unbreakable`, `huge-number`, `empty`, `rtl`, `zoom-200`, `narrow`, `dark`, `contrast`. */
122
+ readonly name: string;
123
+ /** The story's id. */
124
+ readonly storyId: string;
125
+ /** The values given over the story's own, by prop. */
126
+ readonly args: Readonly<Record<string, unknown>>;
127
+ /** The frame, in its view. */
128
+ readonly frame: string;
129
+ /** The problems the plain story does not have; none when it holds. */
130
+ readonly problems: readonly StoryProblem[];
131
+ /** Why it could not be judged: the story did not draw in it, or not in the plain case. */
132
+ readonly notVerified?: string;
133
+ };
134
+ /** One case to run, as the command builds it from the story's props and the catalogue's switches. */
135
+ export type StressCaseRequest = {
136
+ /** Its name. */
137
+ readonly name: string;
138
+ /** The values to give, as the props panel gives them. */
139
+ readonly args: Readonly<Record<string, unknown>>;
140
+ /** The view, in the address's form (`theme=dark`); empty for the default. */
141
+ readonly view: string;
142
+ /** The window's width, in CSS px; the default window's when none. */
143
+ readonly width?: number;
144
+ /** Whether the frame's document reads right to left. */
145
+ readonly isRtl?: boolean;
146
+ /** The axe rules whose finding the case's own values cause, which say nothing of the component. */
147
+ readonly expectedRules?: readonly string[];
148
+ };
149
+ /** What a stress run is asked. */
150
+ export type StressRequest = {
151
+ /** The catalogue's frame page, absolute. */
152
+ readonly frameUrl: string;
153
+ /** The stories, each with its cases. */
154
+ readonly stories: readonly {
155
+ readonly story: StoryCheckStory;
156
+ readonly cases: readonly StressCaseRequest[];
157
+ }[];
158
+ /** The catalogue's switches. */
159
+ readonly switches: readonly ViewSwitch[];
160
+ /** The catalogue's lists: its accessibility rules. */
161
+ readonly lists: CatalogueLists;
162
+ };
163
+ /** What a stress run found. */
164
+ export type StressReport = {
165
+ /** The shape's version. */
166
+ readonly schema: 1;
167
+ /** One result per story and case. */
168
+ readonly cases: readonly StressCase[];
169
+ /** The cases not run, each with its story and why: a case with nothing to set is never counted as passed. */
170
+ readonly skipped: readonly string[];
171
+ /** `"off"` when the catalogue checks no accessibility (`a11y: false`): no case ran axe. Absent when it does. */
172
+ readonly a11y?: "off";
173
+ };
174
+ /**
175
+ * Whether what the testing package answered is a stress run's report.
176
+ *
177
+ * @param value - the answer.
178
+ */
179
+ export declare const isStressReport: (value: unknown) => value is StressReport;
101
180
  /**
102
181
  * Whether what the testing package answered is a check's report.
103
182
  *
@@ -119,8 +198,11 @@ export type StoryShot = {
119
198
  readonly frame: string;
120
199
  /** The picture, a PNG file's absolute path. */
121
200
  readonly file: string;
122
- /** Why the story did not draw (`error`, or `silent` when it never said); none when it did. */
123
- readonly status?: "error" | "silent";
201
+ /**
202
+ * Why the picture is not of the story as drawn (`error`; `silent` when it never said; `pending` when the frame gave up
203
+ * on what it loads, so this may picture a fallback); none when it is.
204
+ */
205
+ readonly status?: "error" | "silent" | "pending";
124
206
  };
125
207
  /** The pictures taken. */
126
208
  export type StoryShotReport = {
@@ -1,3 +1,23 @@
1
+ /**
2
+ * Whether what the testing package answered is a stress run's report.
3
+ *
4
+ * @param value - the answer.
5
+ */
6
+ export const isStressReport = (value) => typeof value === "object" &&
7
+ value !== null &&
8
+ "schema" in value &&
9
+ value.schema === 1 &&
10
+ "cases" in value &&
11
+ Array.isArray(value.cases) &&
12
+ value.cases.every((each) => typeof each === "object" &&
13
+ each !== null &&
14
+ "name" in each &&
15
+ typeof each.name === "string" &&
16
+ "storyId" in each &&
17
+ typeof each.storyId === "string" &&
18
+ "problems" in each &&
19
+ Array.isArray(each.problems) &&
20
+ each.problems.every(isProblem));
1
21
  /** Every kind, for reading a report back. */
2
22
  const KINDS = ["frame", "axe", "spill", "overlay", "focus", "error"];
3
23
  /**
@@ -26,7 +46,9 @@ const isResult = (value) => typeof value === "object" &&
26
46
  typeof value.frame === "string" &&
27
47
  "problems" in value &&
28
48
  Array.isArray(value.problems) &&
29
- value.problems.every(isProblem);
49
+ value.problems.every(isProblem) &&
50
+ (!("notVerified" in value) || value.notVerified === undefined || typeof value.notVerified === "string") &&
51
+ (!("isNotAwaited" in value) || value.isNotAwaited === undefined || typeof value.isNotAwaited === "boolean");
30
52
  /**
31
53
  * Whether what the testing package answered is a check's report.
32
54
  *
@@ -0,0 +1,46 @@
1
+ /**
2
+ * A story's code as text, as the shell shows and copies it and as `forgebook story` gives it to an agent: its `render`
3
+ * as written, or, for a story drawn from its args, the component in the framework's code with the args its file writes
4
+ * as code (functions, elements) as written and the values of the moment for the rest.
5
+ *
6
+ * @remarks
7
+ * An arg the panel or an agent set is written from its value, not from the file's text, which no longer says what the
8
+ * story draws. Pure: the shell and the dev server read the same text.
9
+ *
10
+ * @module
11
+ */
12
+ import type { StoryCode, StoryFileCode } from "@forgebook/story-format/source";
13
+ import type { StoryCodeWriter } from "./frame/renderer.ts";
14
+ import type { PanelArgs } from "./messages.ts";
15
+ /** Which story's code, and the values its code is drawn from when it has no `render`. */
16
+ export type StoryCodeSource = {
17
+ /** The story file's code. */
18
+ readonly code: StoryFileCode;
19
+ /** The story's export name. */
20
+ readonly exportName: string;
21
+ /** The component's name as code writes it (`codeNameOf`), for the code of a story drawn from its args. */
22
+ readonly componentName: string;
23
+ /** The values of the moment: the story's args, with the panel's over them on the story page. */
24
+ readonly args: PanelArgs;
25
+ /** The args the panel or an agent set, written from their values; none by default. */
26
+ readonly edited?: readonly string[];
27
+ };
28
+ /**
29
+ * The story's render as written, when it has one.
30
+ *
31
+ * @param source - the file's code and the story.
32
+ */
33
+ export declare const renderCodeOf: ({ code, exportName }: StoryCodeSource) => StoryCode | undefined;
34
+ /**
35
+ * The args the story's file writes as code, but those the panel or an agent set.
36
+ *
37
+ * @param source - the file's code, the story and what was set.
38
+ */
39
+ export declare const writtenArgsOf: ({ code, exportName, edited }: StoryCodeSource) => Readonly<Record<string, string>>;
40
+ /**
41
+ * The story's code as text, as copied.
42
+ *
43
+ * @param source - the file's code, the story, the component's name and the args.
44
+ * @param write - the framework's code writer, for a story drawn from its args.
45
+ */
46
+ export declare const storyCodeText: (source: StoryCodeSource, write: StoryCodeWriter) => string;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The story's render as written, when it has one.
3
+ *
4
+ * @param source - the file's code and the story.
5
+ */
6
+ export const renderCodeOf = ({ code, exportName }) => {
7
+ const entry = code[exportName];
8
+ return entry !== undefined && "text" in entry ? entry : undefined;
9
+ };
10
+ /**
11
+ * The args the story's file writes as code, but those the panel or an agent set.
12
+ *
13
+ * @param source - the file's code, the story and what was set.
14
+ */
15
+ export const writtenArgsOf = ({ code, exportName, edited = [] }) => {
16
+ const entry = code[exportName];
17
+ if (entry === undefined || !("args" in entry))
18
+ return {};
19
+ return Object.fromEntries(Object.entries(entry.args).filter(([name]) => !edited.includes(name)));
20
+ };
21
+ /**
22
+ * The story's code as text, as copied.
23
+ *
24
+ * @param source - the file's code, the story, the component's name and the args.
25
+ * @param write - the framework's code writer, for a story drawn from its args.
26
+ */
27
+ export const storyCodeText = (source, write) => renderCodeOf(source)?.text ?? write(source.componentName, source.args, writtenArgsOf(source));
@@ -0,0 +1,100 @@
1
+ /**
2
+ * What a story's controls are, for whoever sets its values without the panel: each prop's control and what its value
3
+ * looks like, as an agent reads them, and the values an agent asks to set, checked as a link's are. Pure.
4
+ *
5
+ * @module
6
+ */
7
+ import type { StoryControlsSetting } from "@forgebook/story-format/source";
8
+ import { type DroppedArg } from "./addressArgs.ts";
9
+ import { type AddressTexts } from "./addressTexts.ts";
10
+ import type { ValueSchema } from "./argControl.ts";
11
+ import { type PanelArgTypes, type PanelControl, type TokenRequest } from "./argTypes.ts";
12
+ import type { PropDocs } from "./componentDocs.ts";
13
+ import { type ArgValue, type PanelArgs } from "./messages.ts";
14
+ import type { NamedValues } from "./namedValues.ts";
15
+ import { type ValueShape } from "./valueShape.ts";
16
+ /** How a value of a prop is set: the panel's control, or a choice among the source's named values. */
17
+ export type ControlKind = Exclude<PanelControl, "none"> | "named" | "custom";
18
+ /** One prop a story's values can set. */
19
+ export type StoryControl = {
20
+ /** The prop's name: the key in `args`. */
21
+ readonly name: string;
22
+ /** Its control, which says what its value is. */
23
+ readonly control: ControlKind;
24
+ /** Its type, as the source writes it. */
25
+ readonly type: string;
26
+ /** Whether the prop must be passed. */
27
+ readonly isRequired: boolean;
28
+ /** What its value looks like, for a value of more than one part. */
29
+ readonly shape?: ValueShape;
30
+ /** A choice's values. */
31
+ readonly choices?: readonly (string | number)[];
32
+ /** A number's lowest value. */
33
+ readonly min?: number;
34
+ /** A number's highest value. */
35
+ readonly max?: number;
36
+ /** The names a `named` control takes, as `{ of: type, named: name }`. */
37
+ readonly named?: readonly string[];
38
+ /** A `custom` control's name, of those `argControls` registers. */
39
+ readonly custom?: string;
40
+ /** A `custom` control's `settings`, as the story writes them. */
41
+ readonly settings?: ArgValue;
42
+ /** A `custom` control's schema: what its value must fit. Left out when its module cannot be read. */
43
+ readonly schema?: ValueSchema;
44
+ /** A `token` control's tokens, and what the story receives for one (`forgebook tokens` lists them). */
45
+ readonly tokens?: TokenRequest;
46
+ };
47
+ /** The custom controls' schemas, by name. */
48
+ export type CustomSchemas = Readonly<Record<string, ValueSchema>>;
49
+ /** What a story declares of its args, as the server reads it from the story's module. */
50
+ export type StoryDeclaration = {
51
+ /** The props its component's types give. */
52
+ readonly props: readonly PropDocs[];
53
+ /** Its `argTypes`, as the panel reads them. */
54
+ readonly argTypes: PanelArgTypes;
55
+ /** The props the story lets the panel set. */
56
+ readonly controls: StoryControlsSetting;
57
+ /** The story's own args, as the panel reads them. */
58
+ readonly storyArgs: PanelArgs;
59
+ /** The source's named values. */
60
+ readonly namedValues: NamedValues;
61
+ /** The custom controls' schemas, by name, those whose module could be read. */
62
+ readonly customSchemas?: CustomSchemas;
63
+ };
64
+ /**
65
+ * The props a story's values can set.
66
+ *
67
+ * @param declaration - what the story declares.
68
+ */
69
+ export declare const storyControlsOf: (declaration: StoryDeclaration) => readonly StoryControl[];
70
+ /** What became of the values asked for. */
71
+ export type SetArgs = {
72
+ /** The values the story takes, by prop; the links carry them. */
73
+ readonly accepted: Readonly<Record<string, ArgValue>>;
74
+ /** The values left out, with the reason. */
75
+ readonly dropped: readonly DroppedArg[];
76
+ /** `args=` as the links write it; empty when none is taken. */
77
+ readonly param: string;
78
+ };
79
+ /**
80
+ * The values an agent asks to set, checked as a link's are.
81
+ *
82
+ * @param text - the values, as JSON.
83
+ * @param declaration - what the story declares.
84
+ * @param addressTexts - how the framework's stories take a link's texts; `any` by default.
85
+ */
86
+ export declare const checkedSetArgs: (text: string, declaration: StoryDeclaration, addressTexts?: AddressTexts) => SetArgs;
87
+ /** The custom controls as the server read them. */
88
+ export type CustomControlsRead = {
89
+ /** The schemas, by control. */
90
+ readonly schemas: CustomSchemas;
91
+ /** Why a control could not be read, by control. */
92
+ readonly problems: Readonly<Record<string, string>>;
93
+ };
94
+ /**
95
+ * What is wrong with the custom controls a story names: one no configuration registers, or whose module did not load.
96
+ *
97
+ * @param controls - the story's controls.
98
+ * @param read - the custom controls as the server read them.
99
+ */
100
+ export declare const customControlProblems: (controls: readonly StoryControl[], read: CustomControlsRead | undefined) => readonly string[];
@@ -0,0 +1,100 @@
1
+ import { checkedAddressArgs, declaredArgProps } from "./addressArgs.js";
2
+ import { readArgsParam } from "./addressArgsParam.js";
3
+ import { addressArgsFor } from "./addressTexts.js";
4
+ import { isColorProp, isNamedProp } from "./argTypes.js";
5
+ import { panelArgsParam } from "./messages.js";
6
+ import { holdsUnsafePart, isFileList, isValueOfShape, resolvedShape } from "./shapeValues.js";
7
+ import { schemaProblem } from "./valueSchema.js";
8
+ import { canSetShape } from "./valueShape.js";
9
+ /** A prop's control when no `argTypes` names one: from its kind. */
10
+ const controlOfKind = (prop, namedValues) => {
11
+ if (isNamedProp(prop, namedValues))
12
+ return "named";
13
+ if (prop.shape !== undefined)
14
+ return "object";
15
+ if (prop.kind === "choice")
16
+ return "select";
17
+ if (prop.kind === "number")
18
+ return "number";
19
+ if (prop.kind === "toggle")
20
+ return "boolean";
21
+ return isColorProp(prop) ? "color" : "text";
22
+ };
23
+ /**
24
+ * One settable prop as an agent reads it.
25
+ *
26
+ * @param prop - the prop.
27
+ * @param namedValues - the source's named values.
28
+ * @param customSchemas - the custom controls' schemas.
29
+ */
30
+ const storyControl = (prop, namedValues, customSchemas) => {
31
+ const custom = prop.customControl;
32
+ const schema = custom !== undefined && Object.hasOwn(customSchemas, custom) ? customSchemas[custom] : undefined;
33
+ const own = prop.control === undefined || prop.control === "none" ? controlOfKind(prop, namedValues) : prop.control;
34
+ const control = custom === undefined ? own : "custom";
35
+ return {
36
+ name: prop.name,
37
+ control,
38
+ type: prop.type,
39
+ isRequired: prop.isRequired,
40
+ ...(prop.shape === undefined ? {} : { shape: resolvedShape(prop.shape) }),
41
+ ...(prop.choices === undefined ? {} : { choices: prop.choices }),
42
+ ...(prop.min === undefined ? {} : { min: prop.min }),
43
+ ...(prop.max === undefined ? {} : { max: prop.max }),
44
+ ...(control === "named" ? { named: Object.keys(namedValues[prop.type] ?? {}) } : {}),
45
+ ...(prop.tokens === undefined ? {} : { tokens: prop.tokens }),
46
+ ...(custom === undefined ? {} : { custom }),
47
+ ...(prop.settings === undefined ? {} : { settings: prop.settings }),
48
+ ...(schema === undefined ? {} : { schema })
49
+ };
50
+ };
51
+ /**
52
+ * The props a story's values can set.
53
+ *
54
+ * @param declaration - what the story declares.
55
+ */
56
+ export const storyControlsOf = (declaration) => {
57
+ const argDeclaration = declaration;
58
+ const canSet = (prop) => prop.shape === undefined || canSetShape(prop.shape, declaration.namedValues);
59
+ return declaredArgProps(argDeclaration)
60
+ .filter(canSet)
61
+ .map((prop) => storyControl(prop, declaration.namedValues, declaration.customSchemas ?? {}));
62
+ };
63
+ /**
64
+ * The values an agent asks to set, checked as a link's are.
65
+ *
66
+ * @param text - the values, as JSON.
67
+ * @param declaration - what the story declares.
68
+ * @param addressTexts - how the framework's stories take a link's texts; `any` by default.
69
+ */
70
+ export const checkedSetArgs = (text, declaration, addressTexts = "any") => {
71
+ const { args, link } = readArgsParam(text.trimStart().startsWith("{") ? text : "{");
72
+ const unread = (link?.unread ?? []).map((name) => ({ name, reason: "unreadable" }));
73
+ const plain = addressArgsFor(args, addressTexts);
74
+ const notPlain = Object.keys(args)
75
+ .filter((name) => !Object.hasOwn(plain, name))
76
+ .map((name) => ({ name, reason: "markup" }));
77
+ const { accepted, dropped } = checkedAddressArgs(plain, declaration, undefined, {
78
+ isFileList,
79
+ isValueOfShape,
80
+ custom: Object.fromEntries(Object.entries(declaration.customSchemas ?? {}).map(([name, schema]) => [
81
+ name,
82
+ (value) => holdsUnsafePart(value, true) ? "not what a link may give" : schemaProblem(schema, value)
83
+ ]))
84
+ });
85
+ return { accepted, dropped: [...unread, ...notPlain, ...dropped], param: panelArgsParam(accepted) };
86
+ };
87
+ /**
88
+ * What is wrong with the custom controls a story names: one no configuration registers, or whose module did not load.
89
+ *
90
+ * @param controls - the story's controls.
91
+ * @param read - the custom controls as the server read them.
92
+ */
93
+ export const customControlProblems = (controls, read) => controls.flatMap(({ custom, schema }) => {
94
+ if (custom === undefined || schema !== undefined)
95
+ return [];
96
+ const problem = read !== undefined && Object.hasOwn(read.problems, custom) ? read.problems[custom] : undefined;
97
+ return [
98
+ `The control "${custom}": ${problem ?? "no control is registered under this name in argControls"}`
99
+ ];
100
+ });
@@ -0,0 +1,55 @@
1
+ /** How a status reads at a glance: the colour of its badge, each with its text contrast in both appearances. */
2
+ export declare const STATUS_TONES: readonly ["neutral", "info", "positive", "caution", "critical"];
3
+ /** One of the tones. */
4
+ export type StatusTone = (typeof STATUS_TONES)[number];
5
+ /** A status as a catalogue declares it (`statuses: { review: { label: "In review", tone: "caution" } }`). */
6
+ export type StatusSetting = {
7
+ /** Its badge's text; the shell's own word for a default status (`strings` replaces it), else its tag. */
8
+ readonly label?: string;
9
+ /** Its badge's colour; `neutral` for a status of the catalogue's own. */
10
+ readonly tone?: StatusTone;
11
+ };
12
+ /** The statuses a configuration declares, by tag: `false` turns a default one off. */
13
+ export type StatusSettings = Readonly<Record<string, StatusSetting | false>>;
14
+ /** A status the catalogue has, its defaults filled in. */
15
+ export type CatalogueStatus = {
16
+ /** Its tag (`review`). */
17
+ readonly id: string;
18
+ /** Its badge's text, when the catalogue writes one. */
19
+ readonly label?: string;
20
+ /** Its badge's colour. */
21
+ readonly tone: StatusTone;
22
+ };
23
+ /** The status whose tag says a component is not to be used any more, as TSDoc's `@deprecated` says it. */
24
+ export declare const DEPRECATED_STATUS = "deprecated";
25
+ /** The statuses every catalogue has unless it turns them off, in the order their badges come. */
26
+ export declare const DEFAULT_STATUSES: Readonly<Record<string, StatusSetting>>;
27
+ /**
28
+ * A catalogue's statuses: the defaults, each with what the configuration writes of it, then the configuration's own,
29
+ * less those it turns off.
30
+ *
31
+ * @param settings - what the configuration declares; none for the defaults.
32
+ */
33
+ export declare const catalogueStatuses: (settings?: StatusSettings) => readonly CatalogueStatus[];
34
+ /**
35
+ * Statuses declared in several places (the presets', then the catalogue's) as one declaration: status by status and
36
+ * field by field, so a catalogue renames a preset's status and keeps its tone; none when none declares any.
37
+ *
38
+ * @param all - the declarations, in order.
39
+ */
40
+ export declare const mergedStatuses: (all: readonly (StatusSettings | undefined)[]) => {
41
+ readonly statuses?: StatusSettings;
42
+ };
43
+ /**
44
+ * The statuses a list of tags holds, in the catalogue's order.
45
+ *
46
+ * @param tags - a meta's or a story's tags.
47
+ * @param statuses - the catalogue's statuses.
48
+ */
49
+ export declare const statusesOf: (tags: readonly string[], statuses: readonly CatalogueStatus[]) => readonly CatalogueStatus[];
50
+ /**
51
+ * Why a configuration's statuses cannot be used, or none: they are written by JavaScript too, which no type stops.
52
+ *
53
+ * @param settings - the value written.
54
+ */
55
+ export declare const statusesProblem: (settings: unknown) => string | undefined;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * A component's or a story's status (waiting for review, experimental, deprecated): a tag the catalogue declares as a
3
+ * status, read by the agents' answers on Node and by the shell's badges, which load only for a catalogue whose stories
4
+ * have tags.
5
+ *
6
+ * @remarks
7
+ * A status is a tag, so it is written where CSF writes one (the preview, a meta, a story; `!name` takes it away) and
8
+ * filtered by the tag filter; the declaration only says which tags are statuses and how they look. A meta's tags give
9
+ * the component's status, a story's the story's. Three are declared by default, each a catalogue may restyle, rename
10
+ * or turn off with `false`. Pure.
11
+ *
12
+ * @module
13
+ */
14
+ import { TOOL_TAGS } from "./storyTagNames.js";
15
+ /** How a status reads at a glance: the colour of its badge, each with its text contrast in both appearances. */
16
+ export const STATUS_TONES = ["neutral", "info", "positive", "caution", "critical"];
17
+ /** The status whose tag says a component is not to be used any more, as TSDoc's `@deprecated` says it. */
18
+ export const DEPRECATED_STATUS = "deprecated";
19
+ /** The statuses every catalogue has unless it turns them off, in the order their badges come. */
20
+ export const DEFAULT_STATUSES = {
21
+ review: { tone: "caution" },
22
+ experimental: { tone: "info" },
23
+ [DEPRECATED_STATUS]: { tone: "critical" }
24
+ };
25
+ /**
26
+ * A catalogue's statuses: the defaults, each with what the configuration writes of it, then the configuration's own,
27
+ * less those it turns off.
28
+ *
29
+ * @param settings - what the configuration declares; none for the defaults.
30
+ */
31
+ export const catalogueStatuses = (settings = {}) => Object.entries({ ...DEFAULT_STATUSES, ...settings }).flatMap(([id, setting]) => {
32
+ if (setting === false)
33
+ return [];
34
+ const { label, tone } = { ...DEFAULT_STATUSES[id], ...setting };
35
+ return [{ id, tone: tone ?? "neutral", ...(label === undefined ? {} : { label }) }];
36
+ });
37
+ /**
38
+ * Statuses declared in several places (the presets', then the catalogue's) as one declaration: status by status and
39
+ * field by field, so a catalogue renames a preset's status and keeps its tone; none when none declares any.
40
+ *
41
+ * @param all - the declarations, in order.
42
+ */
43
+ export const mergedStatuses = (all) => {
44
+ const statuses = {};
45
+ for (const [id, status] of all.flatMap((each) => Object.entries(each ?? {}))) {
46
+ const before = statuses[id];
47
+ statuses[id] = status === false ? false : { ...(before === false ? {} : before), ...status };
48
+ }
49
+ return Object.keys(statuses).length === 0 ? {} : { statuses };
50
+ };
51
+ /**
52
+ * The statuses a list of tags holds, in the catalogue's order.
53
+ *
54
+ * @param tags - a meta's or a story's tags.
55
+ * @param statuses - the catalogue's statuses.
56
+ */
57
+ export const statusesOf = (tags, statuses) => statuses.filter((status) => tags.includes(status.id));
58
+ /**
59
+ * Why a status's fields cannot be used, or none: only `label` and `tone`, so a misspelt one is named, not ignored.
60
+ *
61
+ * @param id - its tag.
62
+ * @param setting - what is written for it.
63
+ */
64
+ const fieldsProblem = (id, setting) => {
65
+ const unknown = Object.keys(setting).find((key) => key !== "label" && key !== "tone");
66
+ if (unknown !== undefined)
67
+ return `the status "${id}" has no field "${unknown}": it takes label and tone`;
68
+ const label = "label" in setting ? setting.label : undefined;
69
+ const tone = "tone" in setting ? setting.tone : undefined;
70
+ if (label !== undefined && (typeof label !== "string" || label === ""))
71
+ return `the status "${id}" has a label that is no text`;
72
+ if (tone !== undefined && !STATUS_TONES.some((each) => each === tone))
73
+ return `the status "${id}" has the tone ${JSON.stringify(tone)}: write one of ${STATUS_TONES.join(", ")}`;
74
+ return undefined;
75
+ };
76
+ /**
77
+ * Why one status a configuration declares cannot be used, or none.
78
+ *
79
+ * @param id - its tag.
80
+ * @param setting - what is written for it.
81
+ */
82
+ const statusProblem = (id, setting) => {
83
+ if (id === "" || id.startsWith("!") || TOOL_TAGS.has(id))
84
+ return `"${id}" cannot be a status: a status is a tag of your own, not empty, no !name and none of ${[...TOOL_TAGS].join(", ")}`;
85
+ if (setting === false)
86
+ return undefined;
87
+ if (typeof setting !== "object" || setting === null || Array.isArray(setting))
88
+ return `the status "${id}" must be { label, tone } or false`;
89
+ return fieldsProblem(id, setting);
90
+ };
91
+ /**
92
+ * Why a configuration's statuses cannot be used, or none: they are written by JavaScript too, which no type stops.
93
+ *
94
+ * @param settings - the value written.
95
+ */
96
+ export const statusesProblem = (settings) => {
97
+ if (settings === undefined)
98
+ return undefined;
99
+ if (typeof settings !== "object" || settings === null || Array.isArray(settings))
100
+ return "statuses must be an object of statuses by tag: { review: { label, tone } }";
101
+ return Object.entries(settings)
102
+ .map(([id, setting]) => statusProblem(id, setting))
103
+ .find((problem) => problem !== undefined);
104
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Which of a story's tags a person filters by, apart from the filter itself (`storyTags.ts`).
3
+ *
4
+ * @remarks
5
+ * Apart because the sidebar asks it on every catalogue's first load, to know whether to offer a filter at all, and a
6
+ * catalogue with no tags must not pay for the rest; a component's page asks it too, to know whether to draw statuses.
7
+ * Pure.
8
+ *
9
+ * @module
10
+ */
11
+ import { type StoryTree } from "./storyTree.ts";
12
+ /** The tags CSF gives a meaning of its own: they say what a tool does with a story, not what the story is. */
13
+ export declare const TOOL_TAGS: ReadonlySet<string>;
14
+ /**
15
+ * Whether a person can filter by a tag: any but a tool's tag, and a `!name`, which only takes a tag away.
16
+ *
17
+ * @param tag - the tag, as a story holds it.
18
+ */
19
+ export declare const isFilterTag: (tag: string) => boolean;
20
+ /**
21
+ * Whether any listed story holds a tag a person can filter by: what offers the filter and draws the statuses' badges.
22
+ *
23
+ * @param tree - the tree.
24
+ */
25
+ export declare const hasFilterTags: (tree: StoryTree) => boolean;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Which of a story's tags a person filters by, apart from the filter itself (`storyTags.ts`).
3
+ *
4
+ * @remarks
5
+ * Apart because the sidebar asks it on every catalogue's first load, to know whether to offer a filter at all, and a
6
+ * catalogue with no tags must not pay for the rest; a component's page asks it too, to know whether to draw statuses.
7
+ * Pure.
8
+ *
9
+ * @module
10
+ */
11
+ import { storyLocations } from "./storyTree.js";
12
+ /** The tags CSF gives a meaning of its own: they say what a tool does with a story, not what the story is. */
13
+ export const TOOL_TAGS = new Set(["dev", "test", "autodocs", "play-fn", "test-fn"]);
14
+ /**
15
+ * Whether a person can filter by a tag: any but a tool's tag, and a `!name`, which only takes a tag away.
16
+ *
17
+ * @param tag - the tag, as a story holds it.
18
+ */
19
+ export const isFilterTag = (tag) => !tag.startsWith("!") && !TOOL_TAGS.has(tag);
20
+ /**
21
+ * Whether any listed story holds a tag a person can filter by: what offers the filter and draws the statuses' badges.
22
+ *
23
+ * @param tree - the tree.
24
+ */
25
+ export const hasFilterTags = (tree) => storyLocations(tree).some(({ story }) => story.tags.some(isFilterTag));