forgebook 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/README.md +914 -72
  2. package/dist/bin/forgebook/agentClient.d.ts +2 -1
  3. package/dist/bin/forgebook/agentClient.js +13 -6
  4. package/dist/bin/forgebook/agentGuide.d.ts +59 -0
  5. package/dist/bin/forgebook/agentGuide.js +203 -0
  6. package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
  7. package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
  8. package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
  9. package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
  10. package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
  11. package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
  12. package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
  13. package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
  14. package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
  15. package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
  16. package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
  17. package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
  18. package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
  19. package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
  20. package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
  21. package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
  22. package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
  23. package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
  24. package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
  25. package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
  26. package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
  27. package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
  28. package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
  29. package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
  30. package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
  31. package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
  32. package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
  33. package/dist/bin/forgebook/agentText.d.ts +23 -3
  34. package/dist/bin/forgebook/agentText.js +175 -28
  35. package/dist/bin/forgebook/agents.md +20 -191
  36. package/dist/bin/forgebook/agentsText.js +2 -1
  37. package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
  38. package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
  39. package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
  40. package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
  41. package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
  42. package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
  43. package/dist/bin/forgebook/auditCommand.d.mts +8 -0
  44. package/dist/bin/forgebook/auditCommand.mjs +75 -0
  45. package/dist/bin/forgebook/auditRun.d.ts +95 -0
  46. package/dist/bin/forgebook/auditRun.js +270 -0
  47. package/dist/bin/forgebook/browserRun.d.ts +21 -0
  48. package/dist/bin/forgebook/browserRun.js +57 -0
  49. package/dist/bin/forgebook/buildFailure.d.ts +7 -0
  50. package/dist/bin/forgebook/buildFailure.js +47 -0
  51. package/dist/bin/forgebook/buildWatch.d.ts +52 -0
  52. package/dist/bin/forgebook/buildWatch.js +137 -0
  53. package/dist/bin/forgebook/builtCatalogue.js +9 -5
  54. package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
  55. package/dist/bin/forgebook/catalogueCommands.js +23 -0
  56. package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
  57. package/dist/bin/forgebook/catalogueVite.js +14 -6
  58. package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
  59. package/dist/bin/forgebook/commandCacheClaim.js +170 -0
  60. package/dist/bin/forgebook/commandServer.d.ts +8 -0
  61. package/dist/bin/forgebook/commandServer.js +61 -13
  62. package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
  63. package/dist/bin/forgebook/graphCommand.d.mts +8 -0
  64. package/dist/bin/forgebook/graphCommand.mjs +84 -0
  65. package/dist/bin/forgebook/guide/commands.md +57 -0
  66. package/dist/bin/forgebook/guide/devices.md +17 -0
  67. package/dist/bin/forgebook/guide/docs-pages.md +13 -0
  68. package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
  69. package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
  70. package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
  71. package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
  72. package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
  73. package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
  74. package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
  75. package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
  76. package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
  77. package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
  78. package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
  79. package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
  80. package/dist/bin/forgebook/guide/links.md +29 -0
  81. package/dist/bin/forgebook/guide/setup.md +23 -0
  82. package/dist/bin/forgebook/guide/stories.md +90 -0
  83. package/dist/bin/forgebook/guide/switches.md +43 -0
  84. package/dist/bin/forgebook/guideCommand.d.mts +13 -0
  85. package/dist/bin/forgebook/guideCommand.mjs +37 -0
  86. package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
  87. package/dist/bin/forgebook/importers/storybook.js +11 -5
  88. package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
  89. package/dist/bin/forgebook/initCommands.d.mts +11 -0
  90. package/dist/bin/forgebook/initCommands.mjs +51 -78
  91. package/dist/bin/forgebook/initConfig.d.ts +5 -3
  92. package/dist/bin/forgebook/initConfig.js +6 -3
  93. package/dist/bin/forgebook/initInstall.d.ts +15 -0
  94. package/dist/bin/forgebook/initInstall.js +77 -0
  95. package/dist/bin/forgebook/initPrint.d.ts +9 -0
  96. package/dist/bin/forgebook/initPrint.js +60 -0
  97. package/dist/bin/forgebook/initRefusals.d.ts +45 -0
  98. package/dist/bin/forgebook/initRefusals.js +91 -0
  99. package/dist/bin/forgebook/initRun.d.ts +28 -0
  100. package/dist/bin/forgebook/initRun.js +311 -0
  101. package/dist/bin/forgebook/mcpCommand.mjs +38 -4
  102. package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
  103. package/dist/bin/forgebook/mcpGraph.js +24 -0
  104. package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
  105. package/dist/bin/forgebook/mcpTokens.js +58 -0
  106. package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
  107. package/dist/bin/forgebook/mcpToolParts.js +10 -0
  108. package/dist/bin/forgebook/mcpTools.d.ts +13 -6
  109. package/dist/bin/forgebook/mcpTools.js +57 -90
  110. package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
  111. package/dist/bin/forgebook/mcpVerify.js +36 -0
  112. package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
  113. package/dist/bin/forgebook/migrate/codemods.js +61 -0
  114. package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
  115. package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
  116. package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
  117. package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
  118. package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
  119. package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
  120. package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
  121. package/dist/bin/forgebook/migrate/migrateText.js +30 -0
  122. package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
  123. package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
  124. package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
  125. package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
  126. package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
  127. package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
  128. package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
  129. package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
  130. package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
  131. package/dist/bin/forgebook/newProject/newProject.js +180 -0
  132. package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
  133. package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
  134. package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
  135. package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
  136. package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
  137. package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
  138. package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
  139. package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
  140. package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
  141. package/dist/bin/forgebook/newProject/projectLook.js +293 -0
  142. package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
  143. package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
  144. package/dist/bin/forgebook/newRepair.d.ts +45 -0
  145. package/dist/bin/forgebook/newRepair.js +157 -0
  146. package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
  147. package/dist/bin/forgebook/newRepairRun.js +148 -0
  148. package/dist/bin/forgebook/newStories.d.ts +23 -1
  149. package/dist/bin/forgebook/newStories.js +101 -11
  150. package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
  151. package/dist/bin/forgebook/newStoriesFile.js +43 -4
  152. package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
  153. package/dist/bin/forgebook/prebundleRun.js +28 -8
  154. package/dist/bin/forgebook/proofCommand.d.mts +15 -0
  155. package/dist/bin/forgebook/proofCommand.mjs +212 -0
  156. package/dist/bin/forgebook/proofRun.d.ts +63 -0
  157. package/dist/bin/forgebook/proofRun.js +412 -0
  158. package/dist/bin/forgebook/proofText.d.ts +36 -0
  159. package/dist/bin/forgebook/proofText.js +131 -0
  160. package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
  161. package/dist/bin/forgebook/proofWorkflow.js +205 -0
  162. package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
  163. package/dist/bin/forgebook/setArgsTool.js +70 -0
  164. package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
  165. package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
  166. package/dist/bin/forgebook/storyCheckRun.js +83 -9
  167. package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
  168. package/dist/bin/forgebook/storyFileIds.js +14 -0
  169. package/dist/bin/forgebook/stressCases.d.ts +31 -0
  170. package/dist/bin/forgebook/stressCases.js +79 -0
  171. package/dist/bin/forgebook/stressRun.d.ts +12 -0
  172. package/dist/bin/forgebook/stressRun.js +61 -0
  173. package/dist/bin/forgebook/stressText.d.ts +27 -0
  174. package/dist/bin/forgebook/stressText.js +46 -0
  175. package/dist/bin/forgebook/verifyBase.d.ts +45 -0
  176. package/dist/bin/forgebook/verifyBase.js +196 -0
  177. package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
  178. package/dist/bin/forgebook/verifyCommand.mjs +125 -0
  179. package/dist/bin/forgebook/verifyRun.d.ts +63 -0
  180. package/dist/bin/forgebook/verifyRun.js +108 -0
  181. package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
  182. package/dist/bin/forgebook/verifyVerdict.js +297 -0
  183. package/dist/bin/forgebook/workflowActions.d.ts +23 -0
  184. package/dist/bin/forgebook/workflowActions.js +23 -0
  185. package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
  186. package/dist/src/addressArgs.d.ts +29 -5
  187. package/dist/src/addressArgs.js +58 -16
  188. package/dist/src/addressArgsParam.d.ts +54 -0
  189. package/dist/src/addressArgsParam.js +51 -0
  190. package/dist/src/addressTexts.d.ts +14 -0
  191. package/dist/src/addressTexts.js +28 -21
  192. package/dist/src/agentIndexFile.d.ts +11 -0
  193. package/dist/src/agentIndexFile.js +11 -0
  194. package/dist/src/argConditions.d.ts +52 -0
  195. package/dist/src/argConditions.js +80 -0
  196. package/dist/src/argControl.d.ts +100 -0
  197. package/dist/src/argControl.js +0 -0
  198. package/dist/src/argExpression.d.ts +21 -0
  199. package/dist/src/argExpression.js +30 -0
  200. package/dist/src/argTypes.d.ts +40 -51
  201. package/dist/src/argTypes.js +66 -184
  202. package/dist/src/argsProps.d.ts +3 -3
  203. package/dist/src/argsProps.js +11 -5
  204. package/dist/src/bundlerErrors.d.ts +29 -0
  205. package/dist/src/bundlerErrors.js +49 -0
  206. package/dist/src/catalogue.d.ts +31 -0
  207. package/dist/src/catalogue.js +13 -2
  208. package/dist/src/catalogueRefs.d.ts +75 -0
  209. package/dist/src/catalogueRefs.js +122 -0
  210. package/dist/src/componentDocs.d.ts +71 -0
  211. package/dist/src/componentDocs.js +15 -2
  212. package/dist/src/frame/callValues.d.ts +19 -0
  213. package/dist/src/frame/callValues.js +58 -0
  214. package/dist/src/frame/canvasScheme.d.ts +33 -0
  215. package/dist/src/frame/canvasScheme.js +67 -0
  216. package/dist/src/frame/frame.css +36 -3
  217. package/dist/src/frame/frameStatus.d.ts +16 -1
  218. package/dist/src/frame/frameStatus.js +16 -1
  219. package/dist/src/frame/frameView.js +4 -3
  220. package/dist/src/frame/mountFrame.d.ts +7 -1
  221. package/dist/src/frame/mountFrame.js +153 -46
  222. package/dist/src/frame/panelValues.d.ts +35 -0
  223. package/dist/src/frame/panelValues.js +127 -0
  224. package/dist/src/frame/playActions.d.ts +39 -0
  225. package/dist/src/frame/playActions.js +98 -0
  226. package/dist/src/frame/playStepper.d.ts +28 -0
  227. package/dist/src/frame/playStepper.js +38 -0
  228. package/dist/src/frame/playStory.d.ts +9 -1
  229. package/dist/src/frame/playStory.js +49 -3
  230. package/dist/src/frame/renderer.d.ts +34 -1
  231. package/dist/src/frame/renderer.js +24 -0
  232. package/dist/src/frame/shellChannel.d.ts +1 -1
  233. package/dist/src/frame/shellChannel.js +1 -1
  234. package/dist/src/frame/shellCheck.d.ts +17 -0
  235. package/dist/src/frame/shellCheck.js +25 -0
  236. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  237. package/dist/src/frame/shellMessageCheck.js +53 -0
  238. package/dist/src/frame/storyContent.d.ts +50 -0
  239. package/dist/src/frame/storyContent.js +73 -0
  240. package/dist/src/frame/storyModule.d.ts +9 -0
  241. package/dist/src/frame/storyModule.js +20 -2
  242. package/dist/src/frame/storyRun.d.ts +15 -7
  243. package/dist/src/frame/storyRun.js +64 -15
  244. package/dist/src/frame/valueSheets.d.ts +35 -0
  245. package/dist/src/frame/valueSheets.js +99 -0
  246. package/dist/src/hotModules.d.ts +20 -0
  247. package/dist/src/hotModules.js +23 -0
  248. package/dist/src/jsxCode.d.ts +1 -14
  249. package/dist/src/jsxCode.js +46 -10
  250. package/dist/src/liveErrors.d.ts +30 -4
  251. package/dist/src/liveErrors.js +18 -3
  252. package/dist/src/messages.d.ts +77 -27
  253. package/dist/src/messages.js +58 -100
  254. package/dist/src/namedValues.d.ts +2 -26
  255. package/dist/src/namedValues.js +0 -47
  256. package/dist/src/pageConfig.d.ts +2 -0
  257. package/dist/src/playTrace.d.ts +19 -2
  258. package/dist/src/playTrace.js +10 -5
  259. package/dist/src/plugin.d.ts +10 -3
  260. package/dist/src/previewRelay.js +9 -1
  261. package/dist/src/printable.d.ts +12 -0
  262. package/dist/src/printable.js +22 -0
  263. package/dist/src/propsSignature.d.ts +37 -0
  264. package/dist/src/propsSignature.js +40 -0
  265. package/dist/src/search.d.ts +41 -5
  266. package/dist/src/search.js +93 -23
  267. package/dist/src/searchMatch.d.ts +4 -1
  268. package/dist/src/searchMatch.js +26 -5
  269. package/dist/src/searchTypos.d.ts +88 -0
  270. package/dist/src/searchTypos.js +178 -0
  271. package/dist/src/shapeValues.d.ts +86 -0
  272. package/dist/src/shapeValues.js +295 -0
  273. package/dist/src/shell/ApiReference.js +6 -3
  274. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  275. package/dist/src/shell/ApiTableBox.js +11 -0
  276. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  277. package/dist/src/shell/AppearanceMenu.js +9 -6
  278. package/dist/src/shell/CodeTab.d.ts +3 -2
  279. package/dist/src/shell/CodeTab.js +3 -2
  280. package/dist/src/shell/CodeText.d.ts +1 -1
  281. package/dist/src/shell/CodeText.js +2 -3
  282. package/dist/src/shell/CompareGrid.js +1 -1
  283. package/dist/src/shell/ComponentPage.d.ts +1 -1
  284. package/dist/src/shell/ComponentPage.js +5 -1
  285. package/dist/src/shell/CustomControl.d.ts +34 -0
  286. package/dist/src/shell/CustomControl.js +132 -0
  287. package/dist/src/shell/DocContainers.js +1 -1
  288. package/dist/src/shell/DocPage.js +2 -2
  289. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  290. package/dist/src/shell/DroppedArgsList.js +1 -1
  291. package/dist/src/shell/EmbedPage.js +30 -12
  292. package/dist/src/shell/Example.d.ts +5 -1
  293. package/dist/src/shell/Example.js +16 -8
  294. package/dist/src/shell/FrameView.d.ts +6 -3
  295. package/dist/src/shell/FrameView.js +2 -2
  296. package/dist/src/shell/HomePage.d.ts +3 -1
  297. package/dist/src/shell/HomePage.js +16 -6
  298. package/dist/src/shell/InfoTip.js +2 -2
  299. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  300. package/dist/src/shell/InteractionsTab.js +18 -2
  301. package/dist/src/shell/LazyPage.js +1 -1
  302. package/dist/src/shell/PackageHtml.js +3 -1
  303. package/dist/src/shell/PinnedControl.js +14 -62
  304. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  305. package/dist/src/shell/PinnedControlMenu.js +72 -0
  306. package/dist/src/shell/PropFields.d.ts +3 -1
  307. package/dist/src/shell/PropFields.js +9 -6
  308. package/dist/src/shell/PropRows.d.ts +23 -2
  309. package/dist/src/shell/PropRows.js +58 -19
  310. package/dist/src/shell/PropsTab.d.ts +12 -5
  311. package/dist/src/shell/PropsTab.js +9 -21
  312. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  313. package/dist/src/shell/RefStoryPage.js +123 -0
  314. package/dist/src/shell/SearchPanel.js +51 -24
  315. package/dist/src/shell/Shell.d.ts +18 -0
  316. package/dist/src/shell/Shell.js +137 -22
  317. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  318. package/dist/src/shell/ShortcutHelp.js +66 -0
  319. package/dist/src/shell/Sidebar.d.ts +17 -4
  320. package/dist/src/shell/Sidebar.js +92 -41
  321. package/dist/src/shell/SidebarDocs.js +2 -2
  322. package/dist/src/shell/SidebarEntries.js +5 -3
  323. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  324. package/dist/src/shell/SidebarHandle.js +4 -4
  325. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  326. package/dist/src/shell/SidebarRefs.js +99 -0
  327. package/dist/src/shell/SidebarSearch.js +37 -9
  328. package/dist/src/shell/SignatureReference.js +3 -1
  329. package/dist/src/shell/Stage.d.ts +10 -2
  330. package/dist/src/shell/Stage.js +29 -49
  331. package/dist/src/shell/StatusBadges.d.ts +54 -0
  332. package/dist/src/shell/StatusBadges.js +77 -0
  333. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  334. package/dist/src/shell/StoryCodeBlock.js +7 -6
  335. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  336. package/dist/src/shell/SwitchGallery.js +17 -0
  337. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  338. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  339. package/dist/src/shell/TagFilter.d.ts +24 -0
  340. package/dist/src/shell/TagFilter.js +45 -0
  341. package/dist/src/shell/TagViews.d.ts +39 -0
  342. package/dist/src/shell/TagViews.js +20 -0
  343. package/dist/src/shell/Toolbar.d.ts +4 -1
  344. package/dist/src/shell/Toolbar.js +17 -7
  345. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  346. package/dist/src/shell/ToolbarControl.js +23 -6
  347. package/dist/src/shell/ViewMenuPanel.js +6 -1
  348. package/dist/src/shell/argChecks.d.ts +22 -0
  349. package/dist/src/shell/argChecks.js +20 -0
  350. package/dist/src/shell/asideStory.js +7 -2
  351. package/dist/src/shell/audienceSections.css +9 -9
  352. package/dist/src/shell/catalogueContext.d.ts +1 -1
  353. package/dist/src/shell/catalogueContext.js +6 -1
  354. package/dist/src/shell/codeSpans.d.ts +27 -0
  355. package/dist/src/shell/codeSpans.js +76 -0
  356. package/dist/src/shell/compareVariants.d.ts +4 -2
  357. package/dist/src/shell/compareVariants.js +16 -8
  358. package/dist/src/shell/composition.d.ts +23 -0
  359. package/dist/src/shell/composition.js +26 -0
  360. package/dist/src/shell/controlCycle.d.ts +1 -1
  361. package/dist/src/shell/controlCycle.js +3 -2
  362. package/dist/src/shell/customControls.d.ts +55 -0
  363. package/dist/src/shell/customControls.js +70 -0
  364. package/dist/src/shell/docPage.css +22 -22
  365. package/dist/src/shell/dockTabs.d.ts +19 -3
  366. package/dist/src/shell/dockTabs.js +28 -20
  367. package/dist/src/shell/embed.css +7 -7
  368. package/dist/src/shell/framesOrigin.d.ts +7 -0
  369. package/dist/src/shell/framesOrigin.js +1 -1
  370. package/dist/src/shell/galleryPlace.d.ts +20 -0
  371. package/dist/src/shell/galleryPlace.js +26 -0
  372. package/dist/src/shell/icons.d.ts +1 -0
  373. package/dist/src/shell/icons.js +1 -0
  374. package/dist/src/shell/keyboard.d.ts +14 -12
  375. package/dist/src/shell/keyboard.js +21 -6
  376. package/dist/src/shell/laterStrings.d.ts +29 -0
  377. package/dist/src/shell/laterStrings.js +42 -3
  378. package/dist/src/shell/mountShell.js +3 -0
  379. package/dist/src/shell/pageStrings.d.ts +4 -0
  380. package/dist/src/shell/pageStrings.js +4 -0
  381. package/dist/src/shell/pageTagView.d.ts +18 -0
  382. package/dist/src/shell/pageTagView.js +10 -0
  383. package/dist/src/shell/playMemory.d.ts +14 -0
  384. package/dist/src/shell/playMemory.js +8 -0
  385. package/dist/src/shell/propNotes.d.ts +23 -0
  386. package/dist/src/shell/propNotes.js +37 -0
  387. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  388. package/dist/src/shell/refIndexLoad.js +38 -0
  389. package/dist/src/shell/refParts.d.ts +34 -0
  390. package/dist/src/shell/refParts.js +9 -0
  391. package/dist/src/shell/refStory.css +21 -0
  392. package/dist/src/shell/refStrings.d.ts +13 -0
  393. package/dist/src/shell/refStrings.js +21 -0
  394. package/dist/src/shell/search.css +11 -11
  395. package/dist/src/shell/shell.css +348 -168
  396. package/dist/src/shell/shellScheme.js +2 -2
  397. package/dist/src/shell/shortcutHelp.css +64 -0
  398. package/dist/src/shell/stageArgs.d.ts +53 -0
  399. package/dist/src/shell/stageArgs.js +64 -0
  400. package/dist/src/shell/statusBadges.css +51 -0
  401. package/dist/src/shell/strings.d.ts +7 -16
  402. package/dist/src/shell/strings.js +12 -17
  403. package/dist/src/shell/switchGallery.css +104 -0
  404. package/dist/src/shell/tagFilter.css +46 -0
  405. package/dist/src/shell/tagView.d.ts +20 -0
  406. package/dist/src/shell/tagView.js +10 -0
  407. package/dist/src/shell/useAddressArgs.d.ts +9 -0
  408. package/dist/src/shell/useAddressArgs.js +56 -11
  409. package/dist/src/shell/useControlKeys.js +2 -2
  410. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  411. package/dist/src/shell/useEditedProblems.js +40 -0
  412. package/dist/src/shell/useFrameMessages.js +3 -0
  413. package/dist/src/shell/useListedTree.d.ts +13 -0
  414. package/dist/src/shell/useListedTree.js +32 -0
  415. package/dist/src/shell/usePageFrames.js +2 -2
  416. package/dist/src/shell/usePopover.d.ts +5 -0
  417. package/dist/src/shell/usePopover.js +7 -1
  418. package/dist/src/shell/useRefIndex.d.ts +22 -0
  419. package/dist/src/shell/useRefIndex.js +36 -0
  420. package/dist/src/shell/useScrollStops.d.ts +20 -0
  421. package/dist/src/shell/useScrollStops.js +41 -0
  422. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  423. package/dist/src/shell/useShortcutHelp.js +32 -0
  424. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  425. package/dist/src/shell/useSidebarOverlay.js +12 -4
  426. package/dist/src/shell/useStoryCode.d.ts +2 -1
  427. package/dist/src/shell/useStoryCode.js +12 -7
  428. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  429. package/dist/src/shell/useToolbarLayout.js +2 -2
  430. package/dist/src/shell/useWorstCase.d.ts +8 -2
  431. package/dist/src/shell/useWorstCase.js +2 -2
  432. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  433. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  434. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  435. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  436. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  437. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  438. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  439. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  440. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  441. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  442. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  443. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  444. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  445. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  446. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  447. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  448. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  449. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  450. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  451. package/dist/src/shell/valueEditors/ValueField.js +147 -0
  452. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  453. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  454. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  455. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  456. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  457. package/dist/src/shell/worstArgs.d.ts +8 -5
  458. package/dist/src/shell/worstArgs.js +14 -7
  459. package/dist/src/shellTheme.d.ts +1 -1
  460. package/dist/src/shellTheme.js +15 -1
  461. package/dist/src/shellTheme.types.d.ts +4 -0
  462. package/dist/src/shellWord.d.ts +12 -0
  463. package/dist/src/shellWord.js +15 -0
  464. package/dist/src/sourceFiles.js +2 -1
  465. package/dist/src/storyArgTypes.d.ts +57 -0
  466. package/dist/src/storyArgTypes.js +195 -0
  467. package/dist/src/storyBackground.js +14 -3
  468. package/dist/src/storyCheck.d.ts +85 -3
  469. package/dist/src/storyCheck.js +23 -1
  470. package/dist/src/storyCodeText.d.ts +46 -0
  471. package/dist/src/storyCodeText.js +27 -0
  472. package/dist/src/storyControls.d.ts +100 -0
  473. package/dist/src/storyControls.js +100 -0
  474. package/dist/src/storyStatuses.d.ts +55 -0
  475. package/dist/src/storyStatuses.js +104 -0
  476. package/dist/src/storyTagNames.d.ts +25 -0
  477. package/dist/src/storyTagNames.js +25 -0
  478. package/dist/src/storyTags.d.ts +29 -0
  479. package/dist/src/storyTags.js +85 -0
  480. package/dist/src/storyTree.d.ts +13 -0
  481. package/dist/src/storyTree.js +24 -4
  482. package/dist/src/storybookArgs.d.ts +24 -0
  483. package/dist/src/storybookArgs.js +185 -0
  484. package/dist/src/switches.d.ts +66 -3
  485. package/dist/src/switches.js +42 -1
  486. package/dist/src/valueSchema.d.ts +28 -0
  487. package/dist/src/valueSchema.js +196 -0
  488. package/dist/src/valueShape.d.ts +94 -0
  489. package/dist/src/valueShape.js +25 -0
  490. package/dist/src/viewState.d.ts +8 -3
  491. package/dist/src/viewState.js +27 -10
  492. package/dist/src/vite/adapter.d.ts +40 -2
  493. package/dist/src/vite/adapter.js +1 -0
  494. package/dist/src/vite/agent.types.d.ts +347 -7
  495. package/dist/src/vite/agentApi.d.ts +23 -0
  496. package/dist/src/vite/agentApi.js +90 -17
  497. package/dist/src/vite/agentIndex.d.ts +0 -2
  498. package/dist/src/vite/agentIndex.js +5 -6
  499. package/dist/src/vite/agentRoutes.d.ts +20 -1
  500. package/dist/src/vite/agentRoutes.js +106 -65
  501. package/dist/src/vite/agentStatuses.d.ts +42 -0
  502. package/dist/src/vite/agentStatuses.js +67 -0
  503. package/dist/src/vite/agentStoryCode.d.ts +48 -0
  504. package/dist/src/vite/agentStoryCode.js +38 -0
  505. package/dist/src/vite/agentVisibility.d.ts +47 -0
  506. package/dist/src/vite/agentVisibility.js +174 -0
  507. package/dist/src/vite/appAudit.d.ts +134 -0
  508. package/dist/src/vite/appAudit.js +333 -0
  509. package/dist/src/vite/appBuildOption.d.ts +53 -0
  510. package/dist/src/vite/appBuildOption.js +55 -0
  511. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  512. package/dist/src/vite/appTokenFiles.js +433 -0
  513. package/dist/src/vite/appTokens.d.ts +23 -0
  514. package/dist/src/vite/appTokens.js +275 -0
  515. package/dist/src/vite/builtTexts.d.ts +10 -0
  516. package/dist/src/vite/builtTexts.js +59 -22
  517. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  518. package/dist/src/vite/catalogueConfig.js +15 -3
  519. package/dist/src/vite/changeCoverage.d.ts +74 -0
  520. package/dist/src/vite/changeCoverage.js +120 -0
  521. package/dist/src/vite/changedRoute.d.ts +30 -0
  522. package/dist/src/vite/changedRoute.js +197 -0
  523. package/dist/src/vite/checkCode.d.ts +105 -3
  524. package/dist/src/vite/checkCode.js +323 -36
  525. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  526. package/dist/src/vite/checkoutWatch.js +287 -0
  527. package/dist/src/vite/closeWatch.d.ts +8 -0
  528. package/dist/src/vite/closeWatch.js +1 -1
  529. package/dist/src/vite/componentCache.d.ts +8 -0
  530. package/dist/src/vite/componentCache.js +66 -0
  531. package/dist/src/vite/componentGraph.d.ts +71 -0
  532. package/dist/src/vite/componentGraph.js +133 -0
  533. package/dist/src/vite/componentRules.d.ts +33 -0
  534. package/dist/src/vite/componentRules.js +105 -0
  535. package/dist/src/vite/componentScan.d.ts +69 -0
  536. package/dist/src/vite/componentScan.js +418 -0
  537. package/dist/src/vite/compositionCheck.d.ts +15 -0
  538. package/dist/src/vite/compositionCheck.js +243 -0
  539. package/dist/src/vite/config.d.ts +32 -1
  540. package/dist/src/vite/configFile.d.ts +14 -2
  541. package/dist/src/vite/configFile.js +124 -40
  542. package/dist/src/vite/configKeys.d.ts +15 -0
  543. package/dist/src/vite/configKeys.js +171 -0
  544. package/dist/src/vite/configLoadError.d.ts +23 -0
  545. package/dist/src/vite/configLoadError.js +71 -0
  546. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  547. package/dist/src/vite/cssDeclarations.js +290 -0
  548. package/dist/src/vite/cssImports.d.ts +14 -0
  549. package/dist/src/vite/cssImports.js +48 -0
  550. package/dist/src/vite/cssReferences.d.ts +54 -0
  551. package/dist/src/vite/cssReferences.js +157 -0
  552. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  553. package/dist/src/vite/cssTokenValues.js +233 -0
  554. package/dist/src/vite/designTokens.d.ts +24 -0
  555. package/dist/src/vite/designTokens.js +5 -1
  556. package/dist/src/vite/docsExtractor.d.ts +9 -3
  557. package/dist/src/vite/docsExtractor.js +11 -3
  558. package/dist/src/vite/docsProgram.d.ts +17 -4
  559. package/dist/src/vite/docsProgram.js +52 -11
  560. package/dist/src/vite/docsWorker.js +7 -2
  561. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  562. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  563. package/dist/src/vite/fileImports.d.ts +17 -0
  564. package/dist/src/vite/fileImports.js +57 -0
  565. package/dist/src/vite/findComponent.d.ts +10 -2
  566. package/dist/src/vite/findComponent.js +27 -22
  567. package/dist/src/vite/findRoute.js +3 -2
  568. package/dist/src/vite/forcedStates.d.ts +9 -2
  569. package/dist/src/vite/forcedStates.js +12 -3
  570. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  571. package/dist/src/vite/forgebookPlugin.js +52 -72
  572. package/dist/src/vite/frameErrors.d.ts +19 -0
  573. package/dist/src/vite/frameErrors.js +70 -0
  574. package/dist/src/vite/framesServer.d.ts +12 -0
  575. package/dist/src/vite/framesServer.js +21 -4
  576. package/dist/src/vite/functionComponentDocs.js +81 -12
  577. package/dist/src/vite/generatedModules.js +4 -2
  578. package/dist/src/vite/gitChange.d.ts +38 -5
  579. package/dist/src/vite/gitChange.js +71 -11
  580. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  581. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  582. package/dist/src/vite/hotSnippets.d.ts +38 -14
  583. package/dist/src/vite/hotSnippets.js +137 -39
  584. package/dist/src/vite/importedNames.d.ts +37 -0
  585. package/dist/src/vite/importedNames.js +138 -0
  586. package/dist/src/vite/indexFields.d.ts +6 -0
  587. package/dist/src/vite/indexFields.js +21 -0
  588. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  589. package/dist/src/vite/indexStoryFile.js +22 -157
  590. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  591. package/dist/src/vite/jsxCallSites.js +200 -0
  592. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  593. package/dist/src/vite/jsxInScripts.js +138 -0
  594. package/dist/src/vite/jsxTree.d.ts +20 -0
  595. package/dist/src/vite/jsxTree.js +163 -0
  596. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  597. package/dist/src/vite/lineAndColumn.js +18 -0
  598. package/dist/src/vite/lookAlikes.d.ts +65 -0
  599. package/dist/src/vite/lookAlikes.js +228 -0
  600. package/dist/src/vite/nearestToken.d.ts +17 -0
  601. package/dist/src/vite/nearestToken.js +9 -2
  602. package/dist/src/vite/packageEntries.d.ts +42 -0
  603. package/dist/src/vite/packageEntries.js +127 -0
  604. package/dist/src/vite/pages.d.ts +9 -1
  605. package/dist/src/vite/pages.js +108 -4
  606. package/dist/src/vite/pluginConfig.js +4 -0
  607. package/dist/src/vite/pluginIds.d.ts +2 -0
  608. package/dist/src/vite/pluginIds.js +5 -1
  609. package/dist/src/vite/pluginModules.d.ts +81 -11
  610. package/dist/src/vite/pluginModules.js +109 -21
  611. package/dist/src/vite/prebundled.d.ts +57 -15
  612. package/dist/src/vite/prebundled.js +80 -0
  613. package/dist/src/vite/previewTags.d.ts +25 -0
  614. package/dist/src/vite/previewTags.js +56 -0
  615. package/dist/src/vite/projectFiles.d.ts +54 -0
  616. package/dist/src/vite/projectFiles.js +116 -0
  617. package/dist/src/vite/projectPostcss.d.ts +70 -0
  618. package/dist/src/vite/projectPostcss.js +250 -0
  619. package/dist/src/vite/propDocs.d.ts +12 -0
  620. package/dist/src/vite/propDocs.js +130 -58
  621. package/dist/src/vite/propKind.d.ts +40 -0
  622. package/dist/src/vite/propKind.js +71 -0
  623. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  624. package/dist/src/vite/propTypeNotes.js +51 -0
  625. package/dist/src/vite/publishedExports.d.ts +27 -0
  626. package/dist/src/vite/publishedExports.js +298 -0
  627. package/dist/src/vite/realFolder.d.ts +6 -0
  628. package/dist/src/vite/realFolder.js +25 -0
  629. package/dist/src/vite/refsConfig.d.ts +39 -0
  630. package/dist/src/vite/refsConfig.js +54 -0
  631. package/dist/src/vite/reuseCheck.d.ts +45 -0
  632. package/dist/src/vite/reuseCheck.js +260 -0
  633. package/dist/src/vite/runningVersions.d.ts +33 -0
  634. package/dist/src/vite/runningVersions.js +25 -0
  635. package/dist/src/vite/scriptProblems.d.ts +60 -0
  636. package/dist/src/vite/scriptProblems.js +155 -0
  637. package/dist/src/vite/searchModule.js +3 -2
  638. package/dist/src/vite/searchRoute.js +4 -2
  639. package/dist/src/vite/shapeDocs.d.ts +36 -0
  640. package/dist/src/vite/shapeDocs.js +177 -0
  641. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  642. package/dist/src/vite/singleFileComponent.js +83 -0
  643. package/dist/src/vite/sourceText.d.ts +34 -0
  644. package/dist/src/vite/sourceText.js +72 -0
  645. package/dist/src/vite/sourceTokens.d.ts +7 -0
  646. package/dist/src/vite/sourceTokens.js +7 -2
  647. package/dist/src/vite/stackLines.d.ts +49 -0
  648. package/dist/src/vite/stackLines.js +96 -0
  649. package/dist/src/vite/storyCode.d.ts +22 -7
  650. package/dist/src/vite/storyCode.js +263 -37
  651. package/dist/src/vite/storyCoverage.d.ts +48 -0
  652. package/dist/src/vite/storyCoverage.js +179 -0
  653. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  654. package/dist/src/vite/storyFilesModule.js +105 -15
  655. package/dist/src/vite/storyPatterns.d.ts +31 -0
  656. package/dist/src/vite/storyPatterns.js +140 -5
  657. package/dist/src/vite/storyReach.d.ts +10 -2
  658. package/dist/src/vite/storyReach.js +15 -11
  659. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  660. package/dist/src/vite/storyTopLevel.js +146 -0
  661. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  662. package/dist/src/vite/storylessRoutes.js +210 -19
  663. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  664. package/dist/src/vite/switchValuesCheck.js +164 -0
  665. package/dist/src/vite/switchesDocument.d.ts +15 -0
  666. package/dist/src/vite/switchesDocument.js +47 -0
  667. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  668. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  669. package/dist/src/vite/textImports.d.ts +15 -0
  670. package/dist/src/vite/textImports.js +58 -0
  671. package/dist/src/vite/textModules.d.ts +6 -5
  672. package/dist/src/vite/textModules.js +13 -8
  673. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  674. package/dist/src/vite/tokenAnswers.js +11 -7
  675. package/dist/src/vite/typeParameters.d.ts +83 -0
  676. package/dist/src/vite/typeParameters.js +270 -0
  677. package/dist/src/vite/unionProps.d.ts +37 -0
  678. package/dist/src/vite/unionProps.js +121 -0
  679. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  680. package/dist/src/vite/unresolvedTokens.js +193 -0
  681. package/dist/src/vite/usageGraph.js +10 -52
  682. package/dist/src/vite/usageGuidance.d.ts +9 -2
  683. package/dist/src/vite/usageGuidance.js +36 -8
  684. package/dist/src/vite/usageImports.d.ts +35 -0
  685. package/dist/src/vite/usageImports.js +280 -0
  686. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  687. package/dist/src/vite/visibilityRoute.js +320 -0
  688. package/dist/src/worstCase.d.ts +2 -0
  689. package/dist/src/worstCase.js +2 -0
  690. package/package.json +28 -8
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A list to search: a text field that narrows its options, walked with the arrow keys, as a combobox for screen readers.
4
+ * For many options, and for the source's named values and the catalogue's tokens, where a name is what a reader knows.
5
+ *
6
+ * @remarks
7
+ * The list opens in the flow rather than over the panel: the panel scrolls, and would cut an overlay at its edge.
8
+ *
9
+ * @module
10
+ */
11
+ import { useId, useMemo, useState } from "react";
12
+ import { EDITOR_STRINGS } from "./editorStrings.js";
13
+ /** The row that takes the value away: a value no option holds, since an option's comes from a name. */
14
+ const CLEAR_ROW = "\0clear";
15
+ /** The most options drawn at once: the rest are a search away. */
16
+ const MOST_SHOWN = 100;
17
+ /** The options a search keeps: every word in the name or in what it holds. */
18
+ const matching = (options, search) => {
19
+ const words = search.toLowerCase().split(/\s+/).filter(Boolean);
20
+ return options.filter((option) => {
21
+ const text = `${option.label} ${option.hint ?? ""}`.toLowerCase();
22
+ return words.every((word) => text.includes(word));
23
+ });
24
+ };
25
+ /**
26
+ * A list to search.
27
+ *
28
+ * @param props - the options and the chosen value.
29
+ */
30
+ export const SearchSelect = ({ label, describedBy, options, value, canClear = true, onChange }) => {
31
+ const listId = useId();
32
+ const [search, setSearch] = useState(undefined);
33
+ const [active, setActive] = useState(0);
34
+ const isOpen = search !== undefined;
35
+ const found = useMemo(() => matching(options, search ?? ""), [options, search]);
36
+ const shown = found.slice(0, MOST_SHOWN);
37
+ const chosenLabel = options.find((option) => option.value === value)?.label ?? value ?? "";
38
+ // the first row takes the value away, where it may go: a reader always has a way back
39
+ const rows = canClear
40
+ ? [{ value: CLEAR_ROW, label: EDITOR_STRINGS.searchClear }, ...shown]
41
+ : shown;
42
+ const close = () => {
43
+ setSearch(undefined);
44
+ setActive(0);
45
+ };
46
+ const choose = (row) => {
47
+ if (row !== undefined)
48
+ onChange(row.value === CLEAR_ROW ? undefined : row.value);
49
+ close();
50
+ };
51
+ const onKeyDown = (event) => {
52
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
53
+ event.preventDefault();
54
+ const count = Math.max(1, rows.length);
55
+ if (!isOpen)
56
+ setSearch("");
57
+ else
58
+ setActive((current) => (current + (event.key === "ArrowDown" ? 1 : count - 1)) % count);
59
+ }
60
+ else if (event.key === "Escape" && isOpen) {
61
+ event.stopPropagation();
62
+ close();
63
+ }
64
+ else if (event.key === "Enter" && isOpen) {
65
+ event.preventDefault();
66
+ choose(rows[active]);
67
+ }
68
+ };
69
+ const optionId = (index) => `${listId}-${index}`;
70
+ return (_jsxs("div", { className: "forgebook-value-search", children: [_jsx("input", { type: "text", role: "combobox", "aria-label": label, "aria-describedby": describedBy, "aria-expanded": isOpen, "aria-controls": listId, "aria-autocomplete": "list", "aria-activedescendant": isOpen && rows[active] !== undefined ? optionId(active) : undefined, autoComplete: "off", value: search ?? chosenLabel, placeholder: EDITOR_STRINGS.searchClear, onFocus: () => setSearch(""), onBlur: close, onKeyDown: onKeyDown, onChange: (event) => {
71
+ setSearch(event.target.value);
72
+ // what is typed names an option, so the first that matches is what Enter takes
73
+ setActive(event.target.value !== "" && canClear ? 1 : 0);
74
+ } }), isOpen ? (_jsxs("div", { className: "forgebook-value-search__list", id: listId, role: "listbox", "aria-label": EDITOR_STRINGS.searchOptions(label), children: [rows.map((option, index) => (_jsxs("div", { id: optionId(index), role: "option", tabIndex: -1, className: "forgebook-value-search__option", "aria-selected": option.value === CLEAR_ROW ? value === undefined : option.value === value, "data-active": active === index || undefined,
75
+ // chosen on the press: the field's blur that follows would close the list before a click
76
+ onMouseDown: (event) => {
77
+ event.preventDefault();
78
+ choose(option);
79
+ }, children: [option.swatch === undefined ? null : (_jsx("span", { className: "forgebook-value-search__swatch", style: { background: option.swatch } })), _jsx("span", { className: "forgebook-value-search__name", children: option.label }), option.hint === undefined ? null : (_jsx("span", { className: "forgebook-value-search__hint", children: option.hint }))] }, option.label))), found.length === 0 ? _jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.searchEmpty }) : null, found.length > MOST_SHOWN ? (_jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.searchMore(found.length - MOST_SHOWN) })) : null] })) : null] }));
80
+ };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * A prop chosen among the catalogue's design tokens (`control: { type: "token", of: "color" }`, or `@token color` in its
3
+ * TSDoc): a search over the tokens it asks for, each with its value and, for a colour, its swatch.
4
+ *
5
+ * @remarks
6
+ * The story receives a plain text, so a link holds it and a reader without the tokens still sees it. What it writes is
7
+ * the token's value unless the control gives a `format` (`var(--{name})`), which keeps a catalogue's themes working.
8
+ * Without tokens to offer it stays a text field: a prop never loses its control to a missing file.
9
+ *
10
+ * @module
11
+ */
12
+ import { type ReactNode } from "react";
13
+ import type { TokenRequest } from "../../argTypes.ts";
14
+ import { type ShellToken } from "../audiencePage.ts";
15
+ /**
16
+ * The tokens a request offers: of that type, or with that part in their name.
17
+ *
18
+ * @param tokens - the catalogue's tokens.
19
+ * @param of - the type or the part of a name.
20
+ */
21
+ export declare const tokensOf: (tokens: readonly ShellToken[], of: string) => readonly ShellToken[];
22
+ /**
23
+ * What a token gives the story.
24
+ *
25
+ * @param token - the token.
26
+ * @param format - the control's `format`; the token's value by default.
27
+ */
28
+ export declare const tokenText: (token: ShellToken, format: string | undefined) => string;
29
+ /** The token editor's props. */
30
+ export type TokenEditorProps = {
31
+ /** The field's name. */
32
+ readonly label: string;
33
+ /** The element that describes it. */
34
+ readonly describedBy: string;
35
+ /** Which tokens it offers. */
36
+ readonly tokens: TokenRequest;
37
+ /** The chosen text. */
38
+ readonly value: string | undefined;
39
+ /** Loads the catalogue's tokens; none when it has none. */
40
+ readonly loadTokens: (() => Promise<unknown>) | undefined;
41
+ /** Called with the chosen text; none for no value. */
42
+ readonly onChange: (value: string | undefined) => void;
43
+ };
44
+ /**
45
+ * The token editor.
46
+ *
47
+ * @param props - the field's name, the tokens it offers, and its value.
48
+ */
49
+ export declare const TokenEditor: ({ label, describedBy, tokens, value, loadTokens, onChange }: TokenEditorProps) => ReactNode;
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A prop chosen among the catalogue's design tokens (`control: { type: "token", of: "color" }`, or `@token color` in its
4
+ * TSDoc): a search over the tokens it asks for, each with its value and, for a colour, its swatch.
5
+ *
6
+ * @remarks
7
+ * The story receives a plain text, so a link holds it and a reader without the tokens still sees it. What it writes is
8
+ * the token's value unless the control gives a `format` (`var(--{name})`), which keeps a catalogue's themes working.
9
+ * Without tokens to offer it stays a text field: a prop never loses its control to a missing file.
10
+ *
11
+ * @module
12
+ */
13
+ import { useEffect, useState } from "react";
14
+ import { isShellTokens } from "../audiencePage.js";
15
+ import { EDITOR_STRINGS } from "./editorStrings.js";
16
+ import { SearchSelect } from "./SearchSelect.js";
17
+ /**
18
+ * The tokens a request offers: of that type, or with that part in their name.
19
+ *
20
+ * @param tokens - the catalogue's tokens.
21
+ * @param of - the type or the part of a name.
22
+ */
23
+ export const tokensOf = (tokens, of) => tokens.filter((token) => token.deprecated === undefined && (token.type === of || token.name.split(".").includes(of)));
24
+ /**
25
+ * What a token gives the story.
26
+ *
27
+ * @param token - the token.
28
+ * @param format - the control's `format`; the token's value by default.
29
+ */
30
+ export const tokenText = (token, format) => (format ?? "{value}")
31
+ .replaceAll("{name}", token.name.replaceAll(".", "-"))
32
+ .replaceAll("{value}", token.value);
33
+ /**
34
+ * The token editor.
35
+ *
36
+ * @param props - the field's name, the tokens it offers, and its value.
37
+ */
38
+ export const TokenEditor = ({ label, describedBy, tokens, value, loadTokens, onChange }) => {
39
+ const [loaded, setLoaded] = useState(loadTokens === undefined ? { status: "ready", value: [] } : { status: "loading" });
40
+ useEffect(() => {
41
+ if (loadTokens === undefined)
42
+ return;
43
+ let isCurrent = true;
44
+ loadTokens().then((answer) => {
45
+ if (!isCurrent)
46
+ return;
47
+ setLoaded(isShellTokens(answer)
48
+ ? { status: "ready", value: answer.tokens }
49
+ : { status: "error", message: "The tokens have an unexpected shape" });
50
+ }, (error) => {
51
+ if (isCurrent) {
52
+ setLoaded({ status: "error", message: error instanceof Error ? error.message : String(error) });
53
+ }
54
+ });
55
+ return () => {
56
+ isCurrent = false;
57
+ };
58
+ }, [loadTokens]);
59
+ if (loaded.status === "loading")
60
+ return _jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.tokensLoading });
61
+ const offered = loaded.status === "ready" ? tokensOf(loaded.value, tokens.of) : [];
62
+ if (offered.length === 0) {
63
+ return (_jsxs(_Fragment, { children: [_jsx("p", { className: "forgebook-value-note", children: loaded.status === "error"
64
+ ? EDITOR_STRINGS.tokensFailed(loaded.message)
65
+ : EDITOR_STRINGS.tokensNone(tokens.of) }), _jsx("input", { type: "text", "aria-label": label, "aria-describedby": describedBy, value: value ?? "", onChange: (event) => onChange(event.target.value) })] }));
66
+ }
67
+ const options = offered.map((token) => ({
68
+ value: tokenText(token, tokens.format),
69
+ label: token.name,
70
+ hint: token.value,
71
+ ...(token.type === "color" ? { swatch: token.value } : {})
72
+ }));
73
+ return (_jsx(SearchSelect, { label: label, describedBy: describedBy, options: options, value: value, onChange: onChange }));
74
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * A mixed union (`"sm" | number`): choose the type, then the value. Choosing a type starts from that type's first value,
3
+ * so the story at once receives what was chosen, and a value already set says which type it is.
4
+ *
5
+ * @module
6
+ */
7
+ import { type ReactNode } from "react";
8
+ import { type ValueShape } from "../../valueShape.ts";
9
+ import type { DrawField, FieldProps } from "./fieldTypes.ts";
10
+ /**
11
+ * A union's editor.
12
+ *
13
+ * @param props - the field's props, and how to draw a member.
14
+ */
15
+ export declare const UnionEditor: ({ shape, value, label, describedBy, namedValues, depth, onChange, drawField }: FieldProps & {
16
+ readonly shape: {
17
+ readonly of: readonly ValueShape[];
18
+ };
19
+ readonly drawField: DrawField;
20
+ }) => ReactNode;
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A mixed union (`"sm" | number`): choose the type, then the value. Choosing a type starts from that type's first value,
4
+ * so the story at once receives what was chosen, and a value already set says which type it is.
5
+ *
6
+ * @module
7
+ */
8
+ import { useState } from "react";
9
+ import { isValueOfShape, startValueOf } from "../../shapeValues.js";
10
+ import { canSetShape } from "../../valueShape.js";
11
+ import { Segmented } from "../Segmented.js";
12
+ import { EDITOR_STRINGS } from "./editorStrings.js";
13
+ import { JsonEditor } from "./JsonEditor.js";
14
+ /** No member chosen: the value is none, or fits none. */
15
+ const NO_MEMBER = -1;
16
+ /** A member's name among the others: its kind, numbered when two share one. */
17
+ const memberLabel = (member, members) => {
18
+ const label = EDITOR_STRINGS.memberKinds[member.kind];
19
+ const same = members.filter((each) => EDITOR_STRINGS.memberKinds[each.kind] === label);
20
+ return same.length === 1 ? label : `${label} ${same.indexOf(member) + 1}`;
21
+ };
22
+ /**
23
+ * A union's editor.
24
+ *
25
+ * @param props - the field's props, and how to draw a member.
26
+ */
27
+ export const UnionEditor = ({ shape, value, label, describedBy, namedValues, depth, onChange, drawField }) => {
28
+ const members = shape.of.filter((member) => canSetShape(member, namedValues));
29
+ const [chosen, setChosen] = useState(NO_MEMBER);
30
+ const fits = (index) => {
31
+ const member = members[index];
32
+ return member !== undefined && value !== undefined && isValueOfShape(member, value, namedValues);
33
+ };
34
+ // the member the reader chose while the value still fits it: `"sm"` typed as a text stays a text
35
+ const shown = fits(chosen) ? chosen : members.findIndex((_, index) => fits(index));
36
+ const member = members[shown];
37
+ // what fits no member cannot be drawn by one: its JSON keeps it in sight, and in reach
38
+ if (value !== undefined && member === undefined) {
39
+ return (_jsxs(_Fragment, { children: [_jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.misfitNote }), _jsx(JsonEditor, { shape, value, label, describedBy, namedValues, depth, onChange })] }));
40
+ }
41
+ return (_jsxs("div", { className: "forgebook-value-union", children: [_jsx(Segmented, { label: EDITOR_STRINGS.memberKind(label), options: members.map((each, index) => ({ value: index, label: memberLabel(each, members) })), value: shown, onValueChange: (index) => {
42
+ const next = members[index];
43
+ if (next === undefined)
44
+ return;
45
+ setChosen(index);
46
+ const start = startValueOf(next, namedValues);
47
+ if (start !== undefined)
48
+ onChange(start);
49
+ } }), member === undefined
50
+ ? null
51
+ : drawField({
52
+ shape: member,
53
+ value,
54
+ label,
55
+ describedBy,
56
+ namedValues,
57
+ depth: depth + 1,
58
+ // the member typed in stays the member, whatever other one the value comes to fit on the way
59
+ onChange: (next) => {
60
+ setChosen(shown);
61
+ onChange(next);
62
+ }
63
+ })] }));
64
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * One value's field, by what it looks like: a text, a number, a toggle, a choice, a named value, or the editor of a list,
3
+ * an object, a union or JSON. A value that does not fit its shape, or is too much to draw, falls back to JSON with a note,
4
+ * so what the panel sends always fits and nothing a story holds is hidden.
5
+ *
6
+ * @module
7
+ */
8
+ import { type ReactNode } from "react";
9
+ import type { FieldProps } from "./fieldTypes.ts";
10
+ /**
11
+ * One value's field.
12
+ *
13
+ * @param props - the field's props.
14
+ */
15
+ export declare const ValueField: (props: FieldProps) => ReactNode;
@@ -0,0 +1,147 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * One value's field, by what it looks like: a text, a number, a toggle, a choice, a named value, or the editor of a list,
4
+ * an object, a union or JSON. A value that does not fit its shape, or is too much to draw, falls back to JSON with a note,
5
+ * so what the panel sends always fits and nothing a story holds is hidden.
6
+ *
7
+ * @module
8
+ */
9
+ import { useState } from "react";
10
+ import { isArgList, isArgObject, isDateArg, isNamedArg } from "../../messages.js";
11
+ import { isValueOfShape } from "../../shapeValues.js";
12
+ import { MOST_PLAIN_OPTIONS } from "../PropFields.js";
13
+ import { STRINGS } from "../strings.js";
14
+ import { EDITOR_STRINGS } from "./editorStrings.js";
15
+ import { JsonEditor } from "./JsonEditor.js";
16
+ import { ListEditor } from "./ListEditor.js";
17
+ import { ObjectEditor, TupleEditor } from "./ObjectEditor.js";
18
+ import { RecordEditor } from "./RecordEditor.js";
19
+ import { SearchSelect } from "./SearchSelect.js";
20
+ import { UnionEditor } from "./UnionEditor.js";
21
+ /** The most parts of a value drawn as fields: past it, a page of inputs is slower to use than its JSON. */
22
+ const MOST_DRAWN_PARTS = 150;
23
+ /** How many parts a value has. */
24
+ const partsOf = (value) => {
25
+ if (isArgList(value))
26
+ return value.reduce((sum, item) => sum + partsOf(item), 1);
27
+ if (isArgObject(value))
28
+ return Object.values(value).reduce((sum, item) => sum + partsOf(item), 1);
29
+ return 1;
30
+ };
31
+ /** Whether a shape is drawn as more than one field, so a person may want its JSON instead. */
32
+ const isStructured = (shape) => shape.kind === "object" || shape.kind === "list" || shape.kind === "record" || shape.kind === "tuple";
33
+ /**
34
+ * A number's field: what is typed stays as typed, and only a number reaches the value. A required number has no empty
35
+ * value, so what was left empty comes back when the field is left.
36
+ *
37
+ * @param props - the field's props.
38
+ */
39
+ const NumberLeaf = ({ value, label, describedBy, onChange }) => {
40
+ const shown = typeof value === "number" ? String(value) : "";
41
+ const [draft, setDraft] = useState(undefined);
42
+ return (_jsx("input", { type: "number", "aria-label": label, "aria-describedby": describedBy, value: draft ?? shown, onChange: (event) => {
43
+ const text = event.target.value;
44
+ setDraft(text);
45
+ if (text !== "" && Number.isFinite(Number(text)))
46
+ onChange(Number(text));
47
+ }, onBlur: () => setDraft(undefined) }));
48
+ };
49
+ /** A choice's field: a native list for a few options, a search among many. */
50
+ const ChoiceLeaf = ({ shape, value, label, describedBy, isRequired = false, onChange }) => {
51
+ const shown = typeof value === "string" || typeof value === "number" ? String(value) : undefined;
52
+ const chooseText = (text) => onChange(shape.values.find((each) => String(each) === text));
53
+ if (shape.values.length > MOST_PLAIN_OPTIONS) {
54
+ return (_jsx(SearchSelect, { label: label, describedBy: describedBy, options: shape.values.map((each) => ({ value: String(each), label: String(each) })), value: shown, canClear: !isRequired, onChange: chooseText }));
55
+ }
56
+ return (_jsxs("select", { "aria-label": label, "aria-describedby": describedBy, value: shown ?? "", onChange: (event) => chooseText(event.target.value), children: [isRequired ? null : _jsx("option", { value: "", children: STRINGS.unset }), shape.values.map((each) => (_jsx("option", { value: String(each), children: String(each) }, String(each))))] }));
57
+ };
58
+ /** A named value's field: a search among the names the source offers for its type. */
59
+ const NamedLeaf = ({ shape, value, label, describedBy, namedValues, depth, isRequired = false, onChange }) => {
60
+ const names = Object.hasOwn(namedValues, shape.type) ? Object.keys(namedValues[shape.type] ?? {}) : [];
61
+ if (shape.canTakeText === true) {
62
+ // a slot takes a named value or a text: the same choice as any union
63
+ const members = names.length === 0 ? [{ kind: "text" }] : [{ kind: "named", type: shape.type }, { kind: "text" }];
64
+ return ValueField({
65
+ shape: members.length === 1 ? { kind: "text" } : { kind: "union", of: members },
66
+ value,
67
+ label,
68
+ describedBy,
69
+ namedValues,
70
+ depth,
71
+ isRequired,
72
+ onChange
73
+ });
74
+ }
75
+ return (_jsx(SearchSelect, { label: label, describedBy: describedBy, options: names.map((name) => ({ value: name, label: name })), value: value !== undefined && isNamedArg(value) ? value.named : undefined, canClear: !isRequired, onChange: (name) => onChange(name === undefined ? undefined : { of: shape.type, named: name }) }));
76
+ };
77
+ /** A text's field: one line, or several once the text holds a line break, which a one-line field would drop. */
78
+ const TextLeaf = ({ value, label, describedBy, onChange }) => {
79
+ const text = typeof value === "string" ? value : "";
80
+ return text.includes("\n") ? (_jsx("textarea", { "aria-label": label, "aria-describedby": describedBy, rows: 3, value: text, onChange: (event) => onChange(event.target.value) })) : (_jsx("input", { type: "text", "aria-label": label, "aria-describedby": describedBy, value: text, onChange: (event) => onChange(event.target.value) }));
81
+ };
82
+ /** A moment's field, in the browser's time zone; what is left empty has no value. */
83
+ const DateLeaf = ({ value, label, describedBy, onChange }) => {
84
+ const time = value !== undefined && isDateArg(value) ? Date.parse(value.forgebookDate) : undefined;
85
+ const shown = time === undefined
86
+ ? ""
87
+ : new Date(time - new Date(time).getTimezoneOffset() * 60_000).toISOString().slice(0, 16);
88
+ return (_jsx("input", { type: "datetime-local", "aria-label": label, "aria-describedby": describedBy, value: shown, onChange: (event) => {
89
+ const read = new Date(event.target.value);
90
+ onChange(Number.isNaN(read.getTime()) ? undefined : { forgebookDate: read.toISOString() });
91
+ } }));
92
+ };
93
+ /** A value's fields, or its JSON when a reader asks for it. */
94
+ const StructuredField = (props) => {
95
+ const { shape, value, label, namedValues, depth } = props;
96
+ const [isJson, setIsJson] = useState(false);
97
+ const isMisfit = value !== undefined && !isValueOfShape(shape, value, namedValues);
98
+ const isTooLarge = value !== undefined && partsOf(value) > MOST_DRAWN_PARTS;
99
+ const drawn = () => {
100
+ switch (shape.kind) {
101
+ case "list":
102
+ return _jsx(ListEditor, { ...props, shape: shape, drawField: ValueField });
103
+ case "tuple":
104
+ return _jsx(TupleEditor, { ...props, shape: shape, drawField: ValueField });
105
+ case "object":
106
+ return _jsx(ObjectEditor, { ...props, shape: shape, drawField: ValueField });
107
+ case "record":
108
+ return _jsx(RecordEditor, { ...props, shape: shape, drawField: ValueField });
109
+ default:
110
+ return _jsx(JsonEditor, { ...props });
111
+ }
112
+ };
113
+ if (isMisfit || isTooLarge) {
114
+ return (_jsxs(_Fragment, { children: [_jsx("p", { className: "forgebook-value-note", children: isMisfit ? EDITOR_STRINGS.misfitNote : EDITOR_STRINGS.tooLargeNote }), _jsx(JsonEditor, { ...props })] }));
115
+ }
116
+ if (depth > 0)
117
+ return drawn();
118
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "forgebook-value-switch", children: _jsx("button", { type: "button", className: "forgebook-text-button", "aria-pressed": isJson, "aria-label": EDITOR_STRINGS.editAsJsonHint(label), onClick: () => setIsJson(!isJson), children: EDITOR_STRINGS.editAsJson }) }), isJson ? _jsx(JsonEditor, { ...props }) : drawn()] }));
119
+ };
120
+ /**
121
+ * One value's field.
122
+ *
123
+ * @param props - the field's props.
124
+ */
125
+ export const ValueField = (props) => {
126
+ const { shape } = props;
127
+ if (isStructured(shape))
128
+ return _jsx(StructuredField, { ...props });
129
+ switch (shape.kind) {
130
+ case "text":
131
+ return _jsx(TextLeaf, { ...props });
132
+ case "number":
133
+ return _jsx(NumberLeaf, { ...props });
134
+ case "date":
135
+ return _jsx(DateLeaf, { ...props });
136
+ case "boolean":
137
+ return (_jsx("input", { type: "checkbox", "aria-label": props.label, "aria-describedby": props.describedBy, checked: shape.only ?? props.value === true, disabled: shape.only !== undefined, onChange: (event) => props.onChange(event.target.checked) }));
138
+ case "choice":
139
+ return _jsx(ChoiceLeaf, { ...props, shape: shape });
140
+ case "named":
141
+ return _jsx(NamedLeaf, { ...props, shape: shape });
142
+ case "union":
143
+ return _jsx(UnionEditor, { ...props, shape: shape, drawField: ValueField });
144
+ default:
145
+ return _jsx(JsonEditor, { ...props });
146
+ }
147
+ };
@@ -0,0 +1,56 @@
1
+ /** The editors' texts, as shown: Forgebook's, with the catalogue's replacements. */
2
+ export declare const EDITOR_STRINGS: {
3
+ addItem: (label: string) => string;
4
+ addField: (label: string) => string;
5
+ itemName: (label: string, position: number) => string;
6
+ moveUp: (label: string) => string;
7
+ moveDown: (label: string) => string;
8
+ removeItem: (label: string) => string;
9
+ itemMoved: (label: string, position: number, count: number) => string;
10
+ itemRemoved: (label: string, count: number) => string;
11
+ emptyList: string;
12
+ cannotSet: string;
13
+ clearField: (label: string) => string;
14
+ fieldName: (label: string) => string;
15
+ fieldValue: (label: string, name: string) => string;
16
+ nameTaken: string;
17
+ nameRefused: string;
18
+ nameEmpty: string;
19
+ newField: string;
20
+ memberKind: (label: string) => string;
21
+ memberKinds: {
22
+ text: string;
23
+ number: string;
24
+ date: string;
25
+ boolean: string;
26
+ choice: string;
27
+ list: string;
28
+ tuple: string;
29
+ object: string;
30
+ record: string;
31
+ union: string;
32
+ named: string;
33
+ json: string;
34
+ like: string;
35
+ };
36
+ editAsJson: string;
37
+ editAsJsonHint: (label: string) => string;
38
+ jsonInvalid: (reason: string) => string;
39
+ jsonRefused: string;
40
+ jsonMisfit: string;
41
+ misfitNote: string;
42
+ tooLargeNote: string;
43
+ searchEmpty: string;
44
+ searchMore: (count: number) => string;
45
+ searchClear: string;
46
+ searchOptions: (label: string) => string;
47
+ tokensLoading: string;
48
+ tokensFailed: (message: string) => string;
49
+ tokensNone: (asked: string) => string;
50
+ fileChoose: (label: string) => string;
51
+ fileRemove: (name: string) => string;
52
+ fileLine: (type: string, size: string) => string;
53
+ fileTooLarge: (name: string, most: string) => string;
54
+ fileRefused: (name: string) => string;
55
+ fileFailed: (name: string) => string;
56
+ };
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The texts of the panel's editors that load on use (`PropEditor.tsx`): nested fields, a searchable list, the tokens, the
3
+ * files. They load with the editors, so a catalogue of plain props carries none of them.
4
+ *
5
+ * @remarks
6
+ * Each keeps the plain name it would have in `STRINGS`, so a catalogue replaces it the same way (`lateStrings`).
7
+ *
8
+ * @module
9
+ */
10
+ import { lateStrings } from "../strings.js";
11
+ /** The editors' texts, as shown: Forgebook's, with the catalogue's replacements. */
12
+ export const EDITOR_STRINGS = lateStrings({
13
+ addItem: (label) => `Add to ${label}`,
14
+ addField: (label) => `Add ${label}`,
15
+ itemName: (label, position) => `${label} ${position}`,
16
+ moveUp: (label) => `Move ${label} up`,
17
+ moveDown: (label) => `Move ${label} down`,
18
+ removeItem: (label) => `Remove ${label}`,
19
+ itemMoved: (label, position, count) => `${label}: now ${position} of ${count}`,
20
+ itemRemoved: (label, count) => `${label} removed, ${count} left`,
21
+ emptyList: "No items",
22
+ cannotSet: "It needs what only the source's named values can give, and they name none",
23
+ clearField: (label) => `${label}: no value`,
24
+ fieldName: (label) => `${label}: name`,
25
+ fieldValue: (label, name) => `${label} ${name}`,
26
+ nameTaken: "Another field has this name",
27
+ nameRefused: "This name cannot be set from the panel or a link",
28
+ nameEmpty: "A field needs a name",
29
+ newField: "key",
30
+ memberKind: (label) => `${label}: type`,
31
+ memberKinds: {
32
+ text: "Text",
33
+ number: "Number",
34
+ date: "Date",
35
+ boolean: "On or off",
36
+ choice: "Choice",
37
+ list: "List",
38
+ tuple: "List",
39
+ object: "Object",
40
+ record: "Object",
41
+ union: "Choice",
42
+ named: "Named",
43
+ json: "JSON",
44
+ like: "Object"
45
+ },
46
+ editAsJson: "JSON",
47
+ editAsJsonHint: (label) => `Edit ${label} as JSON`,
48
+ jsonInvalid: (reason) => `Not valid JSON: ${reason}`,
49
+ jsonRefused: "It holds a name a value cannot hold (__proto__, constructor, prototype), or nests too deep",
50
+ jsonMisfit: "Valid JSON, but not what this prop takes, or it holds what a link may not give",
51
+ misfitNote: "The story's value does not match this prop's type: it is shown as JSON",
52
+ tooLargeNote: "Too much to show as fields: it is shown as JSON",
53
+ searchEmpty: "Nothing matches",
54
+ searchMore: (count) => `And ${count} more: type to narrow them down`,
55
+ searchClear: "No value",
56
+ searchOptions: (label) => `${label}: options`,
57
+ tokensLoading: "Loading the tokens…",
58
+ tokensFailed: (message) => `The tokens could not be read: ${message}`,
59
+ tokensNone: (asked) => `This catalogue has no ${asked} tokens: type a value`,
60
+ fileChoose: (label) => `${label}: choose files`,
61
+ fileRemove: (name) => `Remove ${name}`,
62
+ fileLine: (type, size) => `${type}, ${size}`,
63
+ fileTooLarge: (name, most) => `${name} is too large for a link, which holds the file: at most ${most}`,
64
+ fileRefused: (name) => `${name} is of a type a link cannot hold: it could run as a page`,
65
+ fileFailed: (name) => `${name} could not be read`
66
+ });
@@ -0,0 +1,31 @@
1
+ /**
2
+ * What the panel's nested fields are given: the same for every kind of value, so a field of a list can be an object, a
3
+ * union, or anything else a type says.
4
+ *
5
+ * @module
6
+ */
7
+ import type { ReactNode } from "react";
8
+ import type { ArgValue } from "../../messages.ts";
9
+ import type { NamedValues } from "../../namedValues.ts";
10
+ import type { ValueShape } from "../../valueShape.ts";
11
+ /** One value's field. */
12
+ export type FieldProps = {
13
+ /** What the value looks like. */
14
+ readonly shape: ValueShape;
15
+ /** The value; none when it has none. */
16
+ readonly value: ArgValue | undefined;
17
+ /** The name a screen reader reads: the prop's, and the path down to this part. */
18
+ readonly label: string;
19
+ /** The element that describes it, at the top of a prop. */
20
+ readonly describedBy?: string | undefined;
21
+ /** The source's named values. */
22
+ readonly namedValues: NamedValues;
23
+ /** How deep it is: the prop itself is 0. */
24
+ readonly depth: number;
25
+ /** Whether it must hold a value, so nothing offers to take it away; `false` by default. */
26
+ readonly isRequired?: boolean;
27
+ /** Called with a changed value; none takes it away. */
28
+ readonly onChange: (value: ArgValue | undefined) => void;
29
+ };
30
+ /** Draws a field, handed down so that the nested editors need not import what imports them. */
31
+ export type DrawField = (props: FieldProps) => ReactNode;
File without changes