forgebook 0.3.3 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/README.md +994 -72
  2. package/dist/bin/forgebook/agentClient.d.ts +2 -1
  3. package/dist/bin/forgebook/agentClient.js +13 -6
  4. package/dist/bin/forgebook/agentGuide.d.ts +59 -0
  5. package/dist/bin/forgebook/agentGuide.js +203 -0
  6. package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
  7. package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
  8. package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
  9. package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
  10. package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
  11. package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
  12. package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
  13. package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
  14. package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
  15. package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
  16. package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
  17. package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
  18. package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
  19. package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
  20. package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
  21. package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
  22. package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
  23. package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
  24. package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
  25. package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
  26. package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
  27. package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
  28. package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
  29. package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
  30. package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
  31. package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
  32. package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
  33. package/dist/bin/forgebook/agentText.d.ts +23 -3
  34. package/dist/bin/forgebook/agentText.js +182 -28
  35. package/dist/bin/forgebook/agents.md +20 -191
  36. package/dist/bin/forgebook/agentsText.js +2 -1
  37. package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
  38. package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
  39. package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
  40. package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
  41. package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
  42. package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
  43. package/dist/bin/forgebook/auditCommand.d.mts +8 -0
  44. package/dist/bin/forgebook/auditCommand.mjs +75 -0
  45. package/dist/bin/forgebook/auditRun.d.ts +95 -0
  46. package/dist/bin/forgebook/auditRun.js +270 -0
  47. package/dist/bin/forgebook/browserRun.d.ts +21 -0
  48. package/dist/bin/forgebook/browserRun.js +57 -0
  49. package/dist/bin/forgebook/buildFailure.d.ts +7 -0
  50. package/dist/bin/forgebook/buildFailure.js +47 -0
  51. package/dist/bin/forgebook/buildWatch.d.ts +52 -0
  52. package/dist/bin/forgebook/buildWatch.js +137 -0
  53. package/dist/bin/forgebook/builtCatalogue.js +9 -5
  54. package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
  55. package/dist/bin/forgebook/catalogueCommands.js +23 -0
  56. package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
  57. package/dist/bin/forgebook/catalogueVite.js +14 -6
  58. package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
  59. package/dist/bin/forgebook/commandCacheClaim.js +170 -0
  60. package/dist/bin/forgebook/commandServer.d.ts +8 -0
  61. package/dist/bin/forgebook/commandServer.js +61 -13
  62. package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
  63. package/dist/bin/forgebook/graphCommand.d.mts +8 -0
  64. package/dist/bin/forgebook/graphCommand.mjs +84 -0
  65. package/dist/bin/forgebook/guide/commands.md +62 -0
  66. package/dist/bin/forgebook/guide/devices.md +17 -0
  67. package/dist/bin/forgebook/guide/docs-pages.md +13 -0
  68. package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
  69. package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
  70. package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
  71. package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
  72. package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
  73. package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
  74. package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
  75. package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
  76. package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
  77. package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
  78. package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
  79. package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
  80. package/dist/bin/forgebook/guide/links.md +29 -0
  81. package/dist/bin/forgebook/guide/setup.md +23 -0
  82. package/dist/bin/forgebook/guide/stories.md +95 -0
  83. package/dist/bin/forgebook/guide/switches.md +43 -0
  84. package/dist/bin/forgebook/guideCommand.d.mts +13 -0
  85. package/dist/bin/forgebook/guideCommand.mjs +37 -0
  86. package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
  87. package/dist/bin/forgebook/importers/storybook.js +11 -5
  88. package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
  89. package/dist/bin/forgebook/initCommands.d.mts +11 -0
  90. package/dist/bin/forgebook/initCommands.mjs +51 -78
  91. package/dist/bin/forgebook/initConfig.d.ts +5 -3
  92. package/dist/bin/forgebook/initConfig.js +6 -3
  93. package/dist/bin/forgebook/initInstall.d.ts +15 -0
  94. package/dist/bin/forgebook/initInstall.js +77 -0
  95. package/dist/bin/forgebook/initPrint.d.ts +9 -0
  96. package/dist/bin/forgebook/initPrint.js +60 -0
  97. package/dist/bin/forgebook/initRefusals.d.ts +45 -0
  98. package/dist/bin/forgebook/initRefusals.js +91 -0
  99. package/dist/bin/forgebook/initRun.d.ts +28 -0
  100. package/dist/bin/forgebook/initRun.js +311 -0
  101. package/dist/bin/forgebook/mcpCommand.mjs +38 -4
  102. package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
  103. package/dist/bin/forgebook/mcpGraph.js +24 -0
  104. package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
  105. package/dist/bin/forgebook/mcpTokens.js +58 -0
  106. package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
  107. package/dist/bin/forgebook/mcpToolParts.js +10 -0
  108. package/dist/bin/forgebook/mcpTools.d.ts +13 -6
  109. package/dist/bin/forgebook/mcpTools.js +57 -90
  110. package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
  111. package/dist/bin/forgebook/mcpVerify.js +36 -0
  112. package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
  113. package/dist/bin/forgebook/migrate/codemods.js +61 -0
  114. package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
  115. package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
  116. package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
  117. package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
  118. package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
  119. package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
  120. package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
  121. package/dist/bin/forgebook/migrate/migrateText.js +30 -0
  122. package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
  123. package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
  124. package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
  125. package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
  126. package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
  127. package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
  128. package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
  129. package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
  130. package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
  131. package/dist/bin/forgebook/newProject/newProject.js +180 -0
  132. package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
  133. package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
  134. package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
  135. package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
  136. package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
  137. package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
  138. package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
  139. package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
  140. package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
  141. package/dist/bin/forgebook/newProject/projectLook.js +293 -0
  142. package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
  143. package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
  144. package/dist/bin/forgebook/newRepair.d.ts +45 -0
  145. package/dist/bin/forgebook/newRepair.js +157 -0
  146. package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
  147. package/dist/bin/forgebook/newRepairRun.js +148 -0
  148. package/dist/bin/forgebook/newStories.d.ts +23 -1
  149. package/dist/bin/forgebook/newStories.js +101 -11
  150. package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
  151. package/dist/bin/forgebook/newStoriesFile.js +43 -4
  152. package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
  153. package/dist/bin/forgebook/prebundleRun.js +28 -8
  154. package/dist/bin/forgebook/proofCommand.d.mts +15 -0
  155. package/dist/bin/forgebook/proofCommand.mjs +212 -0
  156. package/dist/bin/forgebook/proofRun.d.ts +63 -0
  157. package/dist/bin/forgebook/proofRun.js +412 -0
  158. package/dist/bin/forgebook/proofText.d.ts +36 -0
  159. package/dist/bin/forgebook/proofText.js +131 -0
  160. package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
  161. package/dist/bin/forgebook/proofWorkflow.js +205 -0
  162. package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
  163. package/dist/bin/forgebook/setArgsTool.js +70 -0
  164. package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
  165. package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
  166. package/dist/bin/forgebook/storyCheckRun.js +83 -9
  167. package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
  168. package/dist/bin/forgebook/storyFileIds.js +14 -0
  169. package/dist/bin/forgebook/stressCases.d.ts +31 -0
  170. package/dist/bin/forgebook/stressCases.js +79 -0
  171. package/dist/bin/forgebook/stressRun.d.ts +12 -0
  172. package/dist/bin/forgebook/stressRun.js +61 -0
  173. package/dist/bin/forgebook/stressText.d.ts +27 -0
  174. package/dist/bin/forgebook/stressText.js +46 -0
  175. package/dist/bin/forgebook/verifyBase.d.ts +45 -0
  176. package/dist/bin/forgebook/verifyBase.js +204 -0
  177. package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
  178. package/dist/bin/forgebook/verifyCommand.mjs +125 -0
  179. package/dist/bin/forgebook/verifyRun.d.ts +63 -0
  180. package/dist/bin/forgebook/verifyRun.js +108 -0
  181. package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
  182. package/dist/bin/forgebook/verifyVerdict.js +323 -0
  183. package/dist/bin/forgebook/workflowActions.d.ts +23 -0
  184. package/dist/bin/forgebook/workflowActions.js +23 -0
  185. package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
  186. package/dist/src/addressArgs.d.ts +29 -5
  187. package/dist/src/addressArgs.js +58 -16
  188. package/dist/src/addressArgsParam.d.ts +54 -0
  189. package/dist/src/addressArgsParam.js +51 -0
  190. package/dist/src/addressTexts.d.ts +14 -0
  191. package/dist/src/addressTexts.js +28 -21
  192. package/dist/src/agentIndexFile.d.ts +11 -0
  193. package/dist/src/agentIndexFile.js +11 -0
  194. package/dist/src/argConditions.d.ts +52 -0
  195. package/dist/src/argConditions.js +80 -0
  196. package/dist/src/argControl.d.ts +148 -0
  197. package/dist/src/argControl.js +0 -0
  198. package/dist/src/argExpression.d.ts +21 -0
  199. package/dist/src/argExpression.js +30 -0
  200. package/dist/src/argTypes.d.ts +40 -51
  201. package/dist/src/argTypes.js +69 -185
  202. package/dist/src/argsProps.d.ts +3 -3
  203. package/dist/src/argsProps.js +11 -5
  204. package/dist/src/bundlerErrors.d.ts +29 -0
  205. package/dist/src/bundlerErrors.js +49 -0
  206. package/dist/src/catalogue.d.ts +31 -0
  207. package/dist/src/catalogue.js +13 -2
  208. package/dist/src/catalogueRefs.d.ts +75 -0
  209. package/dist/src/catalogueRefs.js +122 -0
  210. package/dist/src/componentDocs.d.ts +83 -0
  211. package/dist/src/componentDocs.js +20 -3
  212. package/dist/src/controlCode.d.ts +27 -0
  213. package/dist/src/controlCode.js +41 -0
  214. package/dist/src/frame/callValues.d.ts +19 -0
  215. package/dist/src/frame/callValues.js +58 -0
  216. package/dist/src/frame/canvasScheme.d.ts +33 -0
  217. package/dist/src/frame/canvasScheme.js +67 -0
  218. package/dist/src/frame/controlValues.d.ts +39 -0
  219. package/dist/src/frame/controlValues.js +143 -0
  220. package/dist/src/frame/frame.css +36 -3
  221. package/dist/src/frame/frameStatus.d.ts +16 -1
  222. package/dist/src/frame/frameStatus.js +16 -1
  223. package/dist/src/frame/frameView.js +4 -3
  224. package/dist/src/frame/mountFrame.d.ts +10 -1
  225. package/dist/src/frame/mountFrame.js +160 -55
  226. package/dist/src/frame/panelControls.d.ts +67 -0
  227. package/dist/src/frame/panelControls.js +110 -0
  228. package/dist/src/frame/panelValues.d.ts +35 -0
  229. package/dist/src/frame/panelValues.js +127 -0
  230. package/dist/src/frame/playActions.d.ts +39 -0
  231. package/dist/src/frame/playActions.js +98 -0
  232. package/dist/src/frame/playStepper.d.ts +28 -0
  233. package/dist/src/frame/playStepper.js +38 -0
  234. package/dist/src/frame/playStory.d.ts +9 -1
  235. package/dist/src/frame/playStory.js +49 -3
  236. package/dist/src/frame/renderer.d.ts +34 -1
  237. package/dist/src/frame/renderer.js +24 -0
  238. package/dist/src/frame/shellChannel.d.ts +1 -1
  239. package/dist/src/frame/shellChannel.js +1 -1
  240. package/dist/src/frame/shellCheck.d.ts +17 -0
  241. package/dist/src/frame/shellCheck.js +25 -0
  242. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  243. package/dist/src/frame/shellMessageCheck.js +53 -0
  244. package/dist/src/frame/storyContent.d.ts +50 -0
  245. package/dist/src/frame/storyContent.js +73 -0
  246. package/dist/src/frame/storyModule.d.ts +9 -0
  247. package/dist/src/frame/storyModule.js +20 -2
  248. package/dist/src/frame/storyRun.d.ts +15 -7
  249. package/dist/src/frame/storyRun.js +64 -15
  250. package/dist/src/frame/valueSheets.d.ts +35 -0
  251. package/dist/src/frame/valueSheets.js +99 -0
  252. package/dist/src/hotModules.d.ts +20 -0
  253. package/dist/src/hotModules.js +23 -0
  254. package/dist/src/jsxCode.d.ts +1 -14
  255. package/dist/src/jsxCode.js +46 -10
  256. package/dist/src/liveErrors.d.ts +30 -4
  257. package/dist/src/liveErrors.js +18 -3
  258. package/dist/src/messages.d.ts +77 -27
  259. package/dist/src/messages.js +58 -100
  260. package/dist/src/namedValues.d.ts +2 -26
  261. package/dist/src/namedValues.js +0 -47
  262. package/dist/src/pageConfig.d.ts +2 -0
  263. package/dist/src/playTrace.d.ts +19 -2
  264. package/dist/src/playTrace.js +10 -5
  265. package/dist/src/plugin.d.ts +10 -3
  266. package/dist/src/previewRelay.js +9 -1
  267. package/dist/src/printable.d.ts +12 -0
  268. package/dist/src/printable.js +22 -0
  269. package/dist/src/propsSignature.d.ts +37 -0
  270. package/dist/src/propsSignature.js +40 -0
  271. package/dist/src/search.d.ts +41 -5
  272. package/dist/src/search.js +93 -23
  273. package/dist/src/searchMatch.d.ts +4 -1
  274. package/dist/src/searchMatch.js +26 -5
  275. package/dist/src/searchTypos.d.ts +88 -0
  276. package/dist/src/searchTypos.js +178 -0
  277. package/dist/src/shapeValues.d.ts +86 -0
  278. package/dist/src/shapeValues.js +295 -0
  279. package/dist/src/shell/ApiReference.js +6 -3
  280. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  281. package/dist/src/shell/ApiTableBox.js +11 -0
  282. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  283. package/dist/src/shell/AppearanceMenu.js +9 -6
  284. package/dist/src/shell/AuthoredHome.js +3 -1
  285. package/dist/src/shell/CodeTab.d.ts +12 -6
  286. package/dist/src/shell/CodeTab.js +47 -3
  287. package/dist/src/shell/CodeText.d.ts +1 -1
  288. package/dist/src/shell/CodeText.js +2 -3
  289. package/dist/src/shell/CompareGrid.js +1 -1
  290. package/dist/src/shell/ComponentPage.d.ts +6 -6
  291. package/dist/src/shell/ComponentPage.js +8 -2
  292. package/dist/src/shell/CustomControl.d.ts +34 -0
  293. package/dist/src/shell/CustomControl.js +125 -0
  294. package/dist/src/shell/DocContainers.js +1 -1
  295. package/dist/src/shell/DocPage.js +2 -2
  296. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  297. package/dist/src/shell/DroppedArgsList.js +1 -1
  298. package/dist/src/shell/EmbedPage.js +30 -12
  299. package/dist/src/shell/Example.d.ts +5 -1
  300. package/dist/src/shell/Example.js +16 -8
  301. package/dist/src/shell/FrameView.d.ts +6 -3
  302. package/dist/src/shell/FrameView.js +2 -2
  303. package/dist/src/shell/HomePage.d.ts +3 -1
  304. package/dist/src/shell/HomePage.js +18 -6
  305. package/dist/src/shell/InfoTip.js +2 -2
  306. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  307. package/dist/src/shell/InteractionsTab.js +18 -2
  308. package/dist/src/shell/LazyPage.js +1 -1
  309. package/dist/src/shell/PackageHtml.js +3 -1
  310. package/dist/src/shell/PageWidth.d.ts +29 -0
  311. package/dist/src/shell/PageWidth.js +18 -0
  312. package/dist/src/shell/PinnedControl.js +14 -62
  313. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  314. package/dist/src/shell/PinnedControlMenu.js +72 -0
  315. package/dist/src/shell/PropFields.d.ts +3 -1
  316. package/dist/src/shell/PropFields.js +9 -6
  317. package/dist/src/shell/PropRows.d.ts +22 -11
  318. package/dist/src/shell/PropRows.js +62 -24
  319. package/dist/src/shell/PropsTab.d.ts +12 -5
  320. package/dist/src/shell/PropsTab.js +9 -22
  321. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  322. package/dist/src/shell/RefStoryPage.js +123 -0
  323. package/dist/src/shell/SearchPanel.js +51 -24
  324. package/dist/src/shell/Shell.d.ts +18 -0
  325. package/dist/src/shell/Shell.js +141 -23
  326. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  327. package/dist/src/shell/ShortcutHelp.js +66 -0
  328. package/dist/src/shell/Sidebar.d.ts +17 -4
  329. package/dist/src/shell/Sidebar.js +92 -41
  330. package/dist/src/shell/SidebarDocs.js +2 -2
  331. package/dist/src/shell/SidebarEntries.js +5 -3
  332. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  333. package/dist/src/shell/SidebarHandle.js +4 -4
  334. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  335. package/dist/src/shell/SidebarRefs.js +99 -0
  336. package/dist/src/shell/SidebarSearch.js +37 -9
  337. package/dist/src/shell/SignatureReference.js +3 -1
  338. package/dist/src/shell/Stage.d.ts +10 -2
  339. package/dist/src/shell/Stage.js +29 -49
  340. package/dist/src/shell/StatusBadges.d.ts +54 -0
  341. package/dist/src/shell/StatusBadges.js +77 -0
  342. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  343. package/dist/src/shell/StoryCodeBlock.js +7 -6
  344. package/dist/src/shell/StoryPicker.d.ts +4 -2
  345. package/dist/src/shell/StoryPicker.js +3 -3
  346. package/dist/src/shell/Switch.d.ts +29 -0
  347. package/dist/src/shell/Switch.js +11 -0
  348. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  349. package/dist/src/shell/SwitchGallery.js +17 -0
  350. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  351. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  352. package/dist/src/shell/TagFilter.d.ts +24 -0
  353. package/dist/src/shell/TagFilter.js +45 -0
  354. package/dist/src/shell/TagViews.d.ts +39 -0
  355. package/dist/src/shell/TagViews.js +20 -0
  356. package/dist/src/shell/Toolbar.d.ts +4 -1
  357. package/dist/src/shell/Toolbar.js +17 -7
  358. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  359. package/dist/src/shell/ToolbarControl.js +23 -6
  360. package/dist/src/shell/ViewMenuPanel.js +6 -1
  361. package/dist/src/shell/argChecks.d.ts +22 -0
  362. package/dist/src/shell/argChecks.js +20 -0
  363. package/dist/src/shell/asideStory.js +7 -2
  364. package/dist/src/shell/audienceSections.css +9 -9
  365. package/dist/src/shell/catalogueContext.d.ts +1 -1
  366. package/dist/src/shell/catalogueContext.js +6 -1
  367. package/dist/src/shell/codeSpans.d.ts +27 -0
  368. package/dist/src/shell/codeSpans.js +76 -0
  369. package/dist/src/shell/compareVariants.d.ts +4 -2
  370. package/dist/src/shell/compareVariants.js +16 -8
  371. package/dist/src/shell/composition.d.ts +23 -0
  372. package/dist/src/shell/composition.js +26 -0
  373. package/dist/src/shell/controlCycle.d.ts +1 -1
  374. package/dist/src/shell/controlCycle.js +3 -2
  375. package/dist/src/shell/customControls.d.ts +62 -0
  376. package/dist/src/shell/customControls.js +81 -0
  377. package/dist/src/shell/docPage.css +22 -22
  378. package/dist/src/shell/dockTabs.d.ts +19 -3
  379. package/dist/src/shell/dockTabs.js +29 -20
  380. package/dist/src/shell/embed.css +7 -7
  381. package/dist/src/shell/frameOrder.d.ts +35 -0
  382. package/dist/src/shell/frameOrder.js +45 -0
  383. package/dist/src/shell/framesOrigin.d.ts +7 -0
  384. package/dist/src/shell/framesOrigin.js +1 -1
  385. package/dist/src/shell/galleryPlace.d.ts +20 -0
  386. package/dist/src/shell/galleryPlace.js +26 -0
  387. package/dist/src/shell/icons.d.ts +1 -0
  388. package/dist/src/shell/icons.js +1 -0
  389. package/dist/src/shell/keyboard.d.ts +14 -12
  390. package/dist/src/shell/keyboard.js +21 -6
  391. package/dist/src/shell/laterStrings.d.ts +30 -0
  392. package/dist/src/shell/laterStrings.js +43 -3
  393. package/dist/src/shell/mountShell.js +3 -0
  394. package/dist/src/shell/pageStrings.d.ts +4 -0
  395. package/dist/src/shell/pageStrings.js +4 -0
  396. package/dist/src/shell/pageTagView.d.ts +18 -0
  397. package/dist/src/shell/pageTagView.js +10 -0
  398. package/dist/src/shell/playMemory.d.ts +14 -0
  399. package/dist/src/shell/playMemory.js +8 -0
  400. package/dist/src/shell/propNotes.d.ts +23 -0
  401. package/dist/src/shell/propNotes.js +37 -0
  402. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  403. package/dist/src/shell/refIndexLoad.js +38 -0
  404. package/dist/src/shell/refParts.d.ts +34 -0
  405. package/dist/src/shell/refParts.js +9 -0
  406. package/dist/src/shell/refStory.css +21 -0
  407. package/dist/src/shell/refStrings.d.ts +13 -0
  408. package/dist/src/shell/refStrings.js +21 -0
  409. package/dist/src/shell/search.css +11 -11
  410. package/dist/src/shell/shell.css +376 -169
  411. package/dist/src/shell/shellScheme.js +2 -2
  412. package/dist/src/shell/shortcutHelp.css +64 -0
  413. package/dist/src/shell/stageArgs.d.ts +53 -0
  414. package/dist/src/shell/stageArgs.js +64 -0
  415. package/dist/src/shell/statusBadges.css +51 -0
  416. package/dist/src/shell/strings.d.ts +7 -16
  417. package/dist/src/shell/strings.js +12 -17
  418. package/dist/src/shell/switchGallery.css +104 -0
  419. package/dist/src/shell/tagFilter.css +46 -0
  420. package/dist/src/shell/tagView.d.ts +20 -0
  421. package/dist/src/shell/tagView.js +10 -0
  422. package/dist/src/shell/useAddressArgs.d.ts +9 -0
  423. package/dist/src/shell/useAddressArgs.js +56 -11
  424. package/dist/src/shell/useControlKeys.js +2 -2
  425. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  426. package/dist/src/shell/useEditedProblems.js +40 -0
  427. package/dist/src/shell/useFrameMessages.js +3 -0
  428. package/dist/src/shell/useFrameQueue.d.ts +8 -3
  429. package/dist/src/shell/useFrameQueue.js +42 -12
  430. package/dist/src/shell/useListedTree.d.ts +13 -0
  431. package/dist/src/shell/useListedTree.js +32 -0
  432. package/dist/src/shell/usePageFrames.js +2 -2
  433. package/dist/src/shell/usePopover.d.ts +5 -0
  434. package/dist/src/shell/usePopover.js +7 -1
  435. package/dist/src/shell/useRefIndex.d.ts +22 -0
  436. package/dist/src/shell/useRefIndex.js +36 -0
  437. package/dist/src/shell/useScrollSettled.d.ts +18 -0
  438. package/dist/src/shell/useScrollSettled.js +56 -0
  439. package/dist/src/shell/useScrollStops.d.ts +20 -0
  440. package/dist/src/shell/useScrollStops.js +41 -0
  441. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  442. package/dist/src/shell/useShortcutHelp.js +32 -0
  443. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  444. package/dist/src/shell/useSidebarOverlay.js +12 -4
  445. package/dist/src/shell/useStoryCode.d.ts +2 -1
  446. package/dist/src/shell/useStoryCode.js +12 -7
  447. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  448. package/dist/src/shell/useToolbarLayout.js +2 -2
  449. package/dist/src/shell/useWorstCase.d.ts +8 -2
  450. package/dist/src/shell/useWorstCase.js +2 -2
  451. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  452. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  453. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  454. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  455. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  456. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  457. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  458. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  459. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  460. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  461. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  462. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  463. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  464. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  465. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  466. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  467. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  468. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  469. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  470. package/dist/src/shell/valueEditors/ValueField.js +148 -0
  471. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  472. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  473. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  474. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  475. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  476. package/dist/src/shell/worstArgs.d.ts +8 -5
  477. package/dist/src/shell/worstArgs.js +14 -7
  478. package/dist/src/shellTheme.d.ts +1 -1
  479. package/dist/src/shellTheme.js +15 -1
  480. package/dist/src/shellTheme.types.d.ts +4 -0
  481. package/dist/src/shellWord.d.ts +12 -0
  482. package/dist/src/shellWord.js +15 -0
  483. package/dist/src/sourceFiles.js +2 -1
  484. package/dist/src/storyArgTypes.d.ts +57 -0
  485. package/dist/src/storyArgTypes.js +195 -0
  486. package/dist/src/storyBackground.js +14 -3
  487. package/dist/src/storyCheck.d.ts +99 -3
  488. package/dist/src/storyCheck.js +39 -1
  489. package/dist/src/storyCodeText.d.ts +52 -0
  490. package/dist/src/storyCodeText.js +30 -0
  491. package/dist/src/storyControls.d.ts +103 -0
  492. package/dist/src/storyControls.js +100 -0
  493. package/dist/src/storyStatuses.d.ts +55 -0
  494. package/dist/src/storyStatuses.js +104 -0
  495. package/dist/src/storyTagNames.d.ts +25 -0
  496. package/dist/src/storyTagNames.js +25 -0
  497. package/dist/src/storyTags.d.ts +29 -0
  498. package/dist/src/storyTags.js +85 -0
  499. package/dist/src/storyTree.d.ts +13 -0
  500. package/dist/src/storyTree.js +24 -4
  501. package/dist/src/storybookArgs.d.ts +24 -0
  502. package/dist/src/storybookArgs.js +185 -0
  503. package/dist/src/switches.d.ts +66 -3
  504. package/dist/src/switches.js +42 -1
  505. package/dist/src/valueSchema.d.ts +28 -0
  506. package/dist/src/valueSchema.js +196 -0
  507. package/dist/src/valueShape.d.ts +94 -0
  508. package/dist/src/valueShape.js +25 -0
  509. package/dist/src/viewState.d.ts +8 -3
  510. package/dist/src/viewState.js +27 -10
  511. package/dist/src/vite/adapter.d.ts +40 -2
  512. package/dist/src/vite/adapter.js +1 -0
  513. package/dist/src/vite/agent.types.d.ts +354 -7
  514. package/dist/src/vite/agentApi.d.ts +23 -0
  515. package/dist/src/vite/agentApi.js +90 -17
  516. package/dist/src/vite/agentIndex.d.ts +0 -2
  517. package/dist/src/vite/agentIndex.js +5 -6
  518. package/dist/src/vite/agentRoutes.d.ts +20 -1
  519. package/dist/src/vite/agentRoutes.js +135 -66
  520. package/dist/src/vite/agentStatuses.d.ts +42 -0
  521. package/dist/src/vite/agentStatuses.js +67 -0
  522. package/dist/src/vite/agentStoryCode.d.ts +51 -0
  523. package/dist/src/vite/agentStoryCode.js +44 -0
  524. package/dist/src/vite/agentVisibility.d.ts +47 -0
  525. package/dist/src/vite/agentVisibility.js +174 -0
  526. package/dist/src/vite/appAudit.d.ts +134 -0
  527. package/dist/src/vite/appAudit.js +333 -0
  528. package/dist/src/vite/appBuildOption.d.ts +53 -0
  529. package/dist/src/vite/appBuildOption.js +55 -0
  530. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  531. package/dist/src/vite/appTokenFiles.js +433 -0
  532. package/dist/src/vite/appTokens.d.ts +23 -0
  533. package/dist/src/vite/appTokens.js +275 -0
  534. package/dist/src/vite/argControlsConfig.d.ts +30 -0
  535. package/dist/src/vite/argControlsConfig.js +176 -0
  536. package/dist/src/vite/builtTexts.d.ts +10 -0
  537. package/dist/src/vite/builtTexts.js +59 -22
  538. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  539. package/dist/src/vite/catalogueConfig.js +21 -4
  540. package/dist/src/vite/changeCoverage.d.ts +74 -0
  541. package/dist/src/vite/changeCoverage.js +120 -0
  542. package/dist/src/vite/changedRoute.d.ts +30 -0
  543. package/dist/src/vite/changedRoute.js +197 -0
  544. package/dist/src/vite/checkCode.d.ts +105 -3
  545. package/dist/src/vite/checkCode.js +323 -36
  546. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  547. package/dist/src/vite/checkoutWatch.js +287 -0
  548. package/dist/src/vite/closeWatch.d.ts +8 -0
  549. package/dist/src/vite/closeWatch.js +1 -1
  550. package/dist/src/vite/componentCache.d.ts +8 -0
  551. package/dist/src/vite/componentCache.js +66 -0
  552. package/dist/src/vite/componentGraph.d.ts +71 -0
  553. package/dist/src/vite/componentGraph.js +133 -0
  554. package/dist/src/vite/componentRules.d.ts +33 -0
  555. package/dist/src/vite/componentRules.js +105 -0
  556. package/dist/src/vite/componentScan.d.ts +69 -0
  557. package/dist/src/vite/componentScan.js +418 -0
  558. package/dist/src/vite/compositionCheck.d.ts +15 -0
  559. package/dist/src/vite/compositionCheck.js +243 -0
  560. package/dist/src/vite/config.d.ts +67 -1
  561. package/dist/src/vite/configFile.d.ts +15 -2
  562. package/dist/src/vite/configFile.js +109 -40
  563. package/dist/src/vite/configKeys.d.ts +15 -0
  564. package/dist/src/vite/configKeys.js +172 -0
  565. package/dist/src/vite/configLoadError.d.ts +23 -0
  566. package/dist/src/vite/configLoadError.js +71 -0
  567. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  568. package/dist/src/vite/cssDeclarations.js +290 -0
  569. package/dist/src/vite/cssImports.d.ts +14 -0
  570. package/dist/src/vite/cssImports.js +48 -0
  571. package/dist/src/vite/cssReferences.d.ts +54 -0
  572. package/dist/src/vite/cssReferences.js +157 -0
  573. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  574. package/dist/src/vite/cssTokenValues.js +233 -0
  575. package/dist/src/vite/designTokens.d.ts +24 -0
  576. package/dist/src/vite/designTokens.js +5 -1
  577. package/dist/src/vite/docsExtractor.d.ts +9 -3
  578. package/dist/src/vite/docsExtractor.js +11 -3
  579. package/dist/src/vite/docsProgram.d.ts +17 -4
  580. package/dist/src/vite/docsProgram.js +52 -11
  581. package/dist/src/vite/docsWorker.js +7 -2
  582. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  583. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  584. package/dist/src/vite/fileImports.d.ts +17 -0
  585. package/dist/src/vite/fileImports.js +57 -0
  586. package/dist/src/vite/findComponent.d.ts +10 -2
  587. package/dist/src/vite/findComponent.js +27 -22
  588. package/dist/src/vite/findRoute.js +3 -2
  589. package/dist/src/vite/forcedStates.d.ts +9 -2
  590. package/dist/src/vite/forcedStates.js +12 -3
  591. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  592. package/dist/src/vite/forgebookPlugin.js +55 -73
  593. package/dist/src/vite/frameErrors.d.ts +19 -0
  594. package/dist/src/vite/frameErrors.js +70 -0
  595. package/dist/src/vite/framesServer.d.ts +12 -0
  596. package/dist/src/vite/framesServer.js +21 -4
  597. package/dist/src/vite/functionComponentDocs.js +81 -12
  598. package/dist/src/vite/generatedModules.js +4 -2
  599. package/dist/src/vite/gitChange.d.ts +38 -5
  600. package/dist/src/vite/gitChange.js +71 -11
  601. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  602. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  603. package/dist/src/vite/hotSnippets.d.ts +38 -14
  604. package/dist/src/vite/hotSnippets.js +137 -39
  605. package/dist/src/vite/importedNames.d.ts +37 -0
  606. package/dist/src/vite/importedNames.js +138 -0
  607. package/dist/src/vite/indexFields.d.ts +6 -0
  608. package/dist/src/vite/indexFields.js +21 -0
  609. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  610. package/dist/src/vite/indexStoryFile.js +22 -157
  611. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  612. package/dist/src/vite/jsxCallSites.js +200 -0
  613. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  614. package/dist/src/vite/jsxInScripts.js +138 -0
  615. package/dist/src/vite/jsxTree.d.ts +20 -0
  616. package/dist/src/vite/jsxTree.js +163 -0
  617. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  618. package/dist/src/vite/lineAndColumn.js +18 -0
  619. package/dist/src/vite/lookAlikes.d.ts +65 -0
  620. package/dist/src/vite/lookAlikes.js +228 -0
  621. package/dist/src/vite/nearestToken.d.ts +17 -0
  622. package/dist/src/vite/nearestToken.js +9 -2
  623. package/dist/src/vite/packageEntries.d.ts +42 -0
  624. package/dist/src/vite/packageEntries.js +127 -0
  625. package/dist/src/vite/pages.d.ts +9 -1
  626. package/dist/src/vite/pages.js +119 -4
  627. package/dist/src/vite/pluginConfig.js +4 -0
  628. package/dist/src/vite/pluginIds.d.ts +2 -0
  629. package/dist/src/vite/pluginIds.js +5 -1
  630. package/dist/src/vite/pluginModules.d.ts +81 -11
  631. package/dist/src/vite/pluginModules.js +109 -21
  632. package/dist/src/vite/prebundled.d.ts +57 -15
  633. package/dist/src/vite/prebundled.js +80 -0
  634. package/dist/src/vite/previewTags.d.ts +25 -0
  635. package/dist/src/vite/previewTags.js +56 -0
  636. package/dist/src/vite/projectFiles.d.ts +54 -0
  637. package/dist/src/vite/projectFiles.js +116 -0
  638. package/dist/src/vite/projectPostcss.d.ts +70 -0
  639. package/dist/src/vite/projectPostcss.js +250 -0
  640. package/dist/src/vite/propDocs.d.ts +12 -0
  641. package/dist/src/vite/propDocs.js +187 -60
  642. package/dist/src/vite/propKind.d.ts +40 -0
  643. package/dist/src/vite/propKind.js +71 -0
  644. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  645. package/dist/src/vite/propTypeNotes.js +51 -0
  646. package/dist/src/vite/publishedExports.d.ts +27 -0
  647. package/dist/src/vite/publishedExports.js +298 -0
  648. package/dist/src/vite/realFolder.d.ts +6 -0
  649. package/dist/src/vite/realFolder.js +25 -0
  650. package/dist/src/vite/refsConfig.d.ts +39 -0
  651. package/dist/src/vite/refsConfig.js +54 -0
  652. package/dist/src/vite/reuseCheck.d.ts +45 -0
  653. package/dist/src/vite/reuseCheck.js +260 -0
  654. package/dist/src/vite/runningVersions.d.ts +33 -0
  655. package/dist/src/vite/runningVersions.js +25 -0
  656. package/dist/src/vite/scriptProblems.d.ts +60 -0
  657. package/dist/src/vite/scriptProblems.js +155 -0
  658. package/dist/src/vite/searchModule.js +3 -2
  659. package/dist/src/vite/searchRoute.js +4 -2
  660. package/dist/src/vite/shapeDocs.d.ts +36 -0
  661. package/dist/src/vite/shapeDocs.js +177 -0
  662. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  663. package/dist/src/vite/singleFileComponent.js +83 -0
  664. package/dist/src/vite/sourceText.d.ts +34 -0
  665. package/dist/src/vite/sourceText.js +72 -0
  666. package/dist/src/vite/sourceTokens.d.ts +7 -0
  667. package/dist/src/vite/sourceTokens.js +7 -2
  668. package/dist/src/vite/stackLines.d.ts +49 -0
  669. package/dist/src/vite/stackLines.js +96 -0
  670. package/dist/src/vite/storyCode.d.ts +22 -7
  671. package/dist/src/vite/storyCode.js +263 -37
  672. package/dist/src/vite/storyCoverage.d.ts +48 -0
  673. package/dist/src/vite/storyCoverage.js +179 -0
  674. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  675. package/dist/src/vite/storyFilesModule.js +105 -15
  676. package/dist/src/vite/storyPatterns.d.ts +31 -0
  677. package/dist/src/vite/storyPatterns.js +140 -5
  678. package/dist/src/vite/storyReach.d.ts +10 -2
  679. package/dist/src/vite/storyReach.js +15 -11
  680. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  681. package/dist/src/vite/storyTopLevel.js +146 -0
  682. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  683. package/dist/src/vite/storylessRoutes.js +210 -19
  684. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  685. package/dist/src/vite/switchValuesCheck.js +164 -0
  686. package/dist/src/vite/switchesDocument.d.ts +15 -0
  687. package/dist/src/vite/switchesDocument.js +47 -0
  688. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  689. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  690. package/dist/src/vite/textImports.d.ts +15 -0
  691. package/dist/src/vite/textImports.js +58 -0
  692. package/dist/src/vite/textModules.d.ts +6 -5
  693. package/dist/src/vite/textModules.js +13 -8
  694. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  695. package/dist/src/vite/tokenAnswers.js +11 -7
  696. package/dist/src/vite/typeParameters.d.ts +83 -0
  697. package/dist/src/vite/typeParameters.js +270 -0
  698. package/dist/src/vite/typedControls.d.ts +31 -0
  699. package/dist/src/vite/typedControls.js +66 -0
  700. package/dist/src/vite/unionProps.d.ts +37 -0
  701. package/dist/src/vite/unionProps.js +121 -0
  702. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  703. package/dist/src/vite/unresolvedTokens.js +193 -0
  704. package/dist/src/vite/usageGraph.js +10 -52
  705. package/dist/src/vite/usageGuidance.d.ts +9 -2
  706. package/dist/src/vite/usageGuidance.js +36 -8
  707. package/dist/src/vite/usageImports.d.ts +35 -0
  708. package/dist/src/vite/usageImports.js +280 -0
  709. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  710. package/dist/src/vite/visibilityRoute.js +320 -0
  711. package/dist/src/worstCase.d.ts +2 -0
  712. package/dist/src/worstCase.js +2 -0
  713. package/package.json +28 -8
@@ -0,0 +1,241 @@
1
+ /**
2
+ * The text edits the codemods of `forgebook migrate` share: a file parsed, a configuration's object found, properties of an
3
+ * object literal removed or added, and edits applied.
4
+ *
5
+ * @remarks
6
+ * The file is edited as text, at the places the compiler's tree gives, so everything a codemod does not touch keeps its
7
+ * formatting and comments: printing the tree again would rewrite the whole file in the printer's style. A property alone on
8
+ * its lines is removed with its lines; one sharing a line with others is cut out of it.
9
+ *
10
+ * @module
11
+ */
12
+ import ts from "typescript-6";
13
+ /** How deep a configuration's name is followed back to the object it holds (`const config = …; export default config`). */
14
+ const NAME_DEPTH = 4;
15
+ /**
16
+ * The kind of script a file is, by its extension: JSX is only read in a file that may hold it.
17
+ *
18
+ * @param path - the file's path.
19
+ */
20
+ const scriptKindOf = (path) => {
21
+ if (path.endsWith(".tsx"))
22
+ return ts.ScriptKind.TSX;
23
+ if (path.endsWith(".jsx"))
24
+ return ts.ScriptKind.JSX;
25
+ if (/\.[cm]?js$/.test(path))
26
+ return ts.ScriptKind.JS;
27
+ return ts.ScriptKind.TS;
28
+ };
29
+ /**
30
+ * A file's tree, with each node's parent set.
31
+ *
32
+ * @param text - the file's text.
33
+ * @param path - its path, for the kind of script.
34
+ */
35
+ export const parsedFile = (text, path) => ts.createSourceFile(path, text, ts.ScriptTarget.Latest, true, scriptKindOf(path));
36
+ /**
37
+ * A property's name as written, when it is a plain one (`play`, `"propGroups.choice"`); none for a spread, a method or a
38
+ * computed name.
39
+ *
40
+ * @param element - the object literal's element.
41
+ */
42
+ export const propertyName = (element) => {
43
+ if (!ts.isPropertyAssignment(element) && !ts.isShorthandPropertyAssignment(element))
44
+ return undefined;
45
+ const { name } = element;
46
+ if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNoSubstitutionTemplateLiteral(name))
47
+ return name.text;
48
+ return undefined;
49
+ };
50
+ /**
51
+ * The value a name is given where the file declares it at its top (`const config = …`); none when it is not declared so.
52
+ *
53
+ * @param name - the name.
54
+ * @param file - the file.
55
+ */
56
+ const declaredValue = (name, file) => file.statements
57
+ .flatMap((statement) => ts.isVariableStatement(statement) ? [...statement.declarationList.declarations] : [])
58
+ .find((declaration) => ts.isIdentifier(declaration.name) && declaration.name.text === name)?.initializer;
59
+ /** Whether an expression only wraps another: parentheses, `satisfies`, `as`. */
60
+ const isWrapper = (expression) => ts.isParenthesizedExpression(expression) ||
61
+ ts.isSatisfiesExpression(expression) ||
62
+ ts.isAsExpression(expression);
63
+ /**
64
+ * The object literal an expression stands for, through parentheses, `satisfies`, `as`, `defineConfig(…)` and a name
65
+ * declared in the file.
66
+ *
67
+ * @param expression - the expression.
68
+ * @param file - the file, for its declarations.
69
+ * @param depth - how many more names may be followed.
70
+ */
71
+ const objectOf = (expression, file, depth) => {
72
+ if (ts.isObjectLiteralExpression(expression))
73
+ return expression;
74
+ if (isWrapper(expression))
75
+ return objectOf(expression.expression, file, depth);
76
+ if (ts.isCallExpression(expression)) {
77
+ const [first] = expression.arguments;
78
+ const isDefine = ts.isIdentifier(expression.expression) && expression.expression.text === "defineConfig";
79
+ return isDefine && first !== undefined ? objectOf(first, file, depth) : undefined;
80
+ }
81
+ if (!ts.isIdentifier(expression) || depth === 0)
82
+ return undefined;
83
+ const value = declaredValue(expression.text, file);
84
+ return value === undefined ? undefined : objectOf(value, file, depth - 1);
85
+ };
86
+ /**
87
+ * The object literal an expression stands for, as written in the file (through a name it declares, `satisfies`, `as`);
88
+ * none when it is built some other way.
89
+ *
90
+ * @param expression - the expression.
91
+ * @param file - the file.
92
+ */
93
+ export const objectLiteralOf = (expression, file) => objectOf(expression, file, NAME_DEPTH);
94
+ /**
95
+ * The object a configuration file exports by default, as written in it; none when the file builds it some other way (a
96
+ * function's result, an import).
97
+ *
98
+ * @param file - the configuration's tree.
99
+ */
100
+ export const defaultExportObject = (file) => {
101
+ for (const statement of file.statements) {
102
+ if (ts.isExportAssignment(statement) && statement.isExportEquals !== true)
103
+ return objectOf(statement.expression, file, NAME_DEPTH);
104
+ }
105
+ return undefined;
106
+ };
107
+ /** The line ending a text uses: CRLF when any line ends so, LF otherwise. */
108
+ const lineEndingOf = (text) => (text.includes("\r\n") ? "\r\n" : "\n");
109
+ /** Where the line holding an offset starts. */
110
+ const lineStart = (text, at) => text.lastIndexOf("\n", at - 1) + 1;
111
+ /** Whether only spaces come before an offset on its line. */
112
+ const isLineLead = (text, at) => text.slice(lineStart(text, at), at).trim() === "";
113
+ /**
114
+ * Where the line after an offset ends, newline included, when only a comma, spaces and a line comment follow the offset on
115
+ * it; none when more code follows.
116
+ */
117
+ const lineTailEnd = (text, at) => {
118
+ const newline = text.indexOf("\n", at);
119
+ const end = newline === -1 ? text.length : newline + 1;
120
+ return /^[ \t]*,?[ \t]*(\/\/[^\n]*)?\r?\n?$/.test(text.slice(at, end)) ? end : undefined;
121
+ };
122
+ /** The edit removing the comma right after an offset, past spaces; none when no comma comes next. */
123
+ const commaAfter = (text, at) => {
124
+ const comma = /^\s*,/.exec(text.slice(at));
125
+ return comma === null
126
+ ? undefined
127
+ : { start: at + comma[0].length - 1, end: at + comma[0].length, insert: "" };
128
+ };
129
+ /**
130
+ * The runs of neighbouring properties to remove, so that no two edits meet.
131
+ *
132
+ * @param elements - the object's properties.
133
+ * @param removed - those to remove.
134
+ */
135
+ const removedRuns = (elements, removed) => {
136
+ const runs = [];
137
+ elements.forEach((element, index) => {
138
+ if (!removed.has(element))
139
+ return;
140
+ const previous = runs[runs.length - 1];
141
+ if (previous !== undefined && previous.last === index - 1)
142
+ runs[runs.length - 1] = { ...previous, last: index };
143
+ else
144
+ runs.push({ first: index, last: index });
145
+ });
146
+ return runs;
147
+ };
148
+ /**
149
+ * The edits that remove one run: its lines when it has them to itself, else its text with the comma that joins it.
150
+ *
151
+ * @param file - the file's tree.
152
+ * @param elements - the object's properties.
153
+ * @param run - the run.
154
+ */
155
+ const runEdits = (file, elements, { first, last }) => {
156
+ const text = file.text;
157
+ const before = elements[first - 1];
158
+ const after = elements[last + 1];
159
+ const start = elements[first]?.getStart(file) ?? 0;
160
+ const end = elements[last]?.end ?? start;
161
+ const tail = lineTailEnd(text, end);
162
+ if (isLineLead(text, start) && tail !== undefined) {
163
+ const lines = { start: lineStart(text, start), end: tail, insert: "" };
164
+ // the run was the end of the object: the property now last loses the comma it no longer needs
165
+ const isEnd = after === undefined && !elements.hasTrailingComma && before !== undefined;
166
+ const comma = isEnd ? commaAfter(text, before.end) : undefined;
167
+ return comma === undefined ? [lines] : [lines, comma];
168
+ }
169
+ if (after !== undefined)
170
+ return [{ start, end: after.getStart(file), insert: "" }];
171
+ return before === undefined ? [] : [{ start: before.end, end, insert: "" }];
172
+ };
173
+ /**
174
+ * The edits that remove some of an object literal's properties, keeping the others as written. Removing all of them leaves
175
+ * `{}`.
176
+ *
177
+ * @param file - the file's tree.
178
+ * @param object - the object literal.
179
+ * @param removed - the properties to remove, of that object.
180
+ */
181
+ export const removalEdits = (file, object, removed) => {
182
+ const elements = object.properties;
183
+ if (elements.every((element) => removed.has(element)))
184
+ return [{ start: object.getStart(file) + 1, end: object.end - 1, insert: "" }];
185
+ return removedRuns(elements, removed).flatMap((run) => runEdits(file, elements, run));
186
+ };
187
+ /**
188
+ * The edit that adds a property to an object literal before one of its properties, or after the last when none is given,
189
+ * in the object's own layout: on a line of its own when the properties are, inline when they share one.
190
+ *
191
+ * @param file - the file's tree.
192
+ * @param object - the object literal.
193
+ * @param property - the property's text (`play: "on"`), with no comma.
194
+ * @param before - the property it goes before; none for the end.
195
+ * @returns the edits: one, or two when the last property needs a comma before the new one.
196
+ */
197
+ export const insertionEdit = (file, object, property, before) => {
198
+ const text = file.text;
199
+ const eol = lineEndingOf(text);
200
+ const elements = object.properties;
201
+ const last = elements[elements.length - 1];
202
+ if (last === undefined) {
203
+ const inside = object.getStart(file) + 1;
204
+ return [{ start: inside, end: object.end - 1, insert: ` ${property} ` }];
205
+ }
206
+ if (before !== undefined) {
207
+ const start = before.getStart(file);
208
+ if (!isLineLead(text, start))
209
+ return [{ start, end: start, insert: `${property}, ` }];
210
+ const from = lineStart(text, start);
211
+ return [{ start: from, end: from, insert: `${text.slice(from, start)}${property},${eol}` }];
212
+ }
213
+ const start = last.getStart(file);
214
+ const tail = lineTailEnd(text, last.end);
215
+ if (!isLineLead(text, start) || tail === undefined)
216
+ return [{ start: last.end, end: last.end, insert: `, ${property}` }];
217
+ // a line of its own after the last property's, so that a comment ending that line stays with it
218
+ const indent = text.slice(lineStart(text, start), start);
219
+ const line = `${indent}${property}${elements.hasTrailingComma ? "," : ""}${text.endsWith("\n", tail) ? eol : ""}`;
220
+ const added = { start: tail, end: tail, insert: tail === text.length ? `${eol}${line}` : line };
221
+ return elements.hasTrailingComma ? [added] : [{ start: last.end, end: last.end, insert: "," }, added];
222
+ };
223
+ /**
224
+ * A text with edits applied, from the last to the first so that each offset still holds.
225
+ *
226
+ * @param text - the text.
227
+ * @param edits - the edits, in any order.
228
+ * @throws when two edits overlap, which would make the result depend on their order.
229
+ */
230
+ export const appliedEdits = (text, edits) => {
231
+ const sorted = [...edits].sort((left, right) => right.start - left.start || right.end - left.end);
232
+ let result = text;
233
+ let floor = Number.POSITIVE_INFINITY;
234
+ for (const edit of sorted) {
235
+ if (edit.end > floor)
236
+ throw new Error(`two edits overlap at ${edit.start}`);
237
+ result = `${result.slice(0, edit.start)}${edit.insert}${result.slice(edit.end)}`;
238
+ floor = edit.start;
239
+ }
240
+ return result;
241
+ };
@@ -0,0 +1,3 @@
1
+ import type { Codemod } from "./migrate.types.ts";
2
+ /** The codemod. */
3
+ export declare const playOnInBuilds: Codemod;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * The codemod for plays in a build: a built catalogue no longer runs a story's play when it opens, since a reader of
3
+ * published docs did not ask for it. A catalogue that relied on it gets `play: "on"` in its configuration, which keeps the
4
+ * behaviour on the dev server and in a build alike.
5
+ *
6
+ * @remarks
7
+ * It keeps an old behaviour rather than rewriting what broke, so it runs only for a project coming from before the change
8
+ * (`--from`): run again on a project that left `play` out on purpose, it would undo that choice.
9
+ *
10
+ * @module
11
+ */
12
+ import ts from "typescript-6";
13
+ import { defaultExportObject, insertionEdit, parsedFile, propertyName } from "./objectEdits.js";
14
+ /** The quote the object's own strings use, so that the added one matches them; double when it has none. */
15
+ const quoteOf = (file, object) => {
16
+ let quote;
17
+ const visit = (node) => {
18
+ if (quote !== undefined)
19
+ return;
20
+ if (ts.isStringLiteral(node)) {
21
+ quote = file.text.charAt(node.getStart(file));
22
+ return;
23
+ }
24
+ ts.forEachChild(node, visit);
25
+ };
26
+ visit(object);
27
+ return quote === "'" ? "'" : '"';
28
+ };
29
+ /** Whether a file names `play` as a property anywhere: in the configuration, or in an object it spreads or is built from. */
30
+ const namesPlay = (file) => {
31
+ let isFound = false;
32
+ const visit = (node) => {
33
+ if (isFound)
34
+ return;
35
+ if ((ts.isPropertyAssignment(node) || ts.isShorthandPropertyAssignment(node)) &&
36
+ ts.isObjectLiteralExpression(node.parent) &&
37
+ propertyName(node) === "play") {
38
+ isFound = true;
39
+ return;
40
+ }
41
+ ts.forEachChild(node, visit);
42
+ };
43
+ visit(file);
44
+ return isFound;
45
+ };
46
+ /**
47
+ * The edit to the configuration: `play: "on"` after its title, unless the file says `play` already. A configuration it
48
+ * cannot see into gets advice, which leaves the exit code alone: it may need nothing.
49
+ *
50
+ * @param text - the configuration's text.
51
+ * @param path - its path.
52
+ */
53
+ const run = (text, path) => {
54
+ const file = parsedFile(text, path);
55
+ if (namesPlay(file))
56
+ return { edits: [], advice: [] };
57
+ const object = defaultExportObject(file);
58
+ if (object === undefined)
59
+ return {
60
+ edits: [],
61
+ advice: [
62
+ 'The configuration\'s object is not written in this file: if plays should still run when a built story opens, write play: "on" in it.'
63
+ ]
64
+ };
65
+ if (object.properties.some(ts.isSpreadAssignment))
66
+ return {
67
+ edits: [],
68
+ advice: [
69
+ 'The configuration spreads an object from elsewhere: if plays should still run when a built story opens, write play: "on" in it.'
70
+ ]
71
+ };
72
+ const names = object.properties.map(propertyName);
73
+ const title = names.indexOf("title");
74
+ const before = object.properties[title === -1 ? 0 : title + 1];
75
+ const quote = quoteOf(file, object);
76
+ return { edits: insertionEdit(file, object, `play: ${quote}on${quote}`, before), advice: [] };
77
+ };
78
+ /** The codemod. */
79
+ export const playOnInBuilds = {
80
+ id: "play-on-in-builds",
81
+ breaksIn: "0.4.0",
82
+ kind: "keep",
83
+ files: ["config"],
84
+ summary: 'Writes play: "on", so a built catalogue still runs a story\'s play when it opens; leave it out to take the new default, where a build waits for Run.',
85
+ run
86
+ };
@@ -0,0 +1,5 @@
1
+ import type { Codemod } from "./migrate.types.ts";
2
+ /** The strings the Props tab no longer has. */
3
+ export declare const REMOVED_PROP_GROUP_STRINGS: ReadonlySet<string>;
4
+ /** The codemod. */
5
+ export declare const propGroupStrings: Codemod;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * The codemod for the Props tab's control groups: the shell's strings `propGroups.choice`, `.text`, `.structured` and
3
+ * `.toggle` named their headings, and the tab now lists props in the order their source declares them, with no such
4
+ * headings. A catalogue's `strings` naming them replaces nothing any more, so they are removed, from the configuration and
5
+ * from any preset module given.
6
+ *
7
+ * @module
8
+ */
9
+ import ts from "typescript-6";
10
+ import { objectLiteralOf, parsedFile, propertyName, removalEdits } from "./objectEdits.js";
11
+ /** The strings the Props tab no longer has. */
12
+ export const REMOVED_PROP_GROUP_STRINGS = new Set([
13
+ "propGroups.choice",
14
+ "propGroups.text",
15
+ "propGroups.structured",
16
+ "propGroups.toggle"
17
+ ]);
18
+ /** Whether an object's element is one of the strings removed. */
19
+ const isRemovedString = (element) => {
20
+ const name = propertyName(element);
21
+ return name !== undefined && REMOVED_PROP_GROUP_STRINGS.has(name);
22
+ };
23
+ /** Whether an object's element has a name only running the code would tell: a computed key or a spread. */
24
+ const isUnreadName = (element) => ts.isSpreadAssignment(element) || (element.name !== undefined && ts.isComputedPropertyName(element.name));
25
+ /** What a `strings` property holds: its own object, the object a name it uses is given in the file, or none. */
26
+ const stringsObject = (property, file) => ts.isShorthandPropertyAssignment(property)
27
+ ? objectLiteralOf(property.name, file)
28
+ : objectLiteralOf(property.initializer, file);
29
+ /** Whether a node is an object's `strings` property, written out or shorthand. */
30
+ const isStringsProperty = (node) => (ts.isPropertyAssignment(node) || ts.isShorthandPropertyAssignment(node)) &&
31
+ ts.isObjectLiteralExpression(node.parent) &&
32
+ propertyName(node) === "strings";
33
+ /** Advice for strings the codemod cannot read. */
34
+ const UNREAD_STRINGS = "These strings are not all written in this file: if they name propGroups.choice, .text, .structured or .toggle, remove them, since the Props tab no longer has them.";
35
+ /**
36
+ * The edits to one file: in every `strings` object, written in place or in a name the file declares, the removed strings
37
+ * out, and a `strings: { … }` left with nothing out as well.
38
+ *
39
+ * @param text - the file's text.
40
+ * @param path - its path.
41
+ */
42
+ const run = (text, path) => {
43
+ const file = parsedFile(text, path);
44
+ const edits = [];
45
+ const advice = new Set();
46
+ // an object two configurations share through one name is rewritten once
47
+ const done = new Set();
48
+ const visit = (node) => {
49
+ ts.forEachChild(node, visit);
50
+ if (!isStringsProperty(node))
51
+ return;
52
+ const strings = stringsObject(node, file);
53
+ if (strings === undefined) {
54
+ advice.add(UNREAD_STRINGS);
55
+ return;
56
+ }
57
+ if (strings.properties.some(isUnreadName))
58
+ advice.add(UNREAD_STRINGS);
59
+ if (done.has(strings))
60
+ return;
61
+ done.add(strings);
62
+ const removed = new Set(strings.properties.filter(isRemovedString));
63
+ if (removed.size === 0)
64
+ return;
65
+ const isInPlace = ts.isPropertyAssignment(node) && node.initializer === strings;
66
+ edits.push(...(isInPlace && removed.size === strings.properties.length
67
+ ? removalEdits(file, node.parent, new Set([node]))
68
+ : removalEdits(file, strings, removed)));
69
+ };
70
+ visit(file);
71
+ return { edits, advice: [...advice] };
72
+ };
73
+ /** The codemod. */
74
+ export const propGroupStrings = {
75
+ id: "prop-group-strings",
76
+ breaksIn: "0.4.0",
77
+ kind: "rewrite",
78
+ files: ["config", "module"],
79
+ summary: "Removes the strings propGroups.choice, .text, .structured and .toggle: the Props tab lists props in their source's order, with no such headings.",
80
+ run
81
+ };
@@ -0,0 +1,39 @@
1
+ import type { ImportedFramework } from "../importers/storybookFrameworks.ts";
2
+ import type { NextStep } from "./newProject.types.ts";
3
+ /** What `forgebook init` will write for a project. */
4
+ export type NewProjectPlan = {
5
+ /** The framework. */
6
+ readonly framework: ImportedFramework;
7
+ /** Its adapter's options; none for the defaults. */
8
+ readonly frameworkOptions: Readonly<Record<string, unknown>> | undefined;
9
+ /** The catalogue's name. */
10
+ readonly title: string;
11
+ /** The story globs. */
12
+ readonly stories: readonly string[];
13
+ /** The preview, when the project has something for it to load. */
14
+ readonly preview: {
15
+ readonly file: string;
16
+ readonly text: string;
17
+ } | undefined;
18
+ /** What was left to do. */
19
+ readonly nextSteps: readonly NextStep[];
20
+ /** The packages the project's own setup asks for, beyond the adapter's. */
21
+ readonly extraPeers: readonly string[];
22
+ };
23
+ /**
24
+ * The configuration's story globs, and whether the search for story files stopped short.
25
+ *
26
+ * @param projectDir - the project's folder.
27
+ * @param framework - its framework.
28
+ */
29
+ export declare const storyGlobsOf: (projectDir: string, framework: ImportedFramework) => {
30
+ readonly globs: readonly string[];
31
+ readonly isCut: boolean;
32
+ };
33
+ /**
34
+ * What `forgebook init` will write for a project.
35
+ *
36
+ * @param projectDir - the project's folder, absolute.
37
+ * @param framework - its framework.
38
+ */
39
+ export declare const planNewProject: (projectDir: string, framework: ImportedFramework) => NewProjectPlan;
@@ -0,0 +1,180 @@
1
+ /**
2
+ * What `forgebook init` writes for a project with no Storybook: its framework read from `package.json`, the adapter's
3
+ * options, the story globs, and the preview that loads the app's global style sheets.
4
+ *
5
+ * @remarks
6
+ * Nothing is written here: the plan comes back whole, so a refusal leaves the project as it was. Story globs carry the
7
+ * extension `forgebook new` writes for the framework, and any folder that already has story files. A project with `src`
8
+ * keeps its components there; one without lists every usual folder, an absent one included, since create-next-app's
9
+ * `components` appears later. They are one pattern, braces and all, because a command stops on any pattern that matches
10
+ * nothing (a misspelt one looks the same), and a project's first story fills only one of its folders. The preview
11
+ * is `.tsx` where stories are, so the decorator a next step asks for needs no rename.
12
+ *
13
+ * @module
14
+ */
15
+ import { existsSync, readdirSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ import { STORY_FILE } from "../../../src/vite/autoTitle.js";
18
+ import { projectTitle } from "../importers/storybook.js";
19
+ import { PROJECT_FRAMEWORKS } from "./projectFrameworks.js";
20
+ import { hasPostcssConfig, readProjectLook } from "./projectLook.js";
21
+ import { declaredPackages, installedVersion } from "./projectPackages.js";
22
+ /** The folders never searched for story files: what is installed, built, or the tools' own. */
23
+ const SKIPPED_FOLDERS = new Set(["node_modules", "dist", "build", "out", "coverage", "public"]);
24
+ /** How many folders a search for story files goes through, so a huge repository's first run stays quick. */
25
+ const SEARCH_LIMIT = 5000;
26
+ /** A folder's entries; none for one the command may not read, which only leaves its stories out. */
27
+ const readableEntries = (dir) => {
28
+ try {
29
+ return readdirSync(dir, { withFileTypes: true });
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ };
35
+ /** The folders to search below a folder. */
36
+ const foldersBelow = ({ dir, top }, entries) => entries
37
+ .filter((entry) => entry.isDirectory() && !entry.name.startsWith(".") && !SKIPPED_FOLDERS.has(entry.name))
38
+ .map((entry) => ({ dir: join(dir, entry.name), top: top || entry.name }));
39
+ /** The folders holding story files already, and those files' extensions. */
40
+ const existingStories = (projectDir) => {
41
+ const folders = new Set();
42
+ const extensions = new Set();
43
+ const queue = [{ dir: projectDir, top: "" }];
44
+ for (const current of queue) {
45
+ if (queue.length > SEARCH_LIMIT)
46
+ break;
47
+ const entries = readableEntries(current.dir);
48
+ for (const folder of foldersBelow(current, entries))
49
+ queue.push(folder);
50
+ for (const { name } of entries.filter((entry) => entry.isFile() && STORY_FILE.test(entry.name))) {
51
+ folders.add(current.top);
52
+ extensions.add(name.slice(name.lastIndexOf(".") + 1));
53
+ }
54
+ }
55
+ return { folders, extensions, isCut: queue.length > SEARCH_LIMIT };
56
+ };
57
+ /** A glob's alternatives: one as it is, several in braces. */
58
+ const oneOf = (names) => names.length === 1 ? (names[0] ?? "") : `{${names.join(",")}}`;
59
+ /**
60
+ * The configuration's story globs, and whether the search for story files stopped short.
61
+ *
62
+ * @param projectDir - the project's folder.
63
+ * @param framework - its framework.
64
+ */
65
+ export const storyGlobsOf = (projectDir, framework) => {
66
+ const { sourceFolders, storyExtension } = PROJECT_FRAMEWORKS[framework];
67
+ const isThere = (folder) => existsSync(join(projectDir, folder));
68
+ const hasSrc = sourceFolders.includes("src") && isThere("src");
69
+ const listed = hasSrc
70
+ ? ["src"]
71
+ : [...sourceFolders].sort((a, b) => Number(isThere(b)) - Number(isThere(a)));
72
+ const stories = existingStories(projectDir);
73
+ const extensions = [...new Set([storyExtension, ...stories.extensions])];
74
+ const folders = [...new Set([...listed, ...stories.folders])];
75
+ const extension = oneOf(extensions);
76
+ const nested = folders.filter((folder) => folder !== "");
77
+ const globs = [
78
+ ...(folders.includes("") ? [`*.stories.${extension}`] : []),
79
+ ...(nested.length === 0 ? [] : [`${oneOf(nested)}/**/*.stories.${extension}`])
80
+ ];
81
+ return { globs, isCut: stories.isCut };
82
+ };
83
+ /**
84
+ * What React Native's adapter must be told of a project: the JSX runtime of NativeWind, and the Babel plugin that
85
+ * compiles Reanimated's worklets, which Metro runs on the device and the catalogue must run here.
86
+ *
87
+ * @param projectDir - the project's folder.
88
+ * @param declared - the packages it declares.
89
+ */
90
+ const reactNativeOptions = (projectDir, declared) => {
91
+ const reanimated = installedVersion(projectDir, "react-native-reanimated") ?? declared.get("react-native-reanimated");
92
+ const major = Number(reanimated?.match(/\d+/)?.[0] ?? 0);
93
+ const plugin = major >= 4 ? "react-native-worklets/plugin" : "react-native-reanimated/plugin";
94
+ const options = {
95
+ ...(declared.has("nativewind") ? { jsxImportSource: "nativewind" } : {}),
96
+ ...(reanimated === undefined ? {} : { babel: { plugins: [plugin] } })
97
+ };
98
+ return Object.keys(options).length === 0 ? undefined : options;
99
+ };
100
+ /** What a framework asks of a project besides the catalogue's own files. */
101
+ const frameworkSteps = (projectDir, framework) => {
102
+ if (framework === "nuxt")
103
+ return [
104
+ {
105
+ kind: "provider",
106
+ file: "nuxt.config",
107
+ message: "Nuxt's modules are loaded for their plugins, styles and components, but what they and the app's plugins set up at run time is not: a component that needs one (a store, i18n) gets it from a decorator in forgebook.preview.ts"
108
+ }
109
+ ];
110
+ if (framework === "sveltekit" && !existsSync(join(projectDir, ".svelte-kit")))
111
+ return [
112
+ {
113
+ kind: "setup",
114
+ file: "tsconfig.json",
115
+ message: "Run `svelte-kit sync` before the catalogue: the project's tsconfig.json extends what it writes"
116
+ }
117
+ ];
118
+ if (framework === "react-native-web") {
119
+ const read = ["babel.config.js", "metro.config.js"].filter((name) => existsSync(join(projectDir, name)));
120
+ return read.length === 0
121
+ ? []
122
+ : [
123
+ {
124
+ kind: "setup",
125
+ file: read[0],
126
+ message: `${read.join(" and ")} ${read.length === 1 ? "is" : "are"} not read: a plugin stories need goes to reactNativeWeb({ babel }) in the configuration`
127
+ }
128
+ ];
129
+ }
130
+ return [];
131
+ };
132
+ /** The text of the preview that loads the app's style sheets. */
133
+ const previewText = (styleSheets) => [
134
+ "/**",
135
+ " * The catalogue's preview: what every story's frame loads, as the app's entry does. Written by `forgebook init`;",
136
+ " * decorators, a provider around every story and the like go here too.",
137
+ " *",
138
+ " * @module",
139
+ " */",
140
+ ...styleSheets.map((sheet) => `import ${JSON.stringify(sheet)};`),
141
+ ""
142
+ ].join("\n");
143
+ /**
144
+ * What `forgebook init` will write for a project.
145
+ *
146
+ * @param projectDir - the project's folder, absolute.
147
+ * @param framework - its framework.
148
+ */
149
+ export const planNewProject = (projectDir, framework) => {
150
+ const declared = declaredPackages(projectDir);
151
+ const look = readProjectLook(projectDir, framework, declared);
152
+ const { globs, isCut } = storyGlobsOf(projectDir, framework);
153
+ return {
154
+ framework,
155
+ frameworkOptions: framework === "react-native-web" ? reactNativeOptions(projectDir, declared) : undefined,
156
+ title: projectTitle(projectDir),
157
+ stories: globs,
158
+ preview: look.styleSheets.length === 0
159
+ ? undefined
160
+ : {
161
+ file: `forgebook.preview.${PROJECT_FRAMEWORKS[framework].storyExtension}`,
162
+ text: previewText(look.styleSheets)
163
+ },
164
+ nextSteps: [
165
+ ...frameworkSteps(projectDir, framework),
166
+ ...look.nextSteps,
167
+ ...(isCut
168
+ ? [
169
+ {
170
+ kind: "setup",
171
+ file: undefined,
172
+ message: `The search for story files stopped after ${SEARCH_LIMIT} folders: add the globs of any it missed`
173
+ }
174
+ ]
175
+ : [])
176
+ ],
177
+ // React Native's adapter imports PostCSS when the project has a configuration for it
178
+ extraPeers: framework === "react-native-web" && hasPostcssConfig(projectDir) ? ["postcss"] : []
179
+ };
180
+ };