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
@@ -9,8 +9,8 @@
9
9
  *
10
10
  * @module
11
11
  */
12
- import { useEffect, useMemo, useRef } from "react";
13
- import { checkedAddressArgs, checkedArgsMessage } from "../addressArgs.js";
12
+ import { useEffect, useMemo, useRef, useState } from "react";
13
+ import { checkedAddressArgs, checkedArgsMessage, declaredArgProps, needsShapeChecks } from "../addressArgs.js";
14
14
  import { panelArgsParam } from "../messages.js";
15
15
  import { tellFrames } from "./FrameView.js";
16
16
  /**
@@ -38,19 +38,57 @@ const NO_ARGS = {};
38
38
  const NOTHING_DROPPED = [];
39
39
  /** A source without named values. */
40
40
  const NO_NAMED_VALUES = {};
41
+ /** No custom control registered. */
42
+ const NO_ARG_CONTROLS = {};
43
+ /**
44
+ * What checks a story's structured values, loaded when a story first has a prop that needs it. Until it arrives such a
45
+ * prop's value waits, whichever its story.
46
+ *
47
+ * @param declaration - what the story declares.
48
+ * @param loaders - the catalogue's custom controls.
49
+ */
50
+ const useArgChecks = (declaration, loaders) => {
51
+ const props = declaration === undefined ? [] : declaredArgProps(declaration);
52
+ const names = props.flatMap((prop) => prop.customControl ?? []).join("\n");
53
+ const isNeeded = props.some(needsShapeChecks);
54
+ const [loaded, setLoaded] = useState();
55
+ useEffect(() => {
56
+ if (!isNeeded)
57
+ return;
58
+ let isCurrent = true;
59
+ void import("./argChecks.js")
60
+ .then(({ loadedChecks }) => loadedChecks(names === "" ? [] : names.split("\n"), loaders ?? NO_ARG_CONTROLS))
61
+ .then((checks) => {
62
+ if (isCurrent)
63
+ setLoaded({ names, checks });
64
+ });
65
+ return () => {
66
+ isCurrent = false;
67
+ };
68
+ }, [isNeeded, names, loaders]);
69
+ return loaded?.names === names ? loaded.checks : undefined;
70
+ };
41
71
  /**
42
72
  * The address's values, checked against what the story declares.
43
73
  *
44
74
  * @param input - the address's values and what the stage knows of the story.
45
75
  */
46
76
  export const useAddressArgs = (input) => {
47
- const { panelArgs, docs, storyArgs, argTypes, controls, frames } = input;
77
+ const { panelArgs, link, docs, storyArgs, argTypes, controls, frames } = input;
78
+ const typeValue = link?.typeValue;
48
79
  const namedValues = input.namedValues ?? NO_NAMED_VALUES;
49
- const checked = useMemo(() => {
80
+ const declaration = useMemo(() => {
50
81
  const ready = storyArgs === undefined ? undefined : { args: storyArgs, argTypes, controls };
51
- const declaration = declarationOf(docs, ready, namedValues);
52
- return declaration === undefined ? undefined : checkedAddressArgs(panelArgs, declaration);
53
- }, [panelArgs, docs, storyArgs, argTypes, controls, namedValues]);
82
+ return declarationOf(docs, ready, namedValues);
83
+ }, [docs, storyArgs, argTypes, controls, namedValues]);
84
+ const checks = useArgChecks(declaration, input.argControls);
85
+ const checked = useMemo(() => {
86
+ if (declaration === undefined)
87
+ return undefined;
88
+ const read = checkedAddressArgs(panelArgs, declaration, typeValue, checks);
89
+ // nothing is told of the address until all of it can be: a story must not draw half a link
90
+ return read.isWaiting ? undefined : read;
91
+ }, [panelArgs, typeValue, declaration, checks]);
54
92
  const acceptedParam = checked === undefined ? undefined : panelArgsParam(checked.accepted);
55
93
  // the values reach the frames from the address, so going back in the history sets them too; compared as text, so a
56
94
  // frame is told again only when they change
@@ -61,14 +99,21 @@ export const useAddressArgs = (input) => {
61
99
  return;
62
100
  tellFrames(frames.current, checkedArgsMessage(sealedRef.current));
63
101
  }, [acceptedParam, frames]);
102
+ // said with the check's: the note's button keeps what the story accepts, which is not known before
103
+ const unread = (link?.unread ?? []).map((name) => ({ name, reason: "unreadable" }));
104
+ const refused = (link?.refused ?? []).map((name) => ({ name, reason: "markup" }));
64
105
  return {
65
106
  accepted: checked?.accepted ?? NO_ARGS,
66
107
  checked: checked?.sealed,
67
- dropped: checked?.dropped ?? NOTHING_DROPPED,
108
+ dropped: checked === undefined ? NOTHING_DROPPED : [...unread, ...refused, ...checked.dropped],
68
109
  acceptedParam,
69
110
  acceptedFor: (message) => {
70
- const declaration = declarationOf(docs, message, namedValues);
71
- return declaration === undefined ? undefined : checkedAddressArgs(panelArgs, declaration).sealed;
72
- }
111
+ const ready = declarationOf(docs, message, namedValues);
112
+ if (ready === undefined)
113
+ return undefined;
114
+ const read = checkedAddressArgs(panelArgs, ready, typeValue, checks);
115
+ return read.isWaiting ? undefined : read.sealed;
116
+ },
117
+ worstOfShape: checks?.worstOfShape
73
118
  };
74
119
  };
@@ -8,7 +8,7 @@ import { useEffect, useRef } from "react";
8
8
  import { pressedControl } from "../controlKeys.js";
9
9
  import { useCatalogue } from "./catalogueContext.js";
10
10
  import { cycledView } from "./controlCycle.js";
11
- import { isTyping } from "./keyboard.js";
11
+ import { isSingleKeyFree } from "./keyboard.js";
12
12
  /**
13
13
  * Listens to the controls' keys.
14
14
  *
@@ -21,7 +21,7 @@ export const useControlKeys = (input) => {
21
21
  latest.current = input;
22
22
  useEffect(() => {
23
23
  const cycle = (event) => {
24
- if (isTyping(event.target))
24
+ if (!isSingleKeyFree(event))
25
25
  return;
26
26
  const { keys, view, onViewChange, fixed, isStoryPage, isComponentPage } = latest.current;
27
27
  const pressed = pressedControl(keys, {
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The problems to show.
3
+ *
4
+ * @param problems - the index's problems, as the page read them.
5
+ */
6
+ export declare const useEditedProblems: (problems: readonly string[]) => readonly string[];
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The index's problems as a dev server's edits leave them: a story file that an edit left unreadable, or a component
3
+ * that no longer parses, is named at once, without a reload that would take its story away from the reader, and no
4
+ * longer once a later edit fixed it.
5
+ *
6
+ * @module
7
+ */
8
+ import { useEffect, useMemo, useState } from "react";
9
+ import { STORY_FILE_READ_EVENT, storyFileReadOf } from "../hotModules.js";
10
+ /** No file an edit told of. */
11
+ const NONE = new Map();
12
+ /**
13
+ * The problems to show.
14
+ *
15
+ * @param problems - the index's problems, as the page read them.
16
+ */
17
+ export const useEditedProblems = (problems) => {
18
+ const [edited, setEdited] = useState(NONE);
19
+ useEffect(() => {
20
+ // a build has no edits
21
+ if (import.meta.hot === undefined)
22
+ return undefined;
23
+ const follow = (event) => {
24
+ const read = storyFileReadOf(event);
25
+ if (read === undefined)
26
+ return;
27
+ setEdited((before) => {
28
+ // a fix is kept too: it takes away what the page read of the file (a component that did not parse)
29
+ return new Map(before).set(read.file, read.problem);
30
+ });
31
+ };
32
+ window.addEventListener(STORY_FILE_READ_EVENT, follow);
33
+ return () => window.removeEventListener(STORY_FILE_READ_EVENT, follow);
34
+ }, []);
35
+ // an edit's word on a file replaces what the page read of it: the problem names its file first
36
+ return useMemo(() => {
37
+ const kept = problems.filter((problem) => ![...edited.keys()].some((file) => problem.startsWith(file)));
38
+ return [...kept, ...[...edited.values()].filter((problem) => problem !== undefined)];
39
+ }, [problems, edited]);
40
+ };
@@ -38,6 +38,9 @@ const onFrameMessage = (message, frame, targets) => {
38
38
  if (address !== undefined)
39
39
  targets.setHeight(address, message.height);
40
40
  return;
41
+ case "forgebook:scheme":
42
+ frame.style.colorScheme = message.scheme;
43
+ return;
41
44
  case "forgebook:error":
42
45
  handlers.onFailed?.(message.storyId, message.message);
43
46
  return;
@@ -0,0 +1,13 @@
1
+ import type { taggedTree } from "../storyTags.ts";
2
+ import type { StoryTree } from "../storyTree.ts";
3
+ /** The filter, set by the tag filter's button, which loads its code: read during a render, never waited for. */
4
+ export declare const loadedTagFilter: {
5
+ current?: typeof taggedTree;
6
+ };
7
+ /**
8
+ * The tree to list.
9
+ *
10
+ * @param tree - the whole tree.
11
+ * @param tags - the address's tags; none lists the whole tree.
12
+ */
13
+ export declare const useListedTree: (tree: StoryTree, tags: readonly string[]) => StoryTree;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The tree the sidebar and the story keys list: the whole one, or what the address's tags keep of it.
3
+ *
4
+ * @remarks
5
+ * The filter's code loads only when an address names a tag, or with the tag filter's button, which hands it over
6
+ * (`loadedTagFilter`) so the render that puts a checked tag in the address is already filtered. A catalogue nobody
7
+ * filters pays for a question and not for its answer. Opened on an address that names a tag, the whole tree shows
8
+ * until the code arrives, as the search's tree does before its list comes.
9
+ *
10
+ * @module
11
+ */
12
+ import { useEffect, useMemo, useState } from "react";
13
+ /** The filter, set by the tag filter's button, which loads its code: read during a render, never waited for. */
14
+ export const loadedTagFilter = {};
15
+ /**
16
+ * The tree to list.
17
+ *
18
+ * @param tree - the whole tree.
19
+ * @param tags - the address's tags; none lists the whole tree.
20
+ */
21
+ export const useListedTree = (tree, tags) => {
22
+ const [filter, setFilter] = useState();
23
+ const isFiltered = tags.length > 0;
24
+ useEffect(() => {
25
+ if (isFiltered)
26
+ void import("../storyTags.js").then((module) => setFilter(() => module.taggedTree));
27
+ }, [isFiltered]);
28
+ return useMemo(() => {
29
+ const loaded = filter ?? loadedTagFilter.current;
30
+ return isFiltered && loaded !== undefined ? loaded(tree, tags) : tree;
31
+ }, [filter, isFiltered, tree, tags]);
32
+ };
@@ -20,9 +20,9 @@ import { useLiveView, useLoadedView } from "./useLiveView.js";
20
20
  export const usePageFrames = ({ stories, queued, pageRef, view, touchOverrides }) => {
21
21
  // each story's own args, as its frame reports them: the code of a story drawn from its args is written from them
22
22
  const [storyArgs, setStoryArgs] = useState(new Map());
23
- // the frames keep the view they loaded with; only the style sheets load them again, the rest of the view (the
23
+ // the frames keep the view they loaded with; only the style sheets and the play switch load them again, the rest of the view (the
24
24
  // switches, the language among them) is sent to them live
25
- const frameView = useLoadedView(view.sheets, view);
25
+ const frameView = useLoadedView(`${view.sheets}|${view.play}`, view);
26
26
  const catalogue = useCatalogue();
27
27
  // each story meant for a phone (marked so, or shown in a device touched with a finger) with its own finger: its frame
28
28
  // gets it in place of the toolbar's Touch
@@ -25,6 +25,11 @@ export type Popover = {
25
25
  readonly setIsOpen: (isOpen: boolean, press?: {
26
26
  readonly detail: number;
27
27
  }) => void;
28
+ /**
29
+ * Closes the panel after a choice in it was taken by the pointer. The arrow keys choose as they move: a panel that
30
+ * closed on the first would keep every choice past the next one out of reach, so with the keys Escape closes it.
31
+ */
32
+ readonly closeAfterChoice: () => void;
28
33
  /** The button. */
29
34
  readonly buttonRef: RefObject<HTMLButtonElement | null>;
30
35
  /** The panel. */
@@ -27,6 +27,7 @@ export const usePopover = () => {
27
27
  const panelRef = useRef(null);
28
28
  const closing = useRef(undefined);
29
29
  const isByPointer = useRef(false);
30
+ const isLastInputKey = useRef(false);
30
31
  const panelId = useId();
31
32
  const setIsOpen = (isOpening, press) => {
32
33
  const panel = panelRef.current;
@@ -60,6 +61,10 @@ export const usePopover = () => {
60
61
  // a cancelled closing (opened again) leaves the panel open
61
62
  .catch(() => undefined);
62
63
  };
64
+ const closeAfterChoice = () => {
65
+ if (!isLastInputKey.current)
66
+ setIsOpen(false);
67
+ };
63
68
  // it grows in from its button's corner as it is drawn
64
69
  useLayoutEffect(() => {
65
70
  const panel = panelRef.current;
@@ -76,6 +81,7 @@ export const usePopover = () => {
76
81
  return;
77
82
  panelRef.current?.querySelector("input:checked")?.focus();
78
83
  const close = (event) => {
84
+ isLastInputKey.current = event instanceof KeyboardEvent;
79
85
  const target = event.target instanceof Node ? event.target : null;
80
86
  const isOutside = event instanceof PointerEvent &&
81
87
  !panelRef.current?.contains(target) &&
@@ -95,5 +101,5 @@ export const usePopover = () => {
95
101
  document.removeEventListener("keydown", close);
96
102
  };
97
103
  }, [isOpen]);
98
- return { isOpen, isDrawn, setIsOpen, buttonRef, panelRef, panelId };
104
+ return { isOpen, isDrawn, setIsOpen, closeAfterChoice, buttonRef, panelRef, panelId };
99
105
  };
@@ -0,0 +1,22 @@
1
+ import type { CatalogueRef, RefIndex } from "../catalogueRefs.ts";
2
+ /** A composed catalogue's index: loading, read, or why it could not be. */
3
+ export type RefIndexState = {
4
+ readonly status: "loading";
5
+ } | {
6
+ readonly status: "ready";
7
+ readonly index: RefIndex;
8
+ } | {
9
+ readonly status: "error";
10
+ readonly message: string;
11
+ };
12
+ /**
13
+ * A composed catalogue's index, fetched once it is wanted (its section open, one of its stories shown).
14
+ *
15
+ * @remarks
16
+ * What a load ended with is kept with the address it was for, so another catalogue's index never stands in for this
17
+ * one's while its own loads: two catalogues built from one library share story ids.
18
+ *
19
+ * @param ref - the composed catalogue; none when there is none to read.
20
+ * @param isWanted - whether it is wanted yet.
21
+ */
22
+ export declare const useRefIndex: (ref: CatalogueRef | undefined, isWanted: boolean) => RefIndexState;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * A composed catalogue's index as a state the shell can show: loading, read, or why it failed.
3
+ *
4
+ * @module
5
+ */
6
+ import { useEffect, useState } from "react";
7
+ import { loadRefIndex } from "./refIndexLoad.js";
8
+ /** Before any load ended. */
9
+ const LOADING = { status: "loading" };
10
+ /**
11
+ * A composed catalogue's index, fetched once it is wanted (its section open, one of its stories shown).
12
+ *
13
+ * @remarks
14
+ * What a load ended with is kept with the address it was for, so another catalogue's index never stands in for this
15
+ * one's while its own loads: two catalogues built from one library share story ids.
16
+ *
17
+ * @param ref - the composed catalogue; none when there is none to read.
18
+ * @param isWanted - whether it is wanted yet.
19
+ */
20
+ export const useRefIndex = (ref, isWanted) => {
21
+ const [settled, setSettled] = useState(undefined);
22
+ useEffect(() => {
23
+ if (ref === undefined || !isWanted)
24
+ return;
25
+ let isCurrent = true;
26
+ const settle = (state) => {
27
+ if (isCurrent)
28
+ setSettled({ url: ref.url, state });
29
+ };
30
+ loadRefIndex(ref).then((index) => settle({ status: "ready", index }), (error) => settle({ status: "error", message: error instanceof Error ? error.message : String(error) }));
31
+ return () => {
32
+ isCurrent = false;
33
+ };
34
+ }, [ref, isWanted]);
35
+ return settled !== undefined && settled.url === ref?.url ? settled.state : LOADING;
36
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Tab stops for what scrolls sideways: a part with nothing of its own to focus can only be scrolled by a keyboard from a
3
+ * stop on the part itself.
4
+ *
5
+ * @remarks
6
+ * A part takes a stop only while it overflows: on a wide window, where a code block or a props table fits, a stop would
7
+ * be one more press on the way through the page with nothing to do there. The parts are read again whenever the root
8
+ * changes size: the window narrowed, a fold opened, the fonts arrived.
9
+ *
10
+ * @module
11
+ */
12
+ import { type RefObject } from "react";
13
+ /**
14
+ * Gives the parts of an element that overflow sideways a Tab stop, and takes it back when they fit.
15
+ *
16
+ * @param selector - the parts, inside the element; the element itself when absent.
17
+ * @param content - what the parts are drawn from, when it can change with no change of the element's size.
18
+ * @returns the ref for the element.
19
+ */
20
+ export declare const useScrollStops: (selector?: string, content?: string) => RefObject<HTMLDivElement | null>;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Tab stops for what scrolls sideways: a part with nothing of its own to focus can only be scrolled by a keyboard from a
3
+ * stop on the part itself.
4
+ *
5
+ * @remarks
6
+ * A part takes a stop only while it overflows: on a wide window, where a code block or a props table fits, a stop would
7
+ * be one more press on the way through the page with nothing to do there. The parts are read again whenever the root
8
+ * changes size: the window narrowed, a fold opened, the fonts arrived.
9
+ *
10
+ * @module
11
+ */
12
+ import { useEffect, useRef } from "react";
13
+ /**
14
+ * Gives the parts of an element that overflow sideways a Tab stop, and takes it back when they fit.
15
+ *
16
+ * @param selector - the parts, inside the element; the element itself when absent.
17
+ * @param content - what the parts are drawn from, when it can change with no change of the element's size.
18
+ * @returns the ref for the element.
19
+ */
20
+ export const useScrollStops = (selector, content) => {
21
+ const rootRef = useRef(null);
22
+ // biome-ignore lint/correctness/useExhaustiveDependencies: `content` replaces the parts, whose stops go with them
23
+ useEffect(() => {
24
+ const root = rootRef.current;
25
+ if (root === null)
26
+ return;
27
+ const update = () => {
28
+ const parts = selector === undefined ? [root] : root.querySelectorAll(selector);
29
+ for (const part of parts) {
30
+ if (part.scrollWidth > part.clientWidth)
31
+ part.tabIndex = 0;
32
+ else
33
+ part.removeAttribute("tabindex");
34
+ }
35
+ };
36
+ const observer = new ResizeObserver(update);
37
+ observer.observe(root);
38
+ return () => observer.disconnect();
39
+ }, [selector, content]);
40
+ return rootRef;
41
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The list of the shell's keys: `?` opens it anywhere the shell's keys work, or the menu at the sidebar's foot.
3
+ *
4
+ * @remarks
5
+ * Only the key and whether it is open sit in the first load; the list comes with its first opening.
6
+ *
7
+ * @module
8
+ */
9
+ import { type ReactNode } from "react";
10
+ /** What the shell wires to the list. */
11
+ export type ShortcutHelp = {
12
+ /** The list, while it is open. */
13
+ readonly help: ReactNode;
14
+ /** Opens it. */
15
+ readonly showHelp: () => void;
16
+ };
17
+ /** Listens to the key that opens the list, and holds whether it is open. */
18
+ export declare const useShortcutHelp: () => ShortcutHelp;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * The list of the shell's keys: `?` opens it anywhere the shell's keys work, or the menu at the sidebar's foot.
4
+ *
5
+ * @remarks
6
+ * Only the key and whether it is open sit in the first load; the list comes with its first opening.
7
+ *
8
+ * @module
9
+ */
10
+ import { useEffect, useState } from "react";
11
+ import { isSingleKeyFree } from "./keyboard.js";
12
+ import { LazyView, lazyModule } from "./lazyModule.js";
13
+ /** The list, loaded when first opened. */
14
+ const SHORTCUT_HELP = lazyModule(() => import("./ShortcutHelp.js").then((module) => module.ShortcutHelp));
15
+ /** Listens to the key that opens the list, and holds whether it is open. */
16
+ export const useShortcutHelp = () => {
17
+ const [isOpen, setIsOpen] = useState(false);
18
+ useEffect(() => {
19
+ const open = (event) => {
20
+ if (event.key !== "?" || event.metaKey || event.ctrlKey || event.altKey || !isSingleKeyFree(event))
21
+ return;
22
+ event.preventDefault();
23
+ setIsOpen(true);
24
+ };
25
+ document.addEventListener("keydown", open);
26
+ return () => document.removeEventListener("keydown", open);
27
+ }, []);
28
+ return {
29
+ help: isOpen ? (_jsx(LazyView, { module: SHORTCUT_HELP, props: { onClose: () => setIsOpen(false) }, loading: null, failed: () => null })) : null,
30
+ showHelp: () => setIsOpen(true)
31
+ };
32
+ };
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * What a sidebar lying over the page does beyond its look: Escape closes it, the focus moves into it as it opens and back
3
3
  * to the button that shows it as it closes. The page behind is made inert by the shell, and a tap on the shade closes it.
4
+ * Beside the page, on a wide window, the focus only follows the button it stood on, which goes away with the press.
4
5
  *
5
6
  * @module
6
7
  */
@@ -26,7 +27,7 @@ export type SidebarOverlayState = {
26
27
  readonly onClose: () => void;
27
28
  };
28
29
  /**
29
- * Wires a sidebar lying over the page; nothing on a wide window, where the sidebar sits beside it.
30
+ * Wires a sidebar lying over the page, and the focus of one beside it on a wide window.
30
31
  *
31
32
  * @param state - the sidebar's state.
32
33
  * @returns whether it lies over the page, and the references to give the sidebar and its buttons.
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * What a sidebar lying over the page does beyond its look: Escape closes it, the focus moves into it as it opens and back
3
3
  * to the button that shows it as it closes. The page behind is made inert by the shell, and a tap on the shade closes it.
4
+ * Beside the page, on a wide window, the focus only follows the button it stood on, which goes away with the press.
4
5
  *
5
6
  * @module
6
7
  */
7
8
  import { useEffect, useRef } from "react";
8
9
  /**
9
- * Wires a sidebar lying over the page; nothing on a wide window, where the sidebar sits beside it.
10
+ * Wires a sidebar lying over the page, and the focus of one beside it on a wide window.
10
11
  *
11
12
  * @param state - the sidebar's state.
12
13
  * @returns whether it lies over the page, and the references to give the sidebar and its buttons.
@@ -32,20 +33,27 @@ export const useSidebarOverlay = ({ isOverlay, isOpen, onClose }) => {
32
33
  return () => document.removeEventListener("keydown", closeOnEscape);
33
34
  }, [isOver, onClose]);
34
35
  const wasOver = useRef(false);
35
- // biome-ignore lint/correctness/useExhaustiveDependencies: also looked at when the window crosses the width, and never when a wide window's sidebar is hidden, which leaves the focus alone
36
+ const wasOpen = useRef(isOpen);
37
+ // also looked at when the window crosses the width
36
38
  useEffect(() => {
37
39
  const focused = document.activeElement;
38
40
  const isFocusInSidebar = sidebarRef.current?.contains(focused) === true;
41
+ const isFocusNowhere = focused === document.body || focused === null;
39
42
  // the platform's search key has already put the focus on the search field
40
43
  if (isOver && !isFocusInSidebar)
41
44
  hideButtonRef.current?.focus({ preventScroll: true });
45
+ // shown beside the page, the sidebar took away the button that showed it, and Tab would start over from the top
46
+ if (isOpen && !wasOpen.current && !isOverlay && isFocusNowhere) {
47
+ hideButtonRef.current?.focus({ preventScroll: true });
48
+ }
42
49
  // the sidebar went away with the focus in it, closed or by the window crossing the width; one still shown keeps the
43
50
  // focus, and a search's result that has already taken it to what it found keeps it too
44
- const isFocusLost = isFocusInSidebar || (wasOver.current && (focused === document.body || focused === null));
51
+ const isFocusLost = isFocusInSidebar || (wasOver.current && isFocusNowhere);
45
52
  if (!isOver && sidebarRef.current?.inert === true && isFocusLost) {
46
53
  showButtonRef.current?.focus({ preventScroll: true });
47
54
  }
48
55
  wasOver.current = isOver;
49
- }, [isOver, isOverlay]);
56
+ wasOpen.current = isOpen;
57
+ }, [isOver, isOverlay, isOpen]);
50
58
  return { isOver, sidebarRef, hideButtonRef, showButtonRef };
51
59
  };
@@ -1,5 +1,6 @@
1
1
  /**
2
- * A story file's code for the Code card: each story's `render` as written, loaded from the source's `code`.
2
+ * A story file's code for the Code card: each story's `render`, or the args it writes as code, as written, loaded from
3
+ * the source's `code`.
3
4
  *
4
5
  * @module
5
6
  */
@@ -1,12 +1,17 @@
1
1
  import { useLoaded } from "./useLoaded.js";
2
- /** Whether a value is one story's code: its text and its HTML. */
3
- const isStoryCode = (value) => typeof value === "object" &&
2
+ /** Whether a value is a record of texts, as a story's written args are. */
3
+ const isTexts = (value) => typeof value === "object" &&
4
4
  value !== null &&
5
- "text" in value &&
6
- typeof value.text === "string" &&
7
- "html" in value &&
8
- typeof value.html === "string";
9
- /** Whether the plugin's answer is a file's code: each story's text and HTML, by export name. */
5
+ Object.values(value).every((each) => typeof each === "string");
6
+ /** Whether a value is one story's code: its render's text and HTML, or the args it writes as code. */
7
+ const isStoryCode = (value) => {
8
+ if (typeof value !== "object" || value === null)
9
+ return false;
10
+ if ("args" in value)
11
+ return isTexts(value.args);
12
+ return ("text" in value && typeof value.text === "string" && "html" in value && typeof value.html === "string");
13
+ };
14
+ /** Whether the plugin's answer is a file's code: each story's, by export name. */
10
15
  const isStoryFileCode = (value) => typeof value === "object" &&
11
16
  value !== null &&
12
17
  !("error" in value) &&
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @module
7
7
  */
8
- import { type ControlKeys } from "../controlKeys.ts";
8
+ import { type ControlKeys, type ReaderKeys } from "../controlKeys.ts";
9
9
  import { type PlacedControl } from "../toolbarLayout.ts";
10
10
  /** The arrangement and what changes it. */
11
11
  export type ToolbarLayout = {
@@ -34,5 +34,9 @@ export type ToolbarLayout = {
34
34
  */
35
35
  readonly setKey: (id: string, key: string | null) => string | undefined;
36
36
  };
37
+ /** The person's keys a stored text holds; none for anything else. */
38
+ export declare const readKeys: (stored: string | null) => ReaderKeys;
39
+ /** The text the person's keys are stored as; empty for none. */
40
+ export declare const keysText: (keys: ReaderKeys) => string;
37
41
  /** The person's arrangement of the toolbar. */
38
42
  export declare const useToolbarLayout: () => ToolbarLayout;
@@ -10,7 +10,7 @@ import { arrangementOf, arrangementText, placedControls, readArrangement, withHi
10
10
  import { useCatalogue } from "./catalogueContext.js";
11
11
  import { useStored } from "./useStored.js";
12
12
  /** The person's keys a stored text holds; none for anything else. */
13
- const readKeys = (stored) => {
13
+ export const readKeys = (stored) => {
14
14
  if (stored === null || stored === "")
15
15
  return {};
16
16
  try {
@@ -24,7 +24,7 @@ const readKeys = (stored) => {
24
24
  }
25
25
  };
26
26
  /** The text the person's keys are stored as; empty for none. */
27
- const keysText = (keys) => (Object.keys(keys).length === 0 ? "" : JSON.stringify(keys));
27
+ export const keysText = (keys) => Object.keys(keys).length === 0 ? "" : JSON.stringify(keys);
28
28
  /** The person's arrangement of the toolbar. */
29
29
  export const useToolbarLayout = () => {
30
30
  const catalogue = useCatalogue();
@@ -11,7 +11,9 @@
11
11
  */
12
12
  import { type RefObject } from "react";
13
13
  import type { PanelProp } from "../argTypes.ts";
14
- import type { PanelArgs } from "../messages.ts";
14
+ import type { ArgValue, PanelArgs } from "../messages.ts";
15
+ import type { NamedValues } from "../namedValues.ts";
16
+ import type { ValueShape } from "../valueShape.ts";
15
17
  import { type WorstCaseState } from "./worstArgs.ts";
16
18
  /** What the hook reads. */
17
19
  export type WorstCaseInput = {
@@ -25,6 +27,10 @@ export type WorstCaseInput = {
25
27
  readonly values: PanelArgs;
26
28
  /** The panel's own values. */
27
29
  readonly panelArgs: PanelArgs;
30
+ /** The source's named values, for a required part only they can fill. */
31
+ readonly namedValues: NamedValues | undefined;
32
+ /** Gives a prop with a shape its worst value, once its module loaded. */
33
+ readonly worstOfShape: ((shape: ValueShape, namedValues: NamedValues) => ArgValue | undefined) | undefined;
28
34
  /** Sets the panel's values. */
29
35
  readonly onPanelArgsChange: (args: PanelArgs) => void;
30
36
  };
@@ -42,4 +48,4 @@ export type WorstCase = {
42
48
  *
43
49
  * @param input - the frames, the story, its settable props and its values.
44
50
  */
45
- export declare const useWorstCase: ({ storyRef, storyId, settable, values, panelArgs, onPanelArgsChange }: WorstCaseInput) => WorstCase;
51
+ export declare const useWorstCase: ({ storyRef, storyId, settable, values, panelArgs, namedValues, worstOfShape, onPanelArgsChange }: WorstCaseInput) => WorstCase;
@@ -24,8 +24,8 @@ const mostOf = (frames) => frames === undefined || frames.size === 0 ? undefined
24
24
  *
25
25
  * @param input - the frames, the story, its settable props and its values.
26
26
  */
27
- export const useWorstCase = ({ storyRef, storyId, settable, values, panelArgs, onPanelArgsChange }) => {
28
- const args = useMemo(() => worstArgs(settable), [settable]);
27
+ export const useWorstCase = ({ storyRef, storyId, settable, values, panelArgs, namedValues, worstOfShape, onPanelArgsChange }) => {
28
+ const args = useMemo(() => worstArgs(settable, namedValues, worstOfShape), [settable, namedValues, worstOfShape]);
29
29
  const isOn = isWorstCase(args, values);
30
30
  // each frame's count, by story then by frame: the compare view draws a story in several
31
31
  const [counts, setCounts] = useState(new Map());