forgebook 0.3.3 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/README.md +994 -72
  2. package/dist/bin/forgebook/agentClient.d.ts +2 -1
  3. package/dist/bin/forgebook/agentClient.js +13 -6
  4. package/dist/bin/forgebook/agentGuide.d.ts +59 -0
  5. package/dist/bin/forgebook/agentGuide.js +203 -0
  6. package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
  7. package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
  8. package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
  9. package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
  10. package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
  11. package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
  12. package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
  13. package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
  14. package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
  15. package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
  16. package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
  17. package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
  18. package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
  19. package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
  20. package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
  21. package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
  22. package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
  23. package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
  24. package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
  25. package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
  26. package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
  27. package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
  28. package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
  29. package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
  30. package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
  31. package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
  32. package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
  33. package/dist/bin/forgebook/agentText.d.ts +23 -3
  34. package/dist/bin/forgebook/agentText.js +182 -28
  35. package/dist/bin/forgebook/agents.md +20 -191
  36. package/dist/bin/forgebook/agentsText.js +2 -1
  37. package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
  38. package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
  39. package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
  40. package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
  41. package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
  42. package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
  43. package/dist/bin/forgebook/auditCommand.d.mts +8 -0
  44. package/dist/bin/forgebook/auditCommand.mjs +75 -0
  45. package/dist/bin/forgebook/auditRun.d.ts +95 -0
  46. package/dist/bin/forgebook/auditRun.js +270 -0
  47. package/dist/bin/forgebook/browserRun.d.ts +21 -0
  48. package/dist/bin/forgebook/browserRun.js +57 -0
  49. package/dist/bin/forgebook/buildFailure.d.ts +7 -0
  50. package/dist/bin/forgebook/buildFailure.js +47 -0
  51. package/dist/bin/forgebook/buildWatch.d.ts +52 -0
  52. package/dist/bin/forgebook/buildWatch.js +137 -0
  53. package/dist/bin/forgebook/builtCatalogue.js +9 -5
  54. package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
  55. package/dist/bin/forgebook/catalogueCommands.js +23 -0
  56. package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
  57. package/dist/bin/forgebook/catalogueVite.js +14 -6
  58. package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
  59. package/dist/bin/forgebook/commandCacheClaim.js +170 -0
  60. package/dist/bin/forgebook/commandServer.d.ts +8 -0
  61. package/dist/bin/forgebook/commandServer.js +61 -13
  62. package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
  63. package/dist/bin/forgebook/graphCommand.d.mts +8 -0
  64. package/dist/bin/forgebook/graphCommand.mjs +84 -0
  65. package/dist/bin/forgebook/guide/commands.md +62 -0
  66. package/dist/bin/forgebook/guide/devices.md +17 -0
  67. package/dist/bin/forgebook/guide/docs-pages.md +13 -0
  68. package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
  69. package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
  70. package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
  71. package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
  72. package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
  73. package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
  74. package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
  75. package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
  76. package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
  77. package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
  78. package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
  79. package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
  80. package/dist/bin/forgebook/guide/links.md +29 -0
  81. package/dist/bin/forgebook/guide/setup.md +23 -0
  82. package/dist/bin/forgebook/guide/stories.md +95 -0
  83. package/dist/bin/forgebook/guide/switches.md +43 -0
  84. package/dist/bin/forgebook/guideCommand.d.mts +13 -0
  85. package/dist/bin/forgebook/guideCommand.mjs +37 -0
  86. package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
  87. package/dist/bin/forgebook/importers/storybook.js +11 -5
  88. package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
  89. package/dist/bin/forgebook/initCommands.d.mts +11 -0
  90. package/dist/bin/forgebook/initCommands.mjs +51 -78
  91. package/dist/bin/forgebook/initConfig.d.ts +5 -3
  92. package/dist/bin/forgebook/initConfig.js +6 -3
  93. package/dist/bin/forgebook/initInstall.d.ts +15 -0
  94. package/dist/bin/forgebook/initInstall.js +77 -0
  95. package/dist/bin/forgebook/initPrint.d.ts +9 -0
  96. package/dist/bin/forgebook/initPrint.js +60 -0
  97. package/dist/bin/forgebook/initRefusals.d.ts +45 -0
  98. package/dist/bin/forgebook/initRefusals.js +91 -0
  99. package/dist/bin/forgebook/initRun.d.ts +28 -0
  100. package/dist/bin/forgebook/initRun.js +311 -0
  101. package/dist/bin/forgebook/mcpCommand.mjs +38 -4
  102. package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
  103. package/dist/bin/forgebook/mcpGraph.js +24 -0
  104. package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
  105. package/dist/bin/forgebook/mcpTokens.js +58 -0
  106. package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
  107. package/dist/bin/forgebook/mcpToolParts.js +10 -0
  108. package/dist/bin/forgebook/mcpTools.d.ts +13 -6
  109. package/dist/bin/forgebook/mcpTools.js +57 -90
  110. package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
  111. package/dist/bin/forgebook/mcpVerify.js +36 -0
  112. package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
  113. package/dist/bin/forgebook/migrate/codemods.js +61 -0
  114. package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
  115. package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
  116. package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
  117. package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
  118. package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
  119. package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
  120. package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
  121. package/dist/bin/forgebook/migrate/migrateText.js +30 -0
  122. package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
  123. package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
  124. package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
  125. package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
  126. package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
  127. package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
  128. package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
  129. package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
  130. package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
  131. package/dist/bin/forgebook/newProject/newProject.js +180 -0
  132. package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
  133. package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
  134. package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
  135. package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
  136. package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
  137. package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
  138. package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
  139. package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
  140. package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
  141. package/dist/bin/forgebook/newProject/projectLook.js +293 -0
  142. package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
  143. package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
  144. package/dist/bin/forgebook/newRepair.d.ts +45 -0
  145. package/dist/bin/forgebook/newRepair.js +157 -0
  146. package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
  147. package/dist/bin/forgebook/newRepairRun.js +148 -0
  148. package/dist/bin/forgebook/newStories.d.ts +23 -1
  149. package/dist/bin/forgebook/newStories.js +101 -11
  150. package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
  151. package/dist/bin/forgebook/newStoriesFile.js +43 -4
  152. package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
  153. package/dist/bin/forgebook/prebundleRun.js +28 -8
  154. package/dist/bin/forgebook/proofCommand.d.mts +15 -0
  155. package/dist/bin/forgebook/proofCommand.mjs +212 -0
  156. package/dist/bin/forgebook/proofRun.d.ts +63 -0
  157. package/dist/bin/forgebook/proofRun.js +412 -0
  158. package/dist/bin/forgebook/proofText.d.ts +36 -0
  159. package/dist/bin/forgebook/proofText.js +131 -0
  160. package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
  161. package/dist/bin/forgebook/proofWorkflow.js +205 -0
  162. package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
  163. package/dist/bin/forgebook/setArgsTool.js +70 -0
  164. package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
  165. package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
  166. package/dist/bin/forgebook/storyCheckRun.js +83 -9
  167. package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
  168. package/dist/bin/forgebook/storyFileIds.js +14 -0
  169. package/dist/bin/forgebook/stressCases.d.ts +31 -0
  170. package/dist/bin/forgebook/stressCases.js +79 -0
  171. package/dist/bin/forgebook/stressRun.d.ts +12 -0
  172. package/dist/bin/forgebook/stressRun.js +61 -0
  173. package/dist/bin/forgebook/stressText.d.ts +27 -0
  174. package/dist/bin/forgebook/stressText.js +46 -0
  175. package/dist/bin/forgebook/verifyBase.d.ts +45 -0
  176. package/dist/bin/forgebook/verifyBase.js +204 -0
  177. package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
  178. package/dist/bin/forgebook/verifyCommand.mjs +125 -0
  179. package/dist/bin/forgebook/verifyRun.d.ts +63 -0
  180. package/dist/bin/forgebook/verifyRun.js +108 -0
  181. package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
  182. package/dist/bin/forgebook/verifyVerdict.js +323 -0
  183. package/dist/bin/forgebook/workflowActions.d.ts +23 -0
  184. package/dist/bin/forgebook/workflowActions.js +23 -0
  185. package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
  186. package/dist/src/addressArgs.d.ts +29 -5
  187. package/dist/src/addressArgs.js +58 -16
  188. package/dist/src/addressArgsParam.d.ts +54 -0
  189. package/dist/src/addressArgsParam.js +51 -0
  190. package/dist/src/addressTexts.d.ts +14 -0
  191. package/dist/src/addressTexts.js +28 -21
  192. package/dist/src/agentIndexFile.d.ts +11 -0
  193. package/dist/src/agentIndexFile.js +11 -0
  194. package/dist/src/argConditions.d.ts +52 -0
  195. package/dist/src/argConditions.js +80 -0
  196. package/dist/src/argControl.d.ts +148 -0
  197. package/dist/src/argControl.js +0 -0
  198. package/dist/src/argExpression.d.ts +21 -0
  199. package/dist/src/argExpression.js +30 -0
  200. package/dist/src/argTypes.d.ts +40 -51
  201. package/dist/src/argTypes.js +69 -185
  202. package/dist/src/argsProps.d.ts +3 -3
  203. package/dist/src/argsProps.js +11 -5
  204. package/dist/src/bundlerErrors.d.ts +29 -0
  205. package/dist/src/bundlerErrors.js +49 -0
  206. package/dist/src/catalogue.d.ts +31 -0
  207. package/dist/src/catalogue.js +13 -2
  208. package/dist/src/catalogueRefs.d.ts +75 -0
  209. package/dist/src/catalogueRefs.js +122 -0
  210. package/dist/src/componentDocs.d.ts +83 -0
  211. package/dist/src/componentDocs.js +20 -3
  212. package/dist/src/controlCode.d.ts +27 -0
  213. package/dist/src/controlCode.js +41 -0
  214. package/dist/src/frame/callValues.d.ts +19 -0
  215. package/dist/src/frame/callValues.js +58 -0
  216. package/dist/src/frame/canvasScheme.d.ts +33 -0
  217. package/dist/src/frame/canvasScheme.js +67 -0
  218. package/dist/src/frame/controlValues.d.ts +39 -0
  219. package/dist/src/frame/controlValues.js +143 -0
  220. package/dist/src/frame/frame.css +36 -3
  221. package/dist/src/frame/frameStatus.d.ts +16 -1
  222. package/dist/src/frame/frameStatus.js +16 -1
  223. package/dist/src/frame/frameView.js +4 -3
  224. package/dist/src/frame/mountFrame.d.ts +10 -1
  225. package/dist/src/frame/mountFrame.js +160 -55
  226. package/dist/src/frame/panelControls.d.ts +67 -0
  227. package/dist/src/frame/panelControls.js +110 -0
  228. package/dist/src/frame/panelValues.d.ts +35 -0
  229. package/dist/src/frame/panelValues.js +127 -0
  230. package/dist/src/frame/playActions.d.ts +39 -0
  231. package/dist/src/frame/playActions.js +98 -0
  232. package/dist/src/frame/playStepper.d.ts +28 -0
  233. package/dist/src/frame/playStepper.js +38 -0
  234. package/dist/src/frame/playStory.d.ts +9 -1
  235. package/dist/src/frame/playStory.js +49 -3
  236. package/dist/src/frame/renderer.d.ts +34 -1
  237. package/dist/src/frame/renderer.js +24 -0
  238. package/dist/src/frame/shellChannel.d.ts +1 -1
  239. package/dist/src/frame/shellChannel.js +1 -1
  240. package/dist/src/frame/shellCheck.d.ts +17 -0
  241. package/dist/src/frame/shellCheck.js +25 -0
  242. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  243. package/dist/src/frame/shellMessageCheck.js +53 -0
  244. package/dist/src/frame/storyContent.d.ts +50 -0
  245. package/dist/src/frame/storyContent.js +73 -0
  246. package/dist/src/frame/storyModule.d.ts +9 -0
  247. package/dist/src/frame/storyModule.js +20 -2
  248. package/dist/src/frame/storyRun.d.ts +15 -7
  249. package/dist/src/frame/storyRun.js +64 -15
  250. package/dist/src/frame/valueSheets.d.ts +35 -0
  251. package/dist/src/frame/valueSheets.js +99 -0
  252. package/dist/src/hotModules.d.ts +20 -0
  253. package/dist/src/hotModules.js +23 -0
  254. package/dist/src/jsxCode.d.ts +1 -14
  255. package/dist/src/jsxCode.js +46 -10
  256. package/dist/src/liveErrors.d.ts +30 -4
  257. package/dist/src/liveErrors.js +18 -3
  258. package/dist/src/messages.d.ts +77 -27
  259. package/dist/src/messages.js +58 -100
  260. package/dist/src/namedValues.d.ts +2 -26
  261. package/dist/src/namedValues.js +0 -47
  262. package/dist/src/pageConfig.d.ts +2 -0
  263. package/dist/src/playTrace.d.ts +19 -2
  264. package/dist/src/playTrace.js +10 -5
  265. package/dist/src/plugin.d.ts +10 -3
  266. package/dist/src/previewRelay.js +9 -1
  267. package/dist/src/printable.d.ts +12 -0
  268. package/dist/src/printable.js +22 -0
  269. package/dist/src/propsSignature.d.ts +37 -0
  270. package/dist/src/propsSignature.js +40 -0
  271. package/dist/src/search.d.ts +41 -5
  272. package/dist/src/search.js +93 -23
  273. package/dist/src/searchMatch.d.ts +4 -1
  274. package/dist/src/searchMatch.js +26 -5
  275. package/dist/src/searchTypos.d.ts +88 -0
  276. package/dist/src/searchTypos.js +178 -0
  277. package/dist/src/shapeValues.d.ts +86 -0
  278. package/dist/src/shapeValues.js +295 -0
  279. package/dist/src/shell/ApiReference.js +6 -3
  280. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  281. package/dist/src/shell/ApiTableBox.js +11 -0
  282. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  283. package/dist/src/shell/AppearanceMenu.js +9 -6
  284. package/dist/src/shell/AuthoredHome.js +3 -1
  285. package/dist/src/shell/CodeTab.d.ts +12 -6
  286. package/dist/src/shell/CodeTab.js +47 -3
  287. package/dist/src/shell/CodeText.d.ts +1 -1
  288. package/dist/src/shell/CodeText.js +2 -3
  289. package/dist/src/shell/CompareGrid.js +1 -1
  290. package/dist/src/shell/ComponentPage.d.ts +6 -6
  291. package/dist/src/shell/ComponentPage.js +8 -2
  292. package/dist/src/shell/CustomControl.d.ts +34 -0
  293. package/dist/src/shell/CustomControl.js +125 -0
  294. package/dist/src/shell/DocContainers.js +1 -1
  295. package/dist/src/shell/DocPage.js +2 -2
  296. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  297. package/dist/src/shell/DroppedArgsList.js +1 -1
  298. package/dist/src/shell/EmbedPage.js +30 -12
  299. package/dist/src/shell/Example.d.ts +5 -1
  300. package/dist/src/shell/Example.js +16 -8
  301. package/dist/src/shell/FrameView.d.ts +6 -3
  302. package/dist/src/shell/FrameView.js +2 -2
  303. package/dist/src/shell/HomePage.d.ts +3 -1
  304. package/dist/src/shell/HomePage.js +18 -6
  305. package/dist/src/shell/InfoTip.js +2 -2
  306. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  307. package/dist/src/shell/InteractionsTab.js +18 -2
  308. package/dist/src/shell/LazyPage.js +1 -1
  309. package/dist/src/shell/PackageHtml.js +3 -1
  310. package/dist/src/shell/PageWidth.d.ts +29 -0
  311. package/dist/src/shell/PageWidth.js +18 -0
  312. package/dist/src/shell/PinnedControl.js +14 -62
  313. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  314. package/dist/src/shell/PinnedControlMenu.js +72 -0
  315. package/dist/src/shell/PropFields.d.ts +3 -1
  316. package/dist/src/shell/PropFields.js +9 -6
  317. package/dist/src/shell/PropRows.d.ts +22 -11
  318. package/dist/src/shell/PropRows.js +62 -24
  319. package/dist/src/shell/PropsTab.d.ts +12 -5
  320. package/dist/src/shell/PropsTab.js +9 -22
  321. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  322. package/dist/src/shell/RefStoryPage.js +123 -0
  323. package/dist/src/shell/SearchPanel.js +51 -24
  324. package/dist/src/shell/Shell.d.ts +18 -0
  325. package/dist/src/shell/Shell.js +141 -23
  326. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  327. package/dist/src/shell/ShortcutHelp.js +66 -0
  328. package/dist/src/shell/Sidebar.d.ts +17 -4
  329. package/dist/src/shell/Sidebar.js +92 -41
  330. package/dist/src/shell/SidebarDocs.js +2 -2
  331. package/dist/src/shell/SidebarEntries.js +5 -3
  332. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  333. package/dist/src/shell/SidebarHandle.js +4 -4
  334. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  335. package/dist/src/shell/SidebarRefs.js +99 -0
  336. package/dist/src/shell/SidebarSearch.js +37 -9
  337. package/dist/src/shell/SignatureReference.js +3 -1
  338. package/dist/src/shell/Stage.d.ts +10 -2
  339. package/dist/src/shell/Stage.js +29 -49
  340. package/dist/src/shell/StatusBadges.d.ts +54 -0
  341. package/dist/src/shell/StatusBadges.js +77 -0
  342. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  343. package/dist/src/shell/StoryCodeBlock.js +7 -6
  344. package/dist/src/shell/StoryPicker.d.ts +4 -2
  345. package/dist/src/shell/StoryPicker.js +3 -3
  346. package/dist/src/shell/Switch.d.ts +29 -0
  347. package/dist/src/shell/Switch.js +11 -0
  348. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  349. package/dist/src/shell/SwitchGallery.js +17 -0
  350. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  351. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  352. package/dist/src/shell/TagFilter.d.ts +24 -0
  353. package/dist/src/shell/TagFilter.js +45 -0
  354. package/dist/src/shell/TagViews.d.ts +39 -0
  355. package/dist/src/shell/TagViews.js +20 -0
  356. package/dist/src/shell/Toolbar.d.ts +4 -1
  357. package/dist/src/shell/Toolbar.js +17 -7
  358. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  359. package/dist/src/shell/ToolbarControl.js +23 -6
  360. package/dist/src/shell/ViewMenuPanel.js +6 -1
  361. package/dist/src/shell/argChecks.d.ts +22 -0
  362. package/dist/src/shell/argChecks.js +20 -0
  363. package/dist/src/shell/asideStory.js +7 -2
  364. package/dist/src/shell/audienceSections.css +9 -9
  365. package/dist/src/shell/catalogueContext.d.ts +1 -1
  366. package/dist/src/shell/catalogueContext.js +6 -1
  367. package/dist/src/shell/codeSpans.d.ts +27 -0
  368. package/dist/src/shell/codeSpans.js +76 -0
  369. package/dist/src/shell/compareVariants.d.ts +4 -2
  370. package/dist/src/shell/compareVariants.js +16 -8
  371. package/dist/src/shell/composition.d.ts +23 -0
  372. package/dist/src/shell/composition.js +26 -0
  373. package/dist/src/shell/controlCycle.d.ts +1 -1
  374. package/dist/src/shell/controlCycle.js +3 -2
  375. package/dist/src/shell/customControls.d.ts +62 -0
  376. package/dist/src/shell/customControls.js +81 -0
  377. package/dist/src/shell/docPage.css +22 -22
  378. package/dist/src/shell/dockTabs.d.ts +19 -3
  379. package/dist/src/shell/dockTabs.js +29 -20
  380. package/dist/src/shell/embed.css +7 -7
  381. package/dist/src/shell/frameOrder.d.ts +35 -0
  382. package/dist/src/shell/frameOrder.js +45 -0
  383. package/dist/src/shell/framesOrigin.d.ts +7 -0
  384. package/dist/src/shell/framesOrigin.js +1 -1
  385. package/dist/src/shell/galleryPlace.d.ts +20 -0
  386. package/dist/src/shell/galleryPlace.js +26 -0
  387. package/dist/src/shell/icons.d.ts +1 -0
  388. package/dist/src/shell/icons.js +1 -0
  389. package/dist/src/shell/keyboard.d.ts +14 -12
  390. package/dist/src/shell/keyboard.js +21 -6
  391. package/dist/src/shell/laterStrings.d.ts +30 -0
  392. package/dist/src/shell/laterStrings.js +43 -3
  393. package/dist/src/shell/mountShell.js +3 -0
  394. package/dist/src/shell/pageStrings.d.ts +4 -0
  395. package/dist/src/shell/pageStrings.js +4 -0
  396. package/dist/src/shell/pageTagView.d.ts +18 -0
  397. package/dist/src/shell/pageTagView.js +10 -0
  398. package/dist/src/shell/playMemory.d.ts +14 -0
  399. package/dist/src/shell/playMemory.js +8 -0
  400. package/dist/src/shell/propNotes.d.ts +23 -0
  401. package/dist/src/shell/propNotes.js +37 -0
  402. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  403. package/dist/src/shell/refIndexLoad.js +38 -0
  404. package/dist/src/shell/refParts.d.ts +34 -0
  405. package/dist/src/shell/refParts.js +9 -0
  406. package/dist/src/shell/refStory.css +21 -0
  407. package/dist/src/shell/refStrings.d.ts +13 -0
  408. package/dist/src/shell/refStrings.js +21 -0
  409. package/dist/src/shell/search.css +11 -11
  410. package/dist/src/shell/shell.css +376 -169
  411. package/dist/src/shell/shellScheme.js +2 -2
  412. package/dist/src/shell/shortcutHelp.css +64 -0
  413. package/dist/src/shell/stageArgs.d.ts +53 -0
  414. package/dist/src/shell/stageArgs.js +64 -0
  415. package/dist/src/shell/statusBadges.css +51 -0
  416. package/dist/src/shell/strings.d.ts +7 -16
  417. package/dist/src/shell/strings.js +12 -17
  418. package/dist/src/shell/switchGallery.css +104 -0
  419. package/dist/src/shell/tagFilter.css +46 -0
  420. package/dist/src/shell/tagView.d.ts +20 -0
  421. package/dist/src/shell/tagView.js +10 -0
  422. package/dist/src/shell/useAddressArgs.d.ts +9 -0
  423. package/dist/src/shell/useAddressArgs.js +56 -11
  424. package/dist/src/shell/useControlKeys.js +2 -2
  425. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  426. package/dist/src/shell/useEditedProblems.js +40 -0
  427. package/dist/src/shell/useFrameMessages.js +3 -0
  428. package/dist/src/shell/useFrameQueue.d.ts +8 -3
  429. package/dist/src/shell/useFrameQueue.js +42 -12
  430. package/dist/src/shell/useListedTree.d.ts +13 -0
  431. package/dist/src/shell/useListedTree.js +32 -0
  432. package/dist/src/shell/usePageFrames.js +2 -2
  433. package/dist/src/shell/usePopover.d.ts +5 -0
  434. package/dist/src/shell/usePopover.js +7 -1
  435. package/dist/src/shell/useRefIndex.d.ts +22 -0
  436. package/dist/src/shell/useRefIndex.js +36 -0
  437. package/dist/src/shell/useScrollSettled.d.ts +18 -0
  438. package/dist/src/shell/useScrollSettled.js +56 -0
  439. package/dist/src/shell/useScrollStops.d.ts +20 -0
  440. package/dist/src/shell/useScrollStops.js +41 -0
  441. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  442. package/dist/src/shell/useShortcutHelp.js +32 -0
  443. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  444. package/dist/src/shell/useSidebarOverlay.js +12 -4
  445. package/dist/src/shell/useStoryCode.d.ts +2 -1
  446. package/dist/src/shell/useStoryCode.js +12 -7
  447. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  448. package/dist/src/shell/useToolbarLayout.js +2 -2
  449. package/dist/src/shell/useWorstCase.d.ts +8 -2
  450. package/dist/src/shell/useWorstCase.js +2 -2
  451. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  452. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  453. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  454. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  455. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  456. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  457. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  458. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  459. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  460. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  461. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  462. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  463. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  464. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  465. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  466. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  467. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  468. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  469. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  470. package/dist/src/shell/valueEditors/ValueField.js +148 -0
  471. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  472. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  473. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  474. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  475. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  476. package/dist/src/shell/worstArgs.d.ts +8 -5
  477. package/dist/src/shell/worstArgs.js +14 -7
  478. package/dist/src/shellTheme.d.ts +1 -1
  479. package/dist/src/shellTheme.js +15 -1
  480. package/dist/src/shellTheme.types.d.ts +4 -0
  481. package/dist/src/shellWord.d.ts +12 -0
  482. package/dist/src/shellWord.js +15 -0
  483. package/dist/src/sourceFiles.js +2 -1
  484. package/dist/src/storyArgTypes.d.ts +57 -0
  485. package/dist/src/storyArgTypes.js +195 -0
  486. package/dist/src/storyBackground.js +14 -3
  487. package/dist/src/storyCheck.d.ts +99 -3
  488. package/dist/src/storyCheck.js +39 -1
  489. package/dist/src/storyCodeText.d.ts +52 -0
  490. package/dist/src/storyCodeText.js +30 -0
  491. package/dist/src/storyControls.d.ts +103 -0
  492. package/dist/src/storyControls.js +100 -0
  493. package/dist/src/storyStatuses.d.ts +55 -0
  494. package/dist/src/storyStatuses.js +104 -0
  495. package/dist/src/storyTagNames.d.ts +25 -0
  496. package/dist/src/storyTagNames.js +25 -0
  497. package/dist/src/storyTags.d.ts +29 -0
  498. package/dist/src/storyTags.js +85 -0
  499. package/dist/src/storyTree.d.ts +13 -0
  500. package/dist/src/storyTree.js +24 -4
  501. package/dist/src/storybookArgs.d.ts +24 -0
  502. package/dist/src/storybookArgs.js +185 -0
  503. package/dist/src/switches.d.ts +66 -3
  504. package/dist/src/switches.js +42 -1
  505. package/dist/src/valueSchema.d.ts +28 -0
  506. package/dist/src/valueSchema.js +196 -0
  507. package/dist/src/valueShape.d.ts +94 -0
  508. package/dist/src/valueShape.js +25 -0
  509. package/dist/src/viewState.d.ts +8 -3
  510. package/dist/src/viewState.js +27 -10
  511. package/dist/src/vite/adapter.d.ts +40 -2
  512. package/dist/src/vite/adapter.js +1 -0
  513. package/dist/src/vite/agent.types.d.ts +354 -7
  514. package/dist/src/vite/agentApi.d.ts +23 -0
  515. package/dist/src/vite/agentApi.js +90 -17
  516. package/dist/src/vite/agentIndex.d.ts +0 -2
  517. package/dist/src/vite/agentIndex.js +5 -6
  518. package/dist/src/vite/agentRoutes.d.ts +20 -1
  519. package/dist/src/vite/agentRoutes.js +135 -66
  520. package/dist/src/vite/agentStatuses.d.ts +42 -0
  521. package/dist/src/vite/agentStatuses.js +67 -0
  522. package/dist/src/vite/agentStoryCode.d.ts +51 -0
  523. package/dist/src/vite/agentStoryCode.js +44 -0
  524. package/dist/src/vite/agentVisibility.d.ts +47 -0
  525. package/dist/src/vite/agentVisibility.js +174 -0
  526. package/dist/src/vite/appAudit.d.ts +134 -0
  527. package/dist/src/vite/appAudit.js +333 -0
  528. package/dist/src/vite/appBuildOption.d.ts +53 -0
  529. package/dist/src/vite/appBuildOption.js +55 -0
  530. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  531. package/dist/src/vite/appTokenFiles.js +433 -0
  532. package/dist/src/vite/appTokens.d.ts +23 -0
  533. package/dist/src/vite/appTokens.js +275 -0
  534. package/dist/src/vite/argControlsConfig.d.ts +30 -0
  535. package/dist/src/vite/argControlsConfig.js +176 -0
  536. package/dist/src/vite/builtTexts.d.ts +10 -0
  537. package/dist/src/vite/builtTexts.js +59 -22
  538. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  539. package/dist/src/vite/catalogueConfig.js +21 -4
  540. package/dist/src/vite/changeCoverage.d.ts +74 -0
  541. package/dist/src/vite/changeCoverage.js +120 -0
  542. package/dist/src/vite/changedRoute.d.ts +30 -0
  543. package/dist/src/vite/changedRoute.js +197 -0
  544. package/dist/src/vite/checkCode.d.ts +105 -3
  545. package/dist/src/vite/checkCode.js +323 -36
  546. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  547. package/dist/src/vite/checkoutWatch.js +287 -0
  548. package/dist/src/vite/closeWatch.d.ts +8 -0
  549. package/dist/src/vite/closeWatch.js +1 -1
  550. package/dist/src/vite/componentCache.d.ts +8 -0
  551. package/dist/src/vite/componentCache.js +66 -0
  552. package/dist/src/vite/componentGraph.d.ts +71 -0
  553. package/dist/src/vite/componentGraph.js +133 -0
  554. package/dist/src/vite/componentRules.d.ts +33 -0
  555. package/dist/src/vite/componentRules.js +105 -0
  556. package/dist/src/vite/componentScan.d.ts +69 -0
  557. package/dist/src/vite/componentScan.js +418 -0
  558. package/dist/src/vite/compositionCheck.d.ts +15 -0
  559. package/dist/src/vite/compositionCheck.js +243 -0
  560. package/dist/src/vite/config.d.ts +67 -1
  561. package/dist/src/vite/configFile.d.ts +15 -2
  562. package/dist/src/vite/configFile.js +109 -40
  563. package/dist/src/vite/configKeys.d.ts +15 -0
  564. package/dist/src/vite/configKeys.js +172 -0
  565. package/dist/src/vite/configLoadError.d.ts +23 -0
  566. package/dist/src/vite/configLoadError.js +71 -0
  567. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  568. package/dist/src/vite/cssDeclarations.js +290 -0
  569. package/dist/src/vite/cssImports.d.ts +14 -0
  570. package/dist/src/vite/cssImports.js +48 -0
  571. package/dist/src/vite/cssReferences.d.ts +54 -0
  572. package/dist/src/vite/cssReferences.js +157 -0
  573. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  574. package/dist/src/vite/cssTokenValues.js +233 -0
  575. package/dist/src/vite/designTokens.d.ts +24 -0
  576. package/dist/src/vite/designTokens.js +5 -1
  577. package/dist/src/vite/docsExtractor.d.ts +9 -3
  578. package/dist/src/vite/docsExtractor.js +11 -3
  579. package/dist/src/vite/docsProgram.d.ts +17 -4
  580. package/dist/src/vite/docsProgram.js +52 -11
  581. package/dist/src/vite/docsWorker.js +7 -2
  582. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  583. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  584. package/dist/src/vite/fileImports.d.ts +17 -0
  585. package/dist/src/vite/fileImports.js +57 -0
  586. package/dist/src/vite/findComponent.d.ts +10 -2
  587. package/dist/src/vite/findComponent.js +27 -22
  588. package/dist/src/vite/findRoute.js +3 -2
  589. package/dist/src/vite/forcedStates.d.ts +9 -2
  590. package/dist/src/vite/forcedStates.js +12 -3
  591. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  592. package/dist/src/vite/forgebookPlugin.js +55 -73
  593. package/dist/src/vite/frameErrors.d.ts +19 -0
  594. package/dist/src/vite/frameErrors.js +70 -0
  595. package/dist/src/vite/framesServer.d.ts +12 -0
  596. package/dist/src/vite/framesServer.js +21 -4
  597. package/dist/src/vite/functionComponentDocs.js +81 -12
  598. package/dist/src/vite/generatedModules.js +4 -2
  599. package/dist/src/vite/gitChange.d.ts +38 -5
  600. package/dist/src/vite/gitChange.js +71 -11
  601. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  602. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  603. package/dist/src/vite/hotSnippets.d.ts +38 -14
  604. package/dist/src/vite/hotSnippets.js +137 -39
  605. package/dist/src/vite/importedNames.d.ts +37 -0
  606. package/dist/src/vite/importedNames.js +138 -0
  607. package/dist/src/vite/indexFields.d.ts +6 -0
  608. package/dist/src/vite/indexFields.js +21 -0
  609. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  610. package/dist/src/vite/indexStoryFile.js +22 -157
  611. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  612. package/dist/src/vite/jsxCallSites.js +200 -0
  613. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  614. package/dist/src/vite/jsxInScripts.js +138 -0
  615. package/dist/src/vite/jsxTree.d.ts +20 -0
  616. package/dist/src/vite/jsxTree.js +163 -0
  617. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  618. package/dist/src/vite/lineAndColumn.js +18 -0
  619. package/dist/src/vite/lookAlikes.d.ts +65 -0
  620. package/dist/src/vite/lookAlikes.js +228 -0
  621. package/dist/src/vite/nearestToken.d.ts +17 -0
  622. package/dist/src/vite/nearestToken.js +9 -2
  623. package/dist/src/vite/packageEntries.d.ts +42 -0
  624. package/dist/src/vite/packageEntries.js +127 -0
  625. package/dist/src/vite/pages.d.ts +9 -1
  626. package/dist/src/vite/pages.js +119 -4
  627. package/dist/src/vite/pluginConfig.js +4 -0
  628. package/dist/src/vite/pluginIds.d.ts +2 -0
  629. package/dist/src/vite/pluginIds.js +5 -1
  630. package/dist/src/vite/pluginModules.d.ts +81 -11
  631. package/dist/src/vite/pluginModules.js +109 -21
  632. package/dist/src/vite/prebundled.d.ts +57 -15
  633. package/dist/src/vite/prebundled.js +80 -0
  634. package/dist/src/vite/previewTags.d.ts +25 -0
  635. package/dist/src/vite/previewTags.js +56 -0
  636. package/dist/src/vite/projectFiles.d.ts +54 -0
  637. package/dist/src/vite/projectFiles.js +116 -0
  638. package/dist/src/vite/projectPostcss.d.ts +70 -0
  639. package/dist/src/vite/projectPostcss.js +250 -0
  640. package/dist/src/vite/propDocs.d.ts +12 -0
  641. package/dist/src/vite/propDocs.js +187 -60
  642. package/dist/src/vite/propKind.d.ts +40 -0
  643. package/dist/src/vite/propKind.js +71 -0
  644. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  645. package/dist/src/vite/propTypeNotes.js +51 -0
  646. package/dist/src/vite/publishedExports.d.ts +27 -0
  647. package/dist/src/vite/publishedExports.js +298 -0
  648. package/dist/src/vite/realFolder.d.ts +6 -0
  649. package/dist/src/vite/realFolder.js +25 -0
  650. package/dist/src/vite/refsConfig.d.ts +39 -0
  651. package/dist/src/vite/refsConfig.js +54 -0
  652. package/dist/src/vite/reuseCheck.d.ts +45 -0
  653. package/dist/src/vite/reuseCheck.js +260 -0
  654. package/dist/src/vite/runningVersions.d.ts +33 -0
  655. package/dist/src/vite/runningVersions.js +25 -0
  656. package/dist/src/vite/scriptProblems.d.ts +60 -0
  657. package/dist/src/vite/scriptProblems.js +155 -0
  658. package/dist/src/vite/searchModule.js +3 -2
  659. package/dist/src/vite/searchRoute.js +4 -2
  660. package/dist/src/vite/shapeDocs.d.ts +36 -0
  661. package/dist/src/vite/shapeDocs.js +177 -0
  662. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  663. package/dist/src/vite/singleFileComponent.js +83 -0
  664. package/dist/src/vite/sourceText.d.ts +34 -0
  665. package/dist/src/vite/sourceText.js +72 -0
  666. package/dist/src/vite/sourceTokens.d.ts +7 -0
  667. package/dist/src/vite/sourceTokens.js +7 -2
  668. package/dist/src/vite/stackLines.d.ts +49 -0
  669. package/dist/src/vite/stackLines.js +96 -0
  670. package/dist/src/vite/storyCode.d.ts +22 -7
  671. package/dist/src/vite/storyCode.js +263 -37
  672. package/dist/src/vite/storyCoverage.d.ts +48 -0
  673. package/dist/src/vite/storyCoverage.js +179 -0
  674. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  675. package/dist/src/vite/storyFilesModule.js +105 -15
  676. package/dist/src/vite/storyPatterns.d.ts +31 -0
  677. package/dist/src/vite/storyPatterns.js +140 -5
  678. package/dist/src/vite/storyReach.d.ts +10 -2
  679. package/dist/src/vite/storyReach.js +15 -11
  680. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  681. package/dist/src/vite/storyTopLevel.js +146 -0
  682. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  683. package/dist/src/vite/storylessRoutes.js +210 -19
  684. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  685. package/dist/src/vite/switchValuesCheck.js +164 -0
  686. package/dist/src/vite/switchesDocument.d.ts +15 -0
  687. package/dist/src/vite/switchesDocument.js +47 -0
  688. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  689. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  690. package/dist/src/vite/textImports.d.ts +15 -0
  691. package/dist/src/vite/textImports.js +58 -0
  692. package/dist/src/vite/textModules.d.ts +6 -5
  693. package/dist/src/vite/textModules.js +13 -8
  694. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  695. package/dist/src/vite/tokenAnswers.js +11 -7
  696. package/dist/src/vite/typeParameters.d.ts +83 -0
  697. package/dist/src/vite/typeParameters.js +270 -0
  698. package/dist/src/vite/typedControls.d.ts +31 -0
  699. package/dist/src/vite/typedControls.js +66 -0
  700. package/dist/src/vite/unionProps.d.ts +37 -0
  701. package/dist/src/vite/unionProps.js +121 -0
  702. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  703. package/dist/src/vite/unresolvedTokens.js +193 -0
  704. package/dist/src/vite/usageGraph.js +10 -52
  705. package/dist/src/vite/usageGuidance.d.ts +9 -2
  706. package/dist/src/vite/usageGuidance.js +36 -8
  707. package/dist/src/vite/usageImports.d.ts +35 -0
  708. package/dist/src/vite/usageImports.js +280 -0
  709. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  710. package/dist/src/vite/visibilityRoute.js +320 -0
  711. package/dist/src/worstCase.d.ts +2 -0
  712. package/dist/src/worstCase.js +2 -0
  713. package/package.json +28 -8
@@ -0,0 +1,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
+ };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * What a story's tags draw, as one chunk loaded the first time one of them is drawn (`tagView.tsx`): the tag filter and
3
+ * the statuses' badges, which share their reading of the catalogue's statuses.
4
+ *
5
+ * @module
6
+ */
7
+ import type { ReactNode } from "react";
8
+ import type { TreeComponent, TreeStory } from "../storyTree.ts";
9
+ import { type TagFilterProps } from "./TagFilter.tsx";
10
+ /** One place the tags draw in, and what it reads. */
11
+ export type TagViewProps = ({
12
+ /** The sidebar's tag filter. */
13
+ readonly place: "filter";
14
+ } & TagFilterProps) | {
15
+ /** A component's entry in the sidebar: its meta's statuses. */
16
+ readonly place: "entry";
17
+ /** The component. */
18
+ readonly component: TreeComponent;
19
+ } | {
20
+ /** The top of a component's page: its meta's statuses, and `deprecated` when its TSDoc says so. */
21
+ readonly place: "page";
22
+ /** The component. */
23
+ readonly component: TreeComponent;
24
+ /** Loads its docs; none when the source has none for its file. */
25
+ readonly loadDocs: (() => Promise<unknown>) | undefined;
26
+ } | {
27
+ /** A story's example on its component's page: the statuses it holds that its component's meta does not. */
28
+ readonly place: "story";
29
+ /** The story. */
30
+ readonly story: TreeStory;
31
+ /** Its component. */
32
+ readonly component: TreeComponent;
33
+ };
34
+ /**
35
+ * What the tags draw in a place.
36
+ *
37
+ * @param props - the place, and what it reads.
38
+ */
39
+ export declare const TagView: (props: TagViewProps) => ReactNode;
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ComponentBadges, StatusBadges } from "./StatusBadges.js";
3
+ import { TagFilter } from "./TagFilter.js";
4
+ /**
5
+ * What the tags draw in a place.
6
+ *
7
+ * @param props - the place, and what it reads.
8
+ */
9
+ export const TagView = (props) => {
10
+ switch (props.place) {
11
+ case "filter":
12
+ return _jsx(TagFilter, { tree: props.tree, tags: props.tags, onTagsChange: props.onTagsChange });
13
+ case "entry":
14
+ return _jsx(StatusBadges, { tags: props.component.tags, className: "forgebook-status-badges" });
15
+ case "page":
16
+ return _jsx(ComponentBadges, { component: props.component, loadDocs: props.loadDocs });
17
+ case "story":
18
+ return (_jsx(StatusBadges, { tags: props.story.tags.filter((tag) => !props.component.tags.includes(tag)), className: "forgebook-status-badges forgebook-status-badges--story" }));
19
+ }
20
+ };
@@ -13,6 +13,7 @@ import { type ReactNode, type Ref } from "react";
13
13
  import { type DeviceDefault } from "../deviceView.ts";
14
14
  import { type FixedView } from "../storyGlobals.ts";
15
15
  import { type ViewState } from "../viewState.ts";
16
+ import type { ControlContext } from "./ToolbarControl.tsx";
16
17
  /** The toolbar's props. */
17
18
  export type ToolbarProps = {
18
19
  /** The view. */
@@ -35,6 +36,8 @@ export type ToolbarProps = {
35
36
  readonly isLogic?: boolean;
36
37
  /** The page's default device: the shown story's, or the catalogue's on a component's page; none by default. */
37
38
  readonly deviceDefault?: DeviceDefault;
39
+ /** Loads the catalogue's previews for a gallery; none when it gives none. */
40
+ readonly loadSwitchPreviews?: ControlContext["loadSwitchPreviews"];
38
41
  };
39
42
  /**
40
43
  * The button that shows the hidden sidebar, at the toolbar's start; the home's bar holds only it.
@@ -49,4 +52,4 @@ export declare const ShowSidebarButton: ({ onShowSidebar, showSidebarRef }: Pick
49
52
  *
50
53
  * @param props - the view, its setter, the page shown and the story's width.
51
54
  */
52
- export declare const Toolbar: ({ view: ownView, onViewChange: onOwnViewChange, isStoryPage, isComponentPage, onShowSidebar, showSidebarRef, shownWidth, fixed, isLogic, deviceDefault }: ToolbarProps) => ReactNode;
55
+ export declare const Toolbar: ({ view: ownView, onViewChange: onOwnViewChange, isStoryPage, isComponentPage, onShowSidebar, showSidebarRef, shownWidth, fixed, isLogic, deviceDefault, loadSwitchPreviews }: ToolbarProps) => ReactNode;
@@ -13,7 +13,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import { useId, useRef } from "react";
14
14
  import { NO_DEVICE } from "../deviceView.js";
15
15
  import { NOT_FIXED, withFixed, withOwnFixed } from "../storyGlobals.js";
16
- import { switchWithRole } from "../switches.js";
16
+ import { impliedSwitches, switchWithRole } from "../switches.js";
17
17
  import { hasViewChanges, isComparing } from "../viewState.js";
18
18
  import { useCatalogue } from "./catalogueContext.js";
19
19
  import { Icon } from "./icons.js";
@@ -58,14 +58,15 @@ const compareChoices = (catalogue) => {
58
58
  * @param props - the view, its setter, and whether the page compares at all.
59
59
  */
60
60
  const CompareMenu = ({ view, onViewChange, isDisabled, fixed = NOT_FIXED }) => {
61
- const { isOpen, isDrawn, setIsOpen, buttonRef, panelRef, panelId } = usePopover();
61
+ const { isOpen, isDrawn, setIsOpen, closeAfterChoice, buttonRef, panelRef, panelId } = usePopover();
62
62
  const catalogue = useCatalogue();
63
63
  const name = useId();
64
64
  return (_jsxs("div", { className: "forgebook-view-menu", children: [_jsxs("button", { ref: buttonRef, type: "button", className: "forgebook-button", title: STRINGS.compare, "aria-pressed": isComparing(view), "aria-expanded": isOpen, "aria-controls": panelId, disabled: isDisabled, onClick: (event) => setIsOpen(!isOpen, event), children: [_jsx(Icon, { name: "compare", size: 14 }), _jsx("span", { className: "forgebook-button__label", children: STRINGS.compare }), _jsx(Icon, { name: "chevronDown", size: 12 })] }), isDrawn ? (_jsx("div", { ref: panelRef, id: panelId, className: "forgebook-popover forgebook-popover--end", role: "dialog", "aria-label": STRINGS.compare, children: _jsxs("fieldset", { className: "forgebook-choices", children: [_jsx("legend", { className: "forgebook-visually-hidden", children: STRINGS.compare }), compareChoices(catalogue).map((choice) => (_jsxs("label", { className: "forgebook-choice", children: [_jsx("input", { type: "radio", name: name,
65
- // a switch the story fixes would draw the same story in every cell
66
- disabled: choice.axes.some((axis) => fixed.switches[axis] !== undefined), checked: view.compare.join(",") === choice.axes.join(","), onChange: () => {
65
+ // a switch the story fixes, or another switch's value implies, would draw the same in every cell
66
+ disabled: choice.axes.some((axis) => fixed.switches[axis] !== undefined ||
67
+ impliedSwitches(view.switches, catalogue.switches).has(axis)), checked: view.compare.join(",") === choice.axes.join(","), onChange: () => {
67
68
  onViewChange({ ...view, compare: choice.axes });
68
- setIsOpen(false);
69
+ closeAfterChoice();
69
70
  } }), choice.label] }, choice.axes.join(","))))] }) })) : null] }));
70
71
  };
71
72
  /**
@@ -79,13 +80,22 @@ export const ShowSidebarButton = ({ onShowSidebar, showSidebarRef }) => (_jsx("b
79
80
  *
80
81
  * @param props - the view, its setter, the page shown and the story's width.
81
82
  */
82
- export const Toolbar = ({ view: ownView, onViewChange: onOwnViewChange, isStoryPage = true, isComponentPage = false, onShowSidebar, showSidebarRef, shownWidth, fixed = NOT_FIXED, isLogic = false, deviceDefault = NO_DEVICE }) => {
83
+ export const Toolbar = ({ view: ownView, onViewChange: onOwnViewChange, isStoryPage = true, isComponentPage = false, onShowSidebar, showSidebarRef, shownWidth, fixed = NOT_FIXED, isLogic = false, deviceDefault = NO_DEVICE, loadSwitchPreviews }) => {
83
84
  const layout = useToolbarLayout();
84
85
  const catalogue = useCatalogue();
85
86
  // the story's fixed values are shown, and a change of anything else keeps the user's own in the address
86
87
  const view = withFixed(ownView, fixed);
87
88
  const onViewChange = (changed) => onOwnViewChange(withOwnFixed(changed, ownView, fixed));
88
- const context = { view, onViewChange, isStoryPage, isComponentPage, fixed, shownWidth, deviceDefault };
89
+ const context = {
90
+ view,
91
+ onViewChange,
92
+ isStoryPage,
93
+ isComponentPage,
94
+ fixed,
95
+ shownWidth,
96
+ deviceDefault,
97
+ loadSwitchPreviews
98
+ };
89
99
  useControlKeys({ keys: layout.keys, view, onViewChange, fixed, isStoryPage, isComponentPage });
90
100
  const pinnedRef = useRef(null);
91
101
  // a page about logic puts away the pinned controls that only change looks: the View menu then counts them
@@ -15,6 +15,7 @@ import { type DeviceDefault } from "../deviceView.ts";
15
15
  import type { FixedView } from "../storyGlobals.ts";
16
16
  import type { ToolbarControl as Control } from "../toolbarLayout.ts";
17
17
  import { type ViewState } from "../viewState.ts";
18
+ import type { SwitchPreviews } from "./SwitchGalleryPanel.tsx";
18
19
  /** Where a control is drawn: on the toolbar, or in a row of the View menu. */
19
20
  export type ControlForm = "bar" | "row";
20
21
  /** What every control reads and sets. */
@@ -33,6 +34,8 @@ export type ControlContext = {
33
34
  readonly shownWidth: number | undefined;
34
35
  /** The page's default device: the shown story's, or the catalogue's on a component's page. */
35
36
  readonly deviceDefault: DeviceDefault;
37
+ /** Loads the catalogue's previews for a gallery; none when it gives none. */
38
+ readonly loadSwitchPreviews: (() => Promise<SwitchPreviews>) | undefined;
36
39
  };
37
40
  /**
38
41
  * One control, drawn for where it sits.
@@ -14,15 +14,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  import { useId } from "react";
15
15
  import { AUDIENCE_IDS } from "../audiences.js";
16
16
  import { DEVICE_PARAMETER, shownDevice } from "../deviceView.js";
17
- import { switchControl } from "../switches.js";
17
+ import { impliedSwitches, switchControl } from "../switches.js";
18
18
  import { isComparing, PLAIN_BACKDROP, SHEETS_CHOICES } from "../viewState.js";
19
19
  import { useCatalogue } from "./catalogueContext.js";
20
20
  import { DeviceControl } from "./DeviceControl.js";
21
21
  import { Icon } from "./icons.js";
22
+ import { LazyView, lazyModule } from "./lazyModule.js";
22
23
  import { Segmented } from "./Segmented.js";
23
24
  import { STRINGS } from "./strings.js";
24
25
  import { switchValueIn, withSwitch } from "./switchView.js";
25
26
  import { WidthField } from "./WidthField.js";
27
+ /** A switch's gallery, loaded with the first catalogue's switch that has one: most catalogues have none. */
28
+ const SWITCH_GALLERY = lazyModule(() => import("./SwitchGallery.js").then((module) => module.SwitchGallery));
26
29
  /** The icon of each scheme a colour scheme switch's values draw in. */
27
30
  const SCHEME_ICONS = {
28
31
  light: "sun",
@@ -69,14 +72,28 @@ const FormChoice = ({ form, isList, ...choice }) => {
69
72
  *
70
73
  * @param props - the switch, its form, and what every control shares.
71
74
  */
72
- const SwitchControl = ({ each, form, view, onViewChange, isStoryPage, fixed }) => {
75
+ const SwitchControl = ({ each, form, view, onViewChange, isStoryPage, fixed, loadSwitchPreviews }) => {
76
+ const { switches } = useCatalogue();
77
+ const implied = impliedSwitches(view.switches, switches).get(each.id);
73
78
  const isFixed = fixed.switches[each.id] !== undefined;
74
- const isDisabled = (isStoryPage && view.compare.includes(each.id)) || isFixed;
75
- const disabledNote = isFixed ? STRINGS.setByStory : undefined;
76
- const value = switchValueIn(view, each);
79
+ const isDisabled = (isStoryPage && view.compare.includes(each.id)) || isFixed || implied !== undefined;
80
+ const storyNote = isFixed ? STRINGS.setByStory : undefined;
81
+ const disabledNote = implied === undefined ? storyNote : STRINGS.setBy.replace("{value}", implied.by.label);
82
+ const value = implied?.value ?? switchValueIn(view, each);
77
83
  const choose = (chosen) => onViewChange(withSwitch(view, each, chosen));
78
84
  const more = each.values.find((option) => option.isMore === true);
79
85
  const standard = each.values.find((option) => option.isMore !== true);
86
+ if (switchControl(each) === "gallery") {
87
+ return (_jsx(LazyView, { module: SWITCH_GALLERY, props: {
88
+ each,
89
+ isOnBar: form === "bar",
90
+ value,
91
+ onValueChange: choose,
92
+ isDisabled,
93
+ disabledNote,
94
+ loadPreviews: loadSwitchPreviews
95
+ }, loading: null, failed: (message) => (_jsx("p", { className: "forgebook-problems", role: "alert", children: message })) }));
96
+ }
80
97
  if (form === "bar" && each.role === "colorScheme") {
81
98
  return (_jsx(Segmented, { label: each.label, isDisabled: isDisabled, disabledNote: disabledNote, options: each.values.map((option) => ({
82
99
  value: option.value,
@@ -85,7 +102,7 @@ const SwitchControl = ({ each, form, view, onViewChange, isStoryPage, fixed }) =
85
102
  })), value: value, onValueChange: choose }));
86
103
  }
87
104
  if (form === "bar" && each.role === "contrast" && more !== undefined && standard !== undefined) {
88
- return (_jsxs("button", { type: "button", className: "forgebook-button", title: isFixed ? STRINGS.setByStory : each.label, "aria-pressed": value === more.value, disabled: isDisabled, onClick: () => choose(value === more.value ? standard.value : more.value), children: [_jsx(Icon, { name: "contrast", size: 14 }), _jsx("span", { className: "forgebook-button__label", children: each.label })] }));
105
+ return (_jsxs("button", { type: "button", className: "forgebook-button", title: disabledNote ?? each.label, "aria-pressed": value === more.value, disabled: isDisabled, onClick: () => choose(value === more.value ? standard.value : more.value), children: [_jsx(Icon, { name: "contrast", size: 14 }), _jsx("span", { className: "forgebook-button__label", children: each.label })] }));
89
106
  }
90
107
  return (_jsx(FormChoice, { form: form, isList: switchControl(each) === "list", label: each.label, options: each.values.map((option) => ({ value: option.value, label: option.label })), value: value, onValueChange: choose, isDisabled: isDisabled, disabledNote: disabledNote }));
91
108
  };
@@ -20,6 +20,7 @@ import { controlLabel } from "./controlLabel.js";
20
20
  import { Icon } from "./icons.js";
21
21
  import { LATER_STRINGS } from "./laterStrings.js";
22
22
  import { NamedViews } from "./NamedViews.js";
23
+ import { rememberPlay } from "./playMemory.js";
23
24
  /** How long the rows take to move out of a dragged row's way, in ms: the shell's `$duration-quick`. */
24
25
  const SHIFT_MS = 150;
25
26
  /** How they move: the shell's `$ease-out`, decelerating. */
@@ -195,5 +196,9 @@ export const ViewMenuPanel = ({ layout, ownView, movedIds, ids, drawControl, ...
195
196
  window.addEventListener("pointerup", drop);
196
197
  window.addEventListener("pointercancel", drop);
197
198
  };
198
- return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "forgebook-popover__body", children: [_jsx(NamedViews, { view: context.view, ownView: ownView, onViewChange: context.onViewChange }), _jsx("ol", { ref: listRef, className: "forgebook-arrange-list", "data-dragging": draggedId === undefined ? undefined : "", children: shown.map((each, index) => (_jsx(ControlRow, { each: each, index: index, count: shown.length, isDragged: each.control.id === draggedId, isMoved: movedIds.includes(each.control.id), isChanged: hasViewChanges(ownView, switches, [each.control.id], catalogue.audience), layout: layout, hintId: hintId, onGrab: grab, onAnnounce: setAnnounced, drawControl: drawControl }, each.control.id))) }), _jsx("span", { id: hintId, className: "forgebook-visually-hidden", children: LATER_STRINGS.moveControlHint }), _jsx("span", { className: "forgebook-visually-hidden", "aria-live": "polite", children: announced }), _jsx(HiddenControls, { hidden: hidden, layout: layout, drawControl: drawControl }), _jsxs("label", { className: "forgebook-wrap-choice", children: [_jsx("input", { type: "checkbox", role: "switch", "aria-checked": layout.isWrapped, className: "forgebook-switch", checked: layout.isWrapped, onChange: (event) => layout.setIsWrapped(event.currentTarget.checked) }), LATER_STRINGS.wrapToolbar] })] }), _jsxs("div", { className: "forgebook-popover__foot", children: [_jsx("button", { type: "button", className: "forgebook-text-button", onClick: () => context.onViewChange(withDefaults(context.view, switches, ids, catalogue.audience)), children: LATER_STRINGS.resetView }), _jsx("button", { type: "button", className: "forgebook-text-button", title: LATER_STRINGS.toolbarInBrowser, disabled: !layout.isArranged, onClick: layout.reset, children: LATER_STRINGS.resetToolbar }), _jsx("span", { className: "forgebook-popover__note", children: LATER_STRINGS.viewInAddress })] })] }));
199
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "forgebook-popover__body", children: [_jsx(NamedViews, { view: context.view, ownView: ownView, onViewChange: context.onViewChange }), _jsx("ol", { ref: listRef, className: "forgebook-arrange-list", "data-dragging": draggedId === undefined ? undefined : "", children: shown.map((each, index) => (_jsx(ControlRow, { each: each, index: index, count: shown.length, isDragged: each.control.id === draggedId, isMoved: movedIds.includes(each.control.id), isChanged: hasViewChanges(ownView, switches, [each.control.id], catalogue.audience), layout: layout, hintId: hintId, onGrab: grab, onAnnounce: setAnnounced, drawControl: drawControl }, each.control.id))) }), _jsx("span", { id: hintId, className: "forgebook-visually-hidden", children: LATER_STRINGS.moveControlHint }), _jsx("span", { className: "forgebook-visually-hidden", "aria-live": "polite", children: announced }), _jsx(HiddenControls, { hidden: hidden, layout: layout, drawControl: drawControl }), _jsxs("label", { className: "forgebook-wrap-choice", children: [_jsx("input", { type: "checkbox", role: "switch", "aria-checked": layout.isWrapped, className: "forgebook-switch", checked: layout.isWrapped, onChange: (event) => layout.setIsWrapped(event.currentTarget.checked) }), LATER_STRINGS.wrapToolbar] }), _jsxs("label", { className: "forgebook-wrap-choice", children: [_jsx("input", { type: "checkbox", role: "switch", "aria-checked": context.view.play === "on", className: "forgebook-switch", checked: context.view.play === "on", onChange: (event) => {
200
+ const play = event.currentTarget.checked ? "on" : "off";
201
+ rememberPlay(catalogue, play);
202
+ context.onViewChange({ ...context.view, play });
203
+ } }), LATER_STRINGS.playOnOpen] })] }), _jsxs("div", { className: "forgebook-popover__foot", children: [_jsx("button", { type: "button", className: "forgebook-text-button", onClick: () => context.onViewChange(withDefaults(context.view, switches, ids, catalogue.audience)), children: LATER_STRINGS.resetView }), _jsx("button", { type: "button", className: "forgebook-text-button", title: LATER_STRINGS.toolbarInBrowser, disabled: !layout.isArranged, onClick: layout.reset, children: LATER_STRINGS.resetToolbar }), _jsx("span", { className: "forgebook-popover__note", children: LATER_STRINGS.viewInAddress })] })] }));
199
204
  };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * What `checkedAddressArgs` needs for a story's structured values, loaded with the first story that has one: what reads a
3
+ * shape, the worst case of one, and the schemas of the custom controls it names. A catalogue of plain props never asks for
4
+ * this; one with no custom control never loads theirs.
5
+ *
6
+ * @module
7
+ */
8
+ import type { ArgChecks } from "../addressArgs.ts";
9
+ import { worstOfShape } from "../shapeValues.ts";
10
+ import type { ArgControlLoaders } from "./customControls.ts";
11
+ /** What the stage holds of it. */
12
+ export type LoadedChecks = ArgChecks & {
13
+ /** A shape's worst value. */
14
+ readonly worstOfShape: typeof worstOfShape;
15
+ };
16
+ /**
17
+ * The checks for a story.
18
+ *
19
+ * @param names - the custom controls it names.
20
+ * @param loaders - the catalogue's custom controls.
21
+ */
22
+ export declare const loadedChecks: (names: readonly string[], loaders: ArgControlLoaders) => Promise<LoadedChecks>;
@@ -0,0 +1,20 @@
1
+ import { isFileList, isValueOfShape, worstOfShape } from "../shapeValues.js";
2
+ /**
3
+ * The checks for a story.
4
+ *
5
+ * @param names - the custom controls it names.
6
+ * @param loaders - the catalogue's custom controls.
7
+ */
8
+ export const loadedChecks = async (names, loaders) => {
9
+ const checks = { isFileList, isValueOfShape, worstOfShape };
10
+ if (names.length === 0)
11
+ return checks;
12
+ try {
13
+ const { customChecksOf } = await import("./customControls.js");
14
+ return { ...checks, custom: await customChecksOf(names, loaders) };
15
+ }
16
+ catch {
17
+ // a page left open across a new build: a control that cannot load refuses its values, as one that fails does
18
+ return checks;
19
+ }
20
+ };
@@ -29,7 +29,8 @@ export const showAsideStory = (target, title, aside) => {
29
29
  frame.setAttribute("sandbox", sandbox);
30
30
  frame.setAttribute(FRAME_ASIDE_ATTRIBUTE, "");
31
31
  // a width set on the stage holds as far as the room allows
32
- frame.style.cssText = "display:block;max-width:100%;height:100%;margin-inline:auto;border:0";
32
+ frame.style.cssText =
33
+ "display:block;max-width:100%;height:100%;margin-inline:auto;border:0;color-scheme:light";
33
34
  frame.style.width = aside.width === "fill" ? "100%" : `${aside.width}px`;
34
35
  if (aside.background !== undefined)
35
36
  target.style.backgroundColor = aside.background;
@@ -40,7 +41,11 @@ export const showAsideStory = (target, title, aside) => {
40
41
  const story = frame.contentWindow;
41
42
  if (!isFromFrames(event) || event.source !== story || story === null)
42
43
  return;
43
- if (!isFrameMessage(event.data) || event.data.type !== "forgebook:ready")
44
+ if (!isFrameMessage(event.data))
45
+ return;
46
+ if (event.data.type === "forgebook:scheme")
47
+ frame.style.colorScheme = event.data.scheme;
48
+ if (event.data.type !== "forgebook:ready")
44
49
  return;
45
50
  isReady = true;
46
51
  if (args !== undefined)
@@ -8,11 +8,11 @@
8
8
  display: grid;
9
9
  align-content: start;
10
10
  gap: 0.5rem;
11
- font: 400 0.8125rem/1.4 var(--forgebook-font-sans);
11
+ font: var(--forgebook-text-body);
12
12
  }
13
13
  .forgebook-guidance__list h3 {
14
14
  margin: 0;
15
- font: 600 0.6875rem/1.3 var(--forgebook-font-sans);
15
+ font: var(--forgebook-text-label);
16
16
  color: var(--forgebook-text-tertiary);
17
17
  }
18
18
  .forgebook-guidance__list ul {
@@ -23,7 +23,7 @@
23
23
  }
24
24
  .forgebook-guidance__deprecated {
25
25
  margin: 0;
26
- font: 400 0.8125rem/1.4 var(--forgebook-font-sans);
26
+ font: var(--forgebook-text-body);
27
27
  }
28
28
  .forgebook-about-pages {
29
29
  display: grid;
@@ -31,21 +31,21 @@
31
31
  margin: 0;
32
32
  padding: 0;
33
33
  list-style: none;
34
- font: 400 0.8125rem/1.4 var(--forgebook-font-sans);
34
+ font: var(--forgebook-text-body);
35
35
  }
36
36
  .forgebook-about-pages li {
37
37
  display: grid;
38
38
  gap: 0.25rem;
39
39
  }
40
40
  .forgebook-about-pages__description {
41
- font: 400 0.6875rem/1.35 var(--forgebook-font-sans);
41
+ font: var(--forgebook-text-caption);
42
42
  color: var(--forgebook-text-secondary);
43
43
  }
44
44
  .forgebook-token {
45
45
  display: flex;
46
46
  align-items: center;
47
47
  gap: 0.5rem;
48
- font: 400 0.71875rem/1.4 var(--forgebook-font-mono);
48
+ font: var(--forgebook-text-mono);
49
49
  }
50
50
  .forgebook-token__swatch {
51
51
  flex: none;
@@ -57,7 +57,7 @@
57
57
  .forgebook-tokens__others {
58
58
  display: grid;
59
59
  gap: 0.5rem;
60
- font: 400 0.6875rem/1.35 var(--forgebook-font-sans);
60
+ font: var(--forgebook-text-caption);
61
61
  color: var(--forgebook-text-secondary);
62
62
  }
63
63
  .forgebook-tokens__others > summary {
@@ -72,12 +72,12 @@
72
72
  }
73
73
  .forgebook-coverage__summary {
74
74
  margin: 0;
75
- font: 400 0.8125rem/1.4 var(--forgebook-font-sans);
75
+ font: var(--forgebook-text-body);
76
76
  color: var(--forgebook-text-secondary);
77
77
  }
78
78
  .forgebook-coverage__progress {
79
79
  margin: 0;
80
- font: 400 0.6875rem/1.35 var(--forgebook-font-sans);
80
+ font: var(--forgebook-text-caption);
81
81
  color: var(--forgebook-text-tertiary);
82
82
  }
83
83
  .forgebook-coverage__progress:empty {
@@ -25,4 +25,4 @@ export declare const useConfiguredCatalogue: ({ title, switches, languages, list
25
25
  readonly languages?: readonly StoryLanguage[];
26
26
  readonly lists?: CatalogueLists;
27
27
  readonly plugins?: readonly ShellPlugin[];
28
- }) => CatalogueSettings;
28
+ }, readStored?: (key: string) => string | null) => CatalogueSettings;