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
@@ -0,0 +1,196 @@
1
+ import { isArgList, isArgObject } from "./messages.js";
2
+ /** Whether a value is a plain object. */
3
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
4
+ /** The keywords a schema may use. */
5
+ const KEYWORDS = [
6
+ "title",
7
+ "description",
8
+ "default",
9
+ "type",
10
+ "enum",
11
+ "const",
12
+ "minimum",
13
+ "maximum",
14
+ "minLength",
15
+ "maxLength",
16
+ "pattern",
17
+ "items",
18
+ "minItems",
19
+ "maxItems",
20
+ "properties",
21
+ "required",
22
+ "additionalProperties",
23
+ "anyOf"
24
+ ];
25
+ /** The types JSON Schema names. */
26
+ const SCHEMA_TYPES = [
27
+ "string",
28
+ "number",
29
+ "integer",
30
+ "boolean",
31
+ "null",
32
+ "object",
33
+ "array"
34
+ ];
35
+ /** Whether a keyword holds a number, when it is there: one that holds another thing would refuse nothing. */
36
+ const areNumbers = (schema, keywords) => keywords.every((keyword) => schema[keyword] === undefined || typeof schema[keyword] === "number");
37
+ /** Whether a pattern compiles, and repeats no repeat (`(a+)+`), the form that hangs a page on a short text. */
38
+ const isUsablePattern = (pattern) => {
39
+ if (pattern === undefined)
40
+ return true;
41
+ if (typeof pattern !== "string" || /\([^)]*[+*}][^)]*\)[+*{]/.test(pattern))
42
+ return false;
43
+ try {
44
+ return new RegExp(pattern, "u") !== undefined;
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ };
50
+ /** Whether a keyword holding one schema, or several, holds schemas. */
51
+ const areNested = (value) => {
52
+ const { items, properties, additionalProperties, anyOf } = value;
53
+ return ((items === undefined || isValueSchema(items)) &&
54
+ (properties === undefined || (isRecord(properties) && Object.values(properties).every(isValueSchema))) &&
55
+ (additionalProperties === undefined ||
56
+ typeof additionalProperties === "boolean" ||
57
+ isValueSchema(additionalProperties)) &&
58
+ (anyOf === undefined || (Array.isArray(anyOf) && anyOf.every(isValueSchema))));
59
+ };
60
+ /** Whether the keywords of one level hold what they say. */
61
+ const areLeavesRead = (value) => {
62
+ const { type, required } = value;
63
+ const types = type === undefined ? [] : [type].flat();
64
+ return (types.every((each) => SCHEMA_TYPES.includes(each)) &&
65
+ (value["enum"] === undefined || Array.isArray(value["enum"])) &&
66
+ (required === undefined ||
67
+ (Array.isArray(required) && required.every((name) => typeof name === "string"))) &&
68
+ areNumbers(value, ["minimum", "maximum", "minLength", "maxLength", "minItems", "maxItems"]) &&
69
+ isUsablePattern(value["pattern"]));
70
+ };
71
+ /**
72
+ * Whether a module's `schema` is one this check reads in full, at any depth: a keyword it does not know, or one holding what
73
+ * it cannot use, would let through what the schema seems to refuse.
74
+ *
75
+ * @param value - the module's export.
76
+ */
77
+ export const isValueSchema = (value) => isRecord(value) &&
78
+ Object.keys(value).every((key) => KEYWORDS.includes(key)) &&
79
+ areLeavesRead(value) &&
80
+ areNested(value);
81
+ /** Whether a value is of one of JSON Schema's types. */
82
+ const isOfType = (type, value) => {
83
+ switch (type) {
84
+ case "string":
85
+ case "boolean":
86
+ return typeof value === type;
87
+ case "number":
88
+ return typeof value === "number" && Number.isFinite(value);
89
+ case "integer":
90
+ return Number.isInteger(value);
91
+ case "null":
92
+ return value === null;
93
+ case "array":
94
+ return isArgList(value);
95
+ case "object":
96
+ return isArgObject(value);
97
+ }
98
+ };
99
+ /** Whether two values are the same JSON, whatever order an object writes its fields in. */
100
+ const isSameValue = (left, right) => {
101
+ if (Array.isArray(left) && Array.isArray(right))
102
+ return left.length === right.length && left.every((each, index) => isSameValue(each, right[index]));
103
+ if (!isRecord(left) || !isRecord(right))
104
+ return left === right;
105
+ const names = Object.keys(left);
106
+ return (names.length === Object.keys(right).length &&
107
+ names.every((name) => Object.hasOwn(right, name) && isSameValue(left[name], right[name])));
108
+ };
109
+ /** What is wrong with a value's own kind: its type and the values it may be. */
110
+ const kindProblem = (schema, value, path) => {
111
+ const types = schema.type === undefined ? [] : [schema.type].flat();
112
+ if (types.length > 0 && !types.some((type) => isOfType(type, value)))
113
+ return `${path} must be of type ${types.join(" or ")}`;
114
+ if (schema.enum !== undefined && !schema.enum.some((each) => isSameValue(each, value)))
115
+ return `${path} must be one of ${JSON.stringify(schema.enum)}`;
116
+ return schema.const !== undefined && !isSameValue(schema.const, value)
117
+ ? `${path} must be ${JSON.stringify(schema.const)}`
118
+ : undefined;
119
+ };
120
+ /** What is wrong with a number or a text. */
121
+ const leafProblem = (schema, value, path) => {
122
+ if (typeof value === "number") {
123
+ if (schema.minimum !== undefined && value < schema.minimum)
124
+ return `${path} must be at least ${schema.minimum}`;
125
+ if (schema.maximum !== undefined && value > schema.maximum)
126
+ return `${path} must be at most ${schema.maximum}`;
127
+ }
128
+ if (typeof value !== "string")
129
+ return undefined;
130
+ // in characters, as JSON Schema counts: an emoji is one
131
+ const { length } = [...value];
132
+ if (schema.minLength !== undefined && length < schema.minLength)
133
+ return `${path} must have at least ${schema.minLength} characters`;
134
+ if (schema.maxLength !== undefined && length > schema.maxLength)
135
+ return `${path} must have at most ${schema.maxLength} characters`;
136
+ return schema.pattern !== undefined && !new RegExp(schema.pattern, "u").test(value)
137
+ ? `${path} must match ${schema.pattern}`
138
+ : undefined;
139
+ };
140
+ /** What is wrong with a list. */
141
+ const listProblem = (schema, value, path) => {
142
+ if (schema.minItems !== undefined && value.length < schema.minItems)
143
+ return `${path} must have at least ${schema.minItems} items`;
144
+ if (schema.maxItems !== undefined && value.length > schema.maxItems)
145
+ return `${path} must have at most ${schema.maxItems} items`;
146
+ const { items } = schema;
147
+ if (items === undefined)
148
+ return undefined;
149
+ return value
150
+ .map((item, index) => problemAt(items, item, `${path}[${index}]`))
151
+ .find((each) => each !== undefined);
152
+ };
153
+ /** What is wrong with an object. */
154
+ const objectProblem = (schema, value, path) => {
155
+ const missing = (schema.required ?? []).find((name) => !Object.hasOwn(value, name));
156
+ if (missing !== undefined)
157
+ return `${path} must have ${missing}`;
158
+ for (const [name, each] of Object.entries(value)) {
159
+ const fieldPath = `${path}.${name}`;
160
+ const declared = schema.properties !== undefined && Object.hasOwn(schema.properties, name);
161
+ const field = declared ? schema.properties?.[name] : schema.additionalProperties;
162
+ if (field === false)
163
+ return `${fieldPath} is not a field it takes`;
164
+ const problem = isRecord(field) ? problemAt(field, each, fieldPath) : undefined;
165
+ if (problem !== undefined)
166
+ return problem;
167
+ }
168
+ return undefined;
169
+ };
170
+ /** What is wrong with a value, at a place in the whole. */
171
+ const problemAt = (schema, value, path) => {
172
+ const problem = kindProblem(schema, value, path) ?? leafProblem(schema, value, path);
173
+ if (problem !== undefined)
174
+ return problem;
175
+ if (schema.anyOf !== undefined && schema.anyOf.every((each) => problemAt(each, value, path) !== undefined))
176
+ return `${path} fits none of its forms`;
177
+ if (isArgList(value))
178
+ return listProblem(schema, value, path);
179
+ return isArgObject(value) ? objectProblem(schema, value, path) : undefined;
180
+ };
181
+ /**
182
+ * What is wrong with a value, in a sentence.
183
+ *
184
+ * @param schema - the control's schema.
185
+ * @param value - the value.
186
+ * @returns the sentence; none when it fits.
187
+ */
188
+ export const schemaProblem = (schema, value) => {
189
+ try {
190
+ return problemAt(schema, value, "the value");
191
+ }
192
+ catch (error) {
193
+ // a pattern that is no regular expression is the control's mistake: no value can be known to fit it
194
+ return error instanceof Error ? error.message : String(error);
195
+ }
196
+ };
@@ -0,0 +1,94 @@
1
+ /**
2
+ * What a prop's value looks like when it is more than one text or number: an object's fields, a list's items, the
3
+ * members of a mixed union. Read from the component's types (`vite/shapeDocs.ts`) or from a story's own arg, it drives
4
+ * the panel's nested fields, the check on a link's values, the worst case and what agents read of a prop.
5
+ *
6
+ * @remarks
7
+ * A shape is plain JSON, so it crosses from the plugin to the page and reaches an agent as it is. A value that fits a
8
+ * shape is plain JSON too, so a link can hold it. What JSON cannot hold (a component, a function, a date) is a `named`
9
+ * leaf: only one of the source's `namedValues` can stand for it. `json` is the way out for what cannot be drawn as
10
+ * fields: any JSON value, typed by hand. This module holds what the first screen needs of a shape; what reads a value
11
+ * against one is `shapeValues.ts`, which loads with the first prop that has a shape. Pure.
12
+ *
13
+ * @module
14
+ */
15
+ import type { ArgValue } from "./messages.ts";
16
+ import type { NamedValues } from "./namedValues.ts";
17
+ /** One field of an object's shape. */
18
+ export type ShapeField = {
19
+ /** The field's name. */
20
+ readonly name: string;
21
+ /** What it holds. */
22
+ readonly shape: ValueShape;
23
+ /** Whether a value must give it. */
24
+ readonly isRequired: boolean;
25
+ /** Whether it may hold `null`. Left out when not. */
26
+ readonly isNullable?: true;
27
+ /** The first paragraph of its TSDoc; left out when it has none. */
28
+ readonly description?: string;
29
+ };
30
+ /** What a value looks like. */
31
+ export type ValueShape = {
32
+ readonly kind: "text";
33
+ } | {
34
+ readonly kind: "number";
35
+ } | {
36
+ readonly kind: "boolean";
37
+ /** The one value it may hold, for one branch of a discriminated union. Left out when it takes both. */
38
+ readonly only?: boolean;
39
+ } | {
40
+ /** One of these values. */
41
+ readonly kind: "choice";
42
+ /** The values, in the order of the type. */
43
+ readonly values: readonly (string | number)[];
44
+ } | {
45
+ /** Any number of items of one shape. */
46
+ readonly kind: "list";
47
+ /** The items' shape. */
48
+ readonly of: ValueShape;
49
+ } | {
50
+ /** A fixed number of items, each of its own shape (`[number, number]`). */
51
+ readonly kind: "tuple";
52
+ /** Each item's shape, in order. */
53
+ readonly items: readonly ValueShape[];
54
+ } | {
55
+ /** Named fields. */
56
+ readonly kind: "object";
57
+ /** The fields, in the order of the source. */
58
+ readonly fields: readonly ShapeField[];
59
+ } | {
60
+ /** Any names, each holding one shape (`Record<string, number>`). */
61
+ readonly kind: "record";
62
+ /** The values' shape. */
63
+ readonly of: ValueShape;
64
+ } | {
65
+ /** One of several shapes, chosen first (`"sm" | number`). */
66
+ readonly kind: "union";
67
+ /** The shapes, in the order of the type. */
68
+ readonly of: readonly ValueShape[];
69
+ } | {
70
+ /** What JSON cannot hold: one of the source's named values, under the type as the source writes it. */
71
+ readonly kind: "named";
72
+ /** The type, as `namedValues` lists it (`IconComponent`). */
73
+ readonly type: string;
74
+ /** Whether a plain text can be given too (a node). Left out when not. */
75
+ readonly canTakeText?: true;
76
+ } | {
77
+ /** A moment: a `Date`, which the story receives as one (`DateArg`). */
78
+ readonly kind: "date";
79
+ } | {
80
+ /** Any JSON: what fields cannot show. */
81
+ readonly kind: "json";
82
+ } | {
83
+ /** What a story's own arg looks like, for an arg no type describes: read from it when it is needed. */
84
+ readonly kind: "like";
85
+ /** The story's own value. */
86
+ readonly value: ArgValue;
87
+ };
88
+ /**
89
+ * Whether the panel can give a shape a value at all: a required part the source names no value for leaves it no way.
90
+ *
91
+ * @param shape - the shape.
92
+ * @param namedValues - the source's named values.
93
+ */
94
+ export declare const canSetShape: (shape: ValueShape, namedValues: NamedValues) => boolean;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Whether the panel can give a shape a value at all: a required part the source names no value for leaves it no way.
3
+ *
4
+ * @param shape - the shape.
5
+ * @param namedValues - the source's named values.
6
+ */
7
+ export const canSetShape = (shape, namedValues) => {
8
+ switch (shape.kind) {
9
+ case "named":
10
+ return (shape.canTakeText === true ||
11
+ (Object.hasOwn(namedValues, shape.type) && Object.keys(namedValues[shape.type] ?? {}).length > 0));
12
+ case "list":
13
+ return canSetShape(shape.of, namedValues);
14
+ case "record":
15
+ return canSetShape(shape.of, namedValues);
16
+ case "tuple":
17
+ return shape.items.every((item) => canSetShape(item, namedValues));
18
+ case "object":
19
+ return shape.fields.every((field) => !field.isRequired || canSetShape(field.shape, namedValues));
20
+ case "union":
21
+ return shape.of.some((member) => canSetShape(member, namedValues));
22
+ default:
23
+ return true;
24
+ }
25
+ };
@@ -13,7 +13,7 @@
13
13
  * @module
14
14
  */
15
15
  import { type AudienceId } from "./audiences.ts";
16
- import type { CatalogueSettings } from "./catalogue.ts";
16
+ import type { CatalogueSettings, PlaySwitch } from "./catalogue.ts";
17
17
  import { type DeviceChoice, type OrientationChoice } from "./deviceView.ts";
18
18
  import { type TouchChoice, type ViewSwitch } from "./switches.ts";
19
19
  /**
@@ -78,6 +78,11 @@ export type ViewState = {
78
78
  readonly device: DeviceChoice;
79
79
  /** How the device is held: the story's own default (`auto`), or one way. */
80
80
  readonly orientation: OrientationChoice;
81
+ /**
82
+ * Whether a story's play function runs when its frame opens. A frame's address says only `off`: one with no word plays,
83
+ * so a test, a check or a tool that opens a frame runs its story's play whatever a reader chose.
84
+ */
85
+ readonly play: PlaySwitch;
81
86
  };
82
87
  /** The part of the view a frame applies on its root without loading again, so the story keeps its state. */
83
88
  export type LiveView = Pick<ViewState, "switches" | "backdrop" | "text">;
@@ -94,7 +99,7 @@ export declare const isComparing: (view: ViewState) => boolean;
94
99
  /** Every tool, in the bar's order. */
95
100
  export declare const MEASURE_TOOLS: readonly MeasureTool[];
96
101
  /** What the view reads of a catalogue: its switches and the lists its values are checked against. */
97
- export type ViewCatalogue = Pick<CatalogueSettings, "switches" | "widthRange" | "zooms" | "textSizes" | "backdrops" | "tabs" | "ownControls" | "audience">;
102
+ export type ViewCatalogue = Pick<CatalogueSettings, "switches" | "widthRange" | "zooms" | "textSizes" | "backdrops" | "tabs" | "ownControls" | "audience" | "readerPlay">;
98
103
  /**
99
104
  * A width kept in a catalogue's range, in whole pixels.
100
105
  *
@@ -135,7 +140,7 @@ export declare const defaultView: (catalogue: ViewCatalogue) => ViewState;
135
140
  * with another, or the link would open that one.
136
141
  * @returns the parameters, in a stable order.
137
142
  */
138
- export declare const viewParams: (view: ViewState, switches: readonly ViewSwitch[], defaultAudience?: AudienceId) => URLSearchParams;
143
+ export declare const viewParams: (view: ViewState, switches: readonly ViewSwitch[], defaultAudience?: AudienceId, defaultPlay?: PlaySwitch) => URLSearchParams;
139
144
  /**
140
145
  * Whether one of the given controls' values is changed (a switch, the background, the style sheets, the text size;
141
146
  * the stage's width is not a view setting): the View menu's button shows a dot for the controls it holds, so a view
@@ -14,11 +14,13 @@
14
14
  */
15
15
  import { AUDIENCE_IDS, DEFAULT_AUDIENCE } from "./audiences.js";
16
16
  import { DEVICE_PARAMETER, isDeviceId, isDeviceOrientation, ORIENTATION_PARAMETER } from "./deviceView.js";
17
- import { switchValueOf, switchWithRole } from "./switches.js";
17
+ import { shownSwitches, switchValueOf, switchWithRole } from "./switches.js";
18
18
  /** The page's own colour: no backdrop drawn. */
19
19
  export const PLAIN_BACKDROP = "plain";
20
20
  /** Forgebook's own settings the compare view can set side by side. */
21
21
  export const OWN_COMPARE_AXES = ["text", "sheets"];
22
+ /** The values of the play switch. */
23
+ const PLAY_SWITCHES = ["on", "off"];
22
24
  /** The view without any change. */
23
25
  export const DEFAULT_VIEW = {
24
26
  switches: {},
@@ -34,7 +36,8 @@ export const DEFAULT_VIEW = {
34
36
  tools: [],
35
37
  audience: DEFAULT_AUDIENCE,
36
38
  device: "auto",
37
- orientation: "auto"
39
+ orientation: "auto",
40
+ play: "on"
38
41
  };
39
42
  /** Every style sheet setting, in the menu's order. */
40
43
  export const SHEETS_CHOICES = ["full", "structure", "restyled"];
@@ -142,7 +145,8 @@ export const parseView = (search, catalogue) => {
142
145
  tools: toolsOf(params.get("tools")),
143
146
  audience: choice(shown("audience"), AUDIENCE_IDS, catalogue.audience),
144
147
  device: deviceChoice(params.get(DEVICE_PARAMETER)),
145
- orientation: orientationChoice(params.get(ORIENTATION_PARAMETER))
148
+ orientation: orientationChoice(params.get(ORIENTATION_PARAMETER)),
149
+ play: choice(params.get("play"), PLAY_SWITCHES, catalogue.readerPlay)
146
150
  };
147
151
  };
148
152
  /**
@@ -180,6 +184,8 @@ const frameParams = (view, switches) => {
180
184
  params.set("text", String(view.text));
181
185
  if (language !== undefined)
182
186
  setSwitch(language);
187
+ if (view.play === "off")
188
+ params.set("play", "off");
183
189
  return params;
184
190
  };
185
191
  /**
@@ -191,8 +197,13 @@ const frameParams = (view, switches) => {
191
197
  * with another, or the link would open that one.
192
198
  * @returns the parameters, in a stable order.
193
199
  */
194
- export const viewParams = (view, switches, defaultAudience = DEFAULT_AUDIENCE) => {
200
+ export const viewParams = (view, switches, defaultAudience = DEFAULT_AUDIENCE, defaultPlay = DEFAULT_VIEW.play) => {
195
201
  const params = frameParams(view, switches);
202
+ // the address says only what differs from the catalogue's default; the frames still hear `off`
203
+ if (view.play === defaultPlay)
204
+ params.delete("play");
205
+ else
206
+ params.set("play", view.play);
196
207
  if (isComparing(view))
197
208
  params.set("compare", view.compare.join(","));
198
209
  if (view.width !== DEFAULT_VIEW.width)
@@ -278,7 +289,7 @@ export const schemeOf = (view, switches) => {
278
289
  const scheme = switchWithRole(switches, "colorScheme");
279
290
  if (scheme === undefined)
280
291
  return "light";
281
- return switchValueOf(scheme, view.switches[scheme.id])?.scheme ?? "light";
292
+ return switchValueOf(scheme, shownSwitches(view.switches, switches)[scheme.id])?.scheme ?? "light";
282
293
  };
283
294
  /**
284
295
  * Whether a view draws in the higher contrast: its contrast switch's value says so; never without one.
@@ -290,7 +301,7 @@ export const isMoreContrastOf = (view, switches) => {
290
301
  const contrast = switchWithRole(switches, "contrast");
291
302
  if (contrast === undefined)
292
303
  return false;
293
- return switchValueOf(contrast, view.switches[contrast.id])?.isMore === true;
304
+ return switchValueOf(contrast, shownSwitches(view.switches, switches)[contrast.id])?.isMore === true;
294
305
  };
295
306
  /**
296
307
  * The language a view shows: the language switch's value, empty for the stories' own text.
@@ -300,7 +311,9 @@ export const isMoreContrastOf = (view, switches) => {
300
311
  */
301
312
  export const languageOf = (view, switches) => {
302
313
  const language = switchWithRole(switches, "language");
303
- return language === undefined ? "" : (view.switches[language.id] ?? language.default);
314
+ return language === undefined
315
+ ? ""
316
+ : (shownSwitches(view.switches, switches)[language.id] ?? language.default);
304
317
  };
305
318
  /**
306
319
  * Whether a view simulates a finger.
@@ -341,11 +354,15 @@ export const withTouchOf = (view, from, choice) => {
341
354
  * @param view - the view's switches.
342
355
  * @param switches - the catalogue's switches.
343
356
  */
344
- export const codeGlobalsOf = (view, switches) => Object.fromEntries(switches
345
- .filter((each) => each.apply.kind === "code" || each.role === "touch")
346
- .map((each) => [each.id, view.switches[each.id] ?? each.default]));
357
+ export const codeGlobalsOf = (view, switches) => {
358
+ const shown = shownSwitches(view.switches, switches);
359
+ return Object.fromEntries(switches
360
+ .filter((each) => each.apply.kind === "code" || each.role === "touch")
361
+ .map((each) => [each.id, shown[each.id] ?? each.default]));
362
+ };
347
363
  /** The parameters only the shell reads: a frame's address leaves them out. */
348
364
  const SHELL_PARAMETERS = [
365
+ "tag",
349
366
  "compare",
350
367
  "width",
351
368
  "height",
@@ -24,6 +24,8 @@ export type StoryComponent = {
24
24
  * can renew the docs.
25
25
  */
26
26
  readonly sources: readonly string[];
27
+ /** Whether its file exports it as its default, which an import then writes without braces; read for `forgebook new`. */
28
+ readonly isDefaultExport?: boolean;
27
29
  };
28
30
  /** What a framework reads of a story file: its component, `{ docs: { name: null } }` without one, or why it cannot. */
29
31
  export type StoryComponentResult = StoryComponent | {
@@ -35,6 +37,11 @@ export type StoryComponentResult = StoryComponent | {
35
37
  * @param storyFile - the story file's absolute path.
36
38
  */
37
39
  export type ExtractStoryComponent = (storyFile: string) => StoryComponentResult;
40
+ /** What a catalogue tells an adapter of how much of the app's build it reads. */
41
+ export type AdapterContext = {
42
+ /** Whether it reads the app's build at all: `false` with `appBuild: false`, when no project code of it may run. */
43
+ readonly readsAppBuild: boolean;
44
+ };
38
45
  /** A framework, as the plugin uses it. */
39
46
  export type FrameworkAdapter = {
40
47
  /** The framework's name, as `forgebook-docs --framework` writes it (`react`). */
@@ -57,8 +64,12 @@ export type FrameworkAdapter = {
57
64
  * opens, since Vite's scanner cannot read pages that are generated; none by default.
58
65
  */
59
66
  readonly browserDependencies?: readonly string[];
60
- /** The Vite plugins the framework needs in a catalogue (React's Fast Refresh); none by default. */
61
- readonly vitePlugins?: () => Promise<readonly PluginOption[]>;
67
+ /**
68
+ * The Vite plugins the framework needs in a catalogue (React's Fast Refresh); none by default. Given what the catalogue
69
+ * reads of the app's build, for an adapter that reads more of it (Nuxt's modules); called with nothing by an older
70
+ * core.
71
+ */
72
+ readonly vitePlugins?: (context?: AdapterContext) => Promise<readonly PluginOption[]>;
62
73
  /** The framework's own kind of component file, for a framework whose components are not all TypeScript; none by default. */
63
74
  readonly componentFiles?: ComponentFiles;
64
75
  /**
@@ -73,6 +84,13 @@ export type FrameworkAdapter = {
73
84
  * program and leaves out the code Vite's plugins add to it (Angular's): an edit of its story files reloads the pages.
74
85
  */
75
86
  readonly redrawsEditedStories?: boolean;
87
+ /**
88
+ * Whether Forgebook compiles the JSX of the project's `.js` files with Vite's JSX options (`jsxInScripts.ts`), as
89
+ * Storybook's webpack builder lets a library write it: `true` for a framework whose JSX Vite's compiler writes
90
+ * (React's, Preact's). `false` by default: for one whose JSX is another compiler's (Solid's), or whose plugins compile
91
+ * such files themselves (React Native Web's, with Flow types).
92
+ */
93
+ readonly compilesJsxInScripts?: boolean;
76
94
  };
77
95
  /**
78
96
  * A framework's own kind of component file (Vue's `.vue`): what the plugin must know of a file that is not TypeScript,
@@ -98,12 +116,32 @@ export type StoryFileShape = {
98
116
  };
99
117
  /** Reads the component a file exports (`forgebook new`): the export named, or the file's only component. */
100
118
  export type ExtractFileComponent = (file: string, exportName?: string) => StoryComponentResult;
119
+ /**
120
+ * One place the application draws a component, as `forgebook new` reads it: the props it gives with a value code can
121
+ * hold as it is (a literal, or a list or an object of literals), each written as source code.
122
+ */
123
+ export type CallSite = {
124
+ /** The file that draws it, absolute. */
125
+ readonly file: string;
126
+ /** Each prop given a literal value, by name, as code (`"danger"`, `3`, `true`, `["a", "b"]`). */
127
+ readonly args: Readonly<Record<string, string>>;
128
+ };
129
+ /**
130
+ * Finds where an application draws a component.
131
+ *
132
+ * @param file - the component's file, absolute.
133
+ * @param name - the name the component is exported by (`default` for a default export).
134
+ * @returns the call sites, in the order of their files; a message when they cannot be read.
135
+ */
136
+ export type ExtractCallSites = (file: string, name: string) => readonly CallSite[] | string;
101
137
  /** A framework's docs module, as the plugin and the commands load it. */
102
138
  export type DocsModule = {
103
139
  /** Reads a story file's component. */
104
140
  readonly extractStoryComponent: ExtractStoryComponent;
105
141
  /** Reads a component a file exports; none in a framework package that does not offer it yet. */
106
142
  readonly extractFileComponent?: ExtractFileComponent;
143
+ /** Finds where the application draws a component, for the values `forgebook new` writes; none when not offered. */
144
+ readonly extractCallSites?: ExtractCallSites;
107
145
  /** The module a story file imports its types from (`@forgebook/react`); none when not given. */
108
146
  readonly storyTypesModule?: string;
109
147
  /**
@@ -21,6 +21,7 @@ export const isDocsModule = (module) => typeof module === "object" &&
21
21
  "extractStoryComponent" in module &&
22
22
  typeof module.extractStoryComponent === "function" &&
23
23
  (!("extractFileComponent" in module) || typeof module.extractFileComponent === "function") &&
24
+ (!("extractCallSites" in module) || typeof module.extractCallSites === "function") &&
24
25
  (!("storyTypesModule" in module) || typeof module.storyTypesModule === "string") &&
25
26
  (!("storyFileShape" in module) || typeof module.storyFileShape === "function") &&
26
27
  (!("sourcesChanged" in module) || typeof module.sourcesChanged === "function");