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,22 @@
1
+ /**
2
+ * The list of the shell's keys, in a modal dialog, with the switch that turns the keys without a modifier off.
3
+ *
4
+ * @remarks
5
+ * The platform's modal dialog holds the focus, closes on Escape and gives the focus back. A frame keeps its own keys, so
6
+ * the list says these work only outside a story. Loaded when first opened (`useShortcutHelp.tsx`).
7
+ *
8
+ * @module
9
+ */
10
+ import { type ReactNode } from "react";
11
+ import "./shortcutHelp.scss";
12
+ /** The list's props. */
13
+ export type ShortcutHelpProps = {
14
+ /** Called when the list closes. */
15
+ readonly onClose: () => void;
16
+ };
17
+ /**
18
+ * The list.
19
+ *
20
+ * @param props - what to call when it closes.
21
+ */
22
+ export declare const ShortcutHelp: ({ onClose }: ShortcutHelpProps) => ReactNode;
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * The list of the shell's keys, in a modal dialog, with the switch that turns the keys without a modifier off.
4
+ *
5
+ * @remarks
6
+ * The platform's modal dialog holds the focus, closes on Escape and gives the focus back. A frame keeps its own keys, so
7
+ * the list says these work only outside a story. Loaded when first opened (`useShortcutHelp.tsx`).
8
+ *
9
+ * @module
10
+ */
11
+ import { useEffect, useRef, useState } from "react";
12
+ import { shownKeys } from "../controlKeys.js";
13
+ import { catalogueControls } from "../toolbarLayout.js";
14
+ import { useCatalogue } from "./catalogueContext.js";
15
+ import { controlLabel } from "./controlLabel.js";
16
+ import { SINGLE_KEYS_STORED } from "./keyboard.js";
17
+ import "./shortcutHelp.css";
18
+ import { textsOfGroup } from "./strings.js";
19
+ import { readStored, writeStored } from "./useStored.js";
20
+ import { readKeys } from "./useToolbarLayout.js";
21
+ /** The list's texts, as shown: Forgebook's, with the catalogue's replacements. */
22
+ const HELP_STRINGS = textsOfGroup("shortcuts", {
23
+ title: "Keyboard keys",
24
+ note: "They work while the focus is outside a story: a story keeps every key pressed inside it.",
25
+ search: "Go to the search",
26
+ previous: "Previous story",
27
+ next: "Next story",
28
+ help: "This list",
29
+ close: "Close",
30
+ singleKeys: "Keys without a modifier",
31
+ singleKeysNote: "Off, only the search's key with a modifier stays. This browser remembers it.",
32
+ control: (label) => `Next value of ${label}; Shift for the one before`
33
+ });
34
+ /** The key with the platform's modifier that goes to the search. */
35
+ const searchKey = () => (/Mac|iPhone|iPad/.test(navigator.platform) ? "⌘ K" : "Ctrl K");
36
+ /**
37
+ * The list.
38
+ *
39
+ * @param props - what to call when it closes.
40
+ */
41
+ export const ShortcutHelp = ({ onClose }) => {
42
+ const catalogue = useCatalogue();
43
+ const dialogRef = useRef(null);
44
+ const [isOn, setIsOn] = useState(() => readStored(SINGLE_KEYS_STORED) !== "off");
45
+ useEffect(() => {
46
+ dialogRef.current?.showModal();
47
+ }, []);
48
+ const keys = shownKeys(catalogue.keys, readKeys(readStored(`${catalogue.id}:toolbar-keys`)));
49
+ const controlRows = catalogueControls(catalogue).flatMap((control) => {
50
+ const key = keys[control.id];
51
+ return key === undefined
52
+ ? []
53
+ : [{ keys: [key.toUpperCase()], text: HELP_STRINGS.control(controlLabel(control)) }];
54
+ });
55
+ const rows = [
56
+ { keys: ["/", searchKey()], text: HELP_STRINGS.search },
57
+ { keys: ["["], text: HELP_STRINGS.previous },
58
+ { keys: ["]"], text: HELP_STRINGS.next },
59
+ ...controlRows,
60
+ { keys: ["?"], text: HELP_STRINGS.help }
61
+ ];
62
+ return (_jsxs("dialog", { ref: dialogRef, className: "forgebook-keys", "aria-label": HELP_STRINGS.title, onClose: onClose, children: [_jsx("h2", { className: "forgebook-keys__title", children: HELP_STRINGS.title }), _jsx("p", { className: "forgebook-keys__note", children: HELP_STRINGS.note }), _jsx("dl", { className: "forgebook-keys__list", children: rows.map((row) => (_jsxs("div", { className: "forgebook-keys__row", children: [_jsx("dt", { children: row.keys.map((key) => (_jsx("kbd", { className: "forgebook-keys__key", children: key }, key))) }), _jsx("dd", { children: row.text })] }, row.text))) }), _jsxs("label", { className: "forgebook-keys__switch", children: [_jsx("input", { type: "checkbox", checked: isOn, onChange: (event) => {
63
+ setIsOn(event.target.checked);
64
+ writeStored(SINGLE_KEYS_STORED, event.target.checked ? "on" : "off");
65
+ } }), _jsxs("span", { children: [HELP_STRINGS.singleKeys, _jsx("small", { className: "forgebook-keys__note", children: HELP_STRINGS.singleKeysNote })] })] }), _jsx("form", { method: "dialog", className: "forgebook-keys__foot", children: _jsx("button", { type: "submit", className: "forgebook-button", children: HELP_STRINGS.close }) })] }));
66
+ };
@@ -6,7 +6,8 @@
6
6
  * component by its
7
7
  * name, its place, its meta's search words or its stories' names and descriptions. A component listed in other places too (`alsoIn`) has an
8
8
  * alias entry in each, beside the components that live there, which says where it lives and opens its page. Docs pages
9
- * come first, in a section of their own (`SidebarDocs.tsx`).
9
+ * come first, in a section of their own (`SidebarDocs.tsx`); other catalogues composed with `refs` come last
10
+ * (`SidebarRefs.tsx`).
10
11
  *
11
12
  * @module
12
13
  */
@@ -14,7 +15,7 @@ import type { StorySource } from "@forgebook/story-format/source";
14
15
  import { type ReactNode, type Ref } from "react";
15
16
  import type { SearchTarget } from "../search.ts";
16
17
  import type { StoryTree } from "../storyTree.ts";
17
- import { type SidebarPageLinks } from "./SidebarDocs.tsx";
18
+ import type { SidebarPageLinks } from "./SidebarDocs.tsx";
18
19
  import { type ShownComponent } from "./SidebarEntries.tsx";
19
20
  import type { AppearanceState } from "./useAppearance.ts";
20
21
  /** The sidebar's props. */
@@ -25,8 +26,14 @@ export type SidebarProps = SidebarPageLinks & {
25
26
  readonly logo: string | undefined;
26
27
  /** Whether a catalogue without a logo shows Forgebook's mark. */
27
28
  readonly hasBranding: boolean;
28
- /** The tree. */
29
+ /** The tree it lists: what the tag filter keeps. */
29
30
  readonly tree: StoryTree;
31
+ /** The whole tree, whose tags the filter offers. */
32
+ readonly wholeTree: StoryTree;
33
+ /** The tags on, each `name` or `!name`. */
34
+ readonly tags: readonly string[];
35
+ /** Called with the tags on, when they change. */
36
+ readonly onTagsChange: (tags: readonly string[]) => void;
30
37
  /** The sources, for the search's index. */
31
38
  readonly sources: readonly StorySource[];
32
39
  /** The address of a search's result. */
@@ -52,6 +59,8 @@ export type SidebarProps = SidebarPageLinks & {
52
59
  readonly onOpenComponent: (sourceId: string, title: string) => void;
53
60
  /** The sidebar's width, in CSS px. */
54
61
  readonly width: number;
62
+ /** Sets the sidebar's width, from its handle. */
63
+ readonly onWidthChange: (width: number) => void;
55
64
  /** Whether it is shown: hidden, it slides out and stays mounted, so its search and open families come back with it. */
56
65
  readonly isOpen: boolean;
57
66
  /** Whether it lies over the page and not beside it, on a narrow window. */
@@ -66,10 +75,14 @@ export type SidebarProps = SidebarPageLinks & {
66
75
  readonly onShow: () => void;
67
76
  /** The shell's appearance and its setter, for the menu at the foot. */
68
77
  readonly appearance: AppearanceState;
78
+ /** Opens the list of the shell's keys. */
79
+ readonly onShowKeys: () => void;
80
+ /** What is listed after this catalogue's stories when no search or tag narrows them: the composed catalogues. */
81
+ readonly composed?: ReactNode;
69
82
  };
70
83
  /**
71
84
  * The sidebar.
72
85
  *
73
86
  * @param props - the tree, the shown component and how to open one.
74
87
  */
75
- export declare const Sidebar: ({ title, logo, hasBranding, tree, sources: storySources, searchHref, onOpenResult, isHome, homeHref, onOpenHome, current, currentPageId, pageHref, onOpenPage, width, isOpen, isOverlay, sidebarRef, hideButtonRef, onHide, onShow, appearance, ...links }: SidebarProps) => ReactNode;
88
+ export declare const Sidebar: ({ title, logo, hasBranding, tree, wholeTree, tags, onTagsChange, sources: storySources, searchHref, onOpenResult, isHome, homeHref, onOpenHome, current, currentPageId, pageHref, onOpenPage, width, onWidthChange, isOpen, isOverlay, sidebarRef, hideButtonRef, onHide, onShow, appearance, onShowKeys, ...links }: SidebarProps) => ReactNode;
@@ -1,12 +1,24 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useRef, useState } from "react";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { hasFilterTags } from "../storyTagNames.js";
3
4
  import { AppearanceMenu } from "./AppearanceMenu.js";
5
+ import { HAS_REFS } from "./composition.js";
4
6
  import { FORGEBOOK_MARK_URL } from "./forgebookMark.js";
5
7
  import { Icon } from "./icons.js";
6
- import { SidebarDocs } from "./SidebarDocs.js";
8
+ import { LazyView, lazyModule } from "./lazyModule.js";
7
9
  import { FamilyGroup, TreeFold } from "./SidebarEntries.js";
10
+ import { SidebarHandle } from "./SidebarHandle.js";
8
11
  import { SidebarSearch } from "./SidebarSearch.js";
9
12
  import { STRINGS } from "./strings.js";
13
+ import { TagViewSlot } from "./tagView.js";
14
+ /** The docs pages' section, loaded only for a catalogue that has some. */
15
+ const SIDEBAR_DOCS = lazyModule(() => import("./SidebarDocs.js").then((module) => module.SidebarDocs));
16
+ /**
17
+ * The docs pages' section, once its module is there; nothing for a catalogue with no pages.
18
+ *
19
+ * @param props - the section's props.
20
+ */
21
+ const LoadedDocs = (props) => props.sources.length === 0 ? null : (_jsx(LazyView, { module: SIDEBAR_DOCS, props: props, loading: null, failed: (message) => _jsx("p", { className: "forgebook-tree__empty", children: message }) }));
10
22
  /** A family's key, unique across sources. */
11
23
  const familyKey = (source, family) => `${source.id}/${family.name}`;
12
24
  /** A named group's key, unique across sources and families. */
@@ -37,7 +49,7 @@ const currentGroupOf = (tree, current) => {
37
49
  return family === undefined || group === undefined ? undefined : groupKey(family, group);
38
50
  };
39
51
  /** The tree as it is, with no search on. */
40
- const wholeTree = (tree) => ({
52
+ const unsearchedTree = (tree) => ({
41
53
  sources: tree.sources.map((source) => ({ source, families: source.families })),
42
54
  pages: tree.sources
43
55
  .filter(({ pages }) => pages.length > 0)
@@ -45,16 +57,83 @@ const wholeTree = (tree) => ({
45
57
  });
46
58
  /** How many components a family holds. */
47
59
  const componentCount = (family) => family.groups.reduce((count, group) => count + group.components.length, 0);
60
+ /**
61
+ * The families and groups the user opened or closed, and the ones a shown component opened: once open, one stays open
62
+ * until the user closes it, so opening a component elsewhere never folds the list under the pointer.
63
+ *
64
+ * @param tree - the tree.
65
+ * @param current - the shown component, if one is.
66
+ */
67
+ const useFoldChoices = (tree, current) => {
68
+ const [foldChoices, setFoldChoices] = useState(new Map());
69
+ const currentFamilyKey = currentFamilyOf(tree, current);
70
+ const currentGroupKey = currentGroupOf(tree, current);
71
+ useEffect(() => {
72
+ const opened = [currentFamilyKey, currentGroupKey].filter((key) => key !== undefined);
73
+ setFoldChoices((choices) => opened.every((key) => choices.has(key))
74
+ ? choices
75
+ : new Map([
76
+ ...choices,
77
+ ...opened.filter((key) => !choices.has(key)).map((key) => [key, true])
78
+ ]));
79
+ }, [currentFamilyKey, currentGroupKey]);
80
+ return {
81
+ foldChoices,
82
+ setFoldOpen: (key, isOpen) => setFoldChoices((choices) => new Map(choices).set(key, isOpen))
83
+ };
84
+ };
85
+ /**
86
+ * The tag filter, where there is something to filter by, or on an address that names a tag: it is the way out of a list
87
+ * that tag emptied.
88
+ *
89
+ * @param props - the filter's props.
90
+ */
91
+ const TagFilterSlot = (props) => {
92
+ const hasTags = useMemo(() => hasFilterTags(props.tree), [props.tree]);
93
+ return hasTags || props.tags.length > 0 ? _jsx(TagViewSlot, { place: "filter", ...props }) : null;
94
+ };
95
+ /**
96
+ * A family: a button that folds it, and its groups.
97
+ *
98
+ * @param props - the family, its source, what the user chose to fold, the shown page and the links.
99
+ */
100
+ const FamilyEntry = ({ source, family, isNarrowed, foldChoices, onFoldChange, current, links }) => {
101
+ const key = familyKey(source, family);
102
+ const isCurrentFamily = current?.sourceId === source.id &&
103
+ family.groups.some((group) => group.components.some((component) => component.title === current.title));
104
+ const isOpen = isNarrowed || (foldChoices.get(key) ?? isCurrentFamily);
105
+ return (_jsxs("div", { className: "forgebook-tree__family", children: [_jsxs("button", { type: "button", className: "forgebook-tree__family-button", "aria-expanded": isOpen, onClick: () => onFoldChange(key, !isOpen), children: [_jsx("span", { className: "forgebook-tree__chevron", "data-open": isOpen ? "" : undefined, children: _jsx(Icon, { name: "chevronRight", size: 12 }) }), _jsx("span", { className: "forgebook-tree__family-name", children: family.name }), _jsx("span", { className: "forgebook-tree__count", children: componentCount(family) || null })] }), _jsx(TreeFold, { isOpen: isOpen, isInstant: isNarrowed, content: () => family.groups.map((group) => {
106
+ const groupOf = groupKey(key, group);
107
+ const isGroupOpen = isNarrowed || (foldChoices.get(groupOf) ?? holdsCurrent(source.id, group, current));
108
+ return (_jsx(FamilyGroup, { sourceId: source.id, group: group, isOpen: isGroupOpen, isInstant: isNarrowed, onToggle: () => onFoldChange(groupOf, !isGroupOpen), current: current, links: links }, group.name ?? ""));
109
+ }) })] }));
110
+ };
111
+ /**
112
+ * A source: its name and its families; nothing when no family is left of it.
113
+ *
114
+ * @param props - the source, its families, and what each family reads.
115
+ */
116
+ const SourceEntry = ({ source, families, ...family }) => families.length === 0 ? null : (_jsxs("section", { className: "forgebook-tree__source", children: [_jsxs("h2", { className: "forgebook-tree__source-name", children: [source.logo === undefined ? null : (_jsx("img", { className: "forgebook-source-logo", src: source.logo, alt: "", width: 14, height: 14 })), source.name] }), families.map((each) => (_jsx(FamilyEntry, { source: source, family: each, ...family }, familyKey(source, each))))] }));
117
+ /**
118
+ * The catalogue's name and logo, the way home.
119
+ *
120
+ * @param props - the name, the logo's address if it has one, and the home's address.
121
+ */
122
+ const SidebarBrand = ({ title, mark, isHome, homeHref, onOpenHome }) => (_jsx(_Fragment, { children: _jsxs("a", { className: "forgebook-brand__home", href: homeHref, "aria-current": isHome ? "page" : undefined, title: STRINGS.home, onClick: (event) => {
123
+ if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0)
124
+ return;
125
+ event.preventDefault();
126
+ onOpenHome();
127
+ }, children: [mark === undefined ? null : (_jsx("img", { className: "forgebook-brand__logo", src: mark, alt: "", width: 28, height: 28 })), _jsx("span", { className: "forgebook-brand__name", children: title })] }) }));
48
128
  /**
49
129
  * The sidebar.
50
130
  *
51
131
  * @param props - the tree, the shown component and how to open one.
52
132
  */
53
- export const Sidebar = ({ title, logo, hasBranding, tree, sources: storySources, searchHref, onOpenResult, isHome, homeHref, onOpenHome, current, currentPageId, pageHref, onOpenPage, width, isOpen, isOverlay, sidebarRef, hideButtonRef, onHide, onShow, appearance, ...links }) => {
133
+ export const Sidebar = ({ title, logo, hasBranding, tree, wholeTree, tags, onTagsChange, sources: storySources, searchHref, onOpenResult, isHome, homeHref, onOpenHome, current, currentPageId, pageHref, onOpenPage, width, onWidthChange, isOpen, isOverlay, sidebarRef, hideButtonRef, onHide, onShow, appearance, onShowKeys, ...links }) => {
54
134
  const [query, setQuery] = useState("");
55
- const [filterTree, setFilterTree] = useState();
135
+ const [filterTree, setFilterTree] = useState(() => unsearchedTree);
56
136
  const showFiltered = useCallback((filter) => setFilterTree(() => filter), []);
57
- const mark = logo ?? (hasBranding ? FORGEBOOK_MARK_URL : undefined);
58
137
  const navRef = useRef(null);
59
138
  // the shown component stays in sight: a page opened by a key, the picker or the address scrolls the list to it
60
139
  const currentEntry = currentPageId ?? current?.title;
@@ -65,41 +144,13 @@ export const Sidebar = ({ title, logo, hasBranding, tree, sources: storySources,
65
144
  ?.querySelector(".forgebook-tree__item[aria-current]")
66
145
  ?.scrollIntoView({ block: "nearest" });
67
146
  }, [currentEntry]);
68
- // the families and groups the user opened or closed, and the ones a shown component opened: once open, one stays
69
- // open until the user closes it, so opening a component elsewhere never folds the list under the pointer
70
- const [foldChoices, setFoldChoices] = useState(new Map());
71
- const currentFamilyKey = currentFamilyOf(tree, current);
72
- const currentGroupKey = currentGroupOf(tree, current);
73
- useEffect(() => {
74
- const opened = [currentFamilyKey, currentGroupKey].filter((key) => key !== undefined);
75
- setFoldChoices((choices) => opened.every((key) => choices.has(key))
76
- ? choices
77
- : new Map([
78
- ...choices,
79
- ...opened.filter((key) => !choices.has(key)).map((key) => [key, true])
80
- ]));
81
- }, [currentFamilyKey, currentGroupKey]);
147
+ const { foldChoices, setFoldOpen } = useFoldChoices(tree, current);
148
+ // the tag filter opens what it keeps, as a search does
149
+ const isFiltered = tags.length > 0;
82
150
  const isSearching = query.trim() !== "";
83
- const isCurrentFamily = (source, family) => current?.sourceId === source.id &&
84
- family.groups.some((group) => group.components.some((component) => component.title === current.title));
85
- const setFoldOpen = (key, isOpen) => setFoldChoices((choices) => new Map(choices).set(key, isOpen));
151
+ const isNarrowed = isSearching || isFiltered;
86
152
  // the filter comes with the search's list; a moment before it, or with no words, the tree shows whole
87
- const { sources, pages } = isSearching && filterTree !== undefined ? filterTree(tree, query) : wholeTree(tree);
153
+ const { sources, pages } = isSearching ? filterTree(tree, query) : unsearchedTree(tree);
88
154
  const hasMatches = pages.length > 0 || sources.some(({ families }) => families.length > 0);
89
- return (_jsxs("aside", { ref: sidebarRef, className: "forgebook-sidebar", "data-open": isOpen ? "" : undefined, "data-overlay": isOverlay ? "" : undefined, inert: !isOpen, style: { width, marginInlineStart: isOpen ? 0 : -width }, children: [_jsxs("div", { className: "forgebook-brand", children: [_jsxs("a", { className: "forgebook-brand__home", href: homeHref, "aria-current": isHome ? "page" : undefined, title: STRINGS.home, onClick: (event) => {
90
- if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0)
91
- return;
92
- event.preventDefault();
93
- onOpenHome();
94
- }, children: [mark === undefined ? null : (_jsx("img", { className: "forgebook-brand__logo", src: mark, alt: "", width: 28, height: 28 })), _jsx("span", { className: "forgebook-brand__name", children: title })] }), _jsx("button", { ref: hideButtonRef, type: "button", className: "forgebook-icon-button forgebook-brand__hide", title: STRINGS.hideSidebar, "aria-label": STRINGS.hideSidebar, onClick: onHide, children: _jsx(Icon, { name: "sidebar", size: 14 }) })] }), _jsx(SidebarSearch, { query: query, onQueryChange: setQuery, onFilterReady: showFiltered, tree: tree, sources: storySources, sidebarWidth: width, isSidebarOpen: isOpen, onShowSidebar: onShow, searchHref: searchHref, onOpenResult: onOpenResult }), _jsxs("nav", { ref: navRef, className: "forgebook-tree", "aria-label": STRINGS.componentsNav, children: [hasMatches ? null : _jsx("p", { className: "forgebook-tree__empty", children: STRINGS.noMatch }), _jsx(SidebarDocs, { sources: pages, currentPageId: currentPageId, isSearching: isSearching, foldChoices: foldChoices, onFoldChange: setFoldOpen, pageHref: pageHref, onOpenPage: onOpenPage }), sources.map(({ source, families }) => families.length === 0 ? null : (_jsxs("section", { className: "forgebook-tree__source", children: [_jsxs("h2", { className: "forgebook-tree__source-name", children: [source.logo === undefined ? null : (_jsx("img", { className: "forgebook-source-logo", src: source.logo, alt: "", width: 14, height: 14 })), source.name] }), families.map((family) => {
95
- const key = familyKey(source, family);
96
- // a search opens every family it finds something in
97
- const isOpen = isSearching || (foldChoices.get(key) ?? isCurrentFamily(source, family));
98
- return (_jsxs("div", { className: "forgebook-tree__family", children: [_jsxs("button", { type: "button", className: "forgebook-tree__family-button", "aria-expanded": isOpen, onClick: () => setFoldOpen(key, !isOpen), children: [_jsx("span", { className: "forgebook-tree__chevron", "data-open": isOpen ? "" : undefined, children: _jsx(Icon, { name: "chevronRight", size: 12 }) }), _jsx("span", { className: "forgebook-tree__family-name", children: family.name }), _jsx("span", { className: "forgebook-tree__count", children: componentCount(family) })] }), _jsx(TreeFold, { isOpen: isOpen, isInstant: isSearching, content: () => family.groups.map((group) => {
99
- const key = groupKey(familyKey(source, family), group);
100
- // shut by default; a search opens every group it finds something in
101
- const isGroupOpen = isSearching || (foldChoices.get(key) ?? holdsCurrent(source.id, group, current));
102
- return (_jsx(FamilyGroup, { sourceId: source.id, group: group, isOpen: isGroupOpen, isInstant: isSearching, onToggle: () => setFoldOpen(key, !isGroupOpen), current: current, links: links }, group.name ?? ""));
103
- }) })] }, key));
104
- })] }, source.id)))] }), _jsx(AppearanceMenu, { ...appearance })] }));
155
+ return (_jsxs("aside", { ref: sidebarRef, className: "forgebook-sidebar", "data-open": isOpen ? "" : undefined, "data-overlay": isOverlay ? "" : undefined, inert: !isOpen, style: { width, marginInlineStart: isOpen ? 0 : -width }, children: [_jsxs("div", { className: "forgebook-brand", children: [_jsx(SidebarBrand, { title: title, mark: logo ?? (hasBranding ? FORGEBOOK_MARK_URL : undefined), isHome: isHome, homeHref: homeHref, onOpenHome: onOpenHome }), _jsx("button", { ref: hideButtonRef, type: "button", className: "forgebook-icon-button forgebook-brand__hide", title: STRINGS.hideSidebar, "aria-label": STRINGS.hideSidebar, onClick: onHide, children: _jsx(Icon, { name: "sidebar", size: 14 }) })] }), _jsxs("div", { className: "forgebook-search-row", children: [_jsx(SidebarSearch, { query: query, onQueryChange: setQuery, onFilterReady: showFiltered, tree: tree, sources: storySources, sidebarWidth: width, isSidebarOpen: isOpen, onShowSidebar: onShow, searchHref: searchHref, onOpenResult: onOpenResult }), _jsx(TagFilterSlot, { tree: wholeTree, tags: tags, onTagsChange: onTagsChange })] }), _jsxs("nav", { ref: navRef, className: "forgebook-tree", "aria-label": STRINGS.componentsNav, children: [hasMatches || !isNarrowed ? null : _jsx("p", { className: "forgebook-tree__empty", children: STRINGS.noMatch }), _jsx(LoadedDocs, { sources: pages, currentPageId: currentPageId, isSearching: isNarrowed, foldChoices: foldChoices, onFoldChange: setFoldOpen, pageHref: pageHref, onOpenPage: onOpenPage }), sources.map(({ source, families }) => (_jsx(SourceEntry, { source: source, families: families, isNarrowed: isNarrowed, foldChoices: foldChoices, onFoldChange: setFoldOpen, current: current, links: links }, source.id))), HAS_REFS && !isNarrowed ? links.composed : null] }), _jsx(AppearanceMenu, { ...appearance, onShowKeys: onShowKeys }), isOpen && !isOverlay ? _jsx(SidebarHandle, { width: width, onWidthChange: onWidthChange }) : null] }));
105
156
  };
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { pageGroups } from "../pageTree.js";
3
3
  import { Icon } from "./icons.js";
4
+ import { LATER_STRINGS } from "./laterStrings.js";
4
5
  import { PageLink, TreeFold } from "./SidebarEntries.js";
5
- import { STRINGS } from "./strings.js";
6
6
  /**
7
7
  * A page's link.
8
8
  *
@@ -27,4 +27,4 @@ const PageGroupEntries = ({ sourceId, group, currentPageId, isSearching, foldCho
27
27
  *
28
28
  * @param props - the sources with their pages, the shown page, the folds and the links.
29
29
  */
30
- export const SidebarDocs = ({ sources, ...shared }) => sources.length === 0 ? null : (_jsxs("section", { className: "forgebook-tree__source", children: [_jsx("h2", { className: "forgebook-tree__source-name", children: STRINGS.docsNav }), sources.map(({ source, pages }) => (_jsxs("div", { children: [sources.length > 1 ? _jsx("h3", { className: "forgebook-tree__docs-source", children: source.name }) : null, pageGroups(pages).map((group) => (_jsx(PageGroupEntries, { sourceId: source.id, group: group, ...shared }, group.name ?? group.pages[0]?.id)))] }, source.id)))] }));
30
+ export const SidebarDocs = ({ sources, ...shared }) => sources.length === 0 ? null : (_jsxs("section", { className: "forgebook-tree__source", children: [_jsx("h2", { className: "forgebook-tree__source-name", children: LATER_STRINGS.docsNav }), sources.map(({ source, pages }) => (_jsxs("div", { children: [sources.length > 1 ? _jsx("h3", { className: "forgebook-tree__docs-source", children: source.name }) : null, pageGroups(pages).map((group) => (_jsx(PageGroupEntries, { sourceId: source.id, group: group, ...shared }, group.name ?? group.pages[0]?.id)))] }, source.id)))] }));
@@ -1,7 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { isFilterTag } from "../storyTagNames.js";
2
3
  import { isLogicComponent } from "../storyTree.js";
3
4
  import { Icon } from "./icons.js";
4
5
  import { STRINGS } from "./strings.js";
6
+ import { TagViewSlot } from "./tagView.js";
5
7
  import { useFold } from "./useFold.js";
6
8
  /** A link that opens a page in place, keeping a real address for a new tab. */
7
9
  export const PageLink = ({ href, className, current, onOpen, children }) => (_jsx("a", { className: className, href: href, "aria-current": current, onClick: (event) => {
@@ -29,12 +31,12 @@ export const FamilyGroup = ({ sourceId, group, isOpen, isInstant, onToggle, curr
29
31
  const entries = () => groupEntries(group).map((entry) => entry.kind === "component" ? (_jsx(ComponentEntry, { sourceId: sourceId, component: entry.component, isCurrent: current?.sourceId === sourceId && current.title === entry.component.title, currentStoryId: current?.storyId, links: links }, entry.component.title)) : (_jsx(AliasEntry, { sourceId: sourceId, alias: entry.alias, links: links }, `alias:${entry.alias.title}`)));
30
32
  if (group.name === undefined)
31
33
  return _jsx("div", { className: "forgebook-tree__group", children: entries() });
32
- return (_jsxs("div", { className: "forgebook-tree__group", children: [_jsx("h3", { className: "forgebook-tree__group-name", children: _jsxs("button", { type: "button", className: "forgebook-tree__group-button", "aria-expanded": isOpen, onClick: onToggle, children: [_jsx("span", { className: "forgebook-tree__chevron", "data-open": isOpen ? "" : undefined, children: _jsx(Icon, { name: "chevronRight", size: 12 }) }), _jsx("span", { className: "forgebook-tree__family-name", children: group.name }), _jsx("span", { className: "forgebook-tree__count", children: group.components.length })] }) }), _jsx(TreeFold, { isOpen: isOpen, isInstant: isInstant, content: entries })] }));
34
+ return (_jsxs("div", { className: "forgebook-tree__group", children: [_jsx("h3", { className: "forgebook-tree__group-name", children: _jsxs("button", { type: "button", className: "forgebook-tree__group-button", "aria-expanded": isOpen, onClick: onToggle, children: [_jsx("span", { className: "forgebook-tree__chevron", "data-open": isOpen ? "" : undefined, children: _jsx(Icon, { name: "chevronRight", size: 12 }) }), _jsx("span", { className: "forgebook-tree__family-name", children: group.name }), _jsx("span", { className: "forgebook-tree__count", children: group.components.length || null })] }) }), _jsx(TreeFold, { isOpen: isOpen, isInstant: isInstant, content: entries })] }));
33
35
  };
34
- /** A component's link: its page, where its stories are picked from the header. */
36
+ /** A component's link: its page, where its stories are picked from the header, with its status's badges. */
35
37
  const ComponentEntry = ({ sourceId, component, isCurrent, currentStoryId, links }) => {
36
38
  const current = isCurrent ? currentKind(currentStoryId) : undefined;
37
- return (_jsx("div", { className: "forgebook-tree__component", children: _jsxs(PageLink, { href: links.componentHref(sourceId, component.title), className: "forgebook-tree__item", current: current, onOpen: () => links.onOpenComponent(sourceId, component.title), children: [_jsx("span", { className: "forgebook-tree__item-name", children: component.name }), isLogicComponent(component) ? (_jsxs("span", { className: "forgebook-tree__logic", title: STRINGS.logicHint, children: [_jsx(Icon, { name: "function", size: 12 }), _jsx("span", { className: "forgebook-visually-hidden", children: STRINGS.logic })] })) : null, _jsx("span", { className: "forgebook-tree__count", children: component.stories.length })] }) }));
39
+ return (_jsx("div", { className: "forgebook-tree__component", children: _jsxs(PageLink, { href: links.componentHref(sourceId, component.title), className: "forgebook-tree__item", current: current, onOpen: () => links.onOpenComponent(sourceId, component.title), children: [_jsx("span", { className: "forgebook-tree__item-name", children: component.name }), isLogicComponent(component) ? (_jsxs("span", { className: "forgebook-tree__logic", title: STRINGS.logicHint, children: [_jsx(Icon, { name: "function", size: 12 }), _jsx("span", { className: "forgebook-visually-hidden", children: STRINGS.logic })] })) : null, component.tags.some(isFilterTag) ? _jsx(TagViewSlot, { place: "entry", component: component }) : null, _jsx("span", { className: "forgebook-tree__count", children: component.stories.length })] }) }));
38
40
  };
39
41
  /** The family a title places a component in: its first segment. */
40
42
  const familyOf = (title) => title.split("/")[0]?.trim() ?? title;
@@ -28,14 +28,12 @@ export declare const SidebarHandle: ({ width, onWidthChange }: {
28
28
  readonly onWidthChange: (width: number) => void;
29
29
  }) => ReactNode;
30
30
  /**
31
- * What borders the sidebar: beside the page its handle, while shown; over it the shade on the page.
31
+ * The shade on the page under a sidebar lying over it; none while the sidebar lies beside the page.
32
32
  *
33
- * @param props - where the sidebar lies, whether it is shown, its width and how to hide it.
33
+ * @param props - where the sidebar lies, whether it is shown and how to hide it.
34
34
  */
35
- export declare const SidebarEdge: ({ isOverlay, isOpen, width, onWidthChange, onHide }: {
35
+ export declare const SidebarShade: ({ isOverlay, isOpen, onHide }: {
36
36
  readonly isOverlay: boolean;
37
37
  readonly isOpen: boolean;
38
- readonly width: number;
39
- readonly onWidthChange: (width: number) => void;
40
38
  readonly onHide: () => void;
41
39
  }) => ReactNode;
@@ -44,12 +44,12 @@ export const SidebarHandle = ({ width, onWidthChange }) => {
44
44
  return (_jsx("div", { className: "forgebook-sidebar-handle", role: "separator", "aria-orientation": "vertical", "aria-label": STRINGS.sidebarWidth, "aria-valuenow": width, "aria-valuemin": SIDEBAR_WIDTH.min, "aria-valuemax": SIDEBAR_WIDTH.max, tabIndex: 0, onPointerDown: startResize, onKeyDown: resizeWithKeys }));
45
45
  };
46
46
  /**
47
- * What borders the sidebar: beside the page its handle, while shown; over it the shade on the page.
47
+ * The shade on the page under a sidebar lying over it; none while the sidebar lies beside the page.
48
48
  *
49
- * @param props - where the sidebar lies, whether it is shown, its width and how to hide it.
49
+ * @param props - where the sidebar lies, whether it is shown and how to hide it.
50
50
  */
51
- export const SidebarEdge = ({ isOverlay, isOpen, width, onWidthChange, onHide }) => {
51
+ export const SidebarShade = ({ isOverlay, isOpen, onHide }) => {
52
52
  if (!isOverlay)
53
- return isOpen ? _jsx(SidebarHandle, { width: width, onWidthChange: onWidthChange }) : null;
53
+ return null;
54
54
  return (_jsx("div", { className: "forgebook-sidebar-shade", "data-open": isOpen ? "" : undefined, "aria-hidden": "true", onClick: onHide }));
55
55
  };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The sidebar's sections of the composed catalogues (`refs`), after this catalogue's stories: one per catalogue, shut
3
+ * until opened, its components and their stories read from its index when it first opens.
4
+ *
5
+ * @remarks
6
+ * A composed catalogue's components have no page here (their docs and controls are its own page's), so a component
7
+ * folds open on its stories, each a link to the story shown read-only. The sections keep their own folds, as the tree
8
+ * does: what holds the shown story opens and stays open until the reader shuts it, so opening another page never folds
9
+ * the list under the pointer. The search and the tag filter stay this catalogue's: another's index is fetched only on
10
+ * demand, and searching it would fetch every one at the first key.
11
+ *
12
+ * @module
13
+ */
14
+ import { type ReactNode } from "react";
15
+ import type { CatalogueRef } from "../catalogueRefs.ts";
16
+ /** A story of a composed catalogue: the catalogue's id and the story's id in it. */
17
+ export type RefStoryPlace = {
18
+ /** The composed catalogue's id. */
19
+ readonly refId: string;
20
+ /** The story's id in it. */
21
+ readonly storyId: string;
22
+ };
23
+ /** The sections' props. */
24
+ export type SidebarRefsProps = {
25
+ /** The composed catalogues, in the configuration's order. */
26
+ readonly refs: readonly CatalogueRef[];
27
+ /** The shown story of a composed catalogue; none on any other page. */
28
+ readonly current: RefStoryPlace | undefined;
29
+ /** The address of a composed catalogue's story here, for its link. */
30
+ readonly refStoryHref: (place: RefStoryPlace) => string;
31
+ /** Shows a composed catalogue's story. */
32
+ readonly onOpenRefStory: (place: RefStoryPlace) => void;
33
+ };
34
+ /**
35
+ * The composed catalogues' sections. The section of the shown story opens, and stays open until the reader shuts it.
36
+ *
37
+ * @param props - the catalogues, the shown story and the links.
38
+ */
39
+ export declare const SidebarRefs: ({ refs, ...links }: SidebarRefsProps) => ReactNode;
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * The sidebar's sections of the composed catalogues (`refs`), after this catalogue's stories: one per catalogue, shut
4
+ * until opened, its components and their stories read from its index when it first opens.
5
+ *
6
+ * @remarks
7
+ * A composed catalogue's components have no page here (their docs and controls are its own page's), so a component
8
+ * folds open on its stories, each a link to the story shown read-only. The sections keep their own folds, as the tree
9
+ * does: what holds the shown story opens and stays open until the reader shuts it, so opening another page never folds
10
+ * the list under the pointer. The search and the tag filter stay this catalogue's: another's index is fetched only on
11
+ * demand, and searching it would fetch every one at the first key.
12
+ *
13
+ * @module
14
+ */
15
+ import { useEffect, useRef, useState } from "react";
16
+ import { Icon } from "./icons.js";
17
+ import { REF_STRINGS } from "./refStrings.js";
18
+ import { PageLink, TreeFold } from "./SidebarEntries.js";
19
+ import { useRefIndex } from "./useRefIndex.js";
20
+ /** A component's key among the folds; a section's is its catalogue's id. */
21
+ const componentKey = (refId, componentId) => `${refId}/${componentId}`;
22
+ /**
23
+ * A story's link, scrolled into sight when it is the shown one: a story opened by its address is in the list only once
24
+ * the index arrived, later than the sidebar's own scroll to the shown page.
25
+ *
26
+ * @param props - the link's address, whether it is shown, what opening it does and its name.
27
+ */
28
+ const RefStoryEntry = ({ href, isCurrent, onOpen, name }) => {
29
+ const entryRef = useRef(null);
30
+ useEffect(() => {
31
+ if (isCurrent)
32
+ entryRef.current?.scrollIntoView({ block: "nearest" });
33
+ }, [isCurrent]);
34
+ return (_jsx("div", { ref: entryRef, className: "forgebook-tree__component", children: _jsx(PageLink, { href: href, className: "forgebook-tree__item", current: isCurrent ? "page" : undefined, onOpen: onOpen, children: _jsx("span", { className: "forgebook-tree__item-name", children: name }) }) }));
35
+ };
36
+ /**
37
+ * A component of a composed catalogue: a button that folds it, and its stories' links.
38
+ *
39
+ * @param props - the component, its catalogue, the shown story, the folds and the links.
40
+ */
41
+ const RefComponentEntry = ({ composed, component, current, folds, onFold, refStoryHref, onOpenRefStory }) => {
42
+ const key = componentKey(composed.id, component.id);
43
+ const isOpen = folds.get(key) ?? false;
44
+ return (_jsxs("div", { className: "forgebook-tree__group", children: [_jsx("h3", { className: "forgebook-tree__group-name", children: _jsxs("button", { type: "button", className: "forgebook-tree__group-button", "aria-expanded": isOpen, onClick: () => onFold(key, !isOpen), children: [_jsx("span", { className: "forgebook-tree__chevron", "data-open": isOpen ? "" : undefined, children: _jsx(Icon, { name: "chevronRight", size: 12 }) }), _jsx("span", { className: "forgebook-tree__family-name", children: component.title.split("/").join(" › ") }), _jsx("span", { className: "forgebook-tree__count", children: component.stories.length })] }) }), _jsx(TreeFold, { isOpen: isOpen, isInstant: false, content: () => component.stories.map((story) => {
45
+ const place = { refId: composed.id, storyId: story.id };
46
+ return (_jsx(RefStoryEntry, { href: refStoryHref(place), isCurrent: current?.refId === composed.id && current.storyId === story.id, onOpen: () => onOpenRefStory(place), name: story.name }, story.id));
47
+ }) })] }));
48
+ };
49
+ /**
50
+ * What an open section lists: its components once its index is read, or what it is waiting for, or why it failed. The
51
+ * component that holds the shown story opens once the index says which it is.
52
+ *
53
+ * @param props - the section's catalogue and what its entries read.
54
+ */
55
+ const RefEntries = ({ composed, ...entries }) => {
56
+ const state = useRefIndex(composed, true);
57
+ const { current, folds, onFold } = entries;
58
+ const holding = state.status === "ready" && current?.refId === composed.id
59
+ ? state.index.components.find((component) => component.stories.some((story) => story.id === current.storyId))
60
+ : undefined;
61
+ const holdingKey = holding === undefined ? undefined : componentKey(composed.id, holding.id);
62
+ useEffect(() => {
63
+ if (holdingKey !== undefined && !folds.has(holdingKey))
64
+ onFold(holdingKey, true);
65
+ }, [holdingKey, folds, onFold]);
66
+ if (state.status === "error")
67
+ return _jsx("p", { className: "forgebook-tree__empty", children: REF_STRINGS.unreadable(composed.title, state.message) });
68
+ if (state.status !== "ready")
69
+ return _jsx("p", { className: "forgebook-tree__empty", children: REF_STRINGS.loading });
70
+ if (state.index.components.length === 0)
71
+ return _jsx("p", { className: "forgebook-tree__empty", children: REF_STRINGS.empty });
72
+ return state.index.components.map((component) => (_jsx(RefComponentEntry, { composed: composed, component: component, ...entries }, component.id)));
73
+ };
74
+ /**
75
+ * A composed catalogue's section: its name, which folds it, and its entries, read when it first opens.
76
+ *
77
+ * @param props - the catalogue and what its entries read.
78
+ */
79
+ const RefSection = ({ composed, ...entries }) => {
80
+ const isOpen = entries.folds.get(composed.id) ?? false;
81
+ return (_jsx("section", { className: "forgebook-tree__source", "aria-label": REF_STRINGS.section(composed.title), children: _jsxs("div", { className: "forgebook-tree__family", children: [_jsxs("button", { type: "button", className: "forgebook-tree__family-button", "aria-expanded": isOpen, onClick: () => entries.onFold(composed.id, !isOpen), children: [_jsx("span", { className: "forgebook-tree__chevron", "data-open": isOpen ? "" : undefined, children: _jsx(Icon, { name: "chevronRight", size: 12 }) }), _jsx("span", { className: "forgebook-tree__family-name", children: composed.title }), _jsx(Icon, { name: "external", size: 10 })] }), _jsx(TreeFold, { isOpen: isOpen, isInstant: false, content: () => _jsx(RefEntries, { composed: composed, ...entries }) })] }) }));
82
+ };
83
+ /**
84
+ * The composed catalogues' sections. The section of the shown story opens, and stays open until the reader shuts it.
85
+ *
86
+ * @param props - the catalogues, the shown story and the links.
87
+ */
88
+ export const SidebarRefs = ({ refs, ...links }) => {
89
+ const [folds, setFolds] = useState(new Map());
90
+ // one function for the sections' whole life, so the effect that opens the shown story's component runs only for it
91
+ const [onFold] = useState(() => (key, isOpen) => setFolds((choices) => new Map(choices).set(key, isOpen)));
92
+ const currentRef = links.current?.refId;
93
+ useEffect(() => {
94
+ if (currentRef === undefined)
95
+ return;
96
+ setFolds((choices) => (choices.has(currentRef) ? choices : new Map(choices).set(currentRef, true)));
97
+ }, [currentRef]);
98
+ return refs.map((composed) => (_jsx(RefSection, { composed: composed, folds: folds, onFold: onFold, ...links }, composed.id)));
99
+ };