forgebook 0.3.2 → 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 (693) hide show
  1. package/README.md +917 -74
  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 +54 -6
  187. package/dist/src/addressArgs.js +72 -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 +58 -14
  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/PluginBlockHost.js +2 -1
  307. package/dist/src/shell/PluginTabHost.js +19 -2
  308. package/dist/src/shell/PropFields.d.ts +3 -1
  309. package/dist/src/shell/PropFields.js +9 -6
  310. package/dist/src/shell/PropRows.d.ts +23 -2
  311. package/dist/src/shell/PropRows.js +58 -19
  312. package/dist/src/shell/PropsTab.d.ts +12 -5
  313. package/dist/src/shell/PropsTab.js +9 -21
  314. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  315. package/dist/src/shell/RefStoryPage.js +123 -0
  316. package/dist/src/shell/SearchPanel.js +51 -24
  317. package/dist/src/shell/Shell.d.ts +18 -0
  318. package/dist/src/shell/Shell.js +137 -22
  319. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  320. package/dist/src/shell/ShortcutHelp.js +66 -0
  321. package/dist/src/shell/Sidebar.d.ts +17 -4
  322. package/dist/src/shell/Sidebar.js +92 -41
  323. package/dist/src/shell/SidebarDocs.js +2 -2
  324. package/dist/src/shell/SidebarEntries.js +5 -3
  325. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  326. package/dist/src/shell/SidebarHandle.js +4 -4
  327. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  328. package/dist/src/shell/SidebarRefs.js +99 -0
  329. package/dist/src/shell/SidebarSearch.js +37 -9
  330. package/dist/src/shell/SignatureReference.js +3 -1
  331. package/dist/src/shell/Stage.d.ts +10 -2
  332. package/dist/src/shell/Stage.js +35 -60
  333. package/dist/src/shell/StatusBadges.d.ts +54 -0
  334. package/dist/src/shell/StatusBadges.js +77 -0
  335. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  336. package/dist/src/shell/StoryCodeBlock.js +7 -6
  337. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  338. package/dist/src/shell/SwitchGallery.js +17 -0
  339. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  340. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  341. package/dist/src/shell/TagFilter.d.ts +24 -0
  342. package/dist/src/shell/TagFilter.js +45 -0
  343. package/dist/src/shell/TagViews.d.ts +39 -0
  344. package/dist/src/shell/TagViews.js +20 -0
  345. package/dist/src/shell/Toolbar.d.ts +4 -1
  346. package/dist/src/shell/Toolbar.js +17 -7
  347. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  348. package/dist/src/shell/ToolbarControl.js +23 -6
  349. package/dist/src/shell/ViewMenuPanel.js +6 -1
  350. package/dist/src/shell/argChecks.d.ts +22 -0
  351. package/dist/src/shell/argChecks.js +20 -0
  352. package/dist/src/shell/asideStory.d.ts +17 -4
  353. package/dist/src/shell/asideStory.js +21 -4
  354. package/dist/src/shell/audienceSections.css +9 -9
  355. package/dist/src/shell/catalogueContext.d.ts +1 -1
  356. package/dist/src/shell/catalogueContext.js +6 -1
  357. package/dist/src/shell/codeSpans.d.ts +27 -0
  358. package/dist/src/shell/codeSpans.js +76 -0
  359. package/dist/src/shell/compareVariants.d.ts +4 -2
  360. package/dist/src/shell/compareVariants.js +16 -8
  361. package/dist/src/shell/composition.d.ts +23 -0
  362. package/dist/src/shell/composition.js +26 -0
  363. package/dist/src/shell/controlCycle.d.ts +1 -1
  364. package/dist/src/shell/controlCycle.js +3 -2
  365. package/dist/src/shell/customControls.d.ts +55 -0
  366. package/dist/src/shell/customControls.js +70 -0
  367. package/dist/src/shell/docPage.css +22 -22
  368. package/dist/src/shell/dockTabs.d.ts +19 -3
  369. package/dist/src/shell/dockTabs.js +28 -20
  370. package/dist/src/shell/embed.css +7 -7
  371. package/dist/src/shell/framesOrigin.d.ts +7 -0
  372. package/dist/src/shell/framesOrigin.js +1 -1
  373. package/dist/src/shell/galleryPlace.d.ts +20 -0
  374. package/dist/src/shell/galleryPlace.js +26 -0
  375. package/dist/src/shell/icons.d.ts +1 -0
  376. package/dist/src/shell/icons.js +1 -0
  377. package/dist/src/shell/keyboard.d.ts +14 -12
  378. package/dist/src/shell/keyboard.js +21 -6
  379. package/dist/src/shell/laterStrings.d.ts +29 -0
  380. package/dist/src/shell/laterStrings.js +42 -3
  381. package/dist/src/shell/mountShell.js +3 -0
  382. package/dist/src/shell/pageStrings.d.ts +4 -0
  383. package/dist/src/shell/pageStrings.js +4 -0
  384. package/dist/src/shell/pageTagView.d.ts +18 -0
  385. package/dist/src/shell/pageTagView.js +10 -0
  386. package/dist/src/shell/playMemory.d.ts +14 -0
  387. package/dist/src/shell/playMemory.js +8 -0
  388. package/dist/src/shell/propNotes.d.ts +23 -0
  389. package/dist/src/shell/propNotes.js +37 -0
  390. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  391. package/dist/src/shell/refIndexLoad.js +38 -0
  392. package/dist/src/shell/refParts.d.ts +34 -0
  393. package/dist/src/shell/refParts.js +9 -0
  394. package/dist/src/shell/refStory.css +21 -0
  395. package/dist/src/shell/refStrings.d.ts +13 -0
  396. package/dist/src/shell/refStrings.js +21 -0
  397. package/dist/src/shell/search.css +11 -11
  398. package/dist/src/shell/shell.css +348 -168
  399. package/dist/src/shell/shellScheme.js +2 -2
  400. package/dist/src/shell/shortcutHelp.css +64 -0
  401. package/dist/src/shell/stageArgs.d.ts +53 -0
  402. package/dist/src/shell/stageArgs.js +64 -0
  403. package/dist/src/shell/statusBadges.css +51 -0
  404. package/dist/src/shell/strings.d.ts +7 -16
  405. package/dist/src/shell/strings.js +12 -17
  406. package/dist/src/shell/switchGallery.css +104 -0
  407. package/dist/src/shell/tagFilter.css +46 -0
  408. package/dist/src/shell/tagView.d.ts +20 -0
  409. package/dist/src/shell/tagView.js +10 -0
  410. package/dist/src/shell/useAddressArgs.d.ts +27 -2
  411. package/dist/src/shell/useAddressArgs.js +71 -14
  412. package/dist/src/shell/useControlKeys.js +2 -2
  413. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  414. package/dist/src/shell/useEditedProblems.js +40 -0
  415. package/dist/src/shell/useFrameMessages.js +3 -0
  416. package/dist/src/shell/useListedTree.d.ts +13 -0
  417. package/dist/src/shell/useListedTree.js +32 -0
  418. package/dist/src/shell/usePageFrames.js +2 -2
  419. package/dist/src/shell/usePopover.d.ts +5 -0
  420. package/dist/src/shell/usePopover.js +7 -1
  421. package/dist/src/shell/useRefIndex.d.ts +22 -0
  422. package/dist/src/shell/useRefIndex.js +36 -0
  423. package/dist/src/shell/useScrollStops.d.ts +20 -0
  424. package/dist/src/shell/useScrollStops.js +41 -0
  425. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  426. package/dist/src/shell/useShortcutHelp.js +32 -0
  427. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  428. package/dist/src/shell/useSidebarOverlay.js +12 -4
  429. package/dist/src/shell/useStoryCode.d.ts +2 -1
  430. package/dist/src/shell/useStoryCode.js +12 -7
  431. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  432. package/dist/src/shell/useToolbarLayout.js +2 -2
  433. package/dist/src/shell/useWorstCase.d.ts +8 -2
  434. package/dist/src/shell/useWorstCase.js +2 -2
  435. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  436. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  437. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  438. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  439. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  440. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  441. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  442. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  443. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  444. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  445. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  446. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  447. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  448. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  449. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  450. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  451. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  452. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  453. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  454. package/dist/src/shell/valueEditors/ValueField.js +147 -0
  455. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  456. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  457. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  458. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  459. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  460. package/dist/src/shell/worstArgs.d.ts +8 -5
  461. package/dist/src/shell/worstArgs.js +14 -7
  462. package/dist/src/shellTheme.d.ts +1 -1
  463. package/dist/src/shellTheme.js +15 -1
  464. package/dist/src/shellTheme.types.d.ts +4 -0
  465. package/dist/src/shellWord.d.ts +12 -0
  466. package/dist/src/shellWord.js +15 -0
  467. package/dist/src/sourceFiles.js +2 -1
  468. package/dist/src/storyArgTypes.d.ts +57 -0
  469. package/dist/src/storyArgTypes.js +195 -0
  470. package/dist/src/storyBackground.js +14 -3
  471. package/dist/src/storyCheck.d.ts +85 -3
  472. package/dist/src/storyCheck.js +23 -1
  473. package/dist/src/storyCodeText.d.ts +46 -0
  474. package/dist/src/storyCodeText.js +27 -0
  475. package/dist/src/storyControls.d.ts +100 -0
  476. package/dist/src/storyControls.js +100 -0
  477. package/dist/src/storyStatuses.d.ts +55 -0
  478. package/dist/src/storyStatuses.js +104 -0
  479. package/dist/src/storyTagNames.d.ts +25 -0
  480. package/dist/src/storyTagNames.js +25 -0
  481. package/dist/src/storyTags.d.ts +29 -0
  482. package/dist/src/storyTags.js +85 -0
  483. package/dist/src/storyTree.d.ts +13 -0
  484. package/dist/src/storyTree.js +24 -4
  485. package/dist/src/storybookArgs.d.ts +24 -0
  486. package/dist/src/storybookArgs.js +185 -0
  487. package/dist/src/switches.d.ts +66 -3
  488. package/dist/src/switches.js +42 -1
  489. package/dist/src/valueSchema.d.ts +28 -0
  490. package/dist/src/valueSchema.js +196 -0
  491. package/dist/src/valueShape.d.ts +94 -0
  492. package/dist/src/valueShape.js +25 -0
  493. package/dist/src/viewState.d.ts +8 -3
  494. package/dist/src/viewState.js +27 -10
  495. package/dist/src/vite/adapter.d.ts +40 -2
  496. package/dist/src/vite/adapter.js +1 -0
  497. package/dist/src/vite/agent.types.d.ts +347 -7
  498. package/dist/src/vite/agentApi.d.ts +23 -0
  499. package/dist/src/vite/agentApi.js +90 -17
  500. package/dist/src/vite/agentIndex.d.ts +0 -2
  501. package/dist/src/vite/agentIndex.js +5 -6
  502. package/dist/src/vite/agentRoutes.d.ts +20 -1
  503. package/dist/src/vite/agentRoutes.js +106 -65
  504. package/dist/src/vite/agentStatuses.d.ts +42 -0
  505. package/dist/src/vite/agentStatuses.js +67 -0
  506. package/dist/src/vite/agentStoryCode.d.ts +48 -0
  507. package/dist/src/vite/agentStoryCode.js +38 -0
  508. package/dist/src/vite/agentVisibility.d.ts +47 -0
  509. package/dist/src/vite/agentVisibility.js +174 -0
  510. package/dist/src/vite/appAudit.d.ts +134 -0
  511. package/dist/src/vite/appAudit.js +333 -0
  512. package/dist/src/vite/appBuildOption.d.ts +53 -0
  513. package/dist/src/vite/appBuildOption.js +55 -0
  514. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  515. package/dist/src/vite/appTokenFiles.js +433 -0
  516. package/dist/src/vite/appTokens.d.ts +23 -0
  517. package/dist/src/vite/appTokens.js +275 -0
  518. package/dist/src/vite/builtTexts.d.ts +10 -0
  519. package/dist/src/vite/builtTexts.js +59 -22
  520. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  521. package/dist/src/vite/catalogueConfig.js +15 -3
  522. package/dist/src/vite/changeCoverage.d.ts +74 -0
  523. package/dist/src/vite/changeCoverage.js +120 -0
  524. package/dist/src/vite/changedRoute.d.ts +30 -0
  525. package/dist/src/vite/changedRoute.js +197 -0
  526. package/dist/src/vite/checkCode.d.ts +105 -3
  527. package/dist/src/vite/checkCode.js +323 -36
  528. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  529. package/dist/src/vite/checkoutWatch.js +287 -0
  530. package/dist/src/vite/closeWatch.d.ts +8 -0
  531. package/dist/src/vite/closeWatch.js +1 -1
  532. package/dist/src/vite/componentCache.d.ts +8 -0
  533. package/dist/src/vite/componentCache.js +66 -0
  534. package/dist/src/vite/componentGraph.d.ts +71 -0
  535. package/dist/src/vite/componentGraph.js +133 -0
  536. package/dist/src/vite/componentRules.d.ts +33 -0
  537. package/dist/src/vite/componentRules.js +105 -0
  538. package/dist/src/vite/componentScan.d.ts +69 -0
  539. package/dist/src/vite/componentScan.js +418 -0
  540. package/dist/src/vite/compositionCheck.d.ts +15 -0
  541. package/dist/src/vite/compositionCheck.js +243 -0
  542. package/dist/src/vite/config.d.ts +32 -1
  543. package/dist/src/vite/configFile.d.ts +14 -2
  544. package/dist/src/vite/configFile.js +124 -40
  545. package/dist/src/vite/configKeys.d.ts +15 -0
  546. package/dist/src/vite/configKeys.js +171 -0
  547. package/dist/src/vite/configLoadError.d.ts +23 -0
  548. package/dist/src/vite/configLoadError.js +71 -0
  549. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  550. package/dist/src/vite/cssDeclarations.js +290 -0
  551. package/dist/src/vite/cssImports.d.ts +14 -0
  552. package/dist/src/vite/cssImports.js +48 -0
  553. package/dist/src/vite/cssReferences.d.ts +54 -0
  554. package/dist/src/vite/cssReferences.js +157 -0
  555. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  556. package/dist/src/vite/cssTokenValues.js +233 -0
  557. package/dist/src/vite/designTokens.d.ts +24 -0
  558. package/dist/src/vite/designTokens.js +5 -1
  559. package/dist/src/vite/docsExtractor.d.ts +9 -3
  560. package/dist/src/vite/docsExtractor.js +11 -3
  561. package/dist/src/vite/docsProgram.d.ts +17 -4
  562. package/dist/src/vite/docsProgram.js +52 -11
  563. package/dist/src/vite/docsWorker.js +7 -2
  564. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  565. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  566. package/dist/src/vite/fileImports.d.ts +17 -0
  567. package/dist/src/vite/fileImports.js +57 -0
  568. package/dist/src/vite/findComponent.d.ts +10 -2
  569. package/dist/src/vite/findComponent.js +27 -22
  570. package/dist/src/vite/findRoute.js +3 -2
  571. package/dist/src/vite/forcedStates.d.ts +9 -2
  572. package/dist/src/vite/forcedStates.js +12 -3
  573. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  574. package/dist/src/vite/forgebookPlugin.js +52 -72
  575. package/dist/src/vite/frameErrors.d.ts +19 -0
  576. package/dist/src/vite/frameErrors.js +70 -0
  577. package/dist/src/vite/framesServer.d.ts +12 -0
  578. package/dist/src/vite/framesServer.js +21 -4
  579. package/dist/src/vite/functionComponentDocs.js +81 -12
  580. package/dist/src/vite/generatedModules.js +4 -2
  581. package/dist/src/vite/gitChange.d.ts +38 -5
  582. package/dist/src/vite/gitChange.js +71 -11
  583. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  584. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  585. package/dist/src/vite/hotSnippets.d.ts +38 -14
  586. package/dist/src/vite/hotSnippets.js +137 -39
  587. package/dist/src/vite/importedNames.d.ts +37 -0
  588. package/dist/src/vite/importedNames.js +138 -0
  589. package/dist/src/vite/indexFields.d.ts +6 -0
  590. package/dist/src/vite/indexFields.js +21 -0
  591. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  592. package/dist/src/vite/indexStoryFile.js +22 -157
  593. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  594. package/dist/src/vite/jsxCallSites.js +200 -0
  595. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  596. package/dist/src/vite/jsxInScripts.js +138 -0
  597. package/dist/src/vite/jsxTree.d.ts +20 -0
  598. package/dist/src/vite/jsxTree.js +163 -0
  599. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  600. package/dist/src/vite/lineAndColumn.js +18 -0
  601. package/dist/src/vite/lookAlikes.d.ts +65 -0
  602. package/dist/src/vite/lookAlikes.js +228 -0
  603. package/dist/src/vite/nearestToken.d.ts +17 -0
  604. package/dist/src/vite/nearestToken.js +9 -2
  605. package/dist/src/vite/packageEntries.d.ts +42 -0
  606. package/dist/src/vite/packageEntries.js +127 -0
  607. package/dist/src/vite/pages.d.ts +9 -1
  608. package/dist/src/vite/pages.js +108 -4
  609. package/dist/src/vite/pluginConfig.js +4 -0
  610. package/dist/src/vite/pluginIds.d.ts +2 -0
  611. package/dist/src/vite/pluginIds.js +5 -1
  612. package/dist/src/vite/pluginModules.d.ts +81 -11
  613. package/dist/src/vite/pluginModules.js +109 -21
  614. package/dist/src/vite/prebundled.d.ts +57 -15
  615. package/dist/src/vite/prebundled.js +80 -0
  616. package/dist/src/vite/previewTags.d.ts +25 -0
  617. package/dist/src/vite/previewTags.js +56 -0
  618. package/dist/src/vite/projectFiles.d.ts +54 -0
  619. package/dist/src/vite/projectFiles.js +116 -0
  620. package/dist/src/vite/projectPostcss.d.ts +70 -0
  621. package/dist/src/vite/projectPostcss.js +250 -0
  622. package/dist/src/vite/propDocs.d.ts +12 -0
  623. package/dist/src/vite/propDocs.js +130 -58
  624. package/dist/src/vite/propKind.d.ts +40 -0
  625. package/dist/src/vite/propKind.js +71 -0
  626. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  627. package/dist/src/vite/propTypeNotes.js +51 -0
  628. package/dist/src/vite/publishedExports.d.ts +27 -0
  629. package/dist/src/vite/publishedExports.js +298 -0
  630. package/dist/src/vite/realFolder.d.ts +6 -0
  631. package/dist/src/vite/realFolder.js +25 -0
  632. package/dist/src/vite/refsConfig.d.ts +39 -0
  633. package/dist/src/vite/refsConfig.js +54 -0
  634. package/dist/src/vite/reuseCheck.d.ts +45 -0
  635. package/dist/src/vite/reuseCheck.js +260 -0
  636. package/dist/src/vite/runningVersions.d.ts +33 -0
  637. package/dist/src/vite/runningVersions.js +25 -0
  638. package/dist/src/vite/scriptProblems.d.ts +60 -0
  639. package/dist/src/vite/scriptProblems.js +155 -0
  640. package/dist/src/vite/searchModule.js +3 -2
  641. package/dist/src/vite/searchRoute.js +4 -2
  642. package/dist/src/vite/shapeDocs.d.ts +36 -0
  643. package/dist/src/vite/shapeDocs.js +177 -0
  644. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  645. package/dist/src/vite/singleFileComponent.js +83 -0
  646. package/dist/src/vite/sourceText.d.ts +34 -0
  647. package/dist/src/vite/sourceText.js +72 -0
  648. package/dist/src/vite/sourceTokens.d.ts +7 -0
  649. package/dist/src/vite/sourceTokens.js +7 -2
  650. package/dist/src/vite/stackLines.d.ts +49 -0
  651. package/dist/src/vite/stackLines.js +96 -0
  652. package/dist/src/vite/storyCode.d.ts +22 -7
  653. package/dist/src/vite/storyCode.js +263 -37
  654. package/dist/src/vite/storyCoverage.d.ts +48 -0
  655. package/dist/src/vite/storyCoverage.js +179 -0
  656. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  657. package/dist/src/vite/storyFilesModule.js +105 -15
  658. package/dist/src/vite/storyPatterns.d.ts +31 -0
  659. package/dist/src/vite/storyPatterns.js +140 -5
  660. package/dist/src/vite/storyReach.d.ts +10 -2
  661. package/dist/src/vite/storyReach.js +15 -11
  662. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  663. package/dist/src/vite/storyTopLevel.js +146 -0
  664. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  665. package/dist/src/vite/storylessRoutes.js +210 -19
  666. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  667. package/dist/src/vite/switchValuesCheck.js +164 -0
  668. package/dist/src/vite/switchesDocument.d.ts +15 -0
  669. package/dist/src/vite/switchesDocument.js +47 -0
  670. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  671. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  672. package/dist/src/vite/textImports.d.ts +15 -0
  673. package/dist/src/vite/textImports.js +58 -0
  674. package/dist/src/vite/textModules.d.ts +6 -5
  675. package/dist/src/vite/textModules.js +13 -8
  676. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  677. package/dist/src/vite/tokenAnswers.js +11 -7
  678. package/dist/src/vite/typeParameters.d.ts +83 -0
  679. package/dist/src/vite/typeParameters.js +270 -0
  680. package/dist/src/vite/unionProps.d.ts +37 -0
  681. package/dist/src/vite/unionProps.js +121 -0
  682. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  683. package/dist/src/vite/unresolvedTokens.js +193 -0
  684. package/dist/src/vite/usageGraph.js +10 -52
  685. package/dist/src/vite/usageGuidance.d.ts +9 -2
  686. package/dist/src/vite/usageGuidance.js +36 -8
  687. package/dist/src/vite/usageImports.d.ts +35 -0
  688. package/dist/src/vite/usageImports.js +280 -0
  689. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  690. package/dist/src/vite/visibilityRoute.js +320 -0
  691. package/dist/src/worstCase.d.ts +2 -0
  692. package/dist/src/worstCase.js +2 -0
  693. package/package.json +28 -8
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A style sheet with the sheets it imports by relative path written into it, as Vite's own PostCSS step does before a
3
+ * project's plugins run: Lightning CSS reads an imported file from the disk, so a plugin would never see it, and Tailwind's
4
+ * directives in a sheet of their own would stay undone.
5
+ *
6
+ * @remarks
7
+ * Only a plain `@import "./x.css"` is written in. One with a media query, a layer or a package's name stays for those that
8
+ * read them (Tailwind 4's plugin reads its own imports). Relative addresses in a file from another folder are rewritten,
9
+ * since they now sit in the importing sheet. A sheet that imports itself, or that cannot be read, stays as it was written.
10
+ *
11
+ * @module
12
+ */
13
+ import { readFileSync } from "node:fs";
14
+ import { dirname, relative, resolve } from "node:path";
15
+ /** A plain relative import of a style sheet, on a line of its own. */
16
+ const RELATIVE_IMPORT = /^[ \t]*@import\s+(?:url\()?["'](\.{1,2}\/[^"'\n]+\.(?:css|pcss|postcss))["']\)?\s*;[ \t]*$/gm;
17
+ /** A relative address in a sheet. */
18
+ const RELATIVE_URL = /url\(\s*(["']?)(?!["']?(?:[a-z][a-z0-9+.-]*:|\/|#))([^"')\s]+)\1\s*\)/gi;
19
+ /** A sheet's text with its addresses read from another folder. */
20
+ const rebased = (css, from, to) => {
21
+ const prefix = relative(to, from).split("\\").join("/");
22
+ return prefix === ""
23
+ ? css
24
+ : css.replace(RELATIVE_URL, (_, quote, url) => `url(${quote}${prefix}/${url}${quote})`);
25
+ };
26
+ /**
27
+ * A sheet with its relative imports written in.
28
+ *
29
+ * @param css - its text.
30
+ * @param file - its file, absolute.
31
+ */
32
+ export const inlineCssImports = (css, file) => {
33
+ const files = [];
34
+ const inlined = (text, current, seen) => text.replace(RELATIVE_IMPORT, (statement, path) => {
35
+ const imported = resolve(dirname(current), path);
36
+ if (seen.has(imported))
37
+ return statement;
38
+ try {
39
+ const body = readFileSync(imported, "utf8");
40
+ files.push(imported);
41
+ return inlined(rebased(body, dirname(imported), dirname(file)), imported, new Set([...seen, imported]));
42
+ }
43
+ catch {
44
+ return statement;
45
+ }
46
+ });
47
+ return { css: inlined(css, file, new Set([file])), files };
48
+ };
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Custom properties a browser gives no value: those whose references lead back to themselves, and those that read a
3
+ * name with no fallback that nothing declares.
4
+ *
5
+ * @remarks
6
+ * Pure. Resolving a token keeps the text of a reference it cannot follow (`cssTokenValues.ts`), since a browser may fill
7
+ * it in later; that is right for a name code sets and wrong for a name nobody sets, which leaves the UI drawn with no
8
+ * colour at all. A cycle is certain: the browser treats every property in it as invalid. A name declared nowhere is only
9
+ * as certain as the caller's knowledge of what declares names, so the caller says which names are declared elsewhere.
10
+ * References are followed within a theme, as the browser does.
11
+ *
12
+ * @module
13
+ */
14
+ import { type TokenDeclaration } from "./cssTokenValues.ts";
15
+ /** A `var()` in a value. */
16
+ export type CssReference = {
17
+ /** The name it reads. */
18
+ readonly name: string;
19
+ /** Whether it has a fallback, which stands when the name has no value. */
20
+ readonly hasFallback: boolean;
21
+ /** Whether it sits inside another reference's fallback, so it is read only when that one has no value. */
22
+ readonly isInFallback: boolean;
23
+ };
24
+ /** Why a declaration has no value. */
25
+ export type BrokenReference = {
26
+ /** The declaration. */
27
+ readonly declaration: TokenDeclaration;
28
+ /** The theme where it breaks; none when it breaks in the base, and so wherever no theme fixes it. */
29
+ readonly mode: string | undefined;
30
+ } & ({
31
+ /** Its references lead back to it. */
32
+ readonly kind: "cycle";
33
+ /** The other names in the cycle, in the order declared; none when it reads itself. */
34
+ readonly through: readonly string[];
35
+ } | {
36
+ /** It reads, with no fallback, a name nothing declares. */
37
+ readonly kind: "undeclared";
38
+ /** That name. */
39
+ readonly target: string;
40
+ });
41
+ /**
42
+ * The references a value holds, in order, with where each stands.
43
+ *
44
+ * @param value - a custom property's value, as written.
45
+ */
46
+ export declare const references: (value: string) => CssReference[];
47
+ /**
48
+ * The declarations a browser gives no value, in the base and in each theme, each declaration and reason once.
49
+ *
50
+ * @param declarations - every declaration, the lowest priority first, as tokens are resolved from them.
51
+ * @param isDeclaredElsewhere - whether a name these do not declare gets a value from elsewhere: another rule of a sheet,
52
+ * an installed package's sheet, code that sets it.
53
+ */
54
+ export declare const brokenReferences: (declarations: readonly TokenDeclaration[], isDeclaredElsewhere: (name: string) => boolean) => BrokenReference[];
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Custom properties a browser gives no value: those whose references lead back to themselves, and those that read a
3
+ * name with no fallback that nothing declares.
4
+ *
5
+ * @remarks
6
+ * Pure. Resolving a token keeps the text of a reference it cannot follow (`cssTokenValues.ts`), since a browser may fill
7
+ * it in later; that is right for a name code sets and wrong for a name nobody sets, which leaves the UI drawn with no
8
+ * colour at all. A cycle is certain: the browser treats every property in it as invalid. A name declared nowhere is only
9
+ * as certain as the caller's knowledge of what declares names, so the caller says which names are declared elsewhere.
10
+ * References are followed within a theme, as the browser does.
11
+ *
12
+ * @module
13
+ */
14
+ import { layerOf } from "./cssTokenValues.js";
15
+ /** A reference's start, a parenthesis or a comma: what tells a fallback from the rest of a value. */
16
+ const REFERENCE_PARTS = /var\(\s*(--[\w-]+)\s*(,?)|[(),]/g;
17
+ /**
18
+ * The references a value holds, in order, with where each stands.
19
+ *
20
+ * @param value - a custom property's value, as written.
21
+ */
22
+ export const references = (value) => {
23
+ const found = [];
24
+ // each open reference: the depth of its parentheses, and whether its fallback has begun
25
+ const open = [];
26
+ let depth = 0;
27
+ for (const [part, name, comma] of value.matchAll(REFERENCE_PARTS)) {
28
+ const innermost = open.at(-1);
29
+ if (name !== undefined) {
30
+ const hasFallback = comma === ",";
31
+ found.push({ name, hasFallback, isInFallback: open.some((each) => each.isInFallback) });
32
+ depth += 1;
33
+ open.push({ depth, isInFallback: hasFallback });
34
+ }
35
+ else if (part === "(")
36
+ depth += 1;
37
+ else if (part === "," && innermost?.depth === depth)
38
+ innermost.isInFallback = true;
39
+ else if (part === ")") {
40
+ if (innermost?.depth === depth)
41
+ open.pop();
42
+ depth -= 1;
43
+ }
44
+ }
45
+ return found;
46
+ };
47
+ /** A name reached for the first time. */
48
+ const enter = (walk, name) => {
49
+ const index = walk.order.size;
50
+ walk.order.set(name, index);
51
+ walk.lowest.set(name, index);
52
+ walk.stack.push(name);
53
+ walk.onStack.add(name);
54
+ };
55
+ /** What a name reaches, lowered. */
56
+ const lower = (walk, name, reached) => {
57
+ walk.lowest.set(name, Math.min(walk.lowest.get(name) ?? reached, reached));
58
+ };
59
+ /** A name whose references are all walked: when it is the first of its group, the group comes off the path. */
60
+ const close = (walk, name, readsItself) => {
61
+ if (walk.lowest.get(name) !== walk.order.get(name))
62
+ return;
63
+ const group = [];
64
+ for (let each = walk.stack.pop(); each !== undefined; each = walk.stack.pop()) {
65
+ walk.onStack.delete(each);
66
+ group.push(each);
67
+ if (each === name)
68
+ break;
69
+ }
70
+ if (group.length > 1 || readsItself)
71
+ walk.groups.push(group);
72
+ };
73
+ /** Walks from one name, with a path of its own, since a long chain of references would run past the call stack. */
74
+ const walkFrom = (walk, edges, start) => {
75
+ const path = [{ name: start, next: 0 }];
76
+ enter(walk, start);
77
+ for (let top = path.at(-1); top !== undefined; top = path.at(-1)) {
78
+ const targets = edges.get(top.name) ?? [];
79
+ const target = targets[top.next];
80
+ top.next += 1;
81
+ if (target === undefined) {
82
+ path.pop();
83
+ const parent = path.at(-1);
84
+ if (parent !== undefined)
85
+ lower(walk, parent.name, walk.lowest.get(top.name) ?? 0);
86
+ close(walk, top.name, targets.includes(top.name));
87
+ }
88
+ else if (edges.has(target) && !walk.order.has(target)) {
89
+ enter(walk, target);
90
+ path.push({ name: target, next: 0 });
91
+ }
92
+ else if (walk.onStack.has(target))
93
+ lower(walk, top.name, walk.order.get(target) ?? 0);
94
+ }
95
+ };
96
+ /** The groups of names whose references lead back to each other, a name that reads itself included. */
97
+ const cycles = (edges) => {
98
+ const walk = { order: new Map(), lowest: new Map(), stack: [], onStack: new Set(), groups: [] };
99
+ for (const start of edges.keys())
100
+ if (!walk.order.has(start))
101
+ walkFrom(walk, edges, start);
102
+ return walk.groups;
103
+ };
104
+ /**
105
+ * Whether a reference names the variable of the same name set elsewhere rather than the declaration itself: Tailwind's
106
+ * `@theme inline { --font-sans: var(--font-sans); }` is how a theme takes a font a framework sets on the page, and
107
+ * utilities read the outer variable. Anywhere else a declaration that reads itself is a cycle.
108
+ */
109
+ const namesElsewhere = (declaration, ref) => declaration.origin.kind === "tailwind-theme" && ref.name === declaration.name;
110
+ /** What is broken in one theme's declarations. */
111
+ const brokenIn = (layer, isDeclaredElsewhere) => {
112
+ const edges = new Map([...layer].map(([name, each]) => [
113
+ name,
114
+ references(each.value).flatMap((ref) => (namesElsewhere(each, ref) ? [] : [ref.name]))
115
+ ]));
116
+ const broken = [];
117
+ const position = new Map([...layer.keys()].map((name, index) => [name, index]));
118
+ const groupOf = new Map();
119
+ for (const group of cycles(edges)) {
120
+ const ordered = group.toSorted((first, second) => (position.get(first) ?? 0) - (position.get(second) ?? 0));
121
+ for (const name of group)
122
+ groupOf.set(name, ordered);
123
+ }
124
+ for (const [name, declaration] of layer) {
125
+ const group = groupOf.get(name);
126
+ if (group === undefined)
127
+ continue;
128
+ const through = [...group].filter((each) => each !== name);
129
+ broken.push({ declaration, kind: "cycle", through });
130
+ }
131
+ for (const declaration of layer.values()) {
132
+ const missing = references(declaration.value).find((ref) => !ref.hasFallback &&
133
+ !ref.isInFallback &&
134
+ (namesElsewhere(declaration, ref) || !layer.has(ref.name)) &&
135
+ !isDeclaredElsewhere(ref.name));
136
+ if (missing !== undefined)
137
+ broken.push({ declaration, kind: "undeclared", target: missing.name });
138
+ }
139
+ return broken;
140
+ };
141
+ /**
142
+ * The declarations a browser gives no value, in the base and in each theme, each declaration and reason once.
143
+ *
144
+ * @param declarations - every declaration, the lowest priority first, as tokens are resolved from them.
145
+ * @param isDeclaredElsewhere - whether a name these do not declare gets a value from elsewhere: another rule of a sheet,
146
+ * an installed package's sheet, code that sets it.
147
+ */
148
+ export const brokenReferences = (declarations, isDeclaredElsewhere) => {
149
+ const modes = [...new Set(declarations.flatMap((each) => (each.mode === undefined ? [] : [each.mode])))];
150
+ const seen = new Set();
151
+ return [undefined, ...modes].flatMap((mode) => brokenIn(layerOf(declarations, mode), isDeclaredElsewhere).flatMap((broken) => {
152
+ if (seen.has(broken.declaration))
153
+ return [];
154
+ seen.add(broken.declaration);
155
+ return [{ ...broken, mode }];
156
+ }));
157
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * What custom properties come to: the tokens a set of declarations makes, each with its value in every theme.
3
+ *
4
+ * @remarks
5
+ * Pure. A value in a real project is rarely a value: it is `var(--primary)`, `calc(var(--radius) - 2px)`, bare channels
6
+ * that a Tailwind configuration wraps in `hsl()`. These are followed here so that a token compares with what code writes
7
+ * by hand. References are followed within a theme, as the browser does, so a base alias changes with what a theme
8
+ * overrides. What cannot be worked out without a browser (a font a framework injects, `color-mix()`) keeps its text, and
9
+ * `nearestToken.ts` counts it as not compared rather than guessing.
10
+ *
11
+ * @module
12
+ */
13
+ import type { DesignToken, TokenOrigin } from "./designTokens.ts";
14
+ /** A declaration, from a sheet or a configuration, ready to resolve. */
15
+ export type TokenDeclaration = {
16
+ /** Its name, with its dashes. */
17
+ readonly name: string;
18
+ /** Its value, as written. */
19
+ readonly value: string;
20
+ /** The theme it belongs to; none for the base. */
21
+ readonly mode: string | undefined;
22
+ /** Where it was read. */
23
+ readonly origin: TokenOrigin;
24
+ /** What it means, when the place that declares it says (a Tailwind configuration's `colors`). */
25
+ readonly type?: string;
26
+ /** It stands on a selector and not the document: what the document declares of that name stands over it. */
27
+ readonly isScoped?: boolean;
28
+ };
29
+ /**
30
+ * Which references are wrapped in a colour function, from any text that uses them: how bare channels are told from three
31
+ * plain numbers.
32
+ *
33
+ * @param texts - sheets and configurations.
34
+ */
35
+ export declare const colorWrappers: (texts: readonly string[]) => ReadonlyMap<string, "hsl" | "rgb">;
36
+ /**
37
+ * The declarations in force in a theme: its own over the base.
38
+ *
39
+ * @param declarations - every declaration, the lowest priority first.
40
+ * @param mode - the theme; none for the base.
41
+ */
42
+ export declare const layerOf: (declarations: readonly TokenDeclaration[], mode: string | undefined) => ReadonlyMap<string, TokenDeclaration>;
43
+ /**
44
+ * The tokens declarations make, in the order given. Where one name is declared twice in one theme the later stands, as
45
+ * in a browser's cascade.
46
+ *
47
+ * @param declarations - every declaration, the lowest priority first.
48
+ * @param wrappers - which references are wrapped in a colour function.
49
+ */
50
+ export declare const resolvedTokens: (declarations: readonly TokenDeclaration[], wrappers: ReadonlyMap<string, "hsl" | "rgb">) => DesignToken[];
@@ -0,0 +1,233 @@
1
+ /** The kinds of Tailwind's namespaces, which name a token's use whatever its value looks like. */
2
+ const NAMESPACE_TYPES = [
3
+ [/^--breakpoint-/, "breakpoint"],
4
+ [/^--container-/, "container"],
5
+ [/--line-height$|^--leading-/, "number"],
6
+ [/--letter-spacing$|^--tracking-/, "tracking"],
7
+ [/--font-weight$|^--font-weight-/, "fontWeight"],
8
+ [/--font-feature-settings$|--font-variation-settings$/, "fontFeature"],
9
+ [/^--font-size/, "dimension"],
10
+ [/^--font-/, "fontFamily"],
11
+ [/^--color-/, "color"],
12
+ [/^--(?:inset-)?(?:drop-|text-)?shadow-/, "shadow"],
13
+ [/^--ease-/, "cubicBezier"],
14
+ [/^--animate-/, "animation"],
15
+ [/^--blur-|^--perspective-|^--aspect-/, "other"]
16
+ ];
17
+ /** A value that is a colour by its form. */
18
+ const COLOR_VALUE = /^(?:#[0-9a-f]{3,8}|(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\(.*\)|transparent|white|black)$/i;
19
+ /** A value that is a size by its form, `calc()` included. */
20
+ const SIZE_VALUE = /^(?:-?(?:\d+\.?\d*|\.\d+)(?:px|rem|em|vh|vw|ch)|calc\(.*\))$/i;
21
+ /** A value that is a time by its form. */
22
+ const TIME_VALUE = /^(?:\d+\.?\d*|\.\d+)m?s$/i;
23
+ /** A value that is a plain number. */
24
+ const NUMBER_VALUE = /^-?(?:\d+\.?\d*|\.\d+)$/;
25
+ /** Hue, saturation and lightness with no function, which Tailwind's older configurations wrap in one. */
26
+ const BARE_HSL = /^-?\d*\.?\d+(?:deg)?[\s,]+\d*\.?\d+%[\s,]+\d*\.?\d+%$/;
27
+ /** Three numbers with no function, which a sheet or a configuration wraps in `rgb()`. */
28
+ const BARE_RGB = /^\d+\.?\d*[\s,]+\d+\.?\d*[\s,]+\d+\.?\d*$/;
29
+ /** A `var()`, with its fallback. */
30
+ const VAR_CALL = /^var\(\s*(--[\w-]+)\s*(?:,\s*(.*))?\)$/s;
31
+ /** The first `var()` in a longer value, its fallback holding one level of parentheses. */
32
+ const VAR_INSIDE = /var\(\s*(--[\w-]+)\s*(?:,\s*([^()]*(?:\([^()]*\)[^()]*)*))?\)/;
33
+ /** A colour function around a reference: what tells bare channels from any three numbers. */
34
+ const COLOR_WRAPPER = /\b(hsla?|rgba?)\(\s*var\(\s*(--[\w-]+)/g;
35
+ /** The placeholder Tailwind's older configurations write for an opacity. */
36
+ const ALPHA_PLACEHOLDER = /\s*(?:\/|,)\s*<alpha-value>/;
37
+ /** A function around a colour function, as `hsl(oklch(…))`, when a wrapper meets a whole colour. */
38
+ const WRAPPED_COLOR = /^(?:hsla?|rgba?)\(\s*((?:rgba?|hsla?|oklab|oklch|lab|lch|hwb|color)\([^()]*\)|#[0-9a-f]{3,8})\s*(?:\/\s*([^()/]+))?\)$/i;
39
+ /**
40
+ * Which references are wrapped in a colour function, from any text that uses them: how bare channels are told from three
41
+ * plain numbers.
42
+ *
43
+ * @param texts - sheets and configurations.
44
+ */
45
+ export const colorWrappers = (texts) => {
46
+ const wrappers = new Map();
47
+ for (const text of texts) {
48
+ for (const match of text.matchAll(COLOR_WRAPPER)) {
49
+ const [, wrapper = "", name = ""] = match;
50
+ wrappers.set(name, wrapper.toLowerCase().startsWith("hsl") ? "hsl" : "rgb");
51
+ }
52
+ }
53
+ return wrappers;
54
+ };
55
+ /** How many names one value may lead through; past it the stack is at risk, and no system chains this far. */
56
+ const MOST_REFERENCES = 512;
57
+ /** Past this a value is references gone wrong and not a token, in characters. */
58
+ const LONGEST_VALUE = 2000;
59
+ /** Stands for `var` in a reference that cannot be followed, until the following is over. */
60
+ const UNFOLLOWED = "\u0000";
61
+ /** A number with no noise from the arithmetic. */
62
+ const tidy = (value) => String(Math.round(value * 10000) / 10000);
63
+ /** The value of a size in pixels, a rem being 16; none when it has no such unit. */
64
+ const sizeInPixels = (text) => {
65
+ const match = /^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/.exec(text.trim());
66
+ if (match === null)
67
+ return undefined;
68
+ return Number(match[1]) * (match[2] === "rem" ? 16 : 1);
69
+ };
70
+ /** A plain number; none when it has a unit. */
71
+ const plainNumber = (text) => NUMBER_VALUE.test(text.trim()) ? Number(text) : undefined;
72
+ /**
73
+ * `calc()` of known sizes, as sheets write it over a base radius or spacing; none for anything more.
74
+ *
75
+ * @param inner - what is inside the parentheses, its references already followed.
76
+ */
77
+ const calculated = (inner) => {
78
+ const product = /^(\S+)\s*\*\s*(\S+)$/.exec(inner.trim());
79
+ if (product !== null) {
80
+ const [first = "", second = ""] = [product[1], product[2]];
81
+ const size = sizeInPixels(first) ?? sizeInPixels(second);
82
+ const factor = plainNumber(first) ?? plainNumber(second);
83
+ return size === undefined || factor === undefined ? undefined : `${tidy(size * factor)}px`;
84
+ }
85
+ const sum = /^(\S+)\s*([+-])\s*(\S+)$/.exec(inner.trim());
86
+ if (sum === null)
87
+ return undefined;
88
+ const [first, second] = [sizeInPixels(sum[1] ?? ""), sizeInPixels(sum[3] ?? "")];
89
+ if (first === undefined || second === undefined)
90
+ return undefined;
91
+ return `${tidy(sum[2] === "+" ? first + second : first - second)}px`;
92
+ };
93
+ /** A value made plain: its own form, once its references are in. */
94
+ const plainValue = (value, wrapper) => {
95
+ const text = value.replace(ALPHA_PLACEHOLDER, "").trim();
96
+ const [, wrapped, alpha] = WRAPPED_COLOR.exec(text) ?? [];
97
+ if (wrapped !== undefined) {
98
+ // a hex has no room for an opacity written apart, and the colour is what a token compares by
99
+ return alpha === undefined || !wrapped.endsWith(")")
100
+ ? wrapped
101
+ : `${wrapped.slice(0, -1)} / ${alpha.trim()})`;
102
+ }
103
+ if (BARE_HSL.test(text))
104
+ return `hsl(${text})`;
105
+ if (wrapper === "rgb" && BARE_RGB.test(text))
106
+ return `rgb(${text})`;
107
+ const inner = /^calc\((.*)\)$/s.exec(text)?.[1];
108
+ const sum = inner === undefined ? undefined : calculated(inner);
109
+ return sum ?? text;
110
+ };
111
+ /**
112
+ * The declarations in force in a theme: its own over the base.
113
+ *
114
+ * @param declarations - every declaration, the lowest priority first.
115
+ * @param mode - the theme; none for the base.
116
+ */
117
+ export const layerOf = (declarations, mode) => {
118
+ const layer = new Map();
119
+ for (const each of declarations)
120
+ if (each.mode === undefined)
121
+ layer.set(each.name, each);
122
+ if (mode !== undefined)
123
+ for (const each of declarations)
124
+ if (each.mode === mode)
125
+ layer.set(each.name, each);
126
+ return layer;
127
+ };
128
+ /**
129
+ * A declaration's value with every reference it can follow followed; one it cannot keeps its mark all the way out, or the
130
+ * caller would meet it as a new reference. Each name is worked out once: references that lead back in a web of tokens
131
+ * would otherwise take exponentially long, and a browser treats those as invalid anyway.
132
+ */
133
+ const followedText = (name, layer, wrappers, known) => {
134
+ if (known.has(name) || known.size > MOST_REFERENCES)
135
+ return known.get(name);
136
+ const declaration = layer.get(name);
137
+ // while it is being worked out, a reference to it leads back
138
+ known.set(name, undefined);
139
+ if (declaration === undefined)
140
+ return undefined;
141
+ let text = declaration.value;
142
+ for (let match = VAR_INSIDE.exec(text); match !== null; match = VAR_INSIDE.exec(text)) {
143
+ const [whole, target = "", fallback] = match;
144
+ const value = followedText(target, layer, wrappers, known) ?? fallback?.trim();
145
+ // left as written, marked so this loop passes over it: what a browser fills in later is not known here
146
+ text = text.replace(whole, () => value ?? `${UNFOLLOWED}(${target})`);
147
+ if (text.length > LONGEST_VALUE)
148
+ break;
149
+ }
150
+ // references that each hold two more double at every step: such a value is nothing anyone can compare
151
+ const followed = text.length > LONGEST_VALUE ? undefined : plainValue(text, wrappers.get(name));
152
+ known.set(name, followed);
153
+ return followed;
154
+ };
155
+ /** What a declaration comes to, what could not be followed written as the sheet wrote it. */
156
+ const resolvedText = (name, layer, wrappers) => followedText(name, layer, wrappers, new Map())?.replaceAll(UNFOLLOWED, "var");
157
+ /** What a token is, by its namespace, by what declared it, then by the form of its value. */
158
+ const typeOf = (declaration, value) => {
159
+ if (declaration.type !== undefined)
160
+ return declaration.type;
161
+ const named = NAMESPACE_TYPES.find(([pattern]) => pattern.test(declaration.name))?.[1];
162
+ if (named !== undefined)
163
+ return named;
164
+ // Tailwind's `--text-*` are font sizes, and `--text-*` elsewhere may be a text's colour
165
+ if (COLOR_VALUE.test(value))
166
+ return "color";
167
+ if (SIZE_VALUE.test(value))
168
+ return "dimension";
169
+ if (TIME_VALUE.test(value))
170
+ return "duration";
171
+ if (NUMBER_VALUE.test(value))
172
+ return /weight/i.test(declaration.name) ? "fontWeight" : "number";
173
+ if (/font|family|typeface/i.test(declaration.name))
174
+ return "fontFamily";
175
+ if (/shadow/i.test(declaration.name))
176
+ return "shadow";
177
+ if (/^cubic-bezier\(/.test(value))
178
+ return "cubicBezier";
179
+ return "other";
180
+ };
181
+ /** The token a value aliases, when it is nothing else. */
182
+ const aliasOf = (value) => VAR_CALL.exec(value.trim())?.[1];
183
+ /** How code writes a token through Tailwind: the end of a class, for what makes utilities. */
184
+ const utilityOf = (name, origin) => {
185
+ if (origin.kind === "css-variables")
186
+ return undefined;
187
+ const match = /^--(?:color|spacing|radius|text|shadow)-(.+)$/.exec(name);
188
+ return match === null || name.includes("--", 2) ? undefined : match[1];
189
+ };
190
+ /**
191
+ * The tokens declarations make, in the order given. Where one name is declared twice in one theme the later stands, as
192
+ * in a browser's cascade.
193
+ *
194
+ * @param declarations - every declaration, the lowest priority first.
195
+ * @param wrappers - which references are wrapped in a colour function.
196
+ */
197
+ export const resolvedTokens = (declarations, wrappers) => {
198
+ const base = layerOf(declarations, undefined);
199
+ const modes = [...new Set(declarations.flatMap((each) => (each.mode === undefined ? [] : [each.mode])))];
200
+ const layers = new Map(modes.map((mode) => [mode, layerOf(declarations, mode)]));
201
+ const names = new Set(declarations.map((each) => each.name));
202
+ return [...names].flatMap((name) => {
203
+ const inBase = base.get(name);
204
+ const themed = modes.flatMap((mode) => {
205
+ const layer = layers.get(mode);
206
+ const text = layer === undefined ? undefined : resolvedText(name, layer, wrappers);
207
+ if (text === undefined)
208
+ return [];
209
+ return [{ mode, text, declared: declarations.some((d) => d.mode === mode && d.name === name) }];
210
+ });
211
+ const baseText = resolvedText(name, base, wrappers);
212
+ const value = baseText ?? themed[0]?.text;
213
+ const declaration = inBase ?? declarations.find((each) => each.name === name);
214
+ if (value === undefined || declaration === undefined)
215
+ return [];
216
+ const utility = utilityOf(name, declaration.origin);
217
+ const alias = aliasOf(declaration.value);
218
+ return [
219
+ {
220
+ name,
221
+ type: typeOf(declaration, value),
222
+ value,
223
+ ...(alias === undefined ? {} : { alias }),
224
+ modes: Object.fromEntries(themed
225
+ .filter((each) => each.declared || each.text !== baseText)
226
+ .map((each) => [each.mode, each.text])),
227
+ ...(inBase === undefined ? { isThemeOnly: true } : {}),
228
+ origin: declaration.origin,
229
+ ...(utility === undefined ? {} : { utility })
230
+ }
231
+ ];
232
+ });
233
+ };
@@ -37,6 +37,30 @@ export type DesignToken = {
37
37
  readonly isThemeOnly?: true;
38
38
  /** The source that gives it, by its id or, when it writes none, by its module; none for the catalogue's own. */
39
39
  readonly source?: string;
40
+ /** Where the application itself declares it, for a token read from its style sheets or its Tailwind configuration. */
41
+ readonly origin?: TokenOrigin;
42
+ /** The end of a Tailwind class that writes it (`primary` for `bg-primary`), when it makes utilities. */
43
+ readonly utility?: string;
44
+ };
45
+ /** What one file gave a catalogue's tokens. */
46
+ export type TokenSource = {
47
+ /** What kind of file: a tokens file the catalogue names, or what an application already has. */
48
+ readonly kind: "tokens-file" | "components-json" | TokenOriginKind;
49
+ /** The file, relative to the catalogue. */
50
+ readonly file: string;
51
+ /** How many tokens it gives; none for a tokens file, whose names later files may replace. */
52
+ readonly tokens?: number;
53
+ };
54
+ /** What a token read from an application was read from. */
55
+ export type TokenOriginKind = "css-variables" | "tailwind-theme" | "tailwind-config" | "tailwind-default";
56
+ /** Where an application declares a token. */
57
+ export type TokenOrigin = {
58
+ /** What kind of source. */
59
+ readonly kind: TokenOriginKind;
60
+ /** Its file, relative to the catalogue. */
61
+ readonly file: string;
62
+ /** The line, from 1. */
63
+ readonly line?: number;
40
64
  };
41
65
  /** What the files gave. */
42
66
  export type ParsedTokens = {
@@ -275,7 +275,11 @@ const resolvedValue = (raw, byName) => {
275
275
  return `${raw.name}: it says ${raw.ownType}, its alias is ${targetType}`;
276
276
  }
277
277
  try {
278
- return { text: valueText(followed(raw.value, byName, new Set([raw.name])), type), type };
278
+ const text = valueText(followed(raw.value, byName, new Set([raw.name])), type);
279
+ // an empty value draws nothing, and a browser drops it in silence
280
+ if (text.trim() === "")
281
+ return `${raw.name}: its value comes to nothing, so a browser gives it none`;
282
+ return { text, type };
279
283
  }
280
284
  catch (error) {
281
285
  return `${raw.name}: ${error instanceof Error ? error.message : String(error)}`;
@@ -26,6 +26,11 @@ export type DocsRequest = {
26
26
  } | {
27
27
  /** A source file changed: the programs are renewed on their next read. */
28
28
  readonly kind: "changed";
29
+ } | {
30
+ /** A build's story files: each program holds what they reach rather than its whole configuration. */
31
+ readonly kind: "stories";
32
+ /** The story files, absolute. */
33
+ readonly files: readonly string[];
29
34
  };
30
35
  /** The worker's answer to a request, of the request's kind. */
31
36
  export type DocsResponse = {
@@ -57,10 +62,11 @@ export type DocsExtractor = {
57
62
  /** What a group of story files' stories render, and the import graph they reach. */
58
63
  readonly usage: (files: readonly UsageRequestFile[]) => Promise<UsageResult>;
59
64
  /**
60
- * Builds the program that holds a story file ahead of its first read, while the worker has nothing else to do, when
61
- * the disk keeps no docs: a first start, or a build, starts the worker while Vite still loads the pages.
65
+ * Builds the program that holds a group's first story file ahead of its first read, while the worker has nothing else
66
+ * to do, when the disk keeps no docs: a first start, or a build, starts the worker while Vite still loads the pages.
67
+ * A build's worker is told every file of the group first, so its programs hold what the stories reach.
62
68
  */
63
- readonly warm: (storyFile: string) => void;
69
+ readonly warm: (storyFiles: readonly string[]) => void;
64
70
  /** Tells the worker a source file changed, so the next read sees it. */
65
71
  readonly changed: () => void;
66
72
  /**
@@ -199,7 +199,7 @@ export const createDocsExtractor = (docsModule, { readsEverything = false, cache
199
199
  };
200
200
  // a request's answer, or why the worker stopped before giving it
201
201
  const send = (request, resolve) => {
202
- if (request.kind === "changed")
202
+ if (request.kind === "changed" || request.kind === "stories")
203
203
  return;
204
204
  pending.set(request.id, resolve);
205
205
  started().postMessage(request);
@@ -257,12 +257,20 @@ export const createDocsExtractor = (docsModule, { readsEverything = false, cache
257
257
  const request = { kind: "changed" };
258
258
  worker?.postMessage(request);
259
259
  },
260
- warm: (storyFile) => {
260
+ warm: (storyFiles) => {
261
+ if (readsEverything && storyFiles.length > 0) {
262
+ // before any read of them, so no program is built whole first
263
+ const request = { kind: "stories", files: storyFiles };
264
+ started().postMessage(request);
265
+ }
261
266
  // only a first start, which the disk can answer nothing for: a later one reads each page's docs from the disk
262
267
  // and builds a program only for one it misses, so it stays without one until then
263
268
  if (isKeptRead && docsCache !== undefined && !docsCache.isEmpty())
264
269
  return;
265
- warmUps.push(storyFile);
270
+ const [first] = storyFiles;
271
+ if (first === undefined)
272
+ return;
273
+ warmUps.push(first);
266
274
  sendWarmUp();
267
275
  },
268
276
  listed: () => {