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
@@ -12,11 +12,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
12
  * @module
13
13
  */
14
14
  import { useEffect, useMemo, useRef, useState } from "react";
15
+ import { checkedArgsMessage } from "../addressArgs.js";
15
16
  import { panelProps, settableProps } from "../argTypes.js";
16
17
  import { matrixOf, matrixProps } from "../matrix.js";
17
- import { panelArgsParam, parsePanelArgsParam } from "../messages.js";
18
18
  import { withFixed, withOwnFixed } from "../storyGlobals.js";
19
- import { frameAddress, isComparing, liveView, schemeOf, viewParams } from "../viewState.js";
19
+ import { shownSwitches } from "../switches.js";
20
+ import { frameAddress, isComparing, liveView, schemeOf } from "../viewState.js";
20
21
  import { useStoryClockControls } from "./ClockControls.js";
21
22
  import { useCatalogue } from "./catalogueContext.js";
22
23
  import { DeviceSlot, deviceAddress, isWaitingForDevice, roomSizing, useInkScheme, useStageDevice } from "./DeviceSlot.js";
@@ -30,6 +31,7 @@ import { StageCompare } from "./StageCompare.js";
30
31
  import { StageTools } from "./StageTools.js";
31
32
  import { StageViewport } from "./StageViewport.js";
32
33
  import { StoryBar } from "./StoryBar.js";
34
+ import { embedHeight, embedQuery, takesArgs, usePanelValues } from "./stageArgs.js";
33
35
  import { STRINGS } from "./strings.js";
34
36
  import { useAddressArgs } from "./useAddressArgs.js";
35
37
  import { useFrameMessages } from "./useFrameMessages.js";
@@ -52,42 +54,16 @@ const widthSetter = (fixed, view, onViewChange) => fixed.width === undefined ? (
52
54
  const INITIAL_FRAME_HEIGHT = 240;
53
55
  /** The most calls the Events tab keeps. */
54
56
  const MAX_CALLS = 50;
55
- /**
56
- * Whether a story's args change what it draws: not for a story of fixed examples, nor for one about logic, whose scene
57
- * takes none.
58
- *
59
- * @param story - the story.
60
- */
61
- const takesArgs = (story) => !story.isLogic && (story.controls === "all" || story.controls.length > 0);
62
- /**
63
- * What an embed of the story keeps of the page: its view and the values set in the panel. An embed draws no device
64
- * frame, so the device chosen is left out: the embed is the story at the width its iframe gives it.
65
- *
66
- * @param view - the reader's view, without what the story fixes, which the story fixes again.
67
- * @param panelArgs - the values set in the panel.
68
- * @param switches - the catalogue's switches.
69
- */
70
- const embedQuery = (view, panelArgs, switches) => {
71
- const params = viewParams({ ...view, device: "auto", orientation: "auto" }, switches);
72
- const args = panelArgsParam(panelArgs);
73
- if (args !== "")
74
- params.set("args", args);
75
- return params.toString();
76
- };
77
- /**
78
- * The height an embed's iframe starts at: as tall as the frame is on the stage.
79
- *
80
- * @param view - the view, with the height set on the stage.
81
- * @param contentHeight - the story's content, in CSS px.
82
- * @param story - the story, with the height its scene declares.
83
- */
84
- const embedHeight = (view, contentHeight, story) => view.height === "auto" ? Math.max(contentHeight, story.height ?? 0) : view.height;
57
+ /** No args of the story's own, as one value: what is computed from them is kept while it stays the same. */
58
+ const NO_OWN_ARGS = {};
59
+ /** A story's own args, as its frame reported them; none before it did. */
60
+ const ownArgsOf = (reported, storyId) => reported.get(storyId) ?? NO_OWN_ARGS;
85
61
  /**
86
62
  * The stage.
87
63
  *
88
64
  * @param props - the component, the story, the view, the panel's values, the frame page and the loaders.
89
65
  */
90
- export const Stage = ({ component, story, view: ownView, onViewChange: onOwnViewChange, onFixedChange, panelArgs, onPanelArgsChange, matrixAxes, onMatrixAxesChange, frameUrl, plugins, loadCode, loadDocs, namedValues, header, onShownWidthChange, measuredHeight, backgroundOf, scroll }) => {
66
+ export 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 }) => {
91
67
  const frameRef = useRef(null);
92
68
  const storyRef = useRef(null);
93
69
  const code = useStoryCode(loadCode);
@@ -122,24 +98,31 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
122
98
  null, [docs, matrixAxes, story.isLogic]);
123
99
  // the address's values reach the frames only once checked against what the story declares
124
100
  const addressArgs = useAddressArgs({
101
+ argControls,
125
102
  panelArgs,
103
+ link: addressLink,
126
104
  docs,
127
105
  storyArgs: storyArgs.get(story.id),
128
106
  argTypes: panel.argTypes,
129
107
  controls: panel.controls,
130
- namedValues
108
+ namedValues,
109
+ frames: storyRef
131
110
  });
132
111
  const acceptedArgs = addressArgs.accepted;
133
- const values = { ...storyArgs.get(story.id), ...acceptedArgs };
112
+ const ownArgs = ownArgsOf(storyArgs, story.id);
113
+ const panelValues = usePanelValues(acceptedArgs, ownArgs, onPanelArgsChange);
114
+ const { values } = panelValues;
134
115
  const settable = useMemo(() => docs.status === "ready"
135
- ? settableProps(panelProps(docs.value.props, panel.argTypes), panel.controls, namedValues ?? {})
136
- : [], [docs, panel.argTypes, panel.controls, namedValues]);
116
+ ? settableProps(panelProps(docs.value.props, panel.argTypes, ownArgs), panel.controls, namedValues ?? {})
117
+ : [], [docs, panel.argTypes, panel.controls, namedValues, ownArgs]);
137
118
  const worstCase = useWorstCase({
138
119
  storyRef,
139
120
  storyId: story.id,
140
121
  settable,
141
122
  values,
142
123
  panelArgs: acceptedArgs,
124
+ namedValues,
125
+ worstOfShape: addressArgs.worstOfShape,
143
126
  onPanelArgsChange
144
127
  });
145
128
  const clockControls = useStoryClockControls(frameRef, story.id);
@@ -160,7 +143,7 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
160
143
  // checked against the shown story's declaration only: a late message of the story shown before sends nothing
161
144
  const accepted = message.storyId === story.id ? addressArgs.acceptedFor(message) : undefined;
162
145
  if (accepted !== undefined)
163
- send({ type: "forgebook:args", args: accepted });
146
+ send(checkedArgsMessage(accepted));
164
147
  send({ type: "forgebook:matrix", matrix });
165
148
  // the view may have changed while the frame loaded
166
149
  if (!isComparing(view))
@@ -186,19 +169,6 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
186
169
  // the docs may arrive after the frames: they learn the events then
187
170
  useEffect(() => tellFrames(storyRef.current, { type: "forgebook:events", names: eventNames }), [eventNames]);
188
171
  useEffect(() => tellFrames(storyRef.current, { type: "forgebook:matrix", matrix }), [matrix]);
189
- // the values reach the frames from the address, so going back in the history sets them too; compared as text, so
190
- // a frame is told again only when they change
191
- const { acceptedParam } = addressArgs;
192
- useEffect(() => {
193
- if (acceptedParam === undefined)
194
- return;
195
- tellFrames(storyRef.current, { type: "forgebook:args", args: parsePanelArgsParam(acceptedParam) });
196
- }, [acceptedParam]);
197
- // a change starts from the values the story takes: one the address named and the story does not is let go
198
- const changeValue = (name, value) => {
199
- const { [name]: _removed, ...rest } = acceptedArgs;
200
- onPanelArgsChange(value === undefined ? rest : { ...rest, [name]: value });
201
- };
202
172
  const replay = () => {
203
173
  const message = { type: "forgebook:replay" };
204
174
  frameRef.current?.contentWindow?.postMessage(message, framesOrigin());
@@ -211,7 +181,7 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
211
181
  // among them) is sent live
212
182
  // a device sets the story's width and height in place of the stage's own, and its story area is the toolbar's width
213
183
  const { shown, framed } = useStageDevice(view, story.device, onShownWidthChange);
214
- const address = deviceAddress(frameAddress(frameUrl, story.id, useLoadedView(`${story.id}|${view.sheets}`, view), switches), framed);
184
+ const address = deviceAddress(frameAddress(frameUrl, story.id, useLoadedView(`${story.id}|${view.sheets}|${view.play}`, view), switches), framed);
215
185
  useLiveView(storyRef, view, !isComparing(view));
216
186
  useScrollMemory(storyRef, scroll);
217
187
  const ink = useInkScheme(schemeOf(view, switches));
@@ -235,7 +205,8 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
235
205
  address: deviceAddress(frameAddress(frameUrl, story.id, view, switches), framed),
236
206
  width: framed?.area.width ?? view.width,
237
207
  background: backgroundOf(view),
238
- args: panelArgs,
208
+ // as the stage's frames receive them: an aside asked for while the check waits for the docs is told when it ends
209
+ args: addressArgs.checked,
239
210
  view: liveView(view)
240
211
  }
241
212
  });
@@ -249,7 +220,12 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
249
220
  controls: panel.controls,
250
221
  actions: panel.actions,
251
222
  values,
252
- onValueChange: changeValue,
223
+ panelArgs: acceptedArgs,
224
+ storyArgs: ownArgs,
225
+ loadTokens,
226
+ argControls,
227
+ globals: shownSwitches(view.switches, switches),
228
+ onValueChange: panelValues.change,
253
229
  onReset: () => onPanelArgsChange({}),
254
230
  worstCase: worstCase.state,
255
231
  namedValues,
@@ -261,17 +237,16 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
261
237
  calls: calls.filter((call) => call.storyId === story.id),
262
238
  onClearCalls: () => setCalls([]),
263
239
  trace: isComparing(view) ? undefined : traces.get(story.id),
264
- onPlayAgain: () => {
265
- const message = { type: "forgebook:play-again" };
266
- frameRef.current?.contentWindow?.postMessage(message, framesOrigin());
267
- },
240
+ view,
241
+ onViewChange,
242
+ onPlayStep: (command) => tellFrames(storyRef.current, { type: "forgebook:play-step", command }),
268
243
  check: storyCheck.check,
269
244
  onCheck: isComparing(view) ? undefined : storyCheck.run,
270
245
  pluginTabs
271
246
  }).filter((tab) => catalogue.tabs.includes(tab.id));
272
247
  return (_jsxs("div", { className: "forgebook-workspace", children: [header, _jsxs("div", { className: "forgebook-story-pane", children: [_jsx("div", { ref: storyRef, className: "forgebook-scroll", children: _jsxs("section", { className: "forgebook-story", "aria-label": STRINGS.storyLabel, children: [_jsx(StoryBar, { story: story, axisProps: axisProps, matrixAxes: matrixAxes, onMatrixAxesChange: onMatrixAxesChange, onReplay: canReplay ? replay : undefined, clockControls: hasClock ? clockControls : undefined, frameAddress: frameAddress(frameUrl, story.id, view, switches), embed: {
273
248
  title,
274
- query: embedQuery(ownView, panelArgs, switches),
249
+ query: embedQuery(ownView, acceptedArgs, switches),
275
250
  height: embedHeight(view, reportedHeight ?? lastHeight, story)
276
251
  } }), _jsx(DroppedArgsNote, { dropped: addressArgs.dropped, onRemove: () => onPanelArgsChange(acceptedArgs) }), isComparing(view) ? (_jsx(StageCompare, { story: story, title: title, view: view, frameUrl: frameUrl, framed: framed, heights: heights, settled: settled, fallbackHeight: lastHeight, backgroundOf: backgroundOf })) : (_jsx(StageViewport, { zoom: view.zoom, ...roomSizing(framed, {
277
252
  width: view.width,
@@ -280,5 +255,5 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
280
255
  background: backgroundOf(view),
281
256
  height: view.height,
282
257
  onHeightChange: (height) => onViewChange({ ...view, height })
283
- }), children: (fixedHeight) => (_jsx(DeviceSlot, { framed: framed, scheme: ink, background: backgroundOf(view), children: isWaitingForDevice(shown, framed) ? null : (_jsx(FrameView, { ref: frameRef, title: title, address: address, heights: heights, settled: settled, fallbackHeight: measuredHeight ?? lastHeight, sceneHeight: story.height, fixedHeight: framed?.area.height ?? fixedHeight }, story.id)) })) }))] }) }), isComparing(view) ? null : (_jsx(StageTools, { zoom: view.zoom, onZoomChange: (zoom) => onViewChange({ ...view, zoom }), tools: view.tools, onToolsChange: (tools) => onViewChange({ ...view, tools }) }))] }), view.isPanelOpen ? (_jsx(Dock, { tabs: tabs, activeTab: view.panelTab, onTabChange: (panelTab) => onViewChange({ ...view, panelTab }), onClose: () => onViewChange({ ...view, isPanelOpen: false }) })) : null] }));
258
+ }), children: (fixedHeight) => (_jsx(DeviceSlot, { framed: framed, scheme: ink, background: backgroundOf(view), children: isWaitingForDevice(shown, framed) ? null : (_jsx(FrameView, { frame: frameRef, title: title, address: address, heights: heights, settled: settled, fallbackHeight: measuredHeight ?? lastHeight, sceneHeight: story.height, fixedHeight: framed?.area.height ?? fixedHeight }, story.id)) })) }))] }) }), isComparing(view) ? null : (_jsx(StageTools, { zoom: view.zoom, onZoomChange: (zoom) => onViewChange({ ...view, zoom }), tools: view.tools, onToolsChange: (tools) => onViewChange({ ...view, tools }) }))] }), view.isPanelOpen ? (_jsx(Dock, { tabs: tabs, activeTab: view.panelTab, onTabChange: (panelTab) => onViewChange({ ...view, panelTab }), onClose: () => onViewChange({ ...view, isPanelOpen: false }) })) : null] }));
284
259
  };
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The statuses' badges: in a component's entry of the sidebar, at the top of its page, beside a story's example that
3
+ * holds a status of its own, and in the tag filter's list.
4
+ * Loaded with the tag filter (`TagViews.tsx`), only for a catalogue whose stories have tags.
5
+ *
6
+ * @remarks
7
+ * A badge says its status in words, so its colour is never the only sign; a hidden word before the badges tells a
8
+ * screen reader what they are. A page whose component is `@deprecated` in its TSDoc shows the `deprecated` badge even
9
+ * when its meta has no such tag, with the TSDoc's reason in its tooltip, so the page never says less than the docs.
10
+ *
11
+ * @module
12
+ */
13
+ import { type ReactNode } from "react";
14
+ import { type CatalogueStatus } from "../storyStatuses.ts";
15
+ import type { TreeComponent } from "../storyTree.ts";
16
+ import "./statusBadges.scss";
17
+ /**
18
+ * A status's text: the catalogue's label, else Forgebook's word for a default status, else its tag.
19
+ *
20
+ * @param status - the status.
21
+ */
22
+ export declare const statusLabel: (status: CatalogueStatus) => string;
23
+ /**
24
+ * One badge.
25
+ *
26
+ * @param props - the status, and the tooltip it carries when there is more to say.
27
+ */
28
+ export declare const StatusBadge: ({ status, hint }: {
29
+ readonly status: CatalogueStatus;
30
+ readonly hint?: string | undefined;
31
+ }) => ReactNode;
32
+ /**
33
+ * The catalogue's statuses, their defaults filled in, once per declaration.
34
+ */
35
+ export declare const useStatuses: () => readonly CatalogueStatus[];
36
+ /**
37
+ * The badges of the statuses a list of tags holds; nothing for none.
38
+ *
39
+ * @param props - the tags, and the row's class.
40
+ */
41
+ export declare const StatusBadges: ({ tags, className }: {
42
+ readonly tags: readonly string[];
43
+ readonly className: string;
44
+ }) => ReactNode;
45
+ /**
46
+ * The badges at the top of a component's page: its meta's statuses, and `deprecated` when its TSDoc says so, with the
47
+ * TSDoc's reason in that badge's tooltip.
48
+ *
49
+ * @param props - the component and its docs loader.
50
+ */
51
+ export declare const ComponentBadges: ({ component, loadDocs }: {
52
+ readonly component: TreeComponent;
53
+ readonly loadDocs: (() => Promise<unknown>) | undefined;
54
+ }) => ReactNode;
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * The statuses' badges: in a component's entry of the sidebar, at the top of its page, beside a story's example that
4
+ * holds a status of its own, and in the tag filter's list.
5
+ * Loaded with the tag filter (`TagViews.tsx`), only for a catalogue whose stories have tags.
6
+ *
7
+ * @remarks
8
+ * A badge says its status in words, so its colour is never the only sign; a hidden word before the badges tells a
9
+ * screen reader what they are. A page whose component is `@deprecated` in its TSDoc shows the `deprecated` badge even
10
+ * when its meta has no such tag, with the TSDoc's reason in its tooltip, so the page never says less than the docs.
11
+ *
12
+ * @module
13
+ */
14
+ import { useMemo } from "react";
15
+ import { catalogueStatuses, DEPRECATED_STATUS, statusesOf } from "../storyStatuses.js";
16
+ import "./statusBadges.css";
17
+ import { useCatalogue } from "./catalogueContext.js";
18
+ import { textsOfGroup } from "./strings.js";
19
+ import { useComponentDocs } from "./useComponentDocs.js";
20
+ /** The badges' texts, as shown: Forgebook's, with the catalogue's replacements (`strings: { "statuses.review": … }`). */
21
+ const STATUS_TEXTS = textsOfGroup("statuses", {
22
+ status: "Status",
23
+ review: "Review",
24
+ experimental: "Experimental",
25
+ deprecated: "Deprecated",
26
+ fromDocs: (reason) => `Deprecated in its TSDoc: ${reason}`
27
+ });
28
+ /**
29
+ * A status's text: the catalogue's label, else Forgebook's word for a default status, else its tag.
30
+ *
31
+ * @param status - the status.
32
+ */
33
+ export const statusLabel = (status) => {
34
+ if (status.label !== undefined)
35
+ return status.label;
36
+ if (status.id === "review" || status.id === "experimental" || status.id === "deprecated")
37
+ return STATUS_TEXTS[status.id];
38
+ return status.id;
39
+ };
40
+ /**
41
+ * One badge.
42
+ *
43
+ * @param props - the status, and the tooltip it carries when there is more to say.
44
+ */
45
+ export const StatusBadge = ({ status, hint }) => (_jsx("span", { className: "forgebook-status", "data-tone": status.tone, title: hint ?? statusLabel(status), children: statusLabel(status) }));
46
+ /**
47
+ * A row of badges, with the hidden word that says what they are; nothing for none.
48
+ *
49
+ * @param props - the statuses, the tooltip of each by id, and the row's class.
50
+ */
51
+ const Badges = ({ statuses, hints, className }) => statuses.length === 0 ? null : (_jsxs("span", { className: className, children: [_jsxs("span", { className: "forgebook-visually-hidden", children: [STATUS_TEXTS.status, ": "] }), statuses.map((status) => (_jsx(StatusBadge, { status: status, hint: hints?.[status.id] }, status.id)))] }));
52
+ /**
53
+ * The catalogue's statuses, their defaults filled in, once per declaration.
54
+ */
55
+ export const useStatuses = () => {
56
+ const { statuses } = useCatalogue();
57
+ return useMemo(() => catalogueStatuses(statuses), [statuses]);
58
+ };
59
+ /**
60
+ * The badges of the statuses a list of tags holds; nothing for none.
61
+ *
62
+ * @param props - the tags, and the row's class.
63
+ */
64
+ export const StatusBadges = ({ tags, className }) => _jsx(Badges, { className: className, statuses: statusesOf(tags, useStatuses()) });
65
+ /**
66
+ * The badges at the top of a component's page: its meta's statuses, and `deprecated` when its TSDoc says so, with the
67
+ * TSDoc's reason in that badge's tooltip.
68
+ *
69
+ * @param props - the component and its docs loader.
70
+ */
71
+ export const ComponentBadges = ({ component, loadDocs }) => {
72
+ const statuses = useStatuses();
73
+ const docs = useComponentDocs(loadDocs);
74
+ const reason = docs.status === "ready" ? docs.value.guidance?.deprecated : undefined;
75
+ const { tags } = component;
76
+ return (_jsx(Badges, { className: "forgebook-status-badges forgebook-status-badges--page", statuses: statusesOf(reason === undefined ? tags : [...tags, DEPRECATED_STATUS], statuses), hints: reason === undefined ? {} : { [DEPRECATED_STATUS]: STATUS_TEXTS.fromDocs(reason) } }));
77
+ };
@@ -1,31 +1,20 @@
1
1
  /**
2
2
  * A story's code, as the panel's Code tab and the component page show it: its `render` as written, coloured by the
3
- * plugin, or, for a story drawn from its args, the component in the framework's code with the values of the moment.
3
+ * plugin, or, for a story drawn from its args, the component in the framework's code with the args its file writes as
4
+ * code (functions, elements) as written and the values of the moment for the rest.
5
+ *
6
+ * @see `../storyCodeText.ts` for the text.
4
7
  *
5
8
  * @module
6
9
  */
7
- import type { StoryFileCode } from "@forgebook/story-format/source";
8
10
  import type { ReactNode } from "react";
9
- import type { StoryCodeWriter } from "../frame/renderer.ts";
10
- import type { PanelArgs } from "../messages.ts";
11
- /** Which story's code, and the values its JSX is drawn from when it has no `render`. */
12
- export type StoryCodeSource = {
13
- /** The story file's code. */
14
- readonly code: StoryFileCode;
15
- /** The story's export name. */
16
- readonly exportName: string;
17
- /** The component's name as code writes it (`codeNameOf`), for the code of a story drawn from its args. */
18
- readonly componentName: string;
19
- /** The values of the moment: the story's args, with the panel's over them on the story page. */
20
- readonly args: PanelArgs;
21
- };
11
+ import { type StoryCodeSource } from "../storyCodeText.ts";
22
12
  /**
23
- * The story's code as text, as copied.
13
+ * Whether the story has a `render` of its own, shown as written.
24
14
  *
25
- * @param source - the file's code, the story, the component's name and the args.
26
- * @param write - the framework's code writer, for a story drawn from its args.
15
+ * @param source - the file's code and the story.
27
16
  */
28
- export declare const storyCodeText: ({ code, exportName, componentName, args }: StoryCodeSource, write: StoryCodeWriter) => string;
17
+ export declare const hasRenderCode: (source: StoryCodeSource) => boolean;
29
18
  /**
30
19
  * The story's code, coloured.
31
20
  *
@@ -1,13 +1,13 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { renderCodeOf, storyCodeText, writtenArgsOf } from "../storyCodeText.js";
2
3
  import { Code } from "./Code.js";
3
4
  import { useCodeWriter } from "./codeWriter.js";
4
5
  /**
5
- * The story's code as text, as copied.
6
+ * Whether the story has a `render` of its own, shown as written.
6
7
  *
7
- * @param source - the file's code, the story, the component's name and the args.
8
- * @param write - the framework's code writer, for a story drawn from its args.
8
+ * @param source - the file's code and the story.
9
9
  */
10
- export const storyCodeText = ({ code, exportName, componentName, args }, write) => code[exportName]?.text ?? write(componentName, args);
10
+ export const hasRenderCode = (source) => renderCodeOf(source) !== undefined;
11
11
  /**
12
12
  * The story's code, coloured.
13
13
  *
@@ -15,12 +15,13 @@ export const storyCodeText = ({ code, exportName, componentName, args }, write)
15
15
  */
16
16
  export const StoryCodeBlock = (source) => {
17
17
  const write = useCodeWriter();
18
- const render = source.code[source.exportName];
18
+ const render = renderCodeOf(source);
19
19
  if (render !== undefined) {
20
20
  // biome-ignore lint/style/useNamingConvention: React's own name for markup set as HTML
21
21
  const markup = { __html: render.html };
22
22
  return (_jsx("pre", { className: "forgebook-code-block", children: _jsx("code", { className: "forgebook-code", dangerouslySetInnerHTML: markup }) }));
23
23
  }
24
24
  // the attributes' names are names, not types: only the component's name is coloured as one
25
- return (_jsx("pre", { className: "forgebook-code-block", children: _jsx(Code, { text: storyCodeText(source, write), names: Object.keys(source.args) }) }));
25
+ const names = [...Object.keys(source.args), ...Object.keys(writtenArgsOf(source))];
26
+ return (_jsx("pre", { className: "forgebook-code-block", children: _jsx(Code, { text: storyCodeText(source, write), names: names }) }));
26
27
  };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * A switch offered as a gallery (`control: "gallery"`): a button naming the value shown, which opens a menu of the
3
+ * values with their previews.
4
+ *
5
+ * @remarks
6
+ * Only the button is on the first screen: the menu's code, its styles and the previews themselves load when it first
7
+ * opens (`SwitchGalleryPanel.tsx`), so a catalogue pays for its gallery only when a reader asks for it.
8
+ *
9
+ * @module
10
+ */
11
+ import type { ReactNode } from "react";
12
+ import { type ViewSwitch } from "../switches.ts";
13
+ import type { SwitchPreviews } from "./SwitchGalleryPanel.tsx";
14
+ /** A gallery's props. */
15
+ export type SwitchGalleryProps = {
16
+ /** The switch. */
17
+ readonly each: ViewSwitch;
18
+ /** Whether it sits on the toolbar, after its name, or in a row of the View menu, whose row names it. */
19
+ readonly isOnBar: boolean;
20
+ /** The value shown. */
21
+ readonly value: string;
22
+ /** Called with the chosen value. */
23
+ readonly onValueChange: (value: string) => void;
24
+ /** Whether it is off. */
25
+ readonly isDisabled: boolean;
26
+ /** Why it is off, as its tooltip. */
27
+ readonly disabledNote: string | undefined;
28
+ /** Loads the catalogue's previews; none when it gives none. */
29
+ readonly loadPreviews: (() => Promise<SwitchPreviews>) | undefined;
30
+ };
31
+ /**
32
+ * A gallery's button, and its menu once open.
33
+ *
34
+ * @param props - the switch, the value shown and its setter.
35
+ */
36
+ export declare const SwitchGallery: ({ each, isOnBar, value, onValueChange, isDisabled, disabledNote, loadPreviews }: SwitchGalleryProps) => ReactNode;
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { switchValueOf } from "../switches.js";
3
+ import { Icon } from "./icons.js";
4
+ import { LazyView, lazyModule } from "./lazyModule.js";
5
+ import { usePopover } from "./usePopover.js";
6
+ /** The menu's module, loaded when a gallery first opens. */
7
+ const PANEL = lazyModule(() => import("./SwitchGalleryPanel.js").then((module) => module.SwitchGalleryPanel));
8
+ /**
9
+ * A gallery's button, and its menu once open.
10
+ *
11
+ * @param props - the switch, the value shown and its setter.
12
+ */
13
+ export const SwitchGallery = ({ each, isOnBar, value, onValueChange, isDisabled, disabledNote, loadPreviews }) => {
14
+ const popover = usePopover();
15
+ const name = switchValueOf(each, value)?.label ?? value;
16
+ return (_jsxs("div", { className: "forgebook-toolbar__control", children: [isOnBar ? (_jsx("span", { className: "forgebook-toolbar__label", "aria-hidden": "true", children: each.label })) : null, _jsxs("button", { ref: popover.buttonRef, type: "button", className: "forgebook-button", "aria-label": `${each.label}: ${name}`, "aria-expanded": popover.isOpen, "aria-controls": popover.panelId, disabled: isDisabled, title: isDisabled ? disabledNote : undefined, onClick: (event) => popover.setIsOpen(!popover.isOpen, event), children: [_jsx("span", { className: "forgebook-gallery-names", children: each.values.map((option) => (_jsx("span", { "data-shown": option.value === value ? "" : undefined, children: option.label }, option.value))) }), _jsx(Icon, { name: "chevronDown", size: 12 })] }), popover.isDrawn ? (_jsx(LazyView, { module: PANEL, props: { each, value, onValueChange, popover, loadPreviews }, loading: null, failed: (message) => (_jsx("p", { className: "forgebook-problems", role: "alert", children: message })) })) : null] }));
17
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The menu of a gallery (`control: "gallery"`): each value of a switch with its preview, so a reader sees a look before
3
+ * applying it.
4
+ *
5
+ * @remarks
6
+ * Native radio buttons, as the shell's other menus: one tab stop, the arrow keys move and choose, and a screen reader
7
+ * reads the group and each value's label. The pictures are decoration beside that label, so they are hidden from it.
8
+ * Drawn in the top layer, positioned from its button: inside the View menu, whose rows scroll, it would be clipped.
9
+ * Loaded when a gallery first opens, with the previews (`SwitchGallery.tsx`): their pictures are fetched only then.
10
+ *
11
+ * @module
12
+ */
13
+ import { type ReactNode } from "react";
14
+ import type { SwitchPreview, ViewSwitch } from "../switches.ts";
15
+ import "./switchGallery.scss";
16
+ import type { Popover } from "./usePopover.ts";
17
+ /** The catalogue's previews, by switch id then value: the plugin's module, with each picture's address. */
18
+ export type SwitchPreviews = Readonly<Record<string, Readonly<Record<string, SwitchPreview>>>>;
19
+ /** The menu's props. */
20
+ export type SwitchGalleryPanelProps = {
21
+ /** The switch. */
22
+ readonly each: ViewSwitch;
23
+ /** The value shown. */
24
+ readonly value: string;
25
+ /** Called with the chosen value. */
26
+ readonly onValueChange: (value: string) => void;
27
+ /** The button's popover, which opens and closes the menu. */
28
+ readonly popover: Popover;
29
+ /** Loads the catalogue's previews; none when it gives none. */
30
+ readonly loadPreviews: (() => Promise<SwitchPreviews>) | undefined;
31
+ };
32
+ /**
33
+ * The menu.
34
+ *
35
+ * @param props - the switch, the value shown and its setter, and the button's popover.
36
+ */
37
+ export declare const SwitchGalleryPanel: ({ each, value, onValueChange, popover, loadPreviews }: SwitchGalleryPanelProps) => ReactNode;
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * The menu of a gallery (`control: "gallery"`): each value of a switch with its preview, so a reader sees a look before
4
+ * applying it.
5
+ *
6
+ * @remarks
7
+ * Native radio buttons, as the shell's other menus: one tab stop, the arrow keys move and choose, and a screen reader
8
+ * reads the group and each value's label. The pictures are decoration beside that label, so they are hidden from it.
9
+ * Drawn in the top layer, positioned from its button: inside the View menu, whose rows scroll, it would be clipped.
10
+ * Loaded when a gallery first opens, with the previews (`SwitchGallery.tsx`): their pictures are fetched only then.
11
+ *
12
+ * @module
13
+ */
14
+ import { useEffect, useId, useLayoutEffect, useState } from "react";
15
+ import { galleryPlace } from "./galleryPlace.js";
16
+ import { Icon } from "./icons.js";
17
+ import "./switchGallery.css";
18
+ /**
19
+ * What a value shows: its picture, its colours and font, or, with no preview, its label's first letter, so it still
20
+ * has a place of its own in the grid.
21
+ *
22
+ * @param props - the value and its preview.
23
+ */
24
+ const PreviewArt = ({ option, preview }) => {
25
+ const [isBroken, setIsBroken] = useState(false);
26
+ if (preview !== undefined && "image" in preview && !isBroken) {
27
+ return (_jsx("img", { className: "forgebook-gallery__image", src: preview.image, alt: "", decoding: "async", onError: (_event) => setIsBroken(true) }));
28
+ }
29
+ if (preview !== undefined && "swatches" in preview) {
30
+ return (_jsxs(_Fragment, { children: [_jsx("span", { className: "forgebook-gallery__swatches", children: preview.swatches.map((colour, index) => (_jsx("span", { style: { backgroundColor: colour } }, index))) }), preview.font === undefined ? null : (_jsx("span", { className: "forgebook-gallery__font", style: { fontFamily: `"${preview.font}", var(--forgebook-font-sans)` }, children: preview.font }))] }));
31
+ }
32
+ return _jsx("span", { className: "forgebook-gallery__letter", children: Array.from(option.label)[0] });
33
+ };
34
+ /**
35
+ * The menu.
36
+ *
37
+ * @param props - the switch, the value shown and its setter, and the button's popover.
38
+ */
39
+ export const SwitchGalleryPanel = ({ each, value, onValueChange, popover, loadPreviews }) => {
40
+ const { panelRef, buttonRef, panelId, setIsOpen, closeAfterChoice } = popover;
41
+ const name = useId();
42
+ const [previews, setPreviews] = useState({});
43
+ useEffect(() => {
44
+ let isCurrent = true;
45
+ // without its previews the menu still works: every value then shows its letter
46
+ loadPreviews?.()
47
+ .then((loaded) => {
48
+ if (isCurrent)
49
+ setPreviews(loaded);
50
+ })
51
+ .catch(() => undefined);
52
+ return () => {
53
+ isCurrent = false;
54
+ };
55
+ }, [loadPreviews]);
56
+ // biome-ignore lint/correctness/useExhaustiveDependencies: both are refs, set once the panel is drawn
57
+ useLayoutEffect(() => {
58
+ const panel = panelRef.current;
59
+ const button = buttonRef.current;
60
+ if (panel === null || button === null)
61
+ return;
62
+ panel.showPopover();
63
+ const place = () => {
64
+ const { top, left } = galleryPlace(button.getBoundingClientRect(), panel.getBoundingClientRect(), {
65
+ width: window.innerWidth,
66
+ height: window.innerHeight
67
+ });
68
+ panel.style.top = `${top}px`;
69
+ panel.style.left = `${left}px`;
70
+ };
71
+ place();
72
+ // the first open arrives after its popover's own focus: the code was still loading
73
+ panel.querySelector("input:checked")?.focus();
74
+ window.addEventListener("resize", place);
75
+ return () => window.removeEventListener("resize", place);
76
+ }, []);
77
+ const closeWithKey = () => {
78
+ setIsOpen(false);
79
+ buttonRef.current?.focus();
80
+ };
81
+ // on the way down, wherever the focus is: this menu's alone, so a View menu around it stays open
82
+ // biome-ignore lint/correctness/useExhaustiveDependencies: both it calls read refs and the state's setter
83
+ useEffect(() => {
84
+ const onEscape = (event) => {
85
+ if (event.key !== "Escape")
86
+ return;
87
+ event.stopPropagation();
88
+ closeWithKey();
89
+ };
90
+ document.addEventListener("keydown", onEscape, { capture: true });
91
+ return () => document.removeEventListener("keydown", onEscape, { capture: true });
92
+ }, []);
93
+ return (_jsx("div", { ref: panelRef, id: panelId, className: "forgebook-gallery", popover: "manual", role: "dialog", "aria-label": each.label, onKeyDown: (event) => {
94
+ if (event.key === "Enter")
95
+ closeWithKey();
96
+ }, children: _jsxs("fieldset", { className: "forgebook-gallery__grid", children: [_jsx("legend", { className: "forgebook-visually-hidden", children: each.label }), each.values.map((option) => (_jsxs("label", { className: "forgebook-gallery__item", children: [_jsx("input", { type: "radio", className: "forgebook-visually-hidden", name: name, checked: option.value === value, onChange: () => onValueChange(option.value),
97
+ // on the click, so a press on the value already shown closes the menu too
98
+ onClick: closeAfterChoice }), _jsx("span", { className: "forgebook-gallery__preview", "aria-hidden": "true", children: _jsx(PreviewArt, { option: option, preview: previews[each.id]?.[option.value] }) }), _jsxs("span", { className: "forgebook-gallery__name", children: [option.value === value ? _jsx(Icon, { name: "check", size: 12 }) : null, option.label] })] }, option.value)))] }) }));
99
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The sidebar's tag filter: a button beside the search, with how many tags are on, which opens the catalogue's tags to
3
+ * ask for or to leave out, a status shown as its badge. Loaded only for a catalogue whose stories have tags.
4
+ *
5
+ * @module
6
+ */
7
+ import { type ReactNode } from "react";
8
+ import type { StoryTree } from "../storyTree.ts";
9
+ import "./tagFilter.scss";
10
+ /** The filter's props. */
11
+ export type TagFilterProps = {
12
+ /** The whole tree, whose tags it offers. */
13
+ readonly tree: StoryTree;
14
+ /** The tags on, each `name` or `!name`. */
15
+ readonly tags: readonly string[];
16
+ /** Called with the tags on, when they change. */
17
+ readonly onTagsChange: (tags: readonly string[]) => void;
18
+ };
19
+ /**
20
+ * The tag filter.
21
+ *
22
+ * @param props - the tree, the tags on and how to change them.
23
+ */
24
+ export declare const TagFilter: ({ tree, tags, onTagsChange }: TagFilterProps) => ReactNode;