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
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * What a sidebar lying over the page does beyond its look: Escape closes it, the focus moves into it as it opens and back
3
3
  * to the button that shows it as it closes. The page behind is made inert by the shell, and a tap on the shade closes it.
4
+ * Beside the page, on a wide window, the focus only follows the button it stood on, which goes away with the press.
4
5
  *
5
6
  * @module
6
7
  */
@@ -26,7 +27,7 @@ export type SidebarOverlayState = {
26
27
  readonly onClose: () => void;
27
28
  };
28
29
  /**
29
- * Wires a sidebar lying over the page; nothing on a wide window, where the sidebar sits beside it.
30
+ * Wires a sidebar lying over the page, and the focus of one beside it on a wide window.
30
31
  *
31
32
  * @param state - the sidebar's state.
32
33
  * @returns whether it lies over the page, and the references to give the sidebar and its buttons.
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * What a sidebar lying over the page does beyond its look: Escape closes it, the focus moves into it as it opens and back
3
3
  * to the button that shows it as it closes. The page behind is made inert by the shell, and a tap on the shade closes it.
4
+ * Beside the page, on a wide window, the focus only follows the button it stood on, which goes away with the press.
4
5
  *
5
6
  * @module
6
7
  */
7
8
  import { useEffect, useRef } from "react";
8
9
  /**
9
- * Wires a sidebar lying over the page; nothing on a wide window, where the sidebar sits beside it.
10
+ * Wires a sidebar lying over the page, and the focus of one beside it on a wide window.
10
11
  *
11
12
  * @param state - the sidebar's state.
12
13
  * @returns whether it lies over the page, and the references to give the sidebar and its buttons.
@@ -32,20 +33,27 @@ export const useSidebarOverlay = ({ isOverlay, isOpen, onClose }) => {
32
33
  return () => document.removeEventListener("keydown", closeOnEscape);
33
34
  }, [isOver, onClose]);
34
35
  const wasOver = useRef(false);
35
- // biome-ignore lint/correctness/useExhaustiveDependencies: also looked at when the window crosses the width, and never when a wide window's sidebar is hidden, which leaves the focus alone
36
+ const wasOpen = useRef(isOpen);
37
+ // also looked at when the window crosses the width
36
38
  useEffect(() => {
37
39
  const focused = document.activeElement;
38
40
  const isFocusInSidebar = sidebarRef.current?.contains(focused) === true;
41
+ const isFocusNowhere = focused === document.body || focused === null;
39
42
  // the platform's search key has already put the focus on the search field
40
43
  if (isOver && !isFocusInSidebar)
41
44
  hideButtonRef.current?.focus({ preventScroll: true });
45
+ // shown beside the page, the sidebar took away the button that showed it, and Tab would start over from the top
46
+ if (isOpen && !wasOpen.current && !isOverlay && isFocusNowhere) {
47
+ hideButtonRef.current?.focus({ preventScroll: true });
48
+ }
42
49
  // the sidebar went away with the focus in it, closed or by the window crossing the width; one still shown keeps the
43
50
  // focus, and a search's result that has already taken it to what it found keeps it too
44
- const isFocusLost = isFocusInSidebar || (wasOver.current && (focused === document.body || focused === null));
51
+ const isFocusLost = isFocusInSidebar || (wasOver.current && isFocusNowhere);
45
52
  if (!isOver && sidebarRef.current?.inert === true && isFocusLost) {
46
53
  showButtonRef.current?.focus({ preventScroll: true });
47
54
  }
48
55
  wasOver.current = isOver;
49
- }, [isOver, isOverlay]);
56
+ wasOpen.current = isOpen;
57
+ }, [isOver, isOverlay, isOpen]);
50
58
  return { isOver, sidebarRef, hideButtonRef, showButtonRef };
51
59
  };
@@ -1,5 +1,6 @@
1
1
  /**
2
- * A story file's code for the Code card: each story's `render` as written, loaded from the source's `code`.
2
+ * A story file's code for the Code card: each story's `render`, or the args it writes as code, as written, loaded from
3
+ * the source's `code`.
3
4
  *
4
5
  * @module
5
6
  */
@@ -1,12 +1,17 @@
1
1
  import { useLoaded } from "./useLoaded.js";
2
- /** Whether a value is one story's code: its text and its HTML. */
3
- const isStoryCode = (value) => typeof value === "object" &&
2
+ /** Whether a value is a record of texts, as a story's written args are. */
3
+ const isTexts = (value) => typeof value === "object" &&
4
4
  value !== null &&
5
- "text" in value &&
6
- typeof value.text === "string" &&
7
- "html" in value &&
8
- typeof value.html === "string";
9
- /** Whether the plugin's answer is a file's code: each story's text and HTML, by export name. */
5
+ Object.values(value).every((each) => typeof each === "string");
6
+ /** Whether a value is one story's code: its render's text and HTML, or the args it writes as code. */
7
+ const isStoryCode = (value) => {
8
+ if (typeof value !== "object" || value === null)
9
+ return false;
10
+ if ("args" in value)
11
+ return isTexts(value.args);
12
+ return ("text" in value && typeof value.text === "string" && "html" in value && typeof value.html === "string");
13
+ };
14
+ /** Whether the plugin's answer is a file's code: each story's, by export name. */
10
15
  const isStoryFileCode = (value) => typeof value === "object" &&
11
16
  value !== null &&
12
17
  !("error" in value) &&
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @module
7
7
  */
8
- import { type ControlKeys } from "../controlKeys.ts";
8
+ import { type ControlKeys, type ReaderKeys } from "../controlKeys.ts";
9
9
  import { type PlacedControl } from "../toolbarLayout.ts";
10
10
  /** The arrangement and what changes it. */
11
11
  export type ToolbarLayout = {
@@ -34,5 +34,9 @@ export type ToolbarLayout = {
34
34
  */
35
35
  readonly setKey: (id: string, key: string | null) => string | undefined;
36
36
  };
37
+ /** The person's keys a stored text holds; none for anything else. */
38
+ export declare const readKeys: (stored: string | null) => ReaderKeys;
39
+ /** The text the person's keys are stored as; empty for none. */
40
+ export declare const keysText: (keys: ReaderKeys) => string;
37
41
  /** The person's arrangement of the toolbar. */
38
42
  export declare const useToolbarLayout: () => ToolbarLayout;
@@ -10,7 +10,7 @@ import { arrangementOf, arrangementText, placedControls, readArrangement, withHi
10
10
  import { useCatalogue } from "./catalogueContext.js";
11
11
  import { useStored } from "./useStored.js";
12
12
  /** The person's keys a stored text holds; none for anything else. */
13
- const readKeys = (stored) => {
13
+ export const readKeys = (stored) => {
14
14
  if (stored === null || stored === "")
15
15
  return {};
16
16
  try {
@@ -24,7 +24,7 @@ const readKeys = (stored) => {
24
24
  }
25
25
  };
26
26
  /** The text the person's keys are stored as; empty for none. */
27
- const keysText = (keys) => (Object.keys(keys).length === 0 ? "" : JSON.stringify(keys));
27
+ export const keysText = (keys) => Object.keys(keys).length === 0 ? "" : JSON.stringify(keys);
28
28
  /** The person's arrangement of the toolbar. */
29
29
  export const useToolbarLayout = () => {
30
30
  const catalogue = useCatalogue();
@@ -11,7 +11,9 @@
11
11
  */
12
12
  import { type RefObject } from "react";
13
13
  import type { PanelProp } from "../argTypes.ts";
14
- import type { PanelArgs } from "../messages.ts";
14
+ import type { ArgValue, PanelArgs } from "../messages.ts";
15
+ import type { NamedValues } from "../namedValues.ts";
16
+ import type { ValueShape } from "../valueShape.ts";
15
17
  import { type WorstCaseState } from "./worstArgs.ts";
16
18
  /** What the hook reads. */
17
19
  export type WorstCaseInput = {
@@ -25,6 +27,10 @@ export type WorstCaseInput = {
25
27
  readonly values: PanelArgs;
26
28
  /** The panel's own values. */
27
29
  readonly panelArgs: PanelArgs;
30
+ /** The source's named values, for a required part only they can fill. */
31
+ readonly namedValues: NamedValues | undefined;
32
+ /** Gives a prop with a shape its worst value, once its module loaded. */
33
+ readonly worstOfShape: ((shape: ValueShape, namedValues: NamedValues) => ArgValue | undefined) | undefined;
28
34
  /** Sets the panel's values. */
29
35
  readonly onPanelArgsChange: (args: PanelArgs) => void;
30
36
  };
@@ -42,4 +48,4 @@ export type WorstCase = {
42
48
  *
43
49
  * @param input - the frames, the story, its settable props and its values.
44
50
  */
45
- export declare const useWorstCase: ({ storyRef, storyId, settable, values, panelArgs, onPanelArgsChange }: WorstCaseInput) => WorstCase;
51
+ export declare const useWorstCase: ({ storyRef, storyId, settable, values, panelArgs, namedValues, worstOfShape, onPanelArgsChange }: WorstCaseInput) => WorstCase;
@@ -24,8 +24,8 @@ const mostOf = (frames) => frames === undefined || frames.size === 0 ? undefined
24
24
  *
25
25
  * @param input - the frames, the story, its settable props and its values.
26
26
  */
27
- export const useWorstCase = ({ storyRef, storyId, settable, values, panelArgs, onPanelArgsChange }) => {
28
- const args = useMemo(() => worstArgs(settable), [settable]);
27
+ export const useWorstCase = ({ storyRef, storyId, settable, values, panelArgs, namedValues, worstOfShape, onPanelArgsChange }) => {
28
+ const args = useMemo(() => worstArgs(settable, namedValues, worstOfShape), [settable, namedValues, worstOfShape]);
29
29
  const isOn = isWorstCase(args, values);
30
30
  // each frame's count, by story then by frame: the compare view draws a story in several
31
31
  const [counts, setCounts] = useState(new Map());
@@ -0,0 +1,28 @@
1
+ /**
2
+ * A `file` control: small files kept as `data:` addresses, since the value must be JSON a link can hold. A file too large
3
+ * for an address, or of a type a browser would run as a page, is refused with the reason, as the check on a link would
4
+ * refuse it (`addressArgs.ts`).
5
+ *
6
+ * @module
7
+ */
8
+ import { type ReactNode } from "react";
9
+ import { type ArgValue } from "../../messages.ts";
10
+ /** The file control's props. */
11
+ export type FileEditorProps = {
12
+ /** The field's name. */
13
+ readonly label: string;
14
+ /** The element that describes it. */
15
+ readonly describedBy: string;
16
+ /** The files it takes, as `<input accept>` writes it. */
17
+ readonly accept: string | undefined;
18
+ /** The kept files. */
19
+ readonly value: ArgValue | undefined;
20
+ /** Called with the kept files; none when none is left. */
21
+ readonly onChange: (value: readonly string[] | undefined) => void;
22
+ };
23
+ /**
24
+ * The file control.
25
+ *
26
+ * @param props - the field's name, what it takes, and the kept files.
27
+ */
28
+ export declare const FileEditor: ({ label, describedBy, accept, value, onChange }: FileEditorProps) => ReactNode;
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A `file` control: small files kept as `data:` addresses, since the value must be JSON a link can hold. A file too large
4
+ * for an address, or of a type a browser would run as a page, is refused with the reason, as the check on a link would
5
+ * refuse it (`addressArgs.ts`).
6
+ *
7
+ * @module
8
+ */
9
+ import { useState } from "react";
10
+ import { isChoiceList } from "../../messages.js";
11
+ import { isFileText, MOST_FILE_TEXT } from "../../shapeValues.js";
12
+ import { Icon } from "../icons.js";
13
+ import { EDITOR_STRINGS } from "./editorStrings.js";
14
+ /** A file as a `data:` address. */
15
+ const readFile = (file) => new Promise((resolve, reject) => {
16
+ const reader = new FileReader();
17
+ reader.onload = () => resolve(typeof reader.result === "string" ? reader.result : "");
18
+ reader.onerror = () => reject(new Error(file.name));
19
+ reader.readAsDataURL(file);
20
+ });
21
+ /** A length in bytes, for a person. */
22
+ const sizeText = (bytes) => (bytes < 1024 ? `${bytes} B` : `${(bytes / 1024).toFixed(1)} KB`);
23
+ /** What a kept file is, from its address. */
24
+ const fileLine = (text) => {
25
+ const comma = text.indexOf(",");
26
+ const type = text.slice(5, comma).split(";")[0] ?? "";
27
+ // what base64 holds: three bytes for each four characters
28
+ return EDITOR_STRINGS.fileLine(type, sizeText(Math.floor(((text.length - comma - 1) * 3) / 4)));
29
+ };
30
+ /**
31
+ * The file control.
32
+ *
33
+ * @param props - the field's name, what it takes, and the kept files.
34
+ */
35
+ export const FileEditor = ({ label, describedBy, accept, value, onChange }) => {
36
+ const files = isChoiceList(value) ? value.filter((each) => typeof each === "string") : [];
37
+ const [problems, setProblems] = useState([]);
38
+ const add = async (chosen) => {
39
+ const kept = [];
40
+ const refused = [];
41
+ for (const file of chosen) {
42
+ try {
43
+ const text = await readFile(file);
44
+ if (text.length > MOST_FILE_TEXT)
45
+ refused.push(EDITOR_STRINGS.fileTooLarge(file.name, sizeText((MOST_FILE_TEXT * 3) / 4)));
46
+ else if (isFileText(text))
47
+ kept.push(text);
48
+ else
49
+ refused.push(EDITOR_STRINGS.fileRefused(file.name));
50
+ }
51
+ catch {
52
+ refused.push(EDITOR_STRINGS.fileFailed(file.name));
53
+ }
54
+ }
55
+ setProblems(refused);
56
+ if (kept.length > 0)
57
+ onChange([...files, ...kept]);
58
+ };
59
+ return (_jsxs("div", { className: "forgebook-value-list", children: [_jsx("input", { type: "file", multiple: true, "aria-label": EDITOR_STRINGS.fileChoose(label), "aria-describedby": describedBy, ...(accept === undefined ? {} : { accept }), onChange: (event) => {
60
+ void add([...(event.target.files ?? [])]);
61
+ event.target.value = "";
62
+ } }), files.map((file, index) => (_jsxs("div", { className: "forgebook-value-list__item", children: [_jsx("span", { className: "forgebook-value-list__field forgebook-value-note", children: fileLine(file) }), _jsx("div", { className: "forgebook-value-list__buttons", children: _jsx("button", { type: "button", className: "forgebook-prop__action", "aria-label": EDITOR_STRINGS.fileRemove(EDITOR_STRINGS.itemName(label, index + 1)), onClick: () => {
63
+ const left = files.filter((_, position) => position !== index);
64
+ onChange(left.length === 0 ? undefined : left);
65
+ }, children: _jsx(Icon, { name: "close", size: 12 }) }) })] }, file))), problems.map((problem) => (_jsx("p", { className: "forgebook-value-note", "data-tone": "problem", role: "alert", children: problem }, problem)))] }));
66
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A value typed as JSON: the way out for what cannot be drawn as fields, and for pasting a whole value. What does not
3
+ * parse, or is not what the prop takes, stays in the field with the reason beside it and never reaches the story.
4
+ *
5
+ * @module
6
+ */
7
+ import { type ReactNode } from "react";
8
+ import type { FieldProps } from "./fieldTypes.ts";
9
+ /**
10
+ * A value's JSON field.
11
+ *
12
+ * @param props - the field's props.
13
+ */
14
+ export declare const JsonEditor: ({ shape, value, label, describedBy, namedValues, onChange }: FieldProps) => ReactNode;
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A value typed as JSON: the way out for what cannot be drawn as fields, and for pasting a whole value. What does not
4
+ * parse, or is not what the prop takes, stays in the field with the reason beside it and never reaches the story.
5
+ *
6
+ * @module
7
+ */
8
+ import { useId, useState } from "react";
9
+ import { isArgValue } from "../../messages.js";
10
+ import { isValueOfShape } from "../../shapeValues.js";
11
+ import { EDITOR_STRINGS } from "./editorStrings.js";
12
+ /** A value as the field writes it. */
13
+ const jsonText = (value) => value === undefined ? "" : JSON.stringify(value, null, 2);
14
+ /** What a text says: the value it writes, or why it is not one. */
15
+ const readJson = (text, { shape, namedValues }) => {
16
+ if (text.trim() === "")
17
+ return { value: undefined };
18
+ let parsed;
19
+ try {
20
+ parsed = JSON.parse(text);
21
+ }
22
+ catch (error) {
23
+ return { problem: EDITOR_STRINGS.jsonInvalid(error instanceof Error ? error.message : String(error)) };
24
+ }
25
+ if (!isArgValue(parsed))
26
+ return { problem: EDITOR_STRINGS.jsonRefused };
27
+ return isValueOfShape(shape, parsed, namedValues)
28
+ ? { value: parsed }
29
+ : { problem: EDITOR_STRINGS.jsonMisfit };
30
+ };
31
+ /**
32
+ * A value's JSON field.
33
+ *
34
+ * @param props - the field's props.
35
+ */
36
+ export const JsonEditor = ({ shape, value, label, describedBy, namedValues, onChange }) => {
37
+ const problemId = useId();
38
+ const written = jsonText(value);
39
+ const [draft, setDraft] = useState({ text: written, before: written, after: written });
40
+ // a value changed from outside (Reset, the worst case) replaces what was typed; the field's own stays as typed, and so
41
+ // does what its parent did not take (an item of a list cannot be left without a value)
42
+ const text = draft.before === written || draft.after === written ? draft.text : written;
43
+ const read = readJson(text, { shape, namedValues });
44
+ const problem = "problem" in read ? read.problem : undefined;
45
+ return (_jsxs("div", { className: "forgebook-value-json", children: [_jsx("textarea", { className: "forgebook-value-json__text", "aria-label": label, "aria-describedby": problem === undefined ? describedBy : problemId, "aria-invalid": problem !== undefined, spellCheck: false, rows: Math.min(12, Math.max(3, text.split("\n").length)), value: text, onChange: (event) => {
46
+ const next = event.target.value;
47
+ const nextRead = readJson(next, { shape, namedValues });
48
+ const after = "value" in nextRead ? jsonText(nextRead.value) : written;
49
+ setDraft({ text: next, before: written, after });
50
+ if ("value" in nextRead)
51
+ onChange(nextRead.value);
52
+ } }), problem === undefined ? null : (_jsx("p", { id: problemId, className: "forgebook-value-note", "data-tone": "problem", role: "alert", children: problem }))] }));
53
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * A list's items as fields, added, removed and moved with buttons, so a keyboard does all a pointer does: the focus
3
+ * follows an item it moved, and a screen reader is told where it went.
4
+ *
5
+ * @remarks
6
+ * Items keep their place as their key: an item has no identity of its own in JSON, and a key that moved with the value
7
+ * would take the focus out of the field being typed in on every keystroke.
8
+ *
9
+ * @module
10
+ */
11
+ import { type ReactNode } from "react";
12
+ import type { ValueShape } from "../../valueShape.ts";
13
+ import type { DrawField, FieldProps } from "./fieldTypes.ts";
14
+ /**
15
+ * A list's editor.
16
+ *
17
+ * @param props - the field's props, and how to draw an item.
18
+ */
19
+ export declare const ListEditor: ({ shape, value, label, namedValues, depth, onChange, drawField }: FieldProps & {
20
+ readonly shape: {
21
+ readonly of: ValueShape;
22
+ };
23
+ readonly drawField: DrawField;
24
+ }) => ReactNode;
@@ -0,0 +1,82 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A list's items as fields, added, removed and moved with buttons, so a keyboard does all a pointer does: the focus
4
+ * follows an item it moved, and a screen reader is told where it went.
5
+ *
6
+ * @remarks
7
+ * Items keep their place as their key: an item has no identity of its own in JSON, and a key that moved with the value
8
+ * would take the focus out of the field being typed in on every keystroke.
9
+ *
10
+ * @module
11
+ */
12
+ import { useEffect, useRef, useState } from "react";
13
+ import { isArgList } from "../../messages.js";
14
+ import { startValueOf } from "../../shapeValues.js";
15
+ import { Icon } from "../icons.js";
16
+ import { EDITOR_STRINGS } from "./editorStrings.js";
17
+ /** The arrows, drawn as text: the first screen's icons stay what the first screen uses. */
18
+ const ARROWS = { up: "↑", down: "↓" };
19
+ /** One small button of an item; at an end of the list it does nothing, but keeps the focus it was given. */
20
+ const ItemButton = ({ action, label, isOff = false, onPress }) => (_jsx("button", { type: "button", className: "forgebook-prop__action", "data-action": action, "aria-label": label, title: label, "aria-disabled": isOff || undefined, onClick: isOff ? undefined : onPress, children: action === "remove" ? _jsx(Icon, { name: "close", size: 12 }) : ARROWS[action] }));
21
+ /**
22
+ * A list's editor.
23
+ *
24
+ * @param props - the field's props, and how to draw an item.
25
+ */
26
+ export const ListEditor = ({ shape, value, label, namedValues, depth, onChange, drawField }) => {
27
+ const items = value !== undefined && isArgList(value) ? value : [];
28
+ const listRef = useRef(null);
29
+ const pending = useRef(undefined);
30
+ const [announcement, setAnnouncement] = useState("");
31
+ const itemShape = shape.of;
32
+ const start = startValueOf(itemShape, namedValues);
33
+ useEffect(() => {
34
+ const focus = pending.current;
35
+ if (focus === undefined)
36
+ return;
37
+ pending.current = undefined;
38
+ const selector = focus.action === "add"
39
+ ? "[data-action='add']"
40
+ : `[data-item='${focus.index}'] [data-action='${focus.action}']`;
41
+ const fallback = listRef.current?.querySelector("[data-action='add']");
42
+ (listRef.current?.querySelector(selector) ?? fallback)?.focus();
43
+ });
44
+ const itemLabel = (index) => EDITOR_STRINGS.itemName(label, index + 1);
45
+ const move = (index, by, action) => {
46
+ const next = [...items];
47
+ const [item] = next.splice(index, 1);
48
+ if (item === undefined)
49
+ return;
50
+ next.splice(index + by, 0, item);
51
+ pending.current = { index: index + by, action };
52
+ setAnnouncement(EDITOR_STRINGS.itemMoved(itemLabel(index), index + by + 1, next.length));
53
+ onChange(next);
54
+ };
55
+ const remove = (index) => {
56
+ const next = items.filter((_, position) => position !== index);
57
+ pending.current =
58
+ next.length === 0
59
+ ? { index: 0, action: "add" }
60
+ : { index: Math.min(index, next.length - 1), action: "remove" };
61
+ setAnnouncement(EDITOR_STRINGS.itemRemoved(itemLabel(index), next.length));
62
+ onChange(next);
63
+ };
64
+ const change = (index, item) => {
65
+ if (item === undefined)
66
+ return;
67
+ onChange(items.map((each, position) => (position === index ? item : each)));
68
+ };
69
+ return (_jsxs("div", { className: "forgebook-value-list", ref: listRef, children: [items.length === 0 ? _jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.emptyList }) : null, items.map((item, index) => (_jsxs("div", { className: "forgebook-value-list__item", "data-item": index, children: [_jsx("div", { className: "forgebook-value-list__field", children: drawField({
70
+ shape: itemShape,
71
+ value: item,
72
+ label: itemLabel(index),
73
+ namedValues,
74
+ depth: depth + 1,
75
+ isRequired: true,
76
+ onChange: (next) => change(index, next)
77
+ }) }), _jsxs("div", { className: "forgebook-value-list__buttons", children: [_jsx(ItemButton, { action: "up", label: EDITOR_STRINGS.moveUp(itemLabel(index)), isOff: index === 0, onPress: () => move(index, -1, "up") }), _jsx(ItemButton, { action: "down", label: EDITOR_STRINGS.moveDown(itemLabel(index)), isOff: index === items.length - 1, onPress: () => move(index, 1, "down") }), _jsx(ItemButton, { action: "remove", label: EDITOR_STRINGS.removeItem(itemLabel(index)), onPress: () => remove(index) })] })] }, index))), _jsxs("button", { type: "button", className: "forgebook-text-button forgebook-value-add", "data-action": "add", disabled: start === undefined, onClick: () => {
78
+ if (start === undefined)
79
+ return;
80
+ onChange([...items, start]);
81
+ }, children: [_jsx(Icon, { name: "plus", size: 12 }), EDITOR_STRINGS.addItem(label)] }), _jsx("span", { className: "forgebook-visually-hidden", role: "status", children: announcement })] }));
82
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * An object's fields, one under the other, and a tuple's items: what a type declares, each with its name, whether it is
3
+ * required, and a way to take an optional one away.
4
+ *
5
+ * @module
6
+ */
7
+ import type { ReactNode } from "react";
8
+ import { type ShapeField, type ValueShape } from "../../valueShape.ts";
9
+ import type { DrawField, FieldProps } from "./fieldTypes.ts";
10
+ /**
11
+ * An object's editor. The first change starts from what the required fields must hold, so what reaches the story always
12
+ * fits its type.
13
+ *
14
+ * @param props - the field's props, and how to draw a field.
15
+ */
16
+ export declare const ObjectEditor: ({ shape, value, label, namedValues, depth, onChange, drawField }: FieldProps & {
17
+ readonly shape: {
18
+ readonly fields: readonly ShapeField[];
19
+ };
20
+ readonly drawField: DrawField;
21
+ }) => ReactNode;
22
+ /**
23
+ * A tuple's editor: its items, fixed in number, each of its own shape.
24
+ *
25
+ * @param props - the field's props, and how to draw an item.
26
+ */
27
+ export declare const TupleEditor: ({ shape, value, label, namedValues, depth, onChange, drawField }: FieldProps & {
28
+ readonly shape: {
29
+ readonly items: readonly ValueShape[];
30
+ };
31
+ readonly drawField: DrawField;
32
+ }) => ReactNode;
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { isArgList, isArgObject } from "../../messages.js";
3
+ import { startValueOf } from "../../shapeValues.js";
4
+ import { canSetShape } from "../../valueShape.js";
5
+ import { Icon } from "../icons.js";
6
+ import { STRINGS } from "../strings.js";
7
+ import { EDITOR_STRINGS } from "./editorStrings.js";
8
+ /** Whether a field's shape opens further: an optional one that holds nothing stays closed behind a button. */
9
+ const opensFurther = (shape) => shape.kind === "object" || shape.kind === "list" || shape.kind === "record" || shape.kind === "tuple";
10
+ /** One field of an object: its name and its value, or the button that gives it one. */
11
+ const ObjectField = ({ field, value, label, namedValues, depth, onChange, drawField }) => {
12
+ const fieldLabel = EDITOR_STRINGS.fieldValue(label, field.name);
13
+ const start = startValueOf(field.shape, namedValues);
14
+ const isClosed = value === undefined && !field.isRequired && opensFurther(field.shape);
15
+ return (_jsxs("div", { className: "forgebook-value-field", children: [_jsxs("div", { className: "forgebook-value-field__head", children: [_jsxs("code", { className: "forgebook-value-field__name", title: field.description, children: [field.name, field.isRequired ? (_jsx("span", { className: "forgebook-prop__required", title: STRINGS.required, children: "*" })) : null] }), value === undefined || field.isRequired ? null : (_jsx("button", { type: "button", className: "forgebook-prop__action", "aria-label": EDITOR_STRINGS.clearField(fieldLabel), title: EDITOR_STRINGS.clearField(fieldLabel), onClick: () => onChange(undefined), children: _jsx(Icon, { name: "noValue", size: 12 }) }))] }), isClosed ? (_jsxs("button", { type: "button", className: "forgebook-text-button forgebook-value-add", disabled: start === undefined, onClick: () => onChange(start), children: [_jsx(Icon, { name: "plus", size: 12 }), EDITOR_STRINGS.addField(fieldLabel)] })) : (drawField({
16
+ shape: field.shape,
17
+ value,
18
+ label: fieldLabel,
19
+ namedValues,
20
+ depth: depth + 1,
21
+ isRequired: field.isRequired,
22
+ onChange: (next) => {
23
+ // a required field cannot go: what reaches the story always fits its type
24
+ if (next !== undefined || !field.isRequired)
25
+ onChange(next);
26
+ }
27
+ }))] }));
28
+ };
29
+ /**
30
+ * An object's editor. The first change starts from what the required fields must hold, so what reaches the story always
31
+ * fits its type.
32
+ *
33
+ * @param props - the field's props, and how to draw a field.
34
+ */
35
+ export const ObjectEditor = ({ shape, value, label, namedValues, depth, onChange, drawField }) => {
36
+ const current = value !== undefined && isArgObject(value) ? value : {};
37
+ const change = (name, next) => {
38
+ const started = startValueOf({ kind: "object", fields: shape.fields }, namedValues);
39
+ const base = value === undefined && started !== undefined && isArgObject(started) ? started : current;
40
+ const { [name]: _removed, ...rest } = base;
41
+ onChange(next === undefined ? rest : { ...base, [name]: next });
42
+ };
43
+ return (_jsx("div", { className: "forgebook-value-object", "data-depth": depth, children: shape.fields
44
+ // a part only the source's named values can fill, and it names none, has nothing to draw
45
+ .filter((field) => canSetShape(field.shape, namedValues))
46
+ .map((field) => (_jsx(ObjectField, { field: field, value: Object.hasOwn(current, field.name) ? current[field.name] : undefined, label: label, namedValues: namedValues, depth: depth, onChange: (next) => change(field.name, next), drawField: drawField }, field.name))) }));
47
+ };
48
+ /**
49
+ * A tuple's editor: its items, fixed in number, each of its own shape.
50
+ *
51
+ * @param props - the field's props, and how to draw an item.
52
+ */
53
+ export const TupleEditor = ({ shape, value, label, namedValues, depth, onChange, drawField }) => {
54
+ const current = value !== undefined && isArgList(value) ? value : undefined;
55
+ const started = startValueOf({ kind: "tuple", items: shape.items }, namedValues);
56
+ const base = current ?? (started !== undefined && isArgList(started) ? started : []);
57
+ return (_jsx("div", { className: "forgebook-value-tuple", children: shape.items.map((item, index) => (_jsx("div", { className: "forgebook-value-field", children: drawField({
58
+ shape: item,
59
+ value: current?.[index],
60
+ label: EDITOR_STRINGS.itemName(label, index + 1),
61
+ namedValues,
62
+ depth: depth + 1,
63
+ isRequired: true,
64
+ onChange: (next) => {
65
+ if (next === undefined)
66
+ return;
67
+ onChange(base.map((each, position) => (position === index ? next : each)));
68
+ }
69
+ }) }, index))) }));
70
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The panel's editors that load on use, as one prop asks for them: nested fields from its shape, a search among its
3
+ * options or the source's named values, the catalogue's tokens, files. A catalogue of plain props never loads this module
4
+ * (`PropRows.tsx`).
5
+ *
6
+ * @module
7
+ */
8
+ import type { ReactNode } from "react";
9
+ import type { PanelProp } from "../../argTypes.ts";
10
+ import { type ArgValue } from "../../messages.ts";
11
+ import type { NamedValues } from "../../namedValues.ts";
12
+ import type { ArgControlLoaders } from "../customControls.ts";
13
+ import type { OnValueChange } from "../PropFields.tsx";
14
+ import "./valueEditors.scss";
15
+ /** The editor's props. */
16
+ export type PropEditorProps = {
17
+ /** The prop. */
18
+ readonly prop: PanelProp;
19
+ /** Its value. */
20
+ readonly value: ArgValue | undefined;
21
+ /** The element that describes it. */
22
+ readonly descriptionId: string;
23
+ /** The source's named values. */
24
+ readonly namedValues: NamedValues;
25
+ /** Loads the catalogue's design tokens; none when it has none. */
26
+ readonly loadTokens: (() => Promise<unknown>) | undefined;
27
+ /** Loads each custom control the catalogue registers, by name; none when it registers none. */
28
+ readonly argControls: ArgControlLoaders | undefined;
29
+ /** Called with a changed value. */
30
+ readonly onValueChange: OnValueChange;
31
+ };
32
+ /**
33
+ * One prop's editor.
34
+ *
35
+ * @param props - the prop, its value, and what it may draw from.
36
+ */
37
+ export declare const PropEditor: ({ prop, value, descriptionId, namedValues, loadTokens, argControls, onValueChange }: PropEditorProps) => ReactNode;