forgebook 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (693) hide show
  1. package/README.md +917 -74
  2. package/dist/bin/forgebook/agentClient.d.ts +2 -1
  3. package/dist/bin/forgebook/agentClient.js +13 -6
  4. package/dist/bin/forgebook/agentGuide.d.ts +59 -0
  5. package/dist/bin/forgebook/agentGuide.js +203 -0
  6. package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
  7. package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
  8. package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
  9. package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
  10. package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
  11. package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
  12. package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
  13. package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
  14. package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
  15. package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
  16. package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
  17. package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
  18. package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
  19. package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
  20. package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
  21. package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
  22. package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
  23. package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
  24. package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
  25. package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
  26. package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
  27. package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
  28. package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
  29. package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
  30. package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
  31. package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
  32. package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
  33. package/dist/bin/forgebook/agentText.d.ts +23 -3
  34. package/dist/bin/forgebook/agentText.js +175 -28
  35. package/dist/bin/forgebook/agents.md +20 -191
  36. package/dist/bin/forgebook/agentsText.js +2 -1
  37. package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
  38. package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
  39. package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
  40. package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
  41. package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
  42. package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
  43. package/dist/bin/forgebook/auditCommand.d.mts +8 -0
  44. package/dist/bin/forgebook/auditCommand.mjs +75 -0
  45. package/dist/bin/forgebook/auditRun.d.ts +95 -0
  46. package/dist/bin/forgebook/auditRun.js +270 -0
  47. package/dist/bin/forgebook/browserRun.d.ts +21 -0
  48. package/dist/bin/forgebook/browserRun.js +57 -0
  49. package/dist/bin/forgebook/buildFailure.d.ts +7 -0
  50. package/dist/bin/forgebook/buildFailure.js +47 -0
  51. package/dist/bin/forgebook/buildWatch.d.ts +52 -0
  52. package/dist/bin/forgebook/buildWatch.js +137 -0
  53. package/dist/bin/forgebook/builtCatalogue.js +9 -5
  54. package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
  55. package/dist/bin/forgebook/catalogueCommands.js +23 -0
  56. package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
  57. package/dist/bin/forgebook/catalogueVite.js +14 -6
  58. package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
  59. package/dist/bin/forgebook/commandCacheClaim.js +170 -0
  60. package/dist/bin/forgebook/commandServer.d.ts +8 -0
  61. package/dist/bin/forgebook/commandServer.js +61 -13
  62. package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
  63. package/dist/bin/forgebook/graphCommand.d.mts +8 -0
  64. package/dist/bin/forgebook/graphCommand.mjs +84 -0
  65. package/dist/bin/forgebook/guide/commands.md +57 -0
  66. package/dist/bin/forgebook/guide/devices.md +17 -0
  67. package/dist/bin/forgebook/guide/docs-pages.md +13 -0
  68. package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
  69. package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
  70. package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
  71. package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
  72. package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
  73. package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
  74. package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
  75. package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
  76. package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
  77. package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
  78. package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
  79. package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
  80. package/dist/bin/forgebook/guide/links.md +29 -0
  81. package/dist/bin/forgebook/guide/setup.md +23 -0
  82. package/dist/bin/forgebook/guide/stories.md +90 -0
  83. package/dist/bin/forgebook/guide/switches.md +43 -0
  84. package/dist/bin/forgebook/guideCommand.d.mts +13 -0
  85. package/dist/bin/forgebook/guideCommand.mjs +37 -0
  86. package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
  87. package/dist/bin/forgebook/importers/storybook.js +11 -5
  88. package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
  89. package/dist/bin/forgebook/initCommands.d.mts +11 -0
  90. package/dist/bin/forgebook/initCommands.mjs +51 -78
  91. package/dist/bin/forgebook/initConfig.d.ts +5 -3
  92. package/dist/bin/forgebook/initConfig.js +6 -3
  93. package/dist/bin/forgebook/initInstall.d.ts +15 -0
  94. package/dist/bin/forgebook/initInstall.js +77 -0
  95. package/dist/bin/forgebook/initPrint.d.ts +9 -0
  96. package/dist/bin/forgebook/initPrint.js +60 -0
  97. package/dist/bin/forgebook/initRefusals.d.ts +45 -0
  98. package/dist/bin/forgebook/initRefusals.js +91 -0
  99. package/dist/bin/forgebook/initRun.d.ts +28 -0
  100. package/dist/bin/forgebook/initRun.js +311 -0
  101. package/dist/bin/forgebook/mcpCommand.mjs +38 -4
  102. package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
  103. package/dist/bin/forgebook/mcpGraph.js +24 -0
  104. package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
  105. package/dist/bin/forgebook/mcpTokens.js +58 -0
  106. package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
  107. package/dist/bin/forgebook/mcpToolParts.js +10 -0
  108. package/dist/bin/forgebook/mcpTools.d.ts +13 -6
  109. package/dist/bin/forgebook/mcpTools.js +57 -90
  110. package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
  111. package/dist/bin/forgebook/mcpVerify.js +36 -0
  112. package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
  113. package/dist/bin/forgebook/migrate/codemods.js +61 -0
  114. package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
  115. package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
  116. package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
  117. package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
  118. package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
  119. package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
  120. package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
  121. package/dist/bin/forgebook/migrate/migrateText.js +30 -0
  122. package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
  123. package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
  124. package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
  125. package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
  126. package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
  127. package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
  128. package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
  129. package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
  130. package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
  131. package/dist/bin/forgebook/newProject/newProject.js +180 -0
  132. package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
  133. package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
  134. package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
  135. package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
  136. package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
  137. package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
  138. package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
  139. package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
  140. package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
  141. package/dist/bin/forgebook/newProject/projectLook.js +293 -0
  142. package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
  143. package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
  144. package/dist/bin/forgebook/newRepair.d.ts +45 -0
  145. package/dist/bin/forgebook/newRepair.js +157 -0
  146. package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
  147. package/dist/bin/forgebook/newRepairRun.js +148 -0
  148. package/dist/bin/forgebook/newStories.d.ts +23 -1
  149. package/dist/bin/forgebook/newStories.js +101 -11
  150. package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
  151. package/dist/bin/forgebook/newStoriesFile.js +43 -4
  152. package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
  153. package/dist/bin/forgebook/prebundleRun.js +28 -8
  154. package/dist/bin/forgebook/proofCommand.d.mts +15 -0
  155. package/dist/bin/forgebook/proofCommand.mjs +212 -0
  156. package/dist/bin/forgebook/proofRun.d.ts +63 -0
  157. package/dist/bin/forgebook/proofRun.js +412 -0
  158. package/dist/bin/forgebook/proofText.d.ts +36 -0
  159. package/dist/bin/forgebook/proofText.js +131 -0
  160. package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
  161. package/dist/bin/forgebook/proofWorkflow.js +205 -0
  162. package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
  163. package/dist/bin/forgebook/setArgsTool.js +70 -0
  164. package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
  165. package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
  166. package/dist/bin/forgebook/storyCheckRun.js +83 -9
  167. package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
  168. package/dist/bin/forgebook/storyFileIds.js +14 -0
  169. package/dist/bin/forgebook/stressCases.d.ts +31 -0
  170. package/dist/bin/forgebook/stressCases.js +79 -0
  171. package/dist/bin/forgebook/stressRun.d.ts +12 -0
  172. package/dist/bin/forgebook/stressRun.js +61 -0
  173. package/dist/bin/forgebook/stressText.d.ts +27 -0
  174. package/dist/bin/forgebook/stressText.js +46 -0
  175. package/dist/bin/forgebook/verifyBase.d.ts +45 -0
  176. package/dist/bin/forgebook/verifyBase.js +196 -0
  177. package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
  178. package/dist/bin/forgebook/verifyCommand.mjs +125 -0
  179. package/dist/bin/forgebook/verifyRun.d.ts +63 -0
  180. package/dist/bin/forgebook/verifyRun.js +108 -0
  181. package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
  182. package/dist/bin/forgebook/verifyVerdict.js +297 -0
  183. package/dist/bin/forgebook/workflowActions.d.ts +23 -0
  184. package/dist/bin/forgebook/workflowActions.js +23 -0
  185. package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
  186. package/dist/src/addressArgs.d.ts +54 -6
  187. package/dist/src/addressArgs.js +72 -16
  188. package/dist/src/addressArgsParam.d.ts +54 -0
  189. package/dist/src/addressArgsParam.js +51 -0
  190. package/dist/src/addressTexts.d.ts +14 -0
  191. package/dist/src/addressTexts.js +28 -21
  192. package/dist/src/agentIndexFile.d.ts +11 -0
  193. package/dist/src/agentIndexFile.js +11 -0
  194. package/dist/src/argConditions.d.ts +52 -0
  195. package/dist/src/argConditions.js +80 -0
  196. package/dist/src/argControl.d.ts +100 -0
  197. package/dist/src/argControl.js +0 -0
  198. package/dist/src/argExpression.d.ts +21 -0
  199. package/dist/src/argExpression.js +30 -0
  200. package/dist/src/argTypes.d.ts +40 -51
  201. package/dist/src/argTypes.js +66 -184
  202. package/dist/src/argsProps.d.ts +3 -3
  203. package/dist/src/argsProps.js +11 -5
  204. package/dist/src/bundlerErrors.d.ts +29 -0
  205. package/dist/src/bundlerErrors.js +49 -0
  206. package/dist/src/catalogue.d.ts +31 -0
  207. package/dist/src/catalogue.js +13 -2
  208. package/dist/src/catalogueRefs.d.ts +75 -0
  209. package/dist/src/catalogueRefs.js +122 -0
  210. package/dist/src/componentDocs.d.ts +71 -0
  211. package/dist/src/componentDocs.js +15 -2
  212. package/dist/src/frame/callValues.d.ts +19 -0
  213. package/dist/src/frame/callValues.js +58 -0
  214. package/dist/src/frame/canvasScheme.d.ts +33 -0
  215. package/dist/src/frame/canvasScheme.js +67 -0
  216. package/dist/src/frame/frame.css +36 -3
  217. package/dist/src/frame/frameStatus.d.ts +16 -1
  218. package/dist/src/frame/frameStatus.js +16 -1
  219. package/dist/src/frame/frameView.js +4 -3
  220. package/dist/src/frame/mountFrame.d.ts +7 -1
  221. package/dist/src/frame/mountFrame.js +153 -46
  222. package/dist/src/frame/panelValues.d.ts +35 -0
  223. package/dist/src/frame/panelValues.js +127 -0
  224. package/dist/src/frame/playActions.d.ts +39 -0
  225. package/dist/src/frame/playActions.js +98 -0
  226. package/dist/src/frame/playStepper.d.ts +28 -0
  227. package/dist/src/frame/playStepper.js +38 -0
  228. package/dist/src/frame/playStory.d.ts +9 -1
  229. package/dist/src/frame/playStory.js +49 -3
  230. package/dist/src/frame/renderer.d.ts +34 -1
  231. package/dist/src/frame/renderer.js +24 -0
  232. package/dist/src/frame/shellChannel.d.ts +1 -1
  233. package/dist/src/frame/shellChannel.js +1 -1
  234. package/dist/src/frame/shellCheck.d.ts +17 -0
  235. package/dist/src/frame/shellCheck.js +25 -0
  236. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  237. package/dist/src/frame/shellMessageCheck.js +53 -0
  238. package/dist/src/frame/storyContent.d.ts +50 -0
  239. package/dist/src/frame/storyContent.js +73 -0
  240. package/dist/src/frame/storyModule.d.ts +9 -0
  241. package/dist/src/frame/storyModule.js +20 -2
  242. package/dist/src/frame/storyRun.d.ts +15 -7
  243. package/dist/src/frame/storyRun.js +64 -15
  244. package/dist/src/frame/valueSheets.d.ts +35 -0
  245. package/dist/src/frame/valueSheets.js +99 -0
  246. package/dist/src/hotModules.d.ts +20 -0
  247. package/dist/src/hotModules.js +23 -0
  248. package/dist/src/jsxCode.d.ts +1 -14
  249. package/dist/src/jsxCode.js +46 -10
  250. package/dist/src/liveErrors.d.ts +30 -4
  251. package/dist/src/liveErrors.js +18 -3
  252. package/dist/src/messages.d.ts +77 -27
  253. package/dist/src/messages.js +58 -100
  254. package/dist/src/namedValues.d.ts +2 -26
  255. package/dist/src/namedValues.js +0 -47
  256. package/dist/src/pageConfig.d.ts +2 -0
  257. package/dist/src/playTrace.d.ts +19 -2
  258. package/dist/src/playTrace.js +10 -5
  259. package/dist/src/plugin.d.ts +10 -3
  260. package/dist/src/previewRelay.js +9 -1
  261. package/dist/src/printable.d.ts +12 -0
  262. package/dist/src/printable.js +22 -0
  263. package/dist/src/propsSignature.d.ts +37 -0
  264. package/dist/src/propsSignature.js +40 -0
  265. package/dist/src/search.d.ts +41 -5
  266. package/dist/src/search.js +93 -23
  267. package/dist/src/searchMatch.d.ts +4 -1
  268. package/dist/src/searchMatch.js +26 -5
  269. package/dist/src/searchTypos.d.ts +88 -0
  270. package/dist/src/searchTypos.js +178 -0
  271. package/dist/src/shapeValues.d.ts +86 -0
  272. package/dist/src/shapeValues.js +295 -0
  273. package/dist/src/shell/ApiReference.js +6 -3
  274. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  275. package/dist/src/shell/ApiTableBox.js +11 -0
  276. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  277. package/dist/src/shell/AppearanceMenu.js +9 -6
  278. package/dist/src/shell/CodeTab.d.ts +3 -2
  279. package/dist/src/shell/CodeTab.js +3 -2
  280. package/dist/src/shell/CodeText.d.ts +1 -1
  281. package/dist/src/shell/CodeText.js +2 -3
  282. package/dist/src/shell/CompareGrid.js +1 -1
  283. package/dist/src/shell/ComponentPage.d.ts +1 -1
  284. package/dist/src/shell/ComponentPage.js +5 -1
  285. package/dist/src/shell/CustomControl.d.ts +34 -0
  286. package/dist/src/shell/CustomControl.js +132 -0
  287. package/dist/src/shell/DocContainers.js +1 -1
  288. package/dist/src/shell/DocPage.js +2 -2
  289. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  290. package/dist/src/shell/DroppedArgsList.js +1 -1
  291. package/dist/src/shell/EmbedPage.js +58 -14
  292. package/dist/src/shell/Example.d.ts +5 -1
  293. package/dist/src/shell/Example.js +16 -8
  294. package/dist/src/shell/FrameView.d.ts +6 -3
  295. package/dist/src/shell/FrameView.js +2 -2
  296. package/dist/src/shell/HomePage.d.ts +3 -1
  297. package/dist/src/shell/HomePage.js +16 -6
  298. package/dist/src/shell/InfoTip.js +2 -2
  299. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  300. package/dist/src/shell/InteractionsTab.js +18 -2
  301. package/dist/src/shell/LazyPage.js +1 -1
  302. package/dist/src/shell/PackageHtml.js +3 -1
  303. package/dist/src/shell/PinnedControl.js +14 -62
  304. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  305. package/dist/src/shell/PinnedControlMenu.js +72 -0
  306. package/dist/src/shell/PluginBlockHost.js +2 -1
  307. package/dist/src/shell/PluginTabHost.js +19 -2
  308. package/dist/src/shell/PropFields.d.ts +3 -1
  309. package/dist/src/shell/PropFields.js +9 -6
  310. package/dist/src/shell/PropRows.d.ts +23 -2
  311. package/dist/src/shell/PropRows.js +58 -19
  312. package/dist/src/shell/PropsTab.d.ts +12 -5
  313. package/dist/src/shell/PropsTab.js +9 -21
  314. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  315. package/dist/src/shell/RefStoryPage.js +123 -0
  316. package/dist/src/shell/SearchPanel.js +51 -24
  317. package/dist/src/shell/Shell.d.ts +18 -0
  318. package/dist/src/shell/Shell.js +137 -22
  319. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  320. package/dist/src/shell/ShortcutHelp.js +66 -0
  321. package/dist/src/shell/Sidebar.d.ts +17 -4
  322. package/dist/src/shell/Sidebar.js +92 -41
  323. package/dist/src/shell/SidebarDocs.js +2 -2
  324. package/dist/src/shell/SidebarEntries.js +5 -3
  325. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  326. package/dist/src/shell/SidebarHandle.js +4 -4
  327. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  328. package/dist/src/shell/SidebarRefs.js +99 -0
  329. package/dist/src/shell/SidebarSearch.js +37 -9
  330. package/dist/src/shell/SignatureReference.js +3 -1
  331. package/dist/src/shell/Stage.d.ts +10 -2
  332. package/dist/src/shell/Stage.js +35 -60
  333. package/dist/src/shell/StatusBadges.d.ts +54 -0
  334. package/dist/src/shell/StatusBadges.js +77 -0
  335. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  336. package/dist/src/shell/StoryCodeBlock.js +7 -6
  337. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  338. package/dist/src/shell/SwitchGallery.js +17 -0
  339. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  340. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  341. package/dist/src/shell/TagFilter.d.ts +24 -0
  342. package/dist/src/shell/TagFilter.js +45 -0
  343. package/dist/src/shell/TagViews.d.ts +39 -0
  344. package/dist/src/shell/TagViews.js +20 -0
  345. package/dist/src/shell/Toolbar.d.ts +4 -1
  346. package/dist/src/shell/Toolbar.js +17 -7
  347. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  348. package/dist/src/shell/ToolbarControl.js +23 -6
  349. package/dist/src/shell/ViewMenuPanel.js +6 -1
  350. package/dist/src/shell/argChecks.d.ts +22 -0
  351. package/dist/src/shell/argChecks.js +20 -0
  352. package/dist/src/shell/asideStory.d.ts +17 -4
  353. package/dist/src/shell/asideStory.js +21 -4
  354. package/dist/src/shell/audienceSections.css +9 -9
  355. package/dist/src/shell/catalogueContext.d.ts +1 -1
  356. package/dist/src/shell/catalogueContext.js +6 -1
  357. package/dist/src/shell/codeSpans.d.ts +27 -0
  358. package/dist/src/shell/codeSpans.js +76 -0
  359. package/dist/src/shell/compareVariants.d.ts +4 -2
  360. package/dist/src/shell/compareVariants.js +16 -8
  361. package/dist/src/shell/composition.d.ts +23 -0
  362. package/dist/src/shell/composition.js +26 -0
  363. package/dist/src/shell/controlCycle.d.ts +1 -1
  364. package/dist/src/shell/controlCycle.js +3 -2
  365. package/dist/src/shell/customControls.d.ts +55 -0
  366. package/dist/src/shell/customControls.js +70 -0
  367. package/dist/src/shell/docPage.css +22 -22
  368. package/dist/src/shell/dockTabs.d.ts +19 -3
  369. package/dist/src/shell/dockTabs.js +28 -20
  370. package/dist/src/shell/embed.css +7 -7
  371. package/dist/src/shell/framesOrigin.d.ts +7 -0
  372. package/dist/src/shell/framesOrigin.js +1 -1
  373. package/dist/src/shell/galleryPlace.d.ts +20 -0
  374. package/dist/src/shell/galleryPlace.js +26 -0
  375. package/dist/src/shell/icons.d.ts +1 -0
  376. package/dist/src/shell/icons.js +1 -0
  377. package/dist/src/shell/keyboard.d.ts +14 -12
  378. package/dist/src/shell/keyboard.js +21 -6
  379. package/dist/src/shell/laterStrings.d.ts +29 -0
  380. package/dist/src/shell/laterStrings.js +42 -3
  381. package/dist/src/shell/mountShell.js +3 -0
  382. package/dist/src/shell/pageStrings.d.ts +4 -0
  383. package/dist/src/shell/pageStrings.js +4 -0
  384. package/dist/src/shell/pageTagView.d.ts +18 -0
  385. package/dist/src/shell/pageTagView.js +10 -0
  386. package/dist/src/shell/playMemory.d.ts +14 -0
  387. package/dist/src/shell/playMemory.js +8 -0
  388. package/dist/src/shell/propNotes.d.ts +23 -0
  389. package/dist/src/shell/propNotes.js +37 -0
  390. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  391. package/dist/src/shell/refIndexLoad.js +38 -0
  392. package/dist/src/shell/refParts.d.ts +34 -0
  393. package/dist/src/shell/refParts.js +9 -0
  394. package/dist/src/shell/refStory.css +21 -0
  395. package/dist/src/shell/refStrings.d.ts +13 -0
  396. package/dist/src/shell/refStrings.js +21 -0
  397. package/dist/src/shell/search.css +11 -11
  398. package/dist/src/shell/shell.css +348 -168
  399. package/dist/src/shell/shellScheme.js +2 -2
  400. package/dist/src/shell/shortcutHelp.css +64 -0
  401. package/dist/src/shell/stageArgs.d.ts +53 -0
  402. package/dist/src/shell/stageArgs.js +64 -0
  403. package/dist/src/shell/statusBadges.css +51 -0
  404. package/dist/src/shell/strings.d.ts +7 -16
  405. package/dist/src/shell/strings.js +12 -17
  406. package/dist/src/shell/switchGallery.css +104 -0
  407. package/dist/src/shell/tagFilter.css +46 -0
  408. package/dist/src/shell/tagView.d.ts +20 -0
  409. package/dist/src/shell/tagView.js +10 -0
  410. package/dist/src/shell/useAddressArgs.d.ts +27 -2
  411. package/dist/src/shell/useAddressArgs.js +71 -14
  412. package/dist/src/shell/useControlKeys.js +2 -2
  413. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  414. package/dist/src/shell/useEditedProblems.js +40 -0
  415. package/dist/src/shell/useFrameMessages.js +3 -0
  416. package/dist/src/shell/useListedTree.d.ts +13 -0
  417. package/dist/src/shell/useListedTree.js +32 -0
  418. package/dist/src/shell/usePageFrames.js +2 -2
  419. package/dist/src/shell/usePopover.d.ts +5 -0
  420. package/dist/src/shell/usePopover.js +7 -1
  421. package/dist/src/shell/useRefIndex.d.ts +22 -0
  422. package/dist/src/shell/useRefIndex.js +36 -0
  423. package/dist/src/shell/useScrollStops.d.ts +20 -0
  424. package/dist/src/shell/useScrollStops.js +41 -0
  425. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  426. package/dist/src/shell/useShortcutHelp.js +32 -0
  427. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  428. package/dist/src/shell/useSidebarOverlay.js +12 -4
  429. package/dist/src/shell/useStoryCode.d.ts +2 -1
  430. package/dist/src/shell/useStoryCode.js +12 -7
  431. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  432. package/dist/src/shell/useToolbarLayout.js +2 -2
  433. package/dist/src/shell/useWorstCase.d.ts +8 -2
  434. package/dist/src/shell/useWorstCase.js +2 -2
  435. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  436. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  437. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  438. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  439. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  440. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  441. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  442. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  443. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  444. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  445. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  446. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  447. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  448. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  449. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  450. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  451. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  452. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  453. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  454. package/dist/src/shell/valueEditors/ValueField.js +147 -0
  455. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  456. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  457. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  458. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  459. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  460. package/dist/src/shell/worstArgs.d.ts +8 -5
  461. package/dist/src/shell/worstArgs.js +14 -7
  462. package/dist/src/shellTheme.d.ts +1 -1
  463. package/dist/src/shellTheme.js +15 -1
  464. package/dist/src/shellTheme.types.d.ts +4 -0
  465. package/dist/src/shellWord.d.ts +12 -0
  466. package/dist/src/shellWord.js +15 -0
  467. package/dist/src/sourceFiles.js +2 -1
  468. package/dist/src/storyArgTypes.d.ts +57 -0
  469. package/dist/src/storyArgTypes.js +195 -0
  470. package/dist/src/storyBackground.js +14 -3
  471. package/dist/src/storyCheck.d.ts +85 -3
  472. package/dist/src/storyCheck.js +23 -1
  473. package/dist/src/storyCodeText.d.ts +46 -0
  474. package/dist/src/storyCodeText.js +27 -0
  475. package/dist/src/storyControls.d.ts +100 -0
  476. package/dist/src/storyControls.js +100 -0
  477. package/dist/src/storyStatuses.d.ts +55 -0
  478. package/dist/src/storyStatuses.js +104 -0
  479. package/dist/src/storyTagNames.d.ts +25 -0
  480. package/dist/src/storyTagNames.js +25 -0
  481. package/dist/src/storyTags.d.ts +29 -0
  482. package/dist/src/storyTags.js +85 -0
  483. package/dist/src/storyTree.d.ts +13 -0
  484. package/dist/src/storyTree.js +24 -4
  485. package/dist/src/storybookArgs.d.ts +24 -0
  486. package/dist/src/storybookArgs.js +185 -0
  487. package/dist/src/switches.d.ts +66 -3
  488. package/dist/src/switches.js +42 -1
  489. package/dist/src/valueSchema.d.ts +28 -0
  490. package/dist/src/valueSchema.js +196 -0
  491. package/dist/src/valueShape.d.ts +94 -0
  492. package/dist/src/valueShape.js +25 -0
  493. package/dist/src/viewState.d.ts +8 -3
  494. package/dist/src/viewState.js +27 -10
  495. package/dist/src/vite/adapter.d.ts +40 -2
  496. package/dist/src/vite/adapter.js +1 -0
  497. package/dist/src/vite/agent.types.d.ts +347 -7
  498. package/dist/src/vite/agentApi.d.ts +23 -0
  499. package/dist/src/vite/agentApi.js +90 -17
  500. package/dist/src/vite/agentIndex.d.ts +0 -2
  501. package/dist/src/vite/agentIndex.js +5 -6
  502. package/dist/src/vite/agentRoutes.d.ts +20 -1
  503. package/dist/src/vite/agentRoutes.js +106 -65
  504. package/dist/src/vite/agentStatuses.d.ts +42 -0
  505. package/dist/src/vite/agentStatuses.js +67 -0
  506. package/dist/src/vite/agentStoryCode.d.ts +48 -0
  507. package/dist/src/vite/agentStoryCode.js +38 -0
  508. package/dist/src/vite/agentVisibility.d.ts +47 -0
  509. package/dist/src/vite/agentVisibility.js +174 -0
  510. package/dist/src/vite/appAudit.d.ts +134 -0
  511. package/dist/src/vite/appAudit.js +333 -0
  512. package/dist/src/vite/appBuildOption.d.ts +53 -0
  513. package/dist/src/vite/appBuildOption.js +55 -0
  514. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  515. package/dist/src/vite/appTokenFiles.js +433 -0
  516. package/dist/src/vite/appTokens.d.ts +23 -0
  517. package/dist/src/vite/appTokens.js +275 -0
  518. package/dist/src/vite/builtTexts.d.ts +10 -0
  519. package/dist/src/vite/builtTexts.js +59 -22
  520. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  521. package/dist/src/vite/catalogueConfig.js +15 -3
  522. package/dist/src/vite/changeCoverage.d.ts +74 -0
  523. package/dist/src/vite/changeCoverage.js +120 -0
  524. package/dist/src/vite/changedRoute.d.ts +30 -0
  525. package/dist/src/vite/changedRoute.js +197 -0
  526. package/dist/src/vite/checkCode.d.ts +105 -3
  527. package/dist/src/vite/checkCode.js +323 -36
  528. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  529. package/dist/src/vite/checkoutWatch.js +287 -0
  530. package/dist/src/vite/closeWatch.d.ts +8 -0
  531. package/dist/src/vite/closeWatch.js +1 -1
  532. package/dist/src/vite/componentCache.d.ts +8 -0
  533. package/dist/src/vite/componentCache.js +66 -0
  534. package/dist/src/vite/componentGraph.d.ts +71 -0
  535. package/dist/src/vite/componentGraph.js +133 -0
  536. package/dist/src/vite/componentRules.d.ts +33 -0
  537. package/dist/src/vite/componentRules.js +105 -0
  538. package/dist/src/vite/componentScan.d.ts +69 -0
  539. package/dist/src/vite/componentScan.js +418 -0
  540. package/dist/src/vite/compositionCheck.d.ts +15 -0
  541. package/dist/src/vite/compositionCheck.js +243 -0
  542. package/dist/src/vite/config.d.ts +32 -1
  543. package/dist/src/vite/configFile.d.ts +14 -2
  544. package/dist/src/vite/configFile.js +124 -40
  545. package/dist/src/vite/configKeys.d.ts +15 -0
  546. package/dist/src/vite/configKeys.js +171 -0
  547. package/dist/src/vite/configLoadError.d.ts +23 -0
  548. package/dist/src/vite/configLoadError.js +71 -0
  549. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  550. package/dist/src/vite/cssDeclarations.js +290 -0
  551. package/dist/src/vite/cssImports.d.ts +14 -0
  552. package/dist/src/vite/cssImports.js +48 -0
  553. package/dist/src/vite/cssReferences.d.ts +54 -0
  554. package/dist/src/vite/cssReferences.js +157 -0
  555. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  556. package/dist/src/vite/cssTokenValues.js +233 -0
  557. package/dist/src/vite/designTokens.d.ts +24 -0
  558. package/dist/src/vite/designTokens.js +5 -1
  559. package/dist/src/vite/docsExtractor.d.ts +9 -3
  560. package/dist/src/vite/docsExtractor.js +11 -3
  561. package/dist/src/vite/docsProgram.d.ts +17 -4
  562. package/dist/src/vite/docsProgram.js +52 -11
  563. package/dist/src/vite/docsWorker.js +7 -2
  564. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  565. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  566. package/dist/src/vite/fileImports.d.ts +17 -0
  567. package/dist/src/vite/fileImports.js +57 -0
  568. package/dist/src/vite/findComponent.d.ts +10 -2
  569. package/dist/src/vite/findComponent.js +27 -22
  570. package/dist/src/vite/findRoute.js +3 -2
  571. package/dist/src/vite/forcedStates.d.ts +9 -2
  572. package/dist/src/vite/forcedStates.js +12 -3
  573. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  574. package/dist/src/vite/forgebookPlugin.js +52 -72
  575. package/dist/src/vite/frameErrors.d.ts +19 -0
  576. package/dist/src/vite/frameErrors.js +70 -0
  577. package/dist/src/vite/framesServer.d.ts +12 -0
  578. package/dist/src/vite/framesServer.js +21 -4
  579. package/dist/src/vite/functionComponentDocs.js +81 -12
  580. package/dist/src/vite/generatedModules.js +4 -2
  581. package/dist/src/vite/gitChange.d.ts +38 -5
  582. package/dist/src/vite/gitChange.js +71 -11
  583. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  584. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  585. package/dist/src/vite/hotSnippets.d.ts +38 -14
  586. package/dist/src/vite/hotSnippets.js +137 -39
  587. package/dist/src/vite/importedNames.d.ts +37 -0
  588. package/dist/src/vite/importedNames.js +138 -0
  589. package/dist/src/vite/indexFields.d.ts +6 -0
  590. package/dist/src/vite/indexFields.js +21 -0
  591. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  592. package/dist/src/vite/indexStoryFile.js +22 -157
  593. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  594. package/dist/src/vite/jsxCallSites.js +200 -0
  595. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  596. package/dist/src/vite/jsxInScripts.js +138 -0
  597. package/dist/src/vite/jsxTree.d.ts +20 -0
  598. package/dist/src/vite/jsxTree.js +163 -0
  599. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  600. package/dist/src/vite/lineAndColumn.js +18 -0
  601. package/dist/src/vite/lookAlikes.d.ts +65 -0
  602. package/dist/src/vite/lookAlikes.js +228 -0
  603. package/dist/src/vite/nearestToken.d.ts +17 -0
  604. package/dist/src/vite/nearestToken.js +9 -2
  605. package/dist/src/vite/packageEntries.d.ts +42 -0
  606. package/dist/src/vite/packageEntries.js +127 -0
  607. package/dist/src/vite/pages.d.ts +9 -1
  608. package/dist/src/vite/pages.js +108 -4
  609. package/dist/src/vite/pluginConfig.js +4 -0
  610. package/dist/src/vite/pluginIds.d.ts +2 -0
  611. package/dist/src/vite/pluginIds.js +5 -1
  612. package/dist/src/vite/pluginModules.d.ts +81 -11
  613. package/dist/src/vite/pluginModules.js +109 -21
  614. package/dist/src/vite/prebundled.d.ts +57 -15
  615. package/dist/src/vite/prebundled.js +80 -0
  616. package/dist/src/vite/previewTags.d.ts +25 -0
  617. package/dist/src/vite/previewTags.js +56 -0
  618. package/dist/src/vite/projectFiles.d.ts +54 -0
  619. package/dist/src/vite/projectFiles.js +116 -0
  620. package/dist/src/vite/projectPostcss.d.ts +70 -0
  621. package/dist/src/vite/projectPostcss.js +250 -0
  622. package/dist/src/vite/propDocs.d.ts +12 -0
  623. package/dist/src/vite/propDocs.js +130 -58
  624. package/dist/src/vite/propKind.d.ts +40 -0
  625. package/dist/src/vite/propKind.js +71 -0
  626. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  627. package/dist/src/vite/propTypeNotes.js +51 -0
  628. package/dist/src/vite/publishedExports.d.ts +27 -0
  629. package/dist/src/vite/publishedExports.js +298 -0
  630. package/dist/src/vite/realFolder.d.ts +6 -0
  631. package/dist/src/vite/realFolder.js +25 -0
  632. package/dist/src/vite/refsConfig.d.ts +39 -0
  633. package/dist/src/vite/refsConfig.js +54 -0
  634. package/dist/src/vite/reuseCheck.d.ts +45 -0
  635. package/dist/src/vite/reuseCheck.js +260 -0
  636. package/dist/src/vite/runningVersions.d.ts +33 -0
  637. package/dist/src/vite/runningVersions.js +25 -0
  638. package/dist/src/vite/scriptProblems.d.ts +60 -0
  639. package/dist/src/vite/scriptProblems.js +155 -0
  640. package/dist/src/vite/searchModule.js +3 -2
  641. package/dist/src/vite/searchRoute.js +4 -2
  642. package/dist/src/vite/shapeDocs.d.ts +36 -0
  643. package/dist/src/vite/shapeDocs.js +177 -0
  644. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  645. package/dist/src/vite/singleFileComponent.js +83 -0
  646. package/dist/src/vite/sourceText.d.ts +34 -0
  647. package/dist/src/vite/sourceText.js +72 -0
  648. package/dist/src/vite/sourceTokens.d.ts +7 -0
  649. package/dist/src/vite/sourceTokens.js +7 -2
  650. package/dist/src/vite/stackLines.d.ts +49 -0
  651. package/dist/src/vite/stackLines.js +96 -0
  652. package/dist/src/vite/storyCode.d.ts +22 -7
  653. package/dist/src/vite/storyCode.js +263 -37
  654. package/dist/src/vite/storyCoverage.d.ts +48 -0
  655. package/dist/src/vite/storyCoverage.js +179 -0
  656. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  657. package/dist/src/vite/storyFilesModule.js +105 -15
  658. package/dist/src/vite/storyPatterns.d.ts +31 -0
  659. package/dist/src/vite/storyPatterns.js +140 -5
  660. package/dist/src/vite/storyReach.d.ts +10 -2
  661. package/dist/src/vite/storyReach.js +15 -11
  662. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  663. package/dist/src/vite/storyTopLevel.js +146 -0
  664. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  665. package/dist/src/vite/storylessRoutes.js +210 -19
  666. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  667. package/dist/src/vite/switchValuesCheck.js +164 -0
  668. package/dist/src/vite/switchesDocument.d.ts +15 -0
  669. package/dist/src/vite/switchesDocument.js +47 -0
  670. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  671. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  672. package/dist/src/vite/textImports.d.ts +15 -0
  673. package/dist/src/vite/textImports.js +58 -0
  674. package/dist/src/vite/textModules.d.ts +6 -5
  675. package/dist/src/vite/textModules.js +13 -8
  676. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  677. package/dist/src/vite/tokenAnswers.js +11 -7
  678. package/dist/src/vite/typeParameters.d.ts +83 -0
  679. package/dist/src/vite/typeParameters.js +270 -0
  680. package/dist/src/vite/unionProps.d.ts +37 -0
  681. package/dist/src/vite/unionProps.js +121 -0
  682. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  683. package/dist/src/vite/unresolvedTokens.js +193 -0
  684. package/dist/src/vite/usageGraph.js +10 -52
  685. package/dist/src/vite/usageGuidance.d.ts +9 -2
  686. package/dist/src/vite/usageGuidance.js +36 -8
  687. package/dist/src/vite/usageImports.d.ts +35 -0
  688. package/dist/src/vite/usageImports.js +280 -0
  689. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  690. package/dist/src/vite/visibilityRoute.js +320 -0
  691. package/dist/src/worstCase.d.ts +2 -0
  692. package/dist/src/worstCase.js +2 -0
  693. package/package.json +28 -8
@@ -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
+ };
@@ -1,12 +1,27 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { lazy, Suspense, useEffect, useId, useRef, useState } from "react";
2
+ import { useEffect, useId, useRef, useState } from "react";
3
3
  import { Icon } from "./icons.js";
4
- import { isTyping } from "./keyboard.js";
4
+ import { isSingleKeyFree } from "./keyboard.js";
5
+ import { LazyView, lazyModule } from "./lazyModule.js";
5
6
  import { STRINGS } from "./strings.js";
6
- /** The results, loaded on first use: most visits never search. */
7
- const SearchPanel = lazy(() => import("./SearchPanel.js").then((module) => ({ default: module.SearchPanel }),
8
- // a chunk gone after a new deployment must not take the page with it: the field simply finds nothing more
9
- () => ({ default: () => null })));
7
+ /**
8
+ * The results, loaded on first use: most visits never search. Not through `Suspense`, which holds what it reveals back
9
+ * for 300 ms after its fallback, and that wait would be the first search's (`lazyModule.tsx`).
10
+ */
11
+ const SEARCH_PANEL = lazyModule(() => import("./SearchPanel.js").then((module) => module.SearchPanel));
12
+ /**
13
+ * Fetches the results' code when the pointer comes to the field, ahead of a press: the list then draws with the first
14
+ * letter typed, where it would otherwise wait for its code. A failure is the field's to report when it is used.
15
+ */
16
+ const preloadPanel = () => {
17
+ if (SEARCH_PANEL.loaded !== undefined)
18
+ return;
19
+ SEARCH_PANEL.load()
20
+ .then((panel) => {
21
+ SEARCH_PANEL.loaded = panel;
22
+ })
23
+ .catch(() => undefined);
24
+ };
10
25
  /**
11
26
  * The search field.
12
27
  *
@@ -44,7 +59,7 @@ export const SidebarSearch = ({ query, onQueryChange, onFilterReady, tree, sourc
44
59
  // a hidden sidebar leaves the key to the page
45
60
  if (!isSidebarOpen)
46
61
  return;
47
- if (event.key !== "/" || event.metaKey || event.ctrlKey || event.altKey || isTyping(event.target))
62
+ if (event.key !== "/" || event.metaKey || event.ctrlKey || event.altKey || !isSingleKeyFree(event))
48
63
  return;
49
64
  event.preventDefault();
50
65
  inputRef.current?.focus();
@@ -57,7 +72,7 @@ export const SidebarSearch = ({ query, onQueryChange, onFilterReady, tree, sourc
57
72
  onOpenResult(target);
58
73
  inputRef.current?.blur();
59
74
  };
60
- return (_jsxs(_Fragment, { children: [_jsxs("label", { className: "forgebook-search", children: [_jsx(Icon, { name: "search", size: 14 }), _jsx("input", { type: "search", ref: inputRef, value: query, "aria-controls": isListOpen ? listId : undefined, "aria-activedescendant": activeId, onFocus: () => {
75
+ return (_jsxs(_Fragment, { children: [_jsxs("label", { className: "forgebook-search", onPointerEnter: preloadPanel, children: [_jsx(Icon, { name: "search", size: 14 }), _jsx("input", { type: "search", ref: inputRef, value: query, "aria-controls": isListOpen ? listId : undefined, "aria-activedescendant": activeId, onFocus: () => {
61
76
  setIsUsed(true);
62
77
  setIsListOpen(true);
63
78
  }, onBlur: () => setIsListOpen(false), onKeyDown: (event) => {
@@ -84,5 +99,18 @@ export const SidebarSearch = ({ query, onQueryChange, onFilterReady, tree, sourc
84
99
  } }), query === "" ? (_jsx("kbd", { className: "forgebook-search__key", children: "/" })) : (_jsx("button", { type: "button", className: "forgebook-search__clear", "aria-label": STRINGS.clearSearch, title: STRINGS.clearSearch, onClick: () => {
85
100
  onQueryChange("");
86
101
  inputRef.current?.focus();
87
- }, children: _jsx(Icon, { name: "close", size: 10 }) }))] }), isUsed ? (_jsx(Suspense, { fallback: null, children: _jsx(SearchPanel, { id: listId, tree: tree, sources: sources, query: query, isOpen: isListOpen, field: inputRef, sidebarWidth: sidebarWidth, onFilterReady: onFilterReady, hrefOf: searchHref, onOpen: openResult, onActiveChange: setActiveId, keysRef: keysRef }) })) : null] }));
102
+ }, children: _jsx(Icon, { name: "close", size: 10 }) }))] }), isUsed ? (_jsx(LazyView, { module: SEARCH_PANEL, props: {
103
+ id: listId,
104
+ tree,
105
+ sources,
106
+ query,
107
+ isOpen: isListOpen,
108
+ field: inputRef,
109
+ sidebarWidth,
110
+ onFilterReady,
111
+ hrefOf: searchHref,
112
+ onOpen: openResult,
113
+ onActiveChange: setActiveId,
114
+ keysRef
115
+ }, loading: null, failed: () => null })) : null] }));
88
116
  };
@@ -1,6 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { ApiTableBox } from "./ApiTableBox.js";
2
3
  import { Code } from "./Code.js";
3
4
  import { CodeText } from "./CodeText.js";
5
+ import { LATER_STRINGS } from "./laterStrings.js";
4
6
  import { STRINGS } from "./strings.js";
5
7
  /**
6
8
  * The type parameters as the call writes them: `<TValue>`, or nothing.
@@ -22,4 +24,4 @@ export const callText = (name, signature) => `${name}${typeParametersText(signat
22
24
  *
23
25
  * @param props - the function's name and signature.
24
26
  */
25
- export const SignatureReference = ({ name, signature }) => (_jsxs("div", { className: "forgebook-signature", children: [_jsx("pre", { className: "forgebook-signature__call", children: _jsx(Code, { text: callText(name, signature), names: signature.parameters.map((parameter) => parameter.name) }) }), signature.parameters.length === 0 ? (_jsx("p", { className: "forgebook-tab-note", children: STRINGS.signatureNone })) : (_jsx("div", { className: "forgebook-api", children: _jsxs("table", { className: "forgebook-api__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: STRINGS.signatureParameter }), _jsx("th", { scope: "col", children: STRINGS.apiType }), _jsx("th", { scope: "col", children: STRINGS.apiWhat })] }) }), _jsx("tbody", { children: signature.parameters.map((parameter) => (_jsxs("tr", { "data-prop": parameter.name, children: [_jsxs("th", { scope: "row", children: [_jsxs("code", { className: "forgebook-api__name", children: [parameter.isRest ? "..." : "", parameter.name] }), parameter.isOptional || parameter.isRest ? null : (_jsx("span", { className: "forgebook-prop__required", title: STRINGS.required, children: "*" }))] }), _jsx("td", { className: "forgebook-api__type", children: _jsx(Code, { text: parameter.type, names: [] }) }), _jsx("td", { children: _jsx(CodeText, { text: parameter.description }) })] }, parameter.name))) })] }) })), _jsx("h3", { className: "forgebook-signature__returns", children: STRINGS.signatureReturns }), _jsxs("p", { children: [_jsx("code", { className: "forgebook-inline-code", children: signature.returns }), signature.returnsDescription === "" ? null : (_jsxs(_Fragment, { children: [" ", _jsx(CodeText, { text: signature.returnsDescription })] }))] })] }));
27
+ export const SignatureReference = ({ name, signature }) => (_jsxs("div", { className: "forgebook-signature", children: [_jsx("pre", { className: "forgebook-signature__call", children: _jsx(Code, { text: callText(name, signature), names: signature.parameters.map((parameter) => parameter.name) }) }), signature.parameters.length === 0 ? (_jsx("p", { className: "forgebook-tab-note", children: LATER_STRINGS.signatureNone })) : (_jsx(ApiTableBox, { children: _jsxs("table", { className: "forgebook-api__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: LATER_STRINGS.signatureParameter }), _jsx("th", { scope: "col", children: LATER_STRINGS.apiType }), _jsx("th", { scope: "col", children: LATER_STRINGS.apiWhat })] }) }), _jsx("tbody", { children: signature.parameters.map((parameter) => (_jsxs("tr", { "data-prop": parameter.name, children: [_jsxs("th", { scope: "row", children: [_jsxs("code", { className: "forgebook-api__name", children: [parameter.isRest ? "..." : "", parameter.name] }), parameter.isOptional || parameter.isRest ? null : (_jsx("span", { className: "forgebook-prop__required", title: STRINGS.required, children: "*" }))] }), _jsx("td", { className: "forgebook-api__type", children: _jsx(Code, { text: parameter.type, names: [] }) }), _jsx("td", { children: _jsx(CodeText, { text: parameter.description }) })] }, parameter.name))) })] }) })), _jsx("h3", { className: "forgebook-signature__returns", children: LATER_STRINGS.signatureReturns }), _jsxs("p", { children: [_jsx("code", { className: "forgebook-inline-code", children: signature.returns }), signature.returnsDescription === "" ? null : (_jsxs(_Fragment, { children: [" ", _jsx(CodeText, { text: signature.returnsDescription })] }))] })] }));
@@ -11,11 +11,13 @@
11
11
  * @module
12
12
  */
13
13
  import { type ReactNode } from "react";
14
- import { type PanelArgs } from "../messages.ts";
14
+ import type { AddressLink } from "../addressArgsParam.ts";
15
+ import type { PanelArgs } from "../messages.ts";
15
16
  import type { NamedValues } from "../namedValues.ts";
16
17
  import { type FixedView } from "../storyGlobals.ts";
17
18
  import type { TreeComponent, TreeStory } from "../storyTree.ts";
18
19
  import { type ViewState } from "../viewState.ts";
20
+ import type { ArgControlLoaders } from "./customControls.ts";
19
21
  import type { ShellPlugin } from "./pluginTabs.tsx";
20
22
  import { type PageScroll } from "./useScrollMemory.ts";
21
23
  /** The stage's props. */
@@ -30,11 +32,17 @@ export type StageProps = {
30
32
  readonly onViewChange: (view: ViewState) => void;
31
33
  /** Called with what a story fixes of the view, once its frame read it, for the toolbar to show. */
32
34
  readonly onFixedChange: (storyId: string, fixed: FixedView) => void;
35
+ /** Loads the catalogue's design tokens; none when it has none. */
36
+ readonly loadTokens?: (() => Promise<unknown>) | undefined;
37
+ /** Loads each custom control the catalogue registers, by name; none when it registers none. */
38
+ readonly argControls?: ArgControlLoaders | undefined;
33
39
  /**
34
40
  * The values set in the Props tab, over the story's own args (kept in the address): as the address names them, so
35
41
  * unchecked; the stage hands the frames only those the story declares.
36
42
  */
37
43
  readonly panelArgs: PanelArgs;
44
+ /** What else the address says of the values: how to type them, and which could not be read. */
45
+ readonly addressLink: AddressLink | undefined;
38
46
  /** Called with the panel's changed values. */
39
47
  readonly onPanelArgsChange: (args: PanelArgs) => void;
40
48
  /** The matrix's axes (kept in the address): the rows' prop, then the columns'; empty draws the story alone. */
@@ -70,4 +78,4 @@ export type StageProps = {
70
78
  *
71
79
  * @param props - the component, the story, the view, the panel's values, the frame page and the loaders.
72
80
  */
73
- export declare const Stage: ({ component, story, view: ownView, onViewChange: onOwnViewChange, onFixedChange, panelArgs, onPanelArgsChange, matrixAxes, onMatrixAxesChange, frameUrl, plugins, loadCode, loadDocs, namedValues, header, onShownWidthChange, measuredHeight, backgroundOf, scroll }: StageProps) => ReactNode;
81
+ export declare const Stage: ({ component, story, view: ownView, onViewChange: onOwnViewChange, onFixedChange, loadTokens, argControls, panelArgs, addressLink, onPanelArgsChange, matrixAxes, onMatrixAxesChange, frameUrl, plugins, loadCode, loadDocs, namedValues, header, onShownWidthChange, measuredHeight, backgroundOf, scroll }: StageProps) => ReactNode;