forgebook 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/README.md +914 -72
  2. package/dist/bin/forgebook/agentClient.d.ts +2 -1
  3. package/dist/bin/forgebook/agentClient.js +13 -6
  4. package/dist/bin/forgebook/agentGuide.d.ts +59 -0
  5. package/dist/bin/forgebook/agentGuide.js +203 -0
  6. package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
  7. package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
  8. package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
  9. package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
  10. package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
  11. package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
  12. package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
  13. package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
  14. package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
  15. package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
  16. package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
  17. package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
  18. package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
  19. package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
  20. package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
  21. package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
  22. package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
  23. package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
  24. package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
  25. package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
  26. package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
  27. package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
  28. package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
  29. package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
  30. package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
  31. package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
  32. package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
  33. package/dist/bin/forgebook/agentText.d.ts +23 -3
  34. package/dist/bin/forgebook/agentText.js +175 -28
  35. package/dist/bin/forgebook/agents.md +20 -191
  36. package/dist/bin/forgebook/agentsText.js +2 -1
  37. package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
  38. package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
  39. package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
  40. package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
  41. package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
  42. package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
  43. package/dist/bin/forgebook/auditCommand.d.mts +8 -0
  44. package/dist/bin/forgebook/auditCommand.mjs +75 -0
  45. package/dist/bin/forgebook/auditRun.d.ts +95 -0
  46. package/dist/bin/forgebook/auditRun.js +270 -0
  47. package/dist/bin/forgebook/browserRun.d.ts +21 -0
  48. package/dist/bin/forgebook/browserRun.js +57 -0
  49. package/dist/bin/forgebook/buildFailure.d.ts +7 -0
  50. package/dist/bin/forgebook/buildFailure.js +47 -0
  51. package/dist/bin/forgebook/buildWatch.d.ts +52 -0
  52. package/dist/bin/forgebook/buildWatch.js +137 -0
  53. package/dist/bin/forgebook/builtCatalogue.js +9 -5
  54. package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
  55. package/dist/bin/forgebook/catalogueCommands.js +23 -0
  56. package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
  57. package/dist/bin/forgebook/catalogueVite.js +14 -6
  58. package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
  59. package/dist/bin/forgebook/commandCacheClaim.js +170 -0
  60. package/dist/bin/forgebook/commandServer.d.ts +8 -0
  61. package/dist/bin/forgebook/commandServer.js +61 -13
  62. package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
  63. package/dist/bin/forgebook/graphCommand.d.mts +8 -0
  64. package/dist/bin/forgebook/graphCommand.mjs +84 -0
  65. package/dist/bin/forgebook/guide/commands.md +57 -0
  66. package/dist/bin/forgebook/guide/devices.md +17 -0
  67. package/dist/bin/forgebook/guide/docs-pages.md +13 -0
  68. package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
  69. package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
  70. package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
  71. package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
  72. package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
  73. package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
  74. package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
  75. package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
  76. package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
  77. package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
  78. package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
  79. package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
  80. package/dist/bin/forgebook/guide/links.md +29 -0
  81. package/dist/bin/forgebook/guide/setup.md +23 -0
  82. package/dist/bin/forgebook/guide/stories.md +90 -0
  83. package/dist/bin/forgebook/guide/switches.md +43 -0
  84. package/dist/bin/forgebook/guideCommand.d.mts +13 -0
  85. package/dist/bin/forgebook/guideCommand.mjs +37 -0
  86. package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
  87. package/dist/bin/forgebook/importers/storybook.js +11 -5
  88. package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
  89. package/dist/bin/forgebook/initCommands.d.mts +11 -0
  90. package/dist/bin/forgebook/initCommands.mjs +51 -78
  91. package/dist/bin/forgebook/initConfig.d.ts +5 -3
  92. package/dist/bin/forgebook/initConfig.js +6 -3
  93. package/dist/bin/forgebook/initInstall.d.ts +15 -0
  94. package/dist/bin/forgebook/initInstall.js +77 -0
  95. package/dist/bin/forgebook/initPrint.d.ts +9 -0
  96. package/dist/bin/forgebook/initPrint.js +60 -0
  97. package/dist/bin/forgebook/initRefusals.d.ts +45 -0
  98. package/dist/bin/forgebook/initRefusals.js +91 -0
  99. package/dist/bin/forgebook/initRun.d.ts +28 -0
  100. package/dist/bin/forgebook/initRun.js +311 -0
  101. package/dist/bin/forgebook/mcpCommand.mjs +38 -4
  102. package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
  103. package/dist/bin/forgebook/mcpGraph.js +24 -0
  104. package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
  105. package/dist/bin/forgebook/mcpTokens.js +58 -0
  106. package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
  107. package/dist/bin/forgebook/mcpToolParts.js +10 -0
  108. package/dist/bin/forgebook/mcpTools.d.ts +13 -6
  109. package/dist/bin/forgebook/mcpTools.js +57 -90
  110. package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
  111. package/dist/bin/forgebook/mcpVerify.js +36 -0
  112. package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
  113. package/dist/bin/forgebook/migrate/codemods.js +61 -0
  114. package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
  115. package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
  116. package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
  117. package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
  118. package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
  119. package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
  120. package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
  121. package/dist/bin/forgebook/migrate/migrateText.js +30 -0
  122. package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
  123. package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
  124. package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
  125. package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
  126. package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
  127. package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
  128. package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
  129. package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
  130. package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
  131. package/dist/bin/forgebook/newProject/newProject.js +180 -0
  132. package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
  133. package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
  134. package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
  135. package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
  136. package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
  137. package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
  138. package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
  139. package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
  140. package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
  141. package/dist/bin/forgebook/newProject/projectLook.js +293 -0
  142. package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
  143. package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
  144. package/dist/bin/forgebook/newRepair.d.ts +45 -0
  145. package/dist/bin/forgebook/newRepair.js +157 -0
  146. package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
  147. package/dist/bin/forgebook/newRepairRun.js +148 -0
  148. package/dist/bin/forgebook/newStories.d.ts +23 -1
  149. package/dist/bin/forgebook/newStories.js +101 -11
  150. package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
  151. package/dist/bin/forgebook/newStoriesFile.js +43 -4
  152. package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
  153. package/dist/bin/forgebook/prebundleRun.js +28 -8
  154. package/dist/bin/forgebook/proofCommand.d.mts +15 -0
  155. package/dist/bin/forgebook/proofCommand.mjs +212 -0
  156. package/dist/bin/forgebook/proofRun.d.ts +63 -0
  157. package/dist/bin/forgebook/proofRun.js +412 -0
  158. package/dist/bin/forgebook/proofText.d.ts +36 -0
  159. package/dist/bin/forgebook/proofText.js +131 -0
  160. package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
  161. package/dist/bin/forgebook/proofWorkflow.js +205 -0
  162. package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
  163. package/dist/bin/forgebook/setArgsTool.js +70 -0
  164. package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
  165. package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
  166. package/dist/bin/forgebook/storyCheckRun.js +83 -9
  167. package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
  168. package/dist/bin/forgebook/storyFileIds.js +14 -0
  169. package/dist/bin/forgebook/stressCases.d.ts +31 -0
  170. package/dist/bin/forgebook/stressCases.js +79 -0
  171. package/dist/bin/forgebook/stressRun.d.ts +12 -0
  172. package/dist/bin/forgebook/stressRun.js +61 -0
  173. package/dist/bin/forgebook/stressText.d.ts +27 -0
  174. package/dist/bin/forgebook/stressText.js +46 -0
  175. package/dist/bin/forgebook/verifyBase.d.ts +45 -0
  176. package/dist/bin/forgebook/verifyBase.js +196 -0
  177. package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
  178. package/dist/bin/forgebook/verifyCommand.mjs +125 -0
  179. package/dist/bin/forgebook/verifyRun.d.ts +63 -0
  180. package/dist/bin/forgebook/verifyRun.js +108 -0
  181. package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
  182. package/dist/bin/forgebook/verifyVerdict.js +297 -0
  183. package/dist/bin/forgebook/workflowActions.d.ts +23 -0
  184. package/dist/bin/forgebook/workflowActions.js +23 -0
  185. package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
  186. package/dist/src/addressArgs.d.ts +29 -5
  187. package/dist/src/addressArgs.js +58 -16
  188. package/dist/src/addressArgsParam.d.ts +54 -0
  189. package/dist/src/addressArgsParam.js +51 -0
  190. package/dist/src/addressTexts.d.ts +14 -0
  191. package/dist/src/addressTexts.js +28 -21
  192. package/dist/src/agentIndexFile.d.ts +11 -0
  193. package/dist/src/agentIndexFile.js +11 -0
  194. package/dist/src/argConditions.d.ts +52 -0
  195. package/dist/src/argConditions.js +80 -0
  196. package/dist/src/argControl.d.ts +100 -0
  197. package/dist/src/argControl.js +0 -0
  198. package/dist/src/argExpression.d.ts +21 -0
  199. package/dist/src/argExpression.js +30 -0
  200. package/dist/src/argTypes.d.ts +40 -51
  201. package/dist/src/argTypes.js +66 -184
  202. package/dist/src/argsProps.d.ts +3 -3
  203. package/dist/src/argsProps.js +11 -5
  204. package/dist/src/bundlerErrors.d.ts +29 -0
  205. package/dist/src/bundlerErrors.js +49 -0
  206. package/dist/src/catalogue.d.ts +31 -0
  207. package/dist/src/catalogue.js +13 -2
  208. package/dist/src/catalogueRefs.d.ts +75 -0
  209. package/dist/src/catalogueRefs.js +122 -0
  210. package/dist/src/componentDocs.d.ts +71 -0
  211. package/dist/src/componentDocs.js +15 -2
  212. package/dist/src/frame/callValues.d.ts +19 -0
  213. package/dist/src/frame/callValues.js +58 -0
  214. package/dist/src/frame/canvasScheme.d.ts +33 -0
  215. package/dist/src/frame/canvasScheme.js +67 -0
  216. package/dist/src/frame/frame.css +36 -3
  217. package/dist/src/frame/frameStatus.d.ts +16 -1
  218. package/dist/src/frame/frameStatus.js +16 -1
  219. package/dist/src/frame/frameView.js +4 -3
  220. package/dist/src/frame/mountFrame.d.ts +7 -1
  221. package/dist/src/frame/mountFrame.js +153 -46
  222. package/dist/src/frame/panelValues.d.ts +35 -0
  223. package/dist/src/frame/panelValues.js +127 -0
  224. package/dist/src/frame/playActions.d.ts +39 -0
  225. package/dist/src/frame/playActions.js +98 -0
  226. package/dist/src/frame/playStepper.d.ts +28 -0
  227. package/dist/src/frame/playStepper.js +38 -0
  228. package/dist/src/frame/playStory.d.ts +9 -1
  229. package/dist/src/frame/playStory.js +49 -3
  230. package/dist/src/frame/renderer.d.ts +34 -1
  231. package/dist/src/frame/renderer.js +24 -0
  232. package/dist/src/frame/shellChannel.d.ts +1 -1
  233. package/dist/src/frame/shellChannel.js +1 -1
  234. package/dist/src/frame/shellCheck.d.ts +17 -0
  235. package/dist/src/frame/shellCheck.js +25 -0
  236. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  237. package/dist/src/frame/shellMessageCheck.js +53 -0
  238. package/dist/src/frame/storyContent.d.ts +50 -0
  239. package/dist/src/frame/storyContent.js +73 -0
  240. package/dist/src/frame/storyModule.d.ts +9 -0
  241. package/dist/src/frame/storyModule.js +20 -2
  242. package/dist/src/frame/storyRun.d.ts +15 -7
  243. package/dist/src/frame/storyRun.js +64 -15
  244. package/dist/src/frame/valueSheets.d.ts +35 -0
  245. package/dist/src/frame/valueSheets.js +99 -0
  246. package/dist/src/hotModules.d.ts +20 -0
  247. package/dist/src/hotModules.js +23 -0
  248. package/dist/src/jsxCode.d.ts +1 -14
  249. package/dist/src/jsxCode.js +46 -10
  250. package/dist/src/liveErrors.d.ts +30 -4
  251. package/dist/src/liveErrors.js +18 -3
  252. package/dist/src/messages.d.ts +77 -27
  253. package/dist/src/messages.js +58 -100
  254. package/dist/src/namedValues.d.ts +2 -26
  255. package/dist/src/namedValues.js +0 -47
  256. package/dist/src/pageConfig.d.ts +2 -0
  257. package/dist/src/playTrace.d.ts +19 -2
  258. package/dist/src/playTrace.js +10 -5
  259. package/dist/src/plugin.d.ts +10 -3
  260. package/dist/src/previewRelay.js +9 -1
  261. package/dist/src/printable.d.ts +12 -0
  262. package/dist/src/printable.js +22 -0
  263. package/dist/src/propsSignature.d.ts +37 -0
  264. package/dist/src/propsSignature.js +40 -0
  265. package/dist/src/search.d.ts +41 -5
  266. package/dist/src/search.js +93 -23
  267. package/dist/src/searchMatch.d.ts +4 -1
  268. package/dist/src/searchMatch.js +26 -5
  269. package/dist/src/searchTypos.d.ts +88 -0
  270. package/dist/src/searchTypos.js +178 -0
  271. package/dist/src/shapeValues.d.ts +86 -0
  272. package/dist/src/shapeValues.js +295 -0
  273. package/dist/src/shell/ApiReference.js +6 -3
  274. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  275. package/dist/src/shell/ApiTableBox.js +11 -0
  276. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  277. package/dist/src/shell/AppearanceMenu.js +9 -6
  278. package/dist/src/shell/CodeTab.d.ts +3 -2
  279. package/dist/src/shell/CodeTab.js +3 -2
  280. package/dist/src/shell/CodeText.d.ts +1 -1
  281. package/dist/src/shell/CodeText.js +2 -3
  282. package/dist/src/shell/CompareGrid.js +1 -1
  283. package/dist/src/shell/ComponentPage.d.ts +1 -1
  284. package/dist/src/shell/ComponentPage.js +5 -1
  285. package/dist/src/shell/CustomControl.d.ts +34 -0
  286. package/dist/src/shell/CustomControl.js +132 -0
  287. package/dist/src/shell/DocContainers.js +1 -1
  288. package/dist/src/shell/DocPage.js +2 -2
  289. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  290. package/dist/src/shell/DroppedArgsList.js +1 -1
  291. package/dist/src/shell/EmbedPage.js +30 -12
  292. package/dist/src/shell/Example.d.ts +5 -1
  293. package/dist/src/shell/Example.js +16 -8
  294. package/dist/src/shell/FrameView.d.ts +6 -3
  295. package/dist/src/shell/FrameView.js +2 -2
  296. package/dist/src/shell/HomePage.d.ts +3 -1
  297. package/dist/src/shell/HomePage.js +16 -6
  298. package/dist/src/shell/InfoTip.js +2 -2
  299. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  300. package/dist/src/shell/InteractionsTab.js +18 -2
  301. package/dist/src/shell/LazyPage.js +1 -1
  302. package/dist/src/shell/PackageHtml.js +3 -1
  303. package/dist/src/shell/PinnedControl.js +14 -62
  304. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  305. package/dist/src/shell/PinnedControlMenu.js +72 -0
  306. package/dist/src/shell/PropFields.d.ts +3 -1
  307. package/dist/src/shell/PropFields.js +9 -6
  308. package/dist/src/shell/PropRows.d.ts +23 -2
  309. package/dist/src/shell/PropRows.js +58 -19
  310. package/dist/src/shell/PropsTab.d.ts +12 -5
  311. package/dist/src/shell/PropsTab.js +9 -21
  312. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  313. package/dist/src/shell/RefStoryPage.js +123 -0
  314. package/dist/src/shell/SearchPanel.js +51 -24
  315. package/dist/src/shell/Shell.d.ts +18 -0
  316. package/dist/src/shell/Shell.js +137 -22
  317. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  318. package/dist/src/shell/ShortcutHelp.js +66 -0
  319. package/dist/src/shell/Sidebar.d.ts +17 -4
  320. package/dist/src/shell/Sidebar.js +92 -41
  321. package/dist/src/shell/SidebarDocs.js +2 -2
  322. package/dist/src/shell/SidebarEntries.js +5 -3
  323. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  324. package/dist/src/shell/SidebarHandle.js +4 -4
  325. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  326. package/dist/src/shell/SidebarRefs.js +99 -0
  327. package/dist/src/shell/SidebarSearch.js +37 -9
  328. package/dist/src/shell/SignatureReference.js +3 -1
  329. package/dist/src/shell/Stage.d.ts +10 -2
  330. package/dist/src/shell/Stage.js +29 -49
  331. package/dist/src/shell/StatusBadges.d.ts +54 -0
  332. package/dist/src/shell/StatusBadges.js +77 -0
  333. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  334. package/dist/src/shell/StoryCodeBlock.js +7 -6
  335. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  336. package/dist/src/shell/SwitchGallery.js +17 -0
  337. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  338. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  339. package/dist/src/shell/TagFilter.d.ts +24 -0
  340. package/dist/src/shell/TagFilter.js +45 -0
  341. package/dist/src/shell/TagViews.d.ts +39 -0
  342. package/dist/src/shell/TagViews.js +20 -0
  343. package/dist/src/shell/Toolbar.d.ts +4 -1
  344. package/dist/src/shell/Toolbar.js +17 -7
  345. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  346. package/dist/src/shell/ToolbarControl.js +23 -6
  347. package/dist/src/shell/ViewMenuPanel.js +6 -1
  348. package/dist/src/shell/argChecks.d.ts +22 -0
  349. package/dist/src/shell/argChecks.js +20 -0
  350. package/dist/src/shell/asideStory.js +7 -2
  351. package/dist/src/shell/audienceSections.css +9 -9
  352. package/dist/src/shell/catalogueContext.d.ts +1 -1
  353. package/dist/src/shell/catalogueContext.js +6 -1
  354. package/dist/src/shell/codeSpans.d.ts +27 -0
  355. package/dist/src/shell/codeSpans.js +76 -0
  356. package/dist/src/shell/compareVariants.d.ts +4 -2
  357. package/dist/src/shell/compareVariants.js +16 -8
  358. package/dist/src/shell/composition.d.ts +23 -0
  359. package/dist/src/shell/composition.js +26 -0
  360. package/dist/src/shell/controlCycle.d.ts +1 -1
  361. package/dist/src/shell/controlCycle.js +3 -2
  362. package/dist/src/shell/customControls.d.ts +55 -0
  363. package/dist/src/shell/customControls.js +70 -0
  364. package/dist/src/shell/docPage.css +22 -22
  365. package/dist/src/shell/dockTabs.d.ts +19 -3
  366. package/dist/src/shell/dockTabs.js +28 -20
  367. package/dist/src/shell/embed.css +7 -7
  368. package/dist/src/shell/framesOrigin.d.ts +7 -0
  369. package/dist/src/shell/framesOrigin.js +1 -1
  370. package/dist/src/shell/galleryPlace.d.ts +20 -0
  371. package/dist/src/shell/galleryPlace.js +26 -0
  372. package/dist/src/shell/icons.d.ts +1 -0
  373. package/dist/src/shell/icons.js +1 -0
  374. package/dist/src/shell/keyboard.d.ts +14 -12
  375. package/dist/src/shell/keyboard.js +21 -6
  376. package/dist/src/shell/laterStrings.d.ts +29 -0
  377. package/dist/src/shell/laterStrings.js +42 -3
  378. package/dist/src/shell/mountShell.js +3 -0
  379. package/dist/src/shell/pageStrings.d.ts +4 -0
  380. package/dist/src/shell/pageStrings.js +4 -0
  381. package/dist/src/shell/pageTagView.d.ts +18 -0
  382. package/dist/src/shell/pageTagView.js +10 -0
  383. package/dist/src/shell/playMemory.d.ts +14 -0
  384. package/dist/src/shell/playMemory.js +8 -0
  385. package/dist/src/shell/propNotes.d.ts +23 -0
  386. package/dist/src/shell/propNotes.js +37 -0
  387. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  388. package/dist/src/shell/refIndexLoad.js +38 -0
  389. package/dist/src/shell/refParts.d.ts +34 -0
  390. package/dist/src/shell/refParts.js +9 -0
  391. package/dist/src/shell/refStory.css +21 -0
  392. package/dist/src/shell/refStrings.d.ts +13 -0
  393. package/dist/src/shell/refStrings.js +21 -0
  394. package/dist/src/shell/search.css +11 -11
  395. package/dist/src/shell/shell.css +348 -168
  396. package/dist/src/shell/shellScheme.js +2 -2
  397. package/dist/src/shell/shortcutHelp.css +64 -0
  398. package/dist/src/shell/stageArgs.d.ts +53 -0
  399. package/dist/src/shell/stageArgs.js +64 -0
  400. package/dist/src/shell/statusBadges.css +51 -0
  401. package/dist/src/shell/strings.d.ts +7 -16
  402. package/dist/src/shell/strings.js +12 -17
  403. package/dist/src/shell/switchGallery.css +104 -0
  404. package/dist/src/shell/tagFilter.css +46 -0
  405. package/dist/src/shell/tagView.d.ts +20 -0
  406. package/dist/src/shell/tagView.js +10 -0
  407. package/dist/src/shell/useAddressArgs.d.ts +9 -0
  408. package/dist/src/shell/useAddressArgs.js +56 -11
  409. package/dist/src/shell/useControlKeys.js +2 -2
  410. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  411. package/dist/src/shell/useEditedProblems.js +40 -0
  412. package/dist/src/shell/useFrameMessages.js +3 -0
  413. package/dist/src/shell/useListedTree.d.ts +13 -0
  414. package/dist/src/shell/useListedTree.js +32 -0
  415. package/dist/src/shell/usePageFrames.js +2 -2
  416. package/dist/src/shell/usePopover.d.ts +5 -0
  417. package/dist/src/shell/usePopover.js +7 -1
  418. package/dist/src/shell/useRefIndex.d.ts +22 -0
  419. package/dist/src/shell/useRefIndex.js +36 -0
  420. package/dist/src/shell/useScrollStops.d.ts +20 -0
  421. package/dist/src/shell/useScrollStops.js +41 -0
  422. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  423. package/dist/src/shell/useShortcutHelp.js +32 -0
  424. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  425. package/dist/src/shell/useSidebarOverlay.js +12 -4
  426. package/dist/src/shell/useStoryCode.d.ts +2 -1
  427. package/dist/src/shell/useStoryCode.js +12 -7
  428. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  429. package/dist/src/shell/useToolbarLayout.js +2 -2
  430. package/dist/src/shell/useWorstCase.d.ts +8 -2
  431. package/dist/src/shell/useWorstCase.js +2 -2
  432. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  433. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  434. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  435. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  436. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  437. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  438. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  439. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  440. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  441. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  442. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  443. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  444. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  445. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  446. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  447. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  448. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  449. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  450. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  451. package/dist/src/shell/valueEditors/ValueField.js +147 -0
  452. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  453. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  454. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  455. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  456. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  457. package/dist/src/shell/worstArgs.d.ts +8 -5
  458. package/dist/src/shell/worstArgs.js +14 -7
  459. package/dist/src/shellTheme.d.ts +1 -1
  460. package/dist/src/shellTheme.js +15 -1
  461. package/dist/src/shellTheme.types.d.ts +4 -0
  462. package/dist/src/shellWord.d.ts +12 -0
  463. package/dist/src/shellWord.js +15 -0
  464. package/dist/src/sourceFiles.js +2 -1
  465. package/dist/src/storyArgTypes.d.ts +57 -0
  466. package/dist/src/storyArgTypes.js +195 -0
  467. package/dist/src/storyBackground.js +14 -3
  468. package/dist/src/storyCheck.d.ts +85 -3
  469. package/dist/src/storyCheck.js +23 -1
  470. package/dist/src/storyCodeText.d.ts +46 -0
  471. package/dist/src/storyCodeText.js +27 -0
  472. package/dist/src/storyControls.d.ts +100 -0
  473. package/dist/src/storyControls.js +100 -0
  474. package/dist/src/storyStatuses.d.ts +55 -0
  475. package/dist/src/storyStatuses.js +104 -0
  476. package/dist/src/storyTagNames.d.ts +25 -0
  477. package/dist/src/storyTagNames.js +25 -0
  478. package/dist/src/storyTags.d.ts +29 -0
  479. package/dist/src/storyTags.js +85 -0
  480. package/dist/src/storyTree.d.ts +13 -0
  481. package/dist/src/storyTree.js +24 -4
  482. package/dist/src/storybookArgs.d.ts +24 -0
  483. package/dist/src/storybookArgs.js +185 -0
  484. package/dist/src/switches.d.ts +66 -3
  485. package/dist/src/switches.js +42 -1
  486. package/dist/src/valueSchema.d.ts +28 -0
  487. package/dist/src/valueSchema.js +196 -0
  488. package/dist/src/valueShape.d.ts +94 -0
  489. package/dist/src/valueShape.js +25 -0
  490. package/dist/src/viewState.d.ts +8 -3
  491. package/dist/src/viewState.js +27 -10
  492. package/dist/src/vite/adapter.d.ts +40 -2
  493. package/dist/src/vite/adapter.js +1 -0
  494. package/dist/src/vite/agent.types.d.ts +347 -7
  495. package/dist/src/vite/agentApi.d.ts +23 -0
  496. package/dist/src/vite/agentApi.js +90 -17
  497. package/dist/src/vite/agentIndex.d.ts +0 -2
  498. package/dist/src/vite/agentIndex.js +5 -6
  499. package/dist/src/vite/agentRoutes.d.ts +20 -1
  500. package/dist/src/vite/agentRoutes.js +106 -65
  501. package/dist/src/vite/agentStatuses.d.ts +42 -0
  502. package/dist/src/vite/agentStatuses.js +67 -0
  503. package/dist/src/vite/agentStoryCode.d.ts +48 -0
  504. package/dist/src/vite/agentStoryCode.js +38 -0
  505. package/dist/src/vite/agentVisibility.d.ts +47 -0
  506. package/dist/src/vite/agentVisibility.js +174 -0
  507. package/dist/src/vite/appAudit.d.ts +134 -0
  508. package/dist/src/vite/appAudit.js +333 -0
  509. package/dist/src/vite/appBuildOption.d.ts +53 -0
  510. package/dist/src/vite/appBuildOption.js +55 -0
  511. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  512. package/dist/src/vite/appTokenFiles.js +433 -0
  513. package/dist/src/vite/appTokens.d.ts +23 -0
  514. package/dist/src/vite/appTokens.js +275 -0
  515. package/dist/src/vite/builtTexts.d.ts +10 -0
  516. package/dist/src/vite/builtTexts.js +59 -22
  517. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  518. package/dist/src/vite/catalogueConfig.js +15 -3
  519. package/dist/src/vite/changeCoverage.d.ts +74 -0
  520. package/dist/src/vite/changeCoverage.js +120 -0
  521. package/dist/src/vite/changedRoute.d.ts +30 -0
  522. package/dist/src/vite/changedRoute.js +197 -0
  523. package/dist/src/vite/checkCode.d.ts +105 -3
  524. package/dist/src/vite/checkCode.js +323 -36
  525. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  526. package/dist/src/vite/checkoutWatch.js +287 -0
  527. package/dist/src/vite/closeWatch.d.ts +8 -0
  528. package/dist/src/vite/closeWatch.js +1 -1
  529. package/dist/src/vite/componentCache.d.ts +8 -0
  530. package/dist/src/vite/componentCache.js +66 -0
  531. package/dist/src/vite/componentGraph.d.ts +71 -0
  532. package/dist/src/vite/componentGraph.js +133 -0
  533. package/dist/src/vite/componentRules.d.ts +33 -0
  534. package/dist/src/vite/componentRules.js +105 -0
  535. package/dist/src/vite/componentScan.d.ts +69 -0
  536. package/dist/src/vite/componentScan.js +418 -0
  537. package/dist/src/vite/compositionCheck.d.ts +15 -0
  538. package/dist/src/vite/compositionCheck.js +243 -0
  539. package/dist/src/vite/config.d.ts +32 -1
  540. package/dist/src/vite/configFile.d.ts +14 -2
  541. package/dist/src/vite/configFile.js +124 -40
  542. package/dist/src/vite/configKeys.d.ts +15 -0
  543. package/dist/src/vite/configKeys.js +171 -0
  544. package/dist/src/vite/configLoadError.d.ts +23 -0
  545. package/dist/src/vite/configLoadError.js +71 -0
  546. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  547. package/dist/src/vite/cssDeclarations.js +290 -0
  548. package/dist/src/vite/cssImports.d.ts +14 -0
  549. package/dist/src/vite/cssImports.js +48 -0
  550. package/dist/src/vite/cssReferences.d.ts +54 -0
  551. package/dist/src/vite/cssReferences.js +157 -0
  552. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  553. package/dist/src/vite/cssTokenValues.js +233 -0
  554. package/dist/src/vite/designTokens.d.ts +24 -0
  555. package/dist/src/vite/designTokens.js +5 -1
  556. package/dist/src/vite/docsExtractor.d.ts +9 -3
  557. package/dist/src/vite/docsExtractor.js +11 -3
  558. package/dist/src/vite/docsProgram.d.ts +17 -4
  559. package/dist/src/vite/docsProgram.js +52 -11
  560. package/dist/src/vite/docsWorker.js +7 -2
  561. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  562. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  563. package/dist/src/vite/fileImports.d.ts +17 -0
  564. package/dist/src/vite/fileImports.js +57 -0
  565. package/dist/src/vite/findComponent.d.ts +10 -2
  566. package/dist/src/vite/findComponent.js +27 -22
  567. package/dist/src/vite/findRoute.js +3 -2
  568. package/dist/src/vite/forcedStates.d.ts +9 -2
  569. package/dist/src/vite/forcedStates.js +12 -3
  570. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  571. package/dist/src/vite/forgebookPlugin.js +52 -72
  572. package/dist/src/vite/frameErrors.d.ts +19 -0
  573. package/dist/src/vite/frameErrors.js +70 -0
  574. package/dist/src/vite/framesServer.d.ts +12 -0
  575. package/dist/src/vite/framesServer.js +21 -4
  576. package/dist/src/vite/functionComponentDocs.js +81 -12
  577. package/dist/src/vite/generatedModules.js +4 -2
  578. package/dist/src/vite/gitChange.d.ts +38 -5
  579. package/dist/src/vite/gitChange.js +71 -11
  580. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  581. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  582. package/dist/src/vite/hotSnippets.d.ts +38 -14
  583. package/dist/src/vite/hotSnippets.js +137 -39
  584. package/dist/src/vite/importedNames.d.ts +37 -0
  585. package/dist/src/vite/importedNames.js +138 -0
  586. package/dist/src/vite/indexFields.d.ts +6 -0
  587. package/dist/src/vite/indexFields.js +21 -0
  588. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  589. package/dist/src/vite/indexStoryFile.js +22 -157
  590. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  591. package/dist/src/vite/jsxCallSites.js +200 -0
  592. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  593. package/dist/src/vite/jsxInScripts.js +138 -0
  594. package/dist/src/vite/jsxTree.d.ts +20 -0
  595. package/dist/src/vite/jsxTree.js +163 -0
  596. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  597. package/dist/src/vite/lineAndColumn.js +18 -0
  598. package/dist/src/vite/lookAlikes.d.ts +65 -0
  599. package/dist/src/vite/lookAlikes.js +228 -0
  600. package/dist/src/vite/nearestToken.d.ts +17 -0
  601. package/dist/src/vite/nearestToken.js +9 -2
  602. package/dist/src/vite/packageEntries.d.ts +42 -0
  603. package/dist/src/vite/packageEntries.js +127 -0
  604. package/dist/src/vite/pages.d.ts +9 -1
  605. package/dist/src/vite/pages.js +108 -4
  606. package/dist/src/vite/pluginConfig.js +4 -0
  607. package/dist/src/vite/pluginIds.d.ts +2 -0
  608. package/dist/src/vite/pluginIds.js +5 -1
  609. package/dist/src/vite/pluginModules.d.ts +81 -11
  610. package/dist/src/vite/pluginModules.js +109 -21
  611. package/dist/src/vite/prebundled.d.ts +57 -15
  612. package/dist/src/vite/prebundled.js +80 -0
  613. package/dist/src/vite/previewTags.d.ts +25 -0
  614. package/dist/src/vite/previewTags.js +56 -0
  615. package/dist/src/vite/projectFiles.d.ts +54 -0
  616. package/dist/src/vite/projectFiles.js +116 -0
  617. package/dist/src/vite/projectPostcss.d.ts +70 -0
  618. package/dist/src/vite/projectPostcss.js +250 -0
  619. package/dist/src/vite/propDocs.d.ts +12 -0
  620. package/dist/src/vite/propDocs.js +130 -58
  621. package/dist/src/vite/propKind.d.ts +40 -0
  622. package/dist/src/vite/propKind.js +71 -0
  623. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  624. package/dist/src/vite/propTypeNotes.js +51 -0
  625. package/dist/src/vite/publishedExports.d.ts +27 -0
  626. package/dist/src/vite/publishedExports.js +298 -0
  627. package/dist/src/vite/realFolder.d.ts +6 -0
  628. package/dist/src/vite/realFolder.js +25 -0
  629. package/dist/src/vite/refsConfig.d.ts +39 -0
  630. package/dist/src/vite/refsConfig.js +54 -0
  631. package/dist/src/vite/reuseCheck.d.ts +45 -0
  632. package/dist/src/vite/reuseCheck.js +260 -0
  633. package/dist/src/vite/runningVersions.d.ts +33 -0
  634. package/dist/src/vite/runningVersions.js +25 -0
  635. package/dist/src/vite/scriptProblems.d.ts +60 -0
  636. package/dist/src/vite/scriptProblems.js +155 -0
  637. package/dist/src/vite/searchModule.js +3 -2
  638. package/dist/src/vite/searchRoute.js +4 -2
  639. package/dist/src/vite/shapeDocs.d.ts +36 -0
  640. package/dist/src/vite/shapeDocs.js +177 -0
  641. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  642. package/dist/src/vite/singleFileComponent.js +83 -0
  643. package/dist/src/vite/sourceText.d.ts +34 -0
  644. package/dist/src/vite/sourceText.js +72 -0
  645. package/dist/src/vite/sourceTokens.d.ts +7 -0
  646. package/dist/src/vite/sourceTokens.js +7 -2
  647. package/dist/src/vite/stackLines.d.ts +49 -0
  648. package/dist/src/vite/stackLines.js +96 -0
  649. package/dist/src/vite/storyCode.d.ts +22 -7
  650. package/dist/src/vite/storyCode.js +263 -37
  651. package/dist/src/vite/storyCoverage.d.ts +48 -0
  652. package/dist/src/vite/storyCoverage.js +179 -0
  653. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  654. package/dist/src/vite/storyFilesModule.js +105 -15
  655. package/dist/src/vite/storyPatterns.d.ts +31 -0
  656. package/dist/src/vite/storyPatterns.js +140 -5
  657. package/dist/src/vite/storyReach.d.ts +10 -2
  658. package/dist/src/vite/storyReach.js +15 -11
  659. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  660. package/dist/src/vite/storyTopLevel.js +146 -0
  661. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  662. package/dist/src/vite/storylessRoutes.js +210 -19
  663. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  664. package/dist/src/vite/switchValuesCheck.js +164 -0
  665. package/dist/src/vite/switchesDocument.d.ts +15 -0
  666. package/dist/src/vite/switchesDocument.js +47 -0
  667. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  668. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  669. package/dist/src/vite/textImports.d.ts +15 -0
  670. package/dist/src/vite/textImports.js +58 -0
  671. package/dist/src/vite/textModules.d.ts +6 -5
  672. package/dist/src/vite/textModules.js +13 -8
  673. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  674. package/dist/src/vite/tokenAnswers.js +11 -7
  675. package/dist/src/vite/typeParameters.d.ts +83 -0
  676. package/dist/src/vite/typeParameters.js +270 -0
  677. package/dist/src/vite/unionProps.d.ts +37 -0
  678. package/dist/src/vite/unionProps.js +121 -0
  679. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  680. package/dist/src/vite/unresolvedTokens.js +193 -0
  681. package/dist/src/vite/usageGraph.js +10 -52
  682. package/dist/src/vite/usageGuidance.d.ts +9 -2
  683. package/dist/src/vite/usageGuidance.js +36 -8
  684. package/dist/src/vite/usageImports.d.ts +35 -0
  685. package/dist/src/vite/usageImports.js +280 -0
  686. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  687. package/dist/src/vite/visibilityRoute.js +320 -0
  688. package/dist/src/worstCase.d.ts +2 -0
  689. package/dist/src/worstCase.js +2 -0
  690. package/package.json +28 -8
@@ -15,9 +15,9 @@ import { useEffect, useMemo, useRef, useState } from "react";
15
15
  import { checkedArgsMessage } from "../addressArgs.js";
16
16
  import { panelProps, settableProps } from "../argTypes.js";
17
17
  import { matrixOf, matrixProps } from "../matrix.js";
18
- import { panelArgsParam } from "../messages.js";
19
18
  import { withFixed, withOwnFixed } from "../storyGlobals.js";
20
- import { frameAddress, isComparing, liveView, schemeOf, viewParams } from "../viewState.js";
19
+ import { shownSwitches } from "../switches.js";
20
+ import { frameAddress, isComparing, liveView, schemeOf } from "../viewState.js";
21
21
  import { useStoryClockControls } from "./ClockControls.js";
22
22
  import { useCatalogue } from "./catalogueContext.js";
23
23
  import { DeviceSlot, deviceAddress, isWaitingForDevice, roomSizing, useInkScheme, useStageDevice } from "./DeviceSlot.js";
@@ -31,6 +31,7 @@ import { StageCompare } from "./StageCompare.js";
31
31
  import { StageTools } from "./StageTools.js";
32
32
  import { StageViewport } from "./StageViewport.js";
33
33
  import { StoryBar } from "./StoryBar.js";
34
+ import { embedHeight, embedQuery, takesArgs, usePanelValues } from "./stageArgs.js";
34
35
  import { STRINGS } from "./strings.js";
35
36
  import { useAddressArgs } from "./useAddressArgs.js";
36
37
  import { useFrameMessages } from "./useFrameMessages.js";
@@ -53,42 +54,16 @@ const widthSetter = (fixed, view, onViewChange) => fixed.width === undefined ? (
53
54
  const INITIAL_FRAME_HEIGHT = 240;
54
55
  /** The most calls the Events tab keeps. */
55
56
  const MAX_CALLS = 50;
56
- /**
57
- * Whether a story's args change what it draws: not for a story of fixed examples, nor for one about logic, whose scene
58
- * takes none.
59
- *
60
- * @param story - the story.
61
- */
62
- const takesArgs = (story) => !story.isLogic && (story.controls === "all" || story.controls.length > 0);
63
- /**
64
- * What an embed of the story keeps of the page: its view and the values set in the panel. An embed draws no device
65
- * frame, so the device chosen is left out: the embed is the story at the width its iframe gives it.
66
- *
67
- * @param view - the reader's view, without what the story fixes, which the story fixes again.
68
- * @param panelArgs - the values set in the panel.
69
- * @param switches - the catalogue's switches.
70
- */
71
- const embedQuery = (view, panelArgs, switches) => {
72
- const params = viewParams({ ...view, device: "auto", orientation: "auto" }, switches);
73
- const args = panelArgsParam(panelArgs);
74
- if (args !== "")
75
- params.set("args", args);
76
- return params.toString();
77
- };
78
- /**
79
- * The height an embed's iframe starts at: as tall as the frame is on the stage.
80
- *
81
- * @param view - the view, with the height set on the stage.
82
- * @param contentHeight - the story's content, in CSS px.
83
- * @param story - the story, with the height its scene declares.
84
- */
85
- 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;
86
61
  /**
87
62
  * The stage.
88
63
  *
89
64
  * @param props - the component, the story, the view, the panel's values, the frame page and the loaders.
90
65
  */
91
- 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 }) => {
92
67
  const frameRef = useRef(null);
93
68
  const storyRef = useRef(null);
94
69
  const code = useStoryCode(loadCode);
@@ -123,7 +98,9 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
123
98
  null, [docs, matrixAxes, story.isLogic]);
124
99
  // the address's values reach the frames only once checked against what the story declares
125
100
  const addressArgs = useAddressArgs({
101
+ argControls,
126
102
  panelArgs,
103
+ link: addressLink,
127
104
  docs,
128
105
  storyArgs: storyArgs.get(story.id),
129
106
  argTypes: panel.argTypes,
@@ -132,16 +109,20 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
132
109
  frames: storyRef
133
110
  });
134
111
  const acceptedArgs = addressArgs.accepted;
135
- 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;
136
115
  const settable = useMemo(() => docs.status === "ready"
137
- ? settableProps(panelProps(docs.value.props, panel.argTypes), panel.controls, namedValues ?? {})
138
- : [], [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]);
139
118
  const worstCase = useWorstCase({
140
119
  storyRef,
141
120
  storyId: story.id,
142
121
  settable,
143
122
  values,
144
123
  panelArgs: acceptedArgs,
124
+ namedValues,
125
+ worstOfShape: addressArgs.worstOfShape,
145
126
  onPanelArgsChange
146
127
  });
147
128
  const clockControls = useStoryClockControls(frameRef, story.id);
@@ -188,11 +169,6 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
188
169
  // the docs may arrive after the frames: they learn the events then
189
170
  useEffect(() => tellFrames(storyRef.current, { type: "forgebook:events", names: eventNames }), [eventNames]);
190
171
  useEffect(() => tellFrames(storyRef.current, { type: "forgebook:matrix", matrix }), [matrix]);
191
- // a change starts from the values the story takes: one the address named and the story does not is let go
192
- const changeValue = (name, value) => {
193
- const { [name]: _removed, ...rest } = acceptedArgs;
194
- onPanelArgsChange(value === undefined ? rest : { ...rest, [name]: value });
195
- };
196
172
  const replay = () => {
197
173
  const message = { type: "forgebook:replay" };
198
174
  frameRef.current?.contentWindow?.postMessage(message, framesOrigin());
@@ -205,7 +181,7 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
205
181
  // among them) is sent live
206
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
207
183
  const { shown, framed } = useStageDevice(view, story.device, onShownWidthChange);
208
- 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);
209
185
  useLiveView(storyRef, view, !isComparing(view));
210
186
  useScrollMemory(storyRef, scroll);
211
187
  const ink = useInkScheme(schemeOf(view, switches));
@@ -244,7 +220,12 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
244
220
  controls: panel.controls,
245
221
  actions: panel.actions,
246
222
  values,
247
- onValueChange: changeValue,
223
+ panelArgs: acceptedArgs,
224
+ storyArgs: ownArgs,
225
+ loadTokens,
226
+ argControls,
227
+ globals: shownSwitches(view.switches, switches),
228
+ onValueChange: panelValues.change,
248
229
  onReset: () => onPanelArgsChange({}),
249
230
  worstCase: worstCase.state,
250
231
  namedValues,
@@ -256,17 +237,16 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
256
237
  calls: calls.filter((call) => call.storyId === story.id),
257
238
  onClearCalls: () => setCalls([]),
258
239
  trace: isComparing(view) ? undefined : traces.get(story.id),
259
- onPlayAgain: () => {
260
- const message = { type: "forgebook:play-again" };
261
- frameRef.current?.contentWindow?.postMessage(message, framesOrigin());
262
- },
240
+ view,
241
+ onViewChange,
242
+ onPlayStep: (command) => tellFrames(storyRef.current, { type: "forgebook:play-step", command }),
263
243
  check: storyCheck.check,
264
244
  onCheck: isComparing(view) ? undefined : storyCheck.run,
265
245
  pluginTabs
266
246
  }).filter((tab) => catalogue.tabs.includes(tab.id));
267
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: {
268
248
  title,
269
- query: embedQuery(ownView, panelArgs, switches),
249
+ query: embedQuery(ownView, acceptedArgs, switches),
270
250
  height: embedHeight(view, reportedHeight ?? lastHeight, story)
271
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, {
272
252
  width: view.width,
@@ -275,5 +255,5 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
275
255
  background: backgroundOf(view),
276
256
  height: view.height,
277
257
  onHeightChange: (height) => onViewChange({ ...view, height })
278
- }), 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] }));
279
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;
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * The sidebar's tag filter: a button beside the search, with how many tags are on, which opens the catalogue's tags to
4
+ * ask for or to leave out, a status shown as its badge. Loaded only for a catalogue whose stories have tags.
5
+ *
6
+ * @module
7
+ */
8
+ import { useEffect, useMemo } from "react";
9
+ import { catalogueTags, taggedTree } from "../storyTags.js";
10
+ import { StatusBadge, useStatuses } from "./StatusBadges.js";
11
+ import "./tagFilter.css";
12
+ import { textsOfGroup } from "./strings.js";
13
+ import { loadedTagFilter } from "./useListedTree.js";
14
+ import { usePopover } from "./usePopover.js";
15
+ /** The filter's texts, as shown: Forgebook's, with the catalogue's replacements. */
16
+ const TAG_STRINGS = textsOfGroup("tagFilter", {
17
+ button: "Filter by tag",
18
+ buttonOn: (count) => `Filter by tag: ${count} on`,
19
+ title: "Tags",
20
+ leaveOut: (tag) => `Leave out ${tag}`,
21
+ clear: "Clear the filter"
22
+ });
23
+ /**
24
+ * The tag filter.
25
+ *
26
+ * @param props - the tree, the tags on and how to change them.
27
+ */
28
+ export const TagFilter = ({ tree, tags, onTagsChange }) => {
29
+ const { isOpen, isDrawn, setIsOpen, buttonRef, panelRef, panelId } = usePopover();
30
+ // the filter's code came with this chunk: handed over, a checked tag filters the tree in the render that adds it
31
+ useEffect(() => {
32
+ loadedTagFilter.current = taggedTree;
33
+ }, []);
34
+ const offered = useMemo(() => catalogueTags(tree), [tree]);
35
+ const statuses = useStatuses();
36
+ const set = (tag, written) => onTagsChange([
37
+ ...tags.filter((each) => each !== tag && each !== `!${tag}`),
38
+ ...(written === undefined ? [] : [written])
39
+ ]);
40
+ const label = tags.length === 0 ? TAG_STRINGS.button : TAG_STRINGS.buttonOn(tags.length);
41
+ return (_jsxs("div", { className: "forgebook-tag-filter", children: [_jsxs("button", { ref: buttonRef, type: "button", className: "forgebook-icon-button", title: label, "aria-label": label, "aria-expanded": isOpen, "aria-controls": panelId, "data-on": tags.length > 0 ? "" : undefined, onClick: (event) => setIsOpen(!isOpen, event), children: [_jsx("svg", { viewBox: "0 0 16 16", width: 14, height: 14, "aria-hidden": "true", children: _jsx("path", { d: "M2 4h12M4.5 8h7M7 12h2", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }), tags.length === 0 ? null : _jsx("span", { className: "forgebook-tag-filter__count", children: tags.length })] }), isDrawn ? (_jsxs("div", { ref: panelRef, id: panelId, className: "forgebook-popover forgebook-tag-filter__panel", role: "dialog", "aria-label": TAG_STRINGS.title, children: [_jsx("ul", { className: "forgebook-tag-filter__list", children: offered.map(({ tag, stories }) => {
42
+ const status = statuses.find((each) => each.id === tag);
43
+ return (_jsxs("li", { className: "forgebook-tag-filter__row", children: [_jsxs("label", { className: "forgebook-tag-filter__tag", children: [_jsx("input", { type: "checkbox", checked: tags.includes(tag), onChange: (event) => set(tag, event.target.checked ? tag : undefined) }), _jsx("span", { className: "forgebook-tag-filter__name", children: status === undefined ? tag : _jsx(StatusBadge, { status: status }) }), _jsx("span", { className: "forgebook-tree__count", children: stories })] }), _jsx("button", { type: "button", className: "forgebook-icon-button", title: TAG_STRINGS.leaveOut(tag), "aria-label": TAG_STRINGS.leaveOut(tag), "aria-pressed": tags.includes(`!${tag}`), onClick: () => set(tag, tags.includes(`!${tag}`) ? undefined : `!${tag}`), children: _jsxs("svg", { viewBox: "0 0 16 16", width: 12, height: 12, "aria-hidden": "true", children: [_jsx("circle", { cx: "8", cy: "8", r: "5.5", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }), _jsx("path", { d: "m4 12 8-8", stroke: "currentColor", strokeWidth: "1.5" })] }) })] }, tag));
44
+ }) }), _jsx("button", { type: "button", className: "forgebook-button forgebook-button--quiet", disabled: tags.length === 0, onClick: () => onTagsChange([]), children: TAG_STRINGS.clear })] })) : null] }));
45
+ };