forgebook 0.3.3 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/README.md +994 -72
  2. package/dist/bin/forgebook/agentClient.d.ts +2 -1
  3. package/dist/bin/forgebook/agentClient.js +13 -6
  4. package/dist/bin/forgebook/agentGuide.d.ts +59 -0
  5. package/dist/bin/forgebook/agentGuide.js +203 -0
  6. package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
  7. package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
  8. package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
  9. package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
  10. package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
  11. package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
  12. package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
  13. package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
  14. package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
  15. package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
  16. package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
  17. package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
  18. package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
  19. package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
  20. package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
  21. package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
  22. package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
  23. package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
  24. package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
  25. package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
  26. package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
  27. package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
  28. package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
  29. package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
  30. package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
  31. package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
  32. package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
  33. package/dist/bin/forgebook/agentText.d.ts +23 -3
  34. package/dist/bin/forgebook/agentText.js +182 -28
  35. package/dist/bin/forgebook/agents.md +20 -191
  36. package/dist/bin/forgebook/agentsText.js +2 -1
  37. package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
  38. package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
  39. package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
  40. package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
  41. package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
  42. package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
  43. package/dist/bin/forgebook/auditCommand.d.mts +8 -0
  44. package/dist/bin/forgebook/auditCommand.mjs +75 -0
  45. package/dist/bin/forgebook/auditRun.d.ts +95 -0
  46. package/dist/bin/forgebook/auditRun.js +270 -0
  47. package/dist/bin/forgebook/browserRun.d.ts +21 -0
  48. package/dist/bin/forgebook/browserRun.js +57 -0
  49. package/dist/bin/forgebook/buildFailure.d.ts +7 -0
  50. package/dist/bin/forgebook/buildFailure.js +47 -0
  51. package/dist/bin/forgebook/buildWatch.d.ts +52 -0
  52. package/dist/bin/forgebook/buildWatch.js +137 -0
  53. package/dist/bin/forgebook/builtCatalogue.js +9 -5
  54. package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
  55. package/dist/bin/forgebook/catalogueCommands.js +23 -0
  56. package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
  57. package/dist/bin/forgebook/catalogueVite.js +14 -6
  58. package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
  59. package/dist/bin/forgebook/commandCacheClaim.js +170 -0
  60. package/dist/bin/forgebook/commandServer.d.ts +8 -0
  61. package/dist/bin/forgebook/commandServer.js +61 -13
  62. package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
  63. package/dist/bin/forgebook/graphCommand.d.mts +8 -0
  64. package/dist/bin/forgebook/graphCommand.mjs +84 -0
  65. package/dist/bin/forgebook/guide/commands.md +62 -0
  66. package/dist/bin/forgebook/guide/devices.md +17 -0
  67. package/dist/bin/forgebook/guide/docs-pages.md +13 -0
  68. package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
  69. package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
  70. package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
  71. package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
  72. package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
  73. package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
  74. package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
  75. package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
  76. package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
  77. package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
  78. package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
  79. package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
  80. package/dist/bin/forgebook/guide/links.md +29 -0
  81. package/dist/bin/forgebook/guide/setup.md +23 -0
  82. package/dist/bin/forgebook/guide/stories.md +95 -0
  83. package/dist/bin/forgebook/guide/switches.md +43 -0
  84. package/dist/bin/forgebook/guideCommand.d.mts +13 -0
  85. package/dist/bin/forgebook/guideCommand.mjs +37 -0
  86. package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
  87. package/dist/bin/forgebook/importers/storybook.js +11 -5
  88. package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
  89. package/dist/bin/forgebook/initCommands.d.mts +11 -0
  90. package/dist/bin/forgebook/initCommands.mjs +51 -78
  91. package/dist/bin/forgebook/initConfig.d.ts +5 -3
  92. package/dist/bin/forgebook/initConfig.js +6 -3
  93. package/dist/bin/forgebook/initInstall.d.ts +15 -0
  94. package/dist/bin/forgebook/initInstall.js +77 -0
  95. package/dist/bin/forgebook/initPrint.d.ts +9 -0
  96. package/dist/bin/forgebook/initPrint.js +60 -0
  97. package/dist/bin/forgebook/initRefusals.d.ts +45 -0
  98. package/dist/bin/forgebook/initRefusals.js +91 -0
  99. package/dist/bin/forgebook/initRun.d.ts +28 -0
  100. package/dist/bin/forgebook/initRun.js +311 -0
  101. package/dist/bin/forgebook/mcpCommand.mjs +38 -4
  102. package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
  103. package/dist/bin/forgebook/mcpGraph.js +24 -0
  104. package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
  105. package/dist/bin/forgebook/mcpTokens.js +58 -0
  106. package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
  107. package/dist/bin/forgebook/mcpToolParts.js +10 -0
  108. package/dist/bin/forgebook/mcpTools.d.ts +13 -6
  109. package/dist/bin/forgebook/mcpTools.js +57 -90
  110. package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
  111. package/dist/bin/forgebook/mcpVerify.js +36 -0
  112. package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
  113. package/dist/bin/forgebook/migrate/codemods.js +61 -0
  114. package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
  115. package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
  116. package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
  117. package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
  118. package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
  119. package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
  120. package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
  121. package/dist/bin/forgebook/migrate/migrateText.js +30 -0
  122. package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
  123. package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
  124. package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
  125. package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
  126. package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
  127. package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
  128. package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
  129. package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
  130. package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
  131. package/dist/bin/forgebook/newProject/newProject.js +180 -0
  132. package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
  133. package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
  134. package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
  135. package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
  136. package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
  137. package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
  138. package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
  139. package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
  140. package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
  141. package/dist/bin/forgebook/newProject/projectLook.js +293 -0
  142. package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
  143. package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
  144. package/dist/bin/forgebook/newRepair.d.ts +45 -0
  145. package/dist/bin/forgebook/newRepair.js +157 -0
  146. package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
  147. package/dist/bin/forgebook/newRepairRun.js +148 -0
  148. package/dist/bin/forgebook/newStories.d.ts +23 -1
  149. package/dist/bin/forgebook/newStories.js +101 -11
  150. package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
  151. package/dist/bin/forgebook/newStoriesFile.js +43 -4
  152. package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
  153. package/dist/bin/forgebook/prebundleRun.js +28 -8
  154. package/dist/bin/forgebook/proofCommand.d.mts +15 -0
  155. package/dist/bin/forgebook/proofCommand.mjs +212 -0
  156. package/dist/bin/forgebook/proofRun.d.ts +63 -0
  157. package/dist/bin/forgebook/proofRun.js +412 -0
  158. package/dist/bin/forgebook/proofText.d.ts +36 -0
  159. package/dist/bin/forgebook/proofText.js +131 -0
  160. package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
  161. package/dist/bin/forgebook/proofWorkflow.js +205 -0
  162. package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
  163. package/dist/bin/forgebook/setArgsTool.js +70 -0
  164. package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
  165. package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
  166. package/dist/bin/forgebook/storyCheckRun.js +83 -9
  167. package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
  168. package/dist/bin/forgebook/storyFileIds.js +14 -0
  169. package/dist/bin/forgebook/stressCases.d.ts +31 -0
  170. package/dist/bin/forgebook/stressCases.js +79 -0
  171. package/dist/bin/forgebook/stressRun.d.ts +12 -0
  172. package/dist/bin/forgebook/stressRun.js +61 -0
  173. package/dist/bin/forgebook/stressText.d.ts +27 -0
  174. package/dist/bin/forgebook/stressText.js +46 -0
  175. package/dist/bin/forgebook/verifyBase.d.ts +45 -0
  176. package/dist/bin/forgebook/verifyBase.js +204 -0
  177. package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
  178. package/dist/bin/forgebook/verifyCommand.mjs +125 -0
  179. package/dist/bin/forgebook/verifyRun.d.ts +63 -0
  180. package/dist/bin/forgebook/verifyRun.js +108 -0
  181. package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
  182. package/dist/bin/forgebook/verifyVerdict.js +323 -0
  183. package/dist/bin/forgebook/workflowActions.d.ts +23 -0
  184. package/dist/bin/forgebook/workflowActions.js +23 -0
  185. package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
  186. package/dist/src/addressArgs.d.ts +29 -5
  187. package/dist/src/addressArgs.js +58 -16
  188. package/dist/src/addressArgsParam.d.ts +54 -0
  189. package/dist/src/addressArgsParam.js +51 -0
  190. package/dist/src/addressTexts.d.ts +14 -0
  191. package/dist/src/addressTexts.js +28 -21
  192. package/dist/src/agentIndexFile.d.ts +11 -0
  193. package/dist/src/agentIndexFile.js +11 -0
  194. package/dist/src/argConditions.d.ts +52 -0
  195. package/dist/src/argConditions.js +80 -0
  196. package/dist/src/argControl.d.ts +148 -0
  197. package/dist/src/argControl.js +0 -0
  198. package/dist/src/argExpression.d.ts +21 -0
  199. package/dist/src/argExpression.js +30 -0
  200. package/dist/src/argTypes.d.ts +40 -51
  201. package/dist/src/argTypes.js +69 -185
  202. package/dist/src/argsProps.d.ts +3 -3
  203. package/dist/src/argsProps.js +11 -5
  204. package/dist/src/bundlerErrors.d.ts +29 -0
  205. package/dist/src/bundlerErrors.js +49 -0
  206. package/dist/src/catalogue.d.ts +31 -0
  207. package/dist/src/catalogue.js +13 -2
  208. package/dist/src/catalogueRefs.d.ts +75 -0
  209. package/dist/src/catalogueRefs.js +122 -0
  210. package/dist/src/componentDocs.d.ts +83 -0
  211. package/dist/src/componentDocs.js +20 -3
  212. package/dist/src/controlCode.d.ts +27 -0
  213. package/dist/src/controlCode.js +41 -0
  214. package/dist/src/frame/callValues.d.ts +19 -0
  215. package/dist/src/frame/callValues.js +58 -0
  216. package/dist/src/frame/canvasScheme.d.ts +33 -0
  217. package/dist/src/frame/canvasScheme.js +67 -0
  218. package/dist/src/frame/controlValues.d.ts +39 -0
  219. package/dist/src/frame/controlValues.js +143 -0
  220. package/dist/src/frame/frame.css +36 -3
  221. package/dist/src/frame/frameStatus.d.ts +16 -1
  222. package/dist/src/frame/frameStatus.js +16 -1
  223. package/dist/src/frame/frameView.js +4 -3
  224. package/dist/src/frame/mountFrame.d.ts +10 -1
  225. package/dist/src/frame/mountFrame.js +160 -55
  226. package/dist/src/frame/panelControls.d.ts +67 -0
  227. package/dist/src/frame/panelControls.js +110 -0
  228. package/dist/src/frame/panelValues.d.ts +35 -0
  229. package/dist/src/frame/panelValues.js +127 -0
  230. package/dist/src/frame/playActions.d.ts +39 -0
  231. package/dist/src/frame/playActions.js +98 -0
  232. package/dist/src/frame/playStepper.d.ts +28 -0
  233. package/dist/src/frame/playStepper.js +38 -0
  234. package/dist/src/frame/playStory.d.ts +9 -1
  235. package/dist/src/frame/playStory.js +49 -3
  236. package/dist/src/frame/renderer.d.ts +34 -1
  237. package/dist/src/frame/renderer.js +24 -0
  238. package/dist/src/frame/shellChannel.d.ts +1 -1
  239. package/dist/src/frame/shellChannel.js +1 -1
  240. package/dist/src/frame/shellCheck.d.ts +17 -0
  241. package/dist/src/frame/shellCheck.js +25 -0
  242. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  243. package/dist/src/frame/shellMessageCheck.js +53 -0
  244. package/dist/src/frame/storyContent.d.ts +50 -0
  245. package/dist/src/frame/storyContent.js +73 -0
  246. package/dist/src/frame/storyModule.d.ts +9 -0
  247. package/dist/src/frame/storyModule.js +20 -2
  248. package/dist/src/frame/storyRun.d.ts +15 -7
  249. package/dist/src/frame/storyRun.js +64 -15
  250. package/dist/src/frame/valueSheets.d.ts +35 -0
  251. package/dist/src/frame/valueSheets.js +99 -0
  252. package/dist/src/hotModules.d.ts +20 -0
  253. package/dist/src/hotModules.js +23 -0
  254. package/dist/src/jsxCode.d.ts +1 -14
  255. package/dist/src/jsxCode.js +46 -10
  256. package/dist/src/liveErrors.d.ts +30 -4
  257. package/dist/src/liveErrors.js +18 -3
  258. package/dist/src/messages.d.ts +77 -27
  259. package/dist/src/messages.js +58 -100
  260. package/dist/src/namedValues.d.ts +2 -26
  261. package/dist/src/namedValues.js +0 -47
  262. package/dist/src/pageConfig.d.ts +2 -0
  263. package/dist/src/playTrace.d.ts +19 -2
  264. package/dist/src/playTrace.js +10 -5
  265. package/dist/src/plugin.d.ts +10 -3
  266. package/dist/src/previewRelay.js +9 -1
  267. package/dist/src/printable.d.ts +12 -0
  268. package/dist/src/printable.js +22 -0
  269. package/dist/src/propsSignature.d.ts +37 -0
  270. package/dist/src/propsSignature.js +40 -0
  271. package/dist/src/search.d.ts +41 -5
  272. package/dist/src/search.js +93 -23
  273. package/dist/src/searchMatch.d.ts +4 -1
  274. package/dist/src/searchMatch.js +26 -5
  275. package/dist/src/searchTypos.d.ts +88 -0
  276. package/dist/src/searchTypos.js +178 -0
  277. package/dist/src/shapeValues.d.ts +86 -0
  278. package/dist/src/shapeValues.js +295 -0
  279. package/dist/src/shell/ApiReference.js +6 -3
  280. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  281. package/dist/src/shell/ApiTableBox.js +11 -0
  282. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  283. package/dist/src/shell/AppearanceMenu.js +9 -6
  284. package/dist/src/shell/AuthoredHome.js +3 -1
  285. package/dist/src/shell/CodeTab.d.ts +12 -6
  286. package/dist/src/shell/CodeTab.js +47 -3
  287. package/dist/src/shell/CodeText.d.ts +1 -1
  288. package/dist/src/shell/CodeText.js +2 -3
  289. package/dist/src/shell/CompareGrid.js +1 -1
  290. package/dist/src/shell/ComponentPage.d.ts +6 -6
  291. package/dist/src/shell/ComponentPage.js +8 -2
  292. package/dist/src/shell/CustomControl.d.ts +34 -0
  293. package/dist/src/shell/CustomControl.js +125 -0
  294. package/dist/src/shell/DocContainers.js +1 -1
  295. package/dist/src/shell/DocPage.js +2 -2
  296. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  297. package/dist/src/shell/DroppedArgsList.js +1 -1
  298. package/dist/src/shell/EmbedPage.js +30 -12
  299. package/dist/src/shell/Example.d.ts +5 -1
  300. package/dist/src/shell/Example.js +16 -8
  301. package/dist/src/shell/FrameView.d.ts +6 -3
  302. package/dist/src/shell/FrameView.js +2 -2
  303. package/dist/src/shell/HomePage.d.ts +3 -1
  304. package/dist/src/shell/HomePage.js +18 -6
  305. package/dist/src/shell/InfoTip.js +2 -2
  306. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  307. package/dist/src/shell/InteractionsTab.js +18 -2
  308. package/dist/src/shell/LazyPage.js +1 -1
  309. package/dist/src/shell/PackageHtml.js +3 -1
  310. package/dist/src/shell/PageWidth.d.ts +29 -0
  311. package/dist/src/shell/PageWidth.js +18 -0
  312. package/dist/src/shell/PinnedControl.js +14 -62
  313. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  314. package/dist/src/shell/PinnedControlMenu.js +72 -0
  315. package/dist/src/shell/PropFields.d.ts +3 -1
  316. package/dist/src/shell/PropFields.js +9 -6
  317. package/dist/src/shell/PropRows.d.ts +22 -11
  318. package/dist/src/shell/PropRows.js +62 -24
  319. package/dist/src/shell/PropsTab.d.ts +12 -5
  320. package/dist/src/shell/PropsTab.js +9 -22
  321. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  322. package/dist/src/shell/RefStoryPage.js +123 -0
  323. package/dist/src/shell/SearchPanel.js +51 -24
  324. package/dist/src/shell/Shell.d.ts +18 -0
  325. package/dist/src/shell/Shell.js +141 -23
  326. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  327. package/dist/src/shell/ShortcutHelp.js +66 -0
  328. package/dist/src/shell/Sidebar.d.ts +17 -4
  329. package/dist/src/shell/Sidebar.js +92 -41
  330. package/dist/src/shell/SidebarDocs.js +2 -2
  331. package/dist/src/shell/SidebarEntries.js +5 -3
  332. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  333. package/dist/src/shell/SidebarHandle.js +4 -4
  334. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  335. package/dist/src/shell/SidebarRefs.js +99 -0
  336. package/dist/src/shell/SidebarSearch.js +37 -9
  337. package/dist/src/shell/SignatureReference.js +3 -1
  338. package/dist/src/shell/Stage.d.ts +10 -2
  339. package/dist/src/shell/Stage.js +29 -49
  340. package/dist/src/shell/StatusBadges.d.ts +54 -0
  341. package/dist/src/shell/StatusBadges.js +77 -0
  342. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  343. package/dist/src/shell/StoryCodeBlock.js +7 -6
  344. package/dist/src/shell/StoryPicker.d.ts +4 -2
  345. package/dist/src/shell/StoryPicker.js +3 -3
  346. package/dist/src/shell/Switch.d.ts +29 -0
  347. package/dist/src/shell/Switch.js +11 -0
  348. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  349. package/dist/src/shell/SwitchGallery.js +17 -0
  350. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  351. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  352. package/dist/src/shell/TagFilter.d.ts +24 -0
  353. package/dist/src/shell/TagFilter.js +45 -0
  354. package/dist/src/shell/TagViews.d.ts +39 -0
  355. package/dist/src/shell/TagViews.js +20 -0
  356. package/dist/src/shell/Toolbar.d.ts +4 -1
  357. package/dist/src/shell/Toolbar.js +17 -7
  358. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  359. package/dist/src/shell/ToolbarControl.js +23 -6
  360. package/dist/src/shell/ViewMenuPanel.js +6 -1
  361. package/dist/src/shell/argChecks.d.ts +22 -0
  362. package/dist/src/shell/argChecks.js +20 -0
  363. package/dist/src/shell/asideStory.js +7 -2
  364. package/dist/src/shell/audienceSections.css +9 -9
  365. package/dist/src/shell/catalogueContext.d.ts +1 -1
  366. package/dist/src/shell/catalogueContext.js +6 -1
  367. package/dist/src/shell/codeSpans.d.ts +27 -0
  368. package/dist/src/shell/codeSpans.js +76 -0
  369. package/dist/src/shell/compareVariants.d.ts +4 -2
  370. package/dist/src/shell/compareVariants.js +16 -8
  371. package/dist/src/shell/composition.d.ts +23 -0
  372. package/dist/src/shell/composition.js +26 -0
  373. package/dist/src/shell/controlCycle.d.ts +1 -1
  374. package/dist/src/shell/controlCycle.js +3 -2
  375. package/dist/src/shell/customControls.d.ts +62 -0
  376. package/dist/src/shell/customControls.js +81 -0
  377. package/dist/src/shell/docPage.css +22 -22
  378. package/dist/src/shell/dockTabs.d.ts +19 -3
  379. package/dist/src/shell/dockTabs.js +29 -20
  380. package/dist/src/shell/embed.css +7 -7
  381. package/dist/src/shell/frameOrder.d.ts +35 -0
  382. package/dist/src/shell/frameOrder.js +45 -0
  383. package/dist/src/shell/framesOrigin.d.ts +7 -0
  384. package/dist/src/shell/framesOrigin.js +1 -1
  385. package/dist/src/shell/galleryPlace.d.ts +20 -0
  386. package/dist/src/shell/galleryPlace.js +26 -0
  387. package/dist/src/shell/icons.d.ts +1 -0
  388. package/dist/src/shell/icons.js +1 -0
  389. package/dist/src/shell/keyboard.d.ts +14 -12
  390. package/dist/src/shell/keyboard.js +21 -6
  391. package/dist/src/shell/laterStrings.d.ts +30 -0
  392. package/dist/src/shell/laterStrings.js +43 -3
  393. package/dist/src/shell/mountShell.js +3 -0
  394. package/dist/src/shell/pageStrings.d.ts +4 -0
  395. package/dist/src/shell/pageStrings.js +4 -0
  396. package/dist/src/shell/pageTagView.d.ts +18 -0
  397. package/dist/src/shell/pageTagView.js +10 -0
  398. package/dist/src/shell/playMemory.d.ts +14 -0
  399. package/dist/src/shell/playMemory.js +8 -0
  400. package/dist/src/shell/propNotes.d.ts +23 -0
  401. package/dist/src/shell/propNotes.js +37 -0
  402. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  403. package/dist/src/shell/refIndexLoad.js +38 -0
  404. package/dist/src/shell/refParts.d.ts +34 -0
  405. package/dist/src/shell/refParts.js +9 -0
  406. package/dist/src/shell/refStory.css +21 -0
  407. package/dist/src/shell/refStrings.d.ts +13 -0
  408. package/dist/src/shell/refStrings.js +21 -0
  409. package/dist/src/shell/search.css +11 -11
  410. package/dist/src/shell/shell.css +376 -169
  411. package/dist/src/shell/shellScheme.js +2 -2
  412. package/dist/src/shell/shortcutHelp.css +64 -0
  413. package/dist/src/shell/stageArgs.d.ts +53 -0
  414. package/dist/src/shell/stageArgs.js +64 -0
  415. package/dist/src/shell/statusBadges.css +51 -0
  416. package/dist/src/shell/strings.d.ts +7 -16
  417. package/dist/src/shell/strings.js +12 -17
  418. package/dist/src/shell/switchGallery.css +104 -0
  419. package/dist/src/shell/tagFilter.css +46 -0
  420. package/dist/src/shell/tagView.d.ts +20 -0
  421. package/dist/src/shell/tagView.js +10 -0
  422. package/dist/src/shell/useAddressArgs.d.ts +9 -0
  423. package/dist/src/shell/useAddressArgs.js +56 -11
  424. package/dist/src/shell/useControlKeys.js +2 -2
  425. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  426. package/dist/src/shell/useEditedProblems.js +40 -0
  427. package/dist/src/shell/useFrameMessages.js +3 -0
  428. package/dist/src/shell/useFrameQueue.d.ts +8 -3
  429. package/dist/src/shell/useFrameQueue.js +42 -12
  430. package/dist/src/shell/useListedTree.d.ts +13 -0
  431. package/dist/src/shell/useListedTree.js +32 -0
  432. package/dist/src/shell/usePageFrames.js +2 -2
  433. package/dist/src/shell/usePopover.d.ts +5 -0
  434. package/dist/src/shell/usePopover.js +7 -1
  435. package/dist/src/shell/useRefIndex.d.ts +22 -0
  436. package/dist/src/shell/useRefIndex.js +36 -0
  437. package/dist/src/shell/useScrollSettled.d.ts +18 -0
  438. package/dist/src/shell/useScrollSettled.js +56 -0
  439. package/dist/src/shell/useScrollStops.d.ts +20 -0
  440. package/dist/src/shell/useScrollStops.js +41 -0
  441. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  442. package/dist/src/shell/useShortcutHelp.js +32 -0
  443. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  444. package/dist/src/shell/useSidebarOverlay.js +12 -4
  445. package/dist/src/shell/useStoryCode.d.ts +2 -1
  446. package/dist/src/shell/useStoryCode.js +12 -7
  447. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  448. package/dist/src/shell/useToolbarLayout.js +2 -2
  449. package/dist/src/shell/useWorstCase.d.ts +8 -2
  450. package/dist/src/shell/useWorstCase.js +2 -2
  451. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  452. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  453. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  454. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  455. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  456. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  457. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  458. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  459. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  460. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  461. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  462. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  463. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  464. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  465. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  466. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  467. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  468. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  469. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  470. package/dist/src/shell/valueEditors/ValueField.js +148 -0
  471. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  472. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  473. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  474. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  475. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  476. package/dist/src/shell/worstArgs.d.ts +8 -5
  477. package/dist/src/shell/worstArgs.js +14 -7
  478. package/dist/src/shellTheme.d.ts +1 -1
  479. package/dist/src/shellTheme.js +15 -1
  480. package/dist/src/shellTheme.types.d.ts +4 -0
  481. package/dist/src/shellWord.d.ts +12 -0
  482. package/dist/src/shellWord.js +15 -0
  483. package/dist/src/sourceFiles.js +2 -1
  484. package/dist/src/storyArgTypes.d.ts +57 -0
  485. package/dist/src/storyArgTypes.js +195 -0
  486. package/dist/src/storyBackground.js +14 -3
  487. package/dist/src/storyCheck.d.ts +99 -3
  488. package/dist/src/storyCheck.js +39 -1
  489. package/dist/src/storyCodeText.d.ts +52 -0
  490. package/dist/src/storyCodeText.js +30 -0
  491. package/dist/src/storyControls.d.ts +103 -0
  492. package/dist/src/storyControls.js +100 -0
  493. package/dist/src/storyStatuses.d.ts +55 -0
  494. package/dist/src/storyStatuses.js +104 -0
  495. package/dist/src/storyTagNames.d.ts +25 -0
  496. package/dist/src/storyTagNames.js +25 -0
  497. package/dist/src/storyTags.d.ts +29 -0
  498. package/dist/src/storyTags.js +85 -0
  499. package/dist/src/storyTree.d.ts +13 -0
  500. package/dist/src/storyTree.js +24 -4
  501. package/dist/src/storybookArgs.d.ts +24 -0
  502. package/dist/src/storybookArgs.js +185 -0
  503. package/dist/src/switches.d.ts +66 -3
  504. package/dist/src/switches.js +42 -1
  505. package/dist/src/valueSchema.d.ts +28 -0
  506. package/dist/src/valueSchema.js +196 -0
  507. package/dist/src/valueShape.d.ts +94 -0
  508. package/dist/src/valueShape.js +25 -0
  509. package/dist/src/viewState.d.ts +8 -3
  510. package/dist/src/viewState.js +27 -10
  511. package/dist/src/vite/adapter.d.ts +40 -2
  512. package/dist/src/vite/adapter.js +1 -0
  513. package/dist/src/vite/agent.types.d.ts +354 -7
  514. package/dist/src/vite/agentApi.d.ts +23 -0
  515. package/dist/src/vite/agentApi.js +90 -17
  516. package/dist/src/vite/agentIndex.d.ts +0 -2
  517. package/dist/src/vite/agentIndex.js +5 -6
  518. package/dist/src/vite/agentRoutes.d.ts +20 -1
  519. package/dist/src/vite/agentRoutes.js +135 -66
  520. package/dist/src/vite/agentStatuses.d.ts +42 -0
  521. package/dist/src/vite/agentStatuses.js +67 -0
  522. package/dist/src/vite/agentStoryCode.d.ts +51 -0
  523. package/dist/src/vite/agentStoryCode.js +44 -0
  524. package/dist/src/vite/agentVisibility.d.ts +47 -0
  525. package/dist/src/vite/agentVisibility.js +174 -0
  526. package/dist/src/vite/appAudit.d.ts +134 -0
  527. package/dist/src/vite/appAudit.js +333 -0
  528. package/dist/src/vite/appBuildOption.d.ts +53 -0
  529. package/dist/src/vite/appBuildOption.js +55 -0
  530. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  531. package/dist/src/vite/appTokenFiles.js +433 -0
  532. package/dist/src/vite/appTokens.d.ts +23 -0
  533. package/dist/src/vite/appTokens.js +275 -0
  534. package/dist/src/vite/argControlsConfig.d.ts +30 -0
  535. package/dist/src/vite/argControlsConfig.js +176 -0
  536. package/dist/src/vite/builtTexts.d.ts +10 -0
  537. package/dist/src/vite/builtTexts.js +59 -22
  538. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  539. package/dist/src/vite/catalogueConfig.js +21 -4
  540. package/dist/src/vite/changeCoverage.d.ts +74 -0
  541. package/dist/src/vite/changeCoverage.js +120 -0
  542. package/dist/src/vite/changedRoute.d.ts +30 -0
  543. package/dist/src/vite/changedRoute.js +197 -0
  544. package/dist/src/vite/checkCode.d.ts +105 -3
  545. package/dist/src/vite/checkCode.js +323 -36
  546. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  547. package/dist/src/vite/checkoutWatch.js +287 -0
  548. package/dist/src/vite/closeWatch.d.ts +8 -0
  549. package/dist/src/vite/closeWatch.js +1 -1
  550. package/dist/src/vite/componentCache.d.ts +8 -0
  551. package/dist/src/vite/componentCache.js +66 -0
  552. package/dist/src/vite/componentGraph.d.ts +71 -0
  553. package/dist/src/vite/componentGraph.js +133 -0
  554. package/dist/src/vite/componentRules.d.ts +33 -0
  555. package/dist/src/vite/componentRules.js +105 -0
  556. package/dist/src/vite/componentScan.d.ts +69 -0
  557. package/dist/src/vite/componentScan.js +418 -0
  558. package/dist/src/vite/compositionCheck.d.ts +15 -0
  559. package/dist/src/vite/compositionCheck.js +243 -0
  560. package/dist/src/vite/config.d.ts +67 -1
  561. package/dist/src/vite/configFile.d.ts +15 -2
  562. package/dist/src/vite/configFile.js +109 -40
  563. package/dist/src/vite/configKeys.d.ts +15 -0
  564. package/dist/src/vite/configKeys.js +172 -0
  565. package/dist/src/vite/configLoadError.d.ts +23 -0
  566. package/dist/src/vite/configLoadError.js +71 -0
  567. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  568. package/dist/src/vite/cssDeclarations.js +290 -0
  569. package/dist/src/vite/cssImports.d.ts +14 -0
  570. package/dist/src/vite/cssImports.js +48 -0
  571. package/dist/src/vite/cssReferences.d.ts +54 -0
  572. package/dist/src/vite/cssReferences.js +157 -0
  573. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  574. package/dist/src/vite/cssTokenValues.js +233 -0
  575. package/dist/src/vite/designTokens.d.ts +24 -0
  576. package/dist/src/vite/designTokens.js +5 -1
  577. package/dist/src/vite/docsExtractor.d.ts +9 -3
  578. package/dist/src/vite/docsExtractor.js +11 -3
  579. package/dist/src/vite/docsProgram.d.ts +17 -4
  580. package/dist/src/vite/docsProgram.js +52 -11
  581. package/dist/src/vite/docsWorker.js +7 -2
  582. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  583. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  584. package/dist/src/vite/fileImports.d.ts +17 -0
  585. package/dist/src/vite/fileImports.js +57 -0
  586. package/dist/src/vite/findComponent.d.ts +10 -2
  587. package/dist/src/vite/findComponent.js +27 -22
  588. package/dist/src/vite/findRoute.js +3 -2
  589. package/dist/src/vite/forcedStates.d.ts +9 -2
  590. package/dist/src/vite/forcedStates.js +12 -3
  591. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  592. package/dist/src/vite/forgebookPlugin.js +55 -73
  593. package/dist/src/vite/frameErrors.d.ts +19 -0
  594. package/dist/src/vite/frameErrors.js +70 -0
  595. package/dist/src/vite/framesServer.d.ts +12 -0
  596. package/dist/src/vite/framesServer.js +21 -4
  597. package/dist/src/vite/functionComponentDocs.js +81 -12
  598. package/dist/src/vite/generatedModules.js +4 -2
  599. package/dist/src/vite/gitChange.d.ts +38 -5
  600. package/dist/src/vite/gitChange.js +71 -11
  601. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  602. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  603. package/dist/src/vite/hotSnippets.d.ts +38 -14
  604. package/dist/src/vite/hotSnippets.js +137 -39
  605. package/dist/src/vite/importedNames.d.ts +37 -0
  606. package/dist/src/vite/importedNames.js +138 -0
  607. package/dist/src/vite/indexFields.d.ts +6 -0
  608. package/dist/src/vite/indexFields.js +21 -0
  609. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  610. package/dist/src/vite/indexStoryFile.js +22 -157
  611. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  612. package/dist/src/vite/jsxCallSites.js +200 -0
  613. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  614. package/dist/src/vite/jsxInScripts.js +138 -0
  615. package/dist/src/vite/jsxTree.d.ts +20 -0
  616. package/dist/src/vite/jsxTree.js +163 -0
  617. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  618. package/dist/src/vite/lineAndColumn.js +18 -0
  619. package/dist/src/vite/lookAlikes.d.ts +65 -0
  620. package/dist/src/vite/lookAlikes.js +228 -0
  621. package/dist/src/vite/nearestToken.d.ts +17 -0
  622. package/dist/src/vite/nearestToken.js +9 -2
  623. package/dist/src/vite/packageEntries.d.ts +42 -0
  624. package/dist/src/vite/packageEntries.js +127 -0
  625. package/dist/src/vite/pages.d.ts +9 -1
  626. package/dist/src/vite/pages.js +119 -4
  627. package/dist/src/vite/pluginConfig.js +4 -0
  628. package/dist/src/vite/pluginIds.d.ts +2 -0
  629. package/dist/src/vite/pluginIds.js +5 -1
  630. package/dist/src/vite/pluginModules.d.ts +81 -11
  631. package/dist/src/vite/pluginModules.js +109 -21
  632. package/dist/src/vite/prebundled.d.ts +57 -15
  633. package/dist/src/vite/prebundled.js +80 -0
  634. package/dist/src/vite/previewTags.d.ts +25 -0
  635. package/dist/src/vite/previewTags.js +56 -0
  636. package/dist/src/vite/projectFiles.d.ts +54 -0
  637. package/dist/src/vite/projectFiles.js +116 -0
  638. package/dist/src/vite/projectPostcss.d.ts +70 -0
  639. package/dist/src/vite/projectPostcss.js +250 -0
  640. package/dist/src/vite/propDocs.d.ts +12 -0
  641. package/dist/src/vite/propDocs.js +187 -60
  642. package/dist/src/vite/propKind.d.ts +40 -0
  643. package/dist/src/vite/propKind.js +71 -0
  644. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  645. package/dist/src/vite/propTypeNotes.js +51 -0
  646. package/dist/src/vite/publishedExports.d.ts +27 -0
  647. package/dist/src/vite/publishedExports.js +298 -0
  648. package/dist/src/vite/realFolder.d.ts +6 -0
  649. package/dist/src/vite/realFolder.js +25 -0
  650. package/dist/src/vite/refsConfig.d.ts +39 -0
  651. package/dist/src/vite/refsConfig.js +54 -0
  652. package/dist/src/vite/reuseCheck.d.ts +45 -0
  653. package/dist/src/vite/reuseCheck.js +260 -0
  654. package/dist/src/vite/runningVersions.d.ts +33 -0
  655. package/dist/src/vite/runningVersions.js +25 -0
  656. package/dist/src/vite/scriptProblems.d.ts +60 -0
  657. package/dist/src/vite/scriptProblems.js +155 -0
  658. package/dist/src/vite/searchModule.js +3 -2
  659. package/dist/src/vite/searchRoute.js +4 -2
  660. package/dist/src/vite/shapeDocs.d.ts +36 -0
  661. package/dist/src/vite/shapeDocs.js +177 -0
  662. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  663. package/dist/src/vite/singleFileComponent.js +83 -0
  664. package/dist/src/vite/sourceText.d.ts +34 -0
  665. package/dist/src/vite/sourceText.js +72 -0
  666. package/dist/src/vite/sourceTokens.d.ts +7 -0
  667. package/dist/src/vite/sourceTokens.js +7 -2
  668. package/dist/src/vite/stackLines.d.ts +49 -0
  669. package/dist/src/vite/stackLines.js +96 -0
  670. package/dist/src/vite/storyCode.d.ts +22 -7
  671. package/dist/src/vite/storyCode.js +263 -37
  672. package/dist/src/vite/storyCoverage.d.ts +48 -0
  673. package/dist/src/vite/storyCoverage.js +179 -0
  674. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  675. package/dist/src/vite/storyFilesModule.js +105 -15
  676. package/dist/src/vite/storyPatterns.d.ts +31 -0
  677. package/dist/src/vite/storyPatterns.js +140 -5
  678. package/dist/src/vite/storyReach.d.ts +10 -2
  679. package/dist/src/vite/storyReach.js +15 -11
  680. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  681. package/dist/src/vite/storyTopLevel.js +146 -0
  682. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  683. package/dist/src/vite/storylessRoutes.js +210 -19
  684. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  685. package/dist/src/vite/switchValuesCheck.js +164 -0
  686. package/dist/src/vite/switchesDocument.d.ts +15 -0
  687. package/dist/src/vite/switchesDocument.js +47 -0
  688. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  689. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  690. package/dist/src/vite/textImports.d.ts +15 -0
  691. package/dist/src/vite/textImports.js +58 -0
  692. package/dist/src/vite/textModules.d.ts +6 -5
  693. package/dist/src/vite/textModules.js +13 -8
  694. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  695. package/dist/src/vite/tokenAnswers.js +11 -7
  696. package/dist/src/vite/typeParameters.d.ts +83 -0
  697. package/dist/src/vite/typeParameters.js +270 -0
  698. package/dist/src/vite/typedControls.d.ts +31 -0
  699. package/dist/src/vite/typedControls.js +66 -0
  700. package/dist/src/vite/unionProps.d.ts +37 -0
  701. package/dist/src/vite/unionProps.js +121 -0
  702. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  703. package/dist/src/vite/unresolvedTokens.js +193 -0
  704. package/dist/src/vite/usageGraph.js +10 -52
  705. package/dist/src/vite/usageGuidance.d.ts +9 -2
  706. package/dist/src/vite/usageGuidance.js +36 -8
  707. package/dist/src/vite/usageImports.d.ts +35 -0
  708. package/dist/src/vite/usageImports.js +280 -0
  709. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  710. package/dist/src/vite/visibilityRoute.js +320 -0
  711. package/dist/src/worstCase.d.ts +2 -0
  712. package/dist/src/worstCase.js +2 -0
  713. package/package.json +28 -8
@@ -0,0 +1,275 @@
1
+ /**
2
+ * The design system an application already has, read from its files with nothing written for it: custom properties,
3
+ * Tailwind's `@theme` and configuration, and what shadcn's `components.json` points at.
4
+ *
5
+ * @remarks
6
+ * Nobody writes a tokens file for a catalogue they did not ask for, and an agent that finds no tokens writes colours by
7
+ * hand, so this is what a catalogue with no tokens file reads. No project code runs: the files are read as text
8
+ * (`appTokenFiles.ts`, `tailwindConfigTokens.ts`). Tailwind's default theme counts, since a project on Tailwind has it
9
+ * whether or not it writes any of its own, but it comes last in a list: it is not what makes this project's system.
10
+ *
11
+ * Later sources stand over earlier ones, and a difference between two files is a clash, reported as a tokens file's
12
+ * would be: other sheets, then the configuration, then the sheet `components.json` names.
13
+ *
14
+ * @module
15
+ */
16
+ import { realpathSync } from "node:fs";
17
+ import { dirname, relative } from "node:path";
18
+ import { packageFile, readConfigs, readSheets, shadcnConfig, smallFileText } from "./appTokenFiles.js";
19
+ import { readCssText } from "./cssDeclarations.js";
20
+ import { colorWrappers, resolvedTokens } from "./cssTokenValues.js";
21
+ import { readTailwindPalette } from "./tailwindConfigTokens.js";
22
+ import { tokenClashes } from "./tokenClashes.js";
23
+ import { unresolvedTokens } from "./unresolvedTokens.js";
24
+ /** A custom property's name, and no more. */
25
+ const TOKEN_NAME = /^--[\w.-]{1,100}$/;
26
+ /** Past this a value is not a token's, in characters. */
27
+ const LONGEST_TOKEN_VALUE = 500;
28
+ /** A block with this many custom properties is a system's root and not one component's variables. */
29
+ const SYSTEM_BLOCK = 12;
30
+ /** The steps of Tailwind's spacing scale that classes write, in units of its base. */
31
+ const SPACING_STEPS = [
32
+ 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56,
33
+ 60, 64, 72, 80, 96
34
+ ];
35
+ /** Tailwind 3's font sizes, which its configuration file does not list unless it changes them. */
36
+ const OLD_FONT_SIZES = {
37
+ xs: "0.75rem",
38
+ sm: "0.875rem",
39
+ base: "1rem",
40
+ lg: "1.125rem",
41
+ xl: "1.25rem",
42
+ "2xl": "1.5rem",
43
+ "3xl": "1.875rem",
44
+ "4xl": "2.25rem",
45
+ "5xl": "3rem",
46
+ "6xl": "3.75rem",
47
+ "7xl": "4.5rem",
48
+ "8xl": "6rem",
49
+ "9xl": "8rem"
50
+ };
51
+ /** Tailwind 3's radii. */
52
+ const OLD_RADII = {
53
+ sm: "0.125rem",
54
+ md: "0.375rem",
55
+ lg: "0.5rem",
56
+ xl: "0.75rem",
57
+ "2xl": "1rem",
58
+ "3xl": "1.5rem"
59
+ };
60
+ /** Plugins whose additions to the theme are not tokens worth saying they are unknown. */
61
+ const KNOWN_PLUGIN = /typography|forms|animate|container-queries|aspect-ratio/;
62
+ /** A path with forward slashes on every system, for an answer that travels. */
63
+ const toPosix = (path) => path.replaceAll("\\", "/");
64
+ /** Selectors holding enough custom properties to be a system's root, in a sheet. */
65
+ const systemSelectors = ({ declarations }) => {
66
+ const counts = new Map();
67
+ for (const { place } of declarations) {
68
+ if (place.kind === "selector")
69
+ counts.set(place.selector, (counts.get(place.selector) ?? 0) + 1);
70
+ }
71
+ return new Set([...counts].flatMap(([selector, count]) => count >= SYSTEM_BLOCK && /^[.#[][\w-]+\]?$/.test(selector) ? [selector] : []));
72
+ };
73
+ /** The kind and theme of a declaration read from a sheet, when it makes a token at all. */
74
+ const sheetToken = (place, system) => {
75
+ if (place.kind === "theme")
76
+ return { kind: "tailwind-theme", mode: undefined };
77
+ if (place.kind === "root")
78
+ return { kind: "css-variables", mode: undefined };
79
+ if (place.kind === "mode")
80
+ return { kind: "css-variables", mode: place.mode };
81
+ return place.kind === "selector" && system.has(place.selector)
82
+ ? { kind: "css-variables", mode: place.mode }
83
+ : undefined;
84
+ };
85
+ /**
86
+ * Whether a declaration is a token: not a framework's internals, a private variable or a way of clearing a namespace. A
87
+ * name is plain and a value short, since both reach an agent's context as its next step, and a file may be written by
88
+ * someone who wants that.
89
+ */
90
+ const isTokenName = (name) => TOKEN_NAME.test(name) && !name.startsWith("--tw-") && !name.startsWith("--_");
91
+ /** Whether a value is short enough to be a value. */
92
+ const isTokenValue = (value) => value !== "initial" && value.length <= LONGEST_TOKEN_VALUE;
93
+ /** The namespaces sheets clear (`--color-*: initial`), where Tailwind's defaults no longer apply. */
94
+ const clearedNamespaces = (sheets) => sheets.flatMap(({ reading }) => reading.declarations.flatMap(({ name, value }) => value === "initial" && name.endsWith("*") ? [name.slice(0, -1)] : []));
95
+ /** A sheet's declarations, in the shape tokens are made from. */
96
+ const sheetDeclarations = (dir, { file, reading }) => {
97
+ const system = systemSelectors(reading);
98
+ const label = toPosix(relative(dir, file));
99
+ return reading.declarations.flatMap(({ name, value, line, place }) => {
100
+ const token = sheetToken(place, system);
101
+ if (token === undefined || !isTokenName(name) || !isTokenValue(value))
102
+ return [];
103
+ return [
104
+ {
105
+ name,
106
+ value,
107
+ mode: token.mode,
108
+ origin: { kind: token.kind, file: label, line },
109
+ ...(place.kind === "selector" ? { isScoped: true } : {})
110
+ }
111
+ ];
112
+ });
113
+ };
114
+ /** Tailwind 4's default theme as declarations, when a sheet brings it in and it is installed. */
115
+ const themeDefaults = (sheets, cleared, unread) => {
116
+ const importing = sheets.find(({ reading }) => reading.importsTailwindTheme);
117
+ if (importing === undefined)
118
+ return [];
119
+ const file = packageFile(dirname(importing.file), "tailwindcss/theme.css");
120
+ const text = file === undefined ? undefined : smallFileText(file);
121
+ if (text === undefined) {
122
+ unread.push("Tailwind's default theme: tailwindcss is not installed here");
123
+ return [];
124
+ }
125
+ return readCssText(text).declarations.flatMap(({ name, value, line, place }) => place.kind === "theme" &&
126
+ isTokenName(name) &&
127
+ isTokenValue(value) &&
128
+ !cleared.some((prefix) => name.startsWith(prefix))
129
+ ? [{ name, value, mode: undefined, origin: { kind: "tailwind-default", file: "tailwindcss", line } }]
130
+ : []);
131
+ };
132
+ /** The spacing scale's steps as tokens: Tailwind makes them from one base, and classes write them. */
133
+ const spacingScale = (base, origin, declared) => SPACING_STEPS.flatMap((step) => {
134
+ const name = `--spacing-${step}`;
135
+ return declared.has(name)
136
+ ? []
137
+ : [{ name, value: `calc(${base} * ${step})`, mode: undefined, origin, type: "dimension" }];
138
+ });
139
+ /** Tailwind's published palette, read as text from the installed package; none when it is not there. */
140
+ const installedPalette = (dir) => {
141
+ const installed = packageFile(dir, "tailwindcss/lib/public/colors.js");
142
+ return installed === undefined ? undefined : readTailwindPalette(installed, smallFileText(installed) ?? "");
143
+ };
144
+ /** The colours a configuration takes from the palette by name: `brand: colors.blue` is a whole scale under `brand`. */
145
+ const paletteAliased = (aliases, palette, origin) => aliases.flatMap(({ name, palette: wanted }) => palette.flatMap(({ name: named, value, type }) => {
146
+ const full = `--color-${wanted}`;
147
+ if (named !== full && !named.startsWith(`${full}-`))
148
+ return [];
149
+ return [{ name: `${name}${named.slice(full.length)}`, value, mode: undefined, type, origin }];
150
+ }));
151
+ /** Tailwind's default palette and scale as declarations, for a project on a configuration file (before version 4). */
152
+ const configDefaults = (dir, configs, unread) => {
153
+ const replaced = new Set(configs.flatMap(({ reading }) => reading.replaced));
154
+ const palette = installedPalette(dir);
155
+ if (palette === undefined) {
156
+ unread.push("Tailwind's default palette: tailwindcss is not installed here");
157
+ return [];
158
+ }
159
+ const origin = { kind: "tailwind-default", file: "tailwindcss" };
160
+ const colors = replaced.has("colors")
161
+ ? []
162
+ : palette.map(({ name, value, type }) => ({ name, value, mode: undefined, type, origin }));
163
+ const scale = replaced.has("spacing") ? [] : spacingScale("0.25rem", origin, new Set());
164
+ const named = (prefix, values, key) => replaced.has(key)
165
+ ? []
166
+ : Object.entries(values).map(([name, value]) => ({
167
+ name: `${prefix}${name}`,
168
+ value,
169
+ mode: undefined,
170
+ type: "dimension",
171
+ origin
172
+ }));
173
+ return [
174
+ ...colors,
175
+ ...scale,
176
+ ...named("--text-", OLD_FONT_SIZES, "fontSize"),
177
+ ...named("--radius-", OLD_RADII, "borderRadius")
178
+ ];
179
+ };
180
+ /** A configuration's tokens as declarations. */
181
+ const configDeclarations = (dir, { file, reading }) => {
182
+ const origin = { kind: "tailwind-config", file: toPosix(relative(dir, file)) };
183
+ return [
184
+ ...paletteAliased(reading.paletteAliases, installedPalette(dirname(file)) ?? [], origin),
185
+ ...reading.tokens.map(({ name, value, type }) => ({ name, value, mode: undefined, type, origin }))
186
+ ].filter(({ name, value }) => isTokenName(name) && isTokenValue(value));
187
+ };
188
+ /** The clashes between files: each theme compared with itself. */
189
+ const clashesOf = (authors) => tokenClashes(authors.flatMap(({ label, declarations }) => [...new Set(declarations.map((each) => each.mode))].map((mode) => ({
190
+ mode,
191
+ raw: declarations
192
+ .filter((each) => each.mode === mode)
193
+ .map(({ name, value }) => ({ name, value, label, source: label }))
194
+ }))));
195
+ /** What the tokens came from, each file once with how many it gave. */
196
+ const sourcesOf = (tokens) => {
197
+ const counts = new Map();
198
+ for (const { origin } of tokens) {
199
+ if (origin === undefined)
200
+ continue;
201
+ const key = `${origin.kind}\0${origin.file}`;
202
+ const known = counts.get(key);
203
+ counts.set(key, { kind: origin.kind, file: origin.file, tokens: (known?.tokens ?? 0) + 1 });
204
+ }
205
+ return [...counts.values()];
206
+ };
207
+ /** Tailwind's defaults for a project, whichever version it is on, and the spacing scale over its own declarations. */
208
+ const defaultDeclarations = (dir, sheets, configs, own, unread) => {
209
+ const cleared = clearedNamespaces(sheets);
210
+ const hasTheme = sheets.some(({ reading }) => reading.importsTailwindTheme);
211
+ const isOnConfig = sheets.some(({ reading }) => reading.usesTailwindDirectives) || configs.length > 0;
212
+ if (!hasTheme) {
213
+ return isOnConfig ? configDefaults(dir, configs, unread) : [];
214
+ }
215
+ const defaults = themeDefaults(sheets, cleared, unread);
216
+ const base = [...defaults, ...own].findLast((each) => each.name === "--spacing" && each.mode === undefined);
217
+ const scale = base === undefined || cleared.includes("--spacing-")
218
+ ? []
219
+ : spacingScale(base.value, { kind: "tailwind-default", file: base.origin.file }, new Set(own.map((each) => each.name)));
220
+ return [...defaults, ...scale];
221
+ };
222
+ /**
223
+ * Reads what an application declares of its design system.
224
+ *
225
+ * @param folder - the catalogue's folder.
226
+ */
227
+ export const readAppTokens = (folder) => {
228
+ // a sheet's path comes back with its links followed, and the labels are relative to this
229
+ const dir = realpathSync(folder);
230
+ const unread = [];
231
+ const shadcn = shadcnConfig(dir);
232
+ const sheets = readSheets(dir, shadcn, unread);
233
+ const configs = readConfigs(dir, shadcn, sheets, unread);
234
+ for (const { file, reading } of configs) {
235
+ unread.push(...reading.unread.map((each) => `${toPosix(relative(dir, file))}: ${each}`));
236
+ }
237
+ for (const plugin of new Set(sheets.flatMap(({ reading }) => reading.plugins))) {
238
+ if (!KNOWN_PLUGIN.test(plugin))
239
+ unread.push(`Tailwind plugin ${plugin}: what it adds to the theme is known only by running it`);
240
+ }
241
+ const authorOf = (file, declarations) => ({
242
+ label: toPosix(relative(dir, file)),
243
+ declarations
244
+ });
245
+ const fromSheets = sheets.map((sheet) => authorOf(sheet.file, sheetDeclarations(dir, sheet)));
246
+ const named = shadcn?.css === undefined ? undefined : toPosix(relative(dir, shadcn.css));
247
+ const authors = [
248
+ ...fromSheets.filter(({ label }) => label !== named),
249
+ ...configs.map((config) => authorOf(config.file, configDeclarations(dir, config))),
250
+ ...fromSheets.filter(({ label }) => label === named)
251
+ ];
252
+ const declared = authors.flatMap(({ declarations }) => declarations);
253
+ const onDocument = new Set(declared.filter((each) => each.isScoped !== true).map((each) => each.name));
254
+ const own = declared.filter((each) => each.isScoped !== true || !onDocument.has(each.name));
255
+ const lowest = defaultDeclarations(dir, sheets, configs, own, unread);
256
+ const wrappers = colorWrappers([...sheets, ...configs].map(({ text }) => text));
257
+ const declarations = [...lowest, ...own];
258
+ const tokens = resolvedTokens(declarations, wrappers);
259
+ const unresolved = unresolvedTokens(dir, { sheets, configs, declarations });
260
+ const isDefault = (token) => token.origin?.kind === "tailwind-default";
261
+ const ordered = [...tokens.filter((token) => !isDefault(token)), ...tokens.filter(isDefault)];
262
+ return {
263
+ tokens: ordered,
264
+ clashes: clashesOf(authors),
265
+ sources: [
266
+ ...(shadcn === undefined
267
+ ? []
268
+ : [{ kind: "components-json", file: toPosix(relative(dir, shadcn.file)), tokens: 0 }]),
269
+ ...sourcesOf(ordered)
270
+ ],
271
+ problems: unresolved.problems,
272
+ unread: [...unread, ...unresolved.unread],
273
+ files: [...sheets, ...configs].map(({ file }) => file).concat(shadcn === undefined ? [] : [shadcn.file])
274
+ };
275
+ };
@@ -0,0 +1,30 @@
1
+ import type { ArgControlMatch, ForgebookConfig } from "./config.ts";
2
+ /** A custom control ready for the pages. */
3
+ export type ResolvedArgControl = {
4
+ /** Its module, drawn in the panel: a path absolute, a package's specifier as written. */
5
+ readonly module: string;
6
+ /** Its frame module, which turns its value into the story's; none when the story receives the JSON value. */
7
+ readonly frame?: string;
8
+ /** The props it takes in every story that names no control for them; empty when only `argTypes` name it. */
9
+ readonly matches: readonly ArgControlMatch[];
10
+ };
11
+ /** The custom controls by name, in their precedence: the catalogue's, then its presets'. */
12
+ export type ResolvedArgControls = Readonly<Record<string, ResolvedArgControl>>;
13
+ /** The path functions the resolution needs, so a test can name another system's. */
14
+ export type ControlPaths = {
15
+ /** A path from the configuration's folder, made absolute in Vite's form. */
16
+ readonly absolute: (path: string) => string;
17
+ /** Whether a path is absolute already. */
18
+ readonly isAbsolute: (path: string) => boolean;
19
+ /** An absolute path in Vite's form. */
20
+ readonly normalize: (path: string) => string;
21
+ };
22
+ /**
23
+ * The catalogue's custom controls and its presets', checked, merged, in their precedence.
24
+ *
25
+ * @param config - the configuration, its presets included.
26
+ * @param dir - its folder.
27
+ * @param paths - the path functions.
28
+ * @throws when a name, a module or a match cannot be used.
29
+ */
30
+ export declare const resolvedArgControls: (config: Pick<ForgebookConfig, "argControls" | "presets">, dir: string, paths: ControlPaths) => ResolvedArgControls;
@@ -0,0 +1,176 @@
1
+ /**
2
+ * A catalogue's custom controls, its own and its presets', checked and merged: what the pages load and what the props
3
+ * docs are matched against.
4
+ *
5
+ * @remarks
6
+ * A preset's control runs in the catalogue's page as the catalogue's own do, so it passes the same checks: a name a story
7
+ * can write that no control of the panel has, and a module named as a path or a package's specifier, never an address
8
+ * (`https:`, `data:`) that would load code from elsewhere. A preset names its files by absolute path, as its preview: a
9
+ * relative path would be read from wherever the catalogue is; nor can it take every prop of a keyword type (`string`). The catalogue's
10
+ * registration of a name replaces a preset's, and `false` removes it; a later preset's replaces an earlier one's. The
11
+ * order kept is the precedence among controls that match the same prop: the catalogue's first, then the presets' in
12
+ * their order.
13
+ *
14
+ * @module
15
+ */
16
+ import { resolve } from "node:path";
17
+ import { CONTROLS } from "../storyArgTypes.js";
18
+ /** The keys a control's option may have. */
19
+ const OPTION_KEYS = ["module", "frame", "matches"];
20
+ /** The keys a match may have. */
21
+ const MATCH_KEYS = ["typeName", "propName"];
22
+ /** The type names TypeScript writes as keywords: a preset that takes one by type alone would take most of a catalogue. */
23
+ const KEYWORD_TYPES = [
24
+ "string",
25
+ "number",
26
+ "boolean",
27
+ "bigint",
28
+ "symbol",
29
+ "object",
30
+ "unknown",
31
+ "any",
32
+ "null",
33
+ "undefined",
34
+ "never",
35
+ "void"
36
+ ];
37
+ /** An address with a scheme (`https:`, `data:`), which would load code from elsewhere; a Windows drive's letter is none. */
38
+ const SCHEME = /^[A-Za-z][\w+.-]+:/;
39
+ /** Whether a value is an object that is not a list. */
40
+ const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
41
+ /**
42
+ * A key of an object no version reads, when it has one.
43
+ *
44
+ * @param value - the object.
45
+ * @param known - its keys.
46
+ */
47
+ const unknownKey = (value, known) => Object.keys(value).find((key) => !known.includes(key));
48
+ /**
49
+ * One field of a match, checked: a text, or none.
50
+ *
51
+ * @param match - the match.
52
+ * @param key - the field.
53
+ * @param where - where it is written, for a problem.
54
+ */
55
+ const matchField = (match, key, where) => {
56
+ const value = Reflect.get(match, key);
57
+ if (value === undefined)
58
+ return undefined;
59
+ if (typeof value !== "string" || value === "")
60
+ throw new Error(`${where}: a match's ${key} is no name`);
61
+ return value;
62
+ };
63
+ /**
64
+ * The matches a control's option writes, checked.
65
+ *
66
+ * @param value - its `matches`.
67
+ * @param where - where it is written, for a problem.
68
+ */
69
+ const matchesOf = (value, where) => {
70
+ if (value === undefined)
71
+ return [];
72
+ return (Array.isArray(value) ? value : [value]).map((match) => {
73
+ if (!isObject(match))
74
+ throw new Error(`${where}: a match is an object ({ typeName } or { propName })`);
75
+ const key = unknownKey(match, MATCH_KEYS);
76
+ if (key !== undefined)
77
+ throw new Error(`${where}: a match has no key "${key}"; it takes typeName, propName`);
78
+ const typeName = matchField(match, "typeName", where);
79
+ const propName = matchField(match, "propName", where);
80
+ if (typeName === undefined && propName === undefined)
81
+ throw new Error(`${where}: a match names a typeName, a propName, or both`);
82
+ return {
83
+ ...(typeName === undefined ? {} : { typeName }),
84
+ ...(propName === undefined ? {} : { propName })
85
+ };
86
+ });
87
+ };
88
+ /**
89
+ * One control, checked and resolved; `false` removes a preset's control of its name.
90
+ *
91
+ * @param name - its name.
92
+ * @param value - what the list writes for it.
93
+ * @param where - where the list is, for a problem.
94
+ * @param place - places a module it names.
95
+ */
96
+ const resolvedControl = (name, value, where, place) => {
97
+ const at = `${where}: "${name}"`;
98
+ if (Object.hasOwn(CONTROLS, name))
99
+ throw new Error(`${at} is a control of the panel already`);
100
+ if (!/^[A-Za-z][\w-]*$/.test(name))
101
+ throw new Error(`${at} is no name a control can have`);
102
+ if (value === false)
103
+ return false;
104
+ if (!isObject(value))
105
+ return { module: place(value, at), matches: [] };
106
+ const key = unknownKey(value, OPTION_KEYS);
107
+ if (key !== undefined)
108
+ throw new Error(`${at} has no key "${key}"; it takes ${OPTION_KEYS.join(", ")}`);
109
+ const frame = Reflect.get(value, "frame");
110
+ return {
111
+ module: place(Reflect.get(value, "module"), at),
112
+ ...(frame === undefined ? {} : { frame: place(frame, `${at}: its frame`) }),
113
+ matches: matchesOf(Reflect.get(value, "matches"), at)
114
+ };
115
+ };
116
+ /**
117
+ * A list's controls, checked and resolved, in its order.
118
+ *
119
+ * @param controls - the list.
120
+ * @param where - where it is, for a problem.
121
+ * @param place - places a module it names.
122
+ */
123
+ const listed = (controls, where, place) => {
124
+ if (controls !== undefined && !isObject(controls))
125
+ throw new Error(`${where} is an object of controls by name`);
126
+ return Object.entries(controls ?? {}).map(([name, value]) => [
127
+ name,
128
+ resolvedControl(name, value, where, place)
129
+ ]);
130
+ };
131
+ /**
132
+ * The catalogue's custom controls and its presets', checked, merged, in their precedence.
133
+ *
134
+ * @param config - the configuration, its presets included.
135
+ * @param dir - its folder.
136
+ * @param paths - the path functions.
137
+ * @throws when a name, a module or a match cannot be used.
138
+ */
139
+ export const resolvedArgControls = (config, dir, paths) => {
140
+ const file = resolve(dir, "forgebook.config");
141
+ const named = (module, where) => {
142
+ if (typeof module !== "string" || module === "")
143
+ throw new Error(`${where} names no module, as a path or a package's specifier`);
144
+ if (SCHEME.test(module))
145
+ throw new Error(`${where} names an address, not a path or a package's specifier`);
146
+ return module;
147
+ };
148
+ const own = listed(config.argControls, `${file}: argControls`, (module, where) => {
149
+ const path = named(module, where);
150
+ return path.startsWith(".") || paths.isAbsolute(path) ? paths.absolute(path) : path;
151
+ });
152
+ // a later preset's control replaces an earlier one's of the same name, where the first was
153
+ const fromPresets = new Map();
154
+ for (const preset of config.presets ?? []) {
155
+ const where = `${file}: its preset "${preset.name}": argControls`;
156
+ for (const [name, control] of listed(preset.argControls, where, (module, at) => {
157
+ const path = named(module, at);
158
+ if (path.startsWith("."))
159
+ throw new Error(`${at}: a preset names a module by absolute path or package`);
160
+ return paths.isAbsolute(path) ? paths.normalize(path) : path;
161
+ })) {
162
+ if (control === false)
163
+ throw new Error(`${where}: "${name}": only a catalogue removes a control`);
164
+ const keyword = control.matches.find((match) => match.propName === undefined && KEYWORD_TYPES.includes(match.typeName ?? ""));
165
+ if (keyword !== undefined)
166
+ throw new Error(`${where}: "${name}": a preset takes no "${keyword.typeName}" prop by its type alone`);
167
+ fromPresets.set(name, control);
168
+ }
169
+ }
170
+ // a removal that removes nothing is a misspelt name
171
+ const removing = own.find(([name, control]) => control === false && !fromPresets.has(name));
172
+ if (removing !== undefined)
173
+ throw new Error(`${file}: argControls: "${removing[0]}" is no preset's control to remove`);
174
+ const ownNames = new Set(own.map(([name]) => name));
175
+ return Object.fromEntries([...own, ...[...fromPresets].filter(([name]) => !ownNames.has(name))].flatMap(([name, control]) => (control === false ? [] : [[name, control]])));
176
+ };
@@ -10,6 +10,11 @@
10
10
  * whose stories are all args has no code, most components have no page) is written in the module itself. Either way
11
11
  * the loader answers the text, as the query's module's default did.
12
12
  *
13
+ * The packed texts of a group go in shared files, in the rows' order, up to `PACK_LIMIT` of JSON each, rather than a
14
+ * file each: gzip reads each file alone, and the docs of neighbouring components repeat their keys, their types and
15
+ * their wording, which a file of one text cannot share. On a library of small components a file each weighs ten times
16
+ * what the same texts weigh together, and a page that asks for one text fetches a few kilobytes more.
17
+ *
13
18
  * The texts are a module of their own (`TEXTS_PREFIX`), imported by the group's module alone, so the bundler keeps
14
19
  * them in its chunk. Reading them waits for every component's docs, seconds on a large library: written in the group's
15
20
  * module, they would hold back the stories it imports, and everything those import, until the last docs were read. As
@@ -23,6 +28,11 @@ import { type IndexedStoryFile } from "./storyFilesModule.ts";
23
28
  import type { ComponentPageText, KeptCode, TextModuleContext } from "./textModules.ts";
24
29
  /** A story file's texts as their queries' modules answer them: its component's docs, its stories' code, its page. */
25
30
  export type FileTexts = readonly [docs: unknown, code: KeptCode, page: ComponentPageText];
31
+ /**
32
+ * The JSON a packed file holds at most, in characters, unless one text alone is longer: enough for the docs of a few
33
+ * components to share their words, little enough that a page asking for one text fetches a few kilobytes.
34
+ */
35
+ export declare const PACK_LIMIT: number;
26
36
  /**
27
37
  * The code of a group's texts module: the functions its loaders call, then, as its default, each file's loaders of its
28
38
  * docs, code and page, in the order of the group's rows.
@@ -10,6 +10,11 @@
10
10
  * whose stories are all args has no code, most components have no page) is written in the module itself. Either way
11
11
  * the loader answers the text, as the query's module's default did.
12
12
  *
13
+ * The packed texts of a group go in shared files, in the rows' order, up to `PACK_LIMIT` of JSON each, rather than a
14
+ * file each: gzip reads each file alone, and the docs of neighbouring components repeat their keys, their types and
15
+ * their wording, which a file of one text cannot share. On a library of small components a file each weighs ten times
16
+ * what the same texts weigh together, and a page that asks for one text fetches a few kilobytes more.
17
+ *
13
18
  * The texts are a module of their own (`TEXTS_PREFIX`), imported by the group's module alone, so the bundler keeps
14
19
  * them in its chunk. Reading them waits for every component's docs, seconds on a large library: written in the group's
15
20
  * module, they would hold back the stories it imports, and everything those import, until the last docs were read. As
@@ -25,37 +30,64 @@ import { indexedStoryFiles, storyFilesGroupOf, storyFilesGroupText } from "./sto
25
30
  import { VITE_PATHS } from "./vitePaths.js";
26
31
  /** The function that makes a packed file's loader, in the generated code. */
27
32
  const PACKED = "packedText";
33
+ /** The function that makes the loader of one text of a packed file, in the generated code. */
34
+ const PART = "packedPart";
35
+ /** The loaders of the packed files, in the generated code, numbered. */
36
+ const PACKED_FILE = "packedTexts";
28
37
  /** The function that makes the loader of a text written in the module, in the generated code. */
29
38
  const WRITTEN = "writtenText";
30
39
  /**
31
- * Writes texts as loaders: each in a gzipped file, or in the module when that weighs no more than the file and its
32
- * address (an empty page's JSON is shorter than its gzip header and the fetch it would cost). A text written in the
33
- * module is written once, however many files share it (most story files have no code and no page), and its loader
34
- * shared with them.
35
- *
36
- * @param emit - writes a packed file.
40
+ * The JSON a packed file holds at most, in characters, unless one text alone is longer: enough for the docs of a few
41
+ * components to share their words, little enough that a page asking for one text fetches a few kilobytes.
37
42
  */
38
- const textWriter = (emit) => {
39
- const names = new Map();
40
- const written = (json) => {
41
- const name = names.get(json) ?? `${WRITTEN}${names.size}`;
42
- names.set(json, name);
43
- return name;
43
+ export const PACK_LIMIT = 64 * 1024;
44
+ /**
45
+ * Writes texts as loaders: each in a packed file shared with its neighbours, or in the module when it weighs no more
46
+ * than its loader there (an empty page, a story file with no code). A text is written once, however many files share
47
+ * it, and its loader shared with them.
48
+ */
49
+ const textWriter = () => {
50
+ const written = new Map();
51
+ const packed = new Map();
52
+ const packs = [];
53
+ const pack = (json) => {
54
+ const known = packed.get(json);
55
+ if (known !== undefined)
56
+ return known;
57
+ let last = packs.at(-1);
58
+ if (last === undefined || (last.texts.length > 0 && last.length + json.length > PACK_LIMIT)) {
59
+ last = { texts: [], length: 0 };
60
+ packs.push(last);
61
+ }
62
+ const loader = `${PART}(${PACKED_FILE}${packs.length - 1},${last.texts.length})`;
63
+ last.texts.push(json);
64
+ last.length += json.length;
65
+ packed.set(json, loader);
66
+ return loader;
44
67
  };
45
68
  return {
46
69
  loaderOf: (value) => {
47
70
  const json = JSON.stringify(value);
48
- const fileName = packedFileName(json);
49
- const address = codeLiteral(fileName);
50
- const packed = gzippedJson(json);
51
- if (json.length <= address.length + packed.length)
52
- return written(json);
53
- emit({ type: "asset", fileName, source: packed });
54
- return `${PACKED}(${address})`;
71
+ if (written.has(json) || json.length <= `${PART}(${PACKED_FILE}${packs.length},0)`.length) {
72
+ const name = written.get(json) ?? `${WRITTEN}${written.size}`;
73
+ written.set(json, name);
74
+ return name;
75
+ }
76
+ return pack(json);
55
77
  },
56
- written: () => [...names].map(([json, name]) => `const ${name} = () => Promise.resolve(${codeOfJson(json)});`)
78
+ code: (emit) => [
79
+ ...[...written].map(([json, name]) => `const ${name} = () => Promise.resolve(${codeOfJson(json)});`),
80
+ ...packs.map((each, at) => {
81
+ const json = `[${each.texts.join(",")}]`;
82
+ const fileName = packedFileName(json);
83
+ emit({ type: "asset", fileName, source: gzippedJson(json) });
84
+ return `const ${PACKED_FILE}${at} = ${PACKED}(${codeLiteral(fileName)});`;
85
+ })
86
+ ]
57
87
  };
58
88
  };
89
+ /** The code of the function that makes the loader of one text of a packed file: it answers the same value each time. */
90
+ const PART_MAKER = `const ${PART} = (load, at) => () => load().then((texts) => texts[at]);`;
59
91
  /**
60
92
  * Every file's texts, read: a build reads them all once, as it would for their modules.
61
93
  *
@@ -73,10 +105,15 @@ const readTexts = (files, read) => Promise.all(files.map(({ file }) => Promise.a
73
105
  */
74
106
  export const textsModuleCode = (texts, emit) => {
75
107
  // written in the files' order once all are read, so the names in the module do not depend on which read ended first
76
- const writer = textWriter(emit);
108
+ const writer = textWriter();
77
109
  // a text not read (the docs of a catalogue that reads none) has no loader, and its place stays in the row
78
110
  const rows = texts.map((each) => `[${each.map((text) => (text === undefined ? "null" : writer.loaderOf(text))).join(", ")}]`);
79
- return [packedLoaderMaker(PACKED), ...writer.written(), `export default [${rows.join(",\n")}];`].join("\n");
111
+ return [
112
+ packedLoaderMaker(PACKED),
113
+ PART_MAKER,
114
+ ...writer.code(emit),
115
+ `export default [${rows.join(",\n")}];`
116
+ ].join("\n");
80
117
  };
81
118
  /**
82
119
  * A build's readers of the texts: the code and the pages as their queries answer them, read with the modules that
@@ -1,10 +1,12 @@
1
1
  import type { UserConfig } from "vite";
2
2
  import { type ResolvedConfig } from "./configFile.ts";
3
+ import { type ScanFindings } from "./prebundled.ts";
3
4
  /**
4
5
  * What the plugin sets in Vite's configuration for a catalogue: its folder as the root, what to pre-bundle, the pages
5
6
  * as the build's inputs, and the dev server's reads kept to each origin.
6
7
  *
7
8
  * @param config - the catalogue's configuration.
8
9
  * @param userConfig - the configuration so far, whose own `server.cors` and build output the plugin leaves alone.
10
+ * @param findings - where the dependency scan's warnings and problems go.
9
11
  */
10
- export declare const catalogueConfig: (config: ResolvedConfig, userConfig: UserConfig) => UserConfig;
12
+ export declare const catalogueConfig: (config: ResolvedConfig, userConfig: UserConfig, findings?: Omit<ScanFindings, "root">) => UserConfig;