forgebook 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +914 -72
- package/dist/bin/forgebook/agentClient.d.ts +2 -1
- package/dist/bin/forgebook/agentClient.js +13 -6
- package/dist/bin/forgebook/agentGuide.d.ts +59 -0
- package/dist/bin/forgebook/agentGuide.js +203 -0
- package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
- package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
- package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
- package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
- package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
- package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
- package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
- package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
- package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
- package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
- package/dist/bin/forgebook/agentText.d.ts +23 -3
- package/dist/bin/forgebook/agentText.js +175 -28
- package/dist/bin/forgebook/agents.md +20 -191
- package/dist/bin/forgebook/agentsText.js +2 -1
- package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
- package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
- package/dist/bin/forgebook/auditCommand.d.mts +8 -0
- package/dist/bin/forgebook/auditCommand.mjs +75 -0
- package/dist/bin/forgebook/auditRun.d.ts +95 -0
- package/dist/bin/forgebook/auditRun.js +270 -0
- package/dist/bin/forgebook/browserRun.d.ts +21 -0
- package/dist/bin/forgebook/browserRun.js +57 -0
- package/dist/bin/forgebook/buildFailure.d.ts +7 -0
- package/dist/bin/forgebook/buildFailure.js +47 -0
- package/dist/bin/forgebook/buildWatch.d.ts +52 -0
- package/dist/bin/forgebook/buildWatch.js +137 -0
- package/dist/bin/forgebook/builtCatalogue.js +9 -5
- package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
- package/dist/bin/forgebook/catalogueCommands.js +23 -0
- package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
- package/dist/bin/forgebook/catalogueVite.js +14 -6
- package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
- package/dist/bin/forgebook/commandCacheClaim.js +170 -0
- package/dist/bin/forgebook/commandServer.d.ts +8 -0
- package/dist/bin/forgebook/commandServer.js +61 -13
- package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
- package/dist/bin/forgebook/graphCommand.d.mts +8 -0
- package/dist/bin/forgebook/graphCommand.mjs +84 -0
- package/dist/bin/forgebook/guide/commands.md +57 -0
- package/dist/bin/forgebook/guide/devices.md +17 -0
- package/dist/bin/forgebook/guide/docs-pages.md +13 -0
- package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
- package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
- package/dist/bin/forgebook/guide/links.md +29 -0
- package/dist/bin/forgebook/guide/setup.md +23 -0
- package/dist/bin/forgebook/guide/stories.md +90 -0
- package/dist/bin/forgebook/guide/switches.md +43 -0
- package/dist/bin/forgebook/guideCommand.d.mts +13 -0
- package/dist/bin/forgebook/guideCommand.mjs +37 -0
- package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
- package/dist/bin/forgebook/importers/storybook.js +11 -5
- package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
- package/dist/bin/forgebook/initCommands.d.mts +11 -0
- package/dist/bin/forgebook/initCommands.mjs +51 -78
- package/dist/bin/forgebook/initConfig.d.ts +5 -3
- package/dist/bin/forgebook/initConfig.js +6 -3
- package/dist/bin/forgebook/initInstall.d.ts +15 -0
- package/dist/bin/forgebook/initInstall.js +77 -0
- package/dist/bin/forgebook/initPrint.d.ts +9 -0
- package/dist/bin/forgebook/initPrint.js +60 -0
- package/dist/bin/forgebook/initRefusals.d.ts +45 -0
- package/dist/bin/forgebook/initRefusals.js +91 -0
- package/dist/bin/forgebook/initRun.d.ts +28 -0
- package/dist/bin/forgebook/initRun.js +311 -0
- package/dist/bin/forgebook/mcpCommand.mjs +38 -4
- package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
- package/dist/bin/forgebook/mcpGraph.js +24 -0
- package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
- package/dist/bin/forgebook/mcpTokens.js +58 -0
- package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
- package/dist/bin/forgebook/mcpToolParts.js +10 -0
- package/dist/bin/forgebook/mcpTools.d.ts +13 -6
- package/dist/bin/forgebook/mcpTools.js +57 -90
- package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
- package/dist/bin/forgebook/mcpVerify.js +36 -0
- package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
- package/dist/bin/forgebook/migrate/codemods.js +61 -0
- package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
- package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
- package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
- package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
- package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
- package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
- package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
- package/dist/bin/forgebook/migrate/migrateText.js +30 -0
- package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
- package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
- package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
- package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
- package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
- package/dist/bin/forgebook/newProject/newProject.js +180 -0
- package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
- package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
- package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
- package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
- package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
- package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
- package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
- package/dist/bin/forgebook/newProject/projectLook.js +293 -0
- package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
- package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
- package/dist/bin/forgebook/newRepair.d.ts +45 -0
- package/dist/bin/forgebook/newRepair.js +157 -0
- package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
- package/dist/bin/forgebook/newRepairRun.js +148 -0
- package/dist/bin/forgebook/newStories.d.ts +23 -1
- package/dist/bin/forgebook/newStories.js +101 -11
- package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
- package/dist/bin/forgebook/newStoriesFile.js +43 -4
- package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
- package/dist/bin/forgebook/prebundleRun.js +28 -8
- package/dist/bin/forgebook/proofCommand.d.mts +15 -0
- package/dist/bin/forgebook/proofCommand.mjs +212 -0
- package/dist/bin/forgebook/proofRun.d.ts +63 -0
- package/dist/bin/forgebook/proofRun.js +412 -0
- package/dist/bin/forgebook/proofText.d.ts +36 -0
- package/dist/bin/forgebook/proofText.js +131 -0
- package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
- package/dist/bin/forgebook/proofWorkflow.js +205 -0
- package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
- package/dist/bin/forgebook/setArgsTool.js +70 -0
- package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
- package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
- package/dist/bin/forgebook/storyCheckRun.js +83 -9
- package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
- package/dist/bin/forgebook/storyFileIds.js +14 -0
- package/dist/bin/forgebook/stressCases.d.ts +31 -0
- package/dist/bin/forgebook/stressCases.js +79 -0
- package/dist/bin/forgebook/stressRun.d.ts +12 -0
- package/dist/bin/forgebook/stressRun.js +61 -0
- package/dist/bin/forgebook/stressText.d.ts +27 -0
- package/dist/bin/forgebook/stressText.js +46 -0
- package/dist/bin/forgebook/verifyBase.d.ts +45 -0
- package/dist/bin/forgebook/verifyBase.js +196 -0
- package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
- package/dist/bin/forgebook/verifyCommand.mjs +125 -0
- package/dist/bin/forgebook/verifyRun.d.ts +63 -0
- package/dist/bin/forgebook/verifyRun.js +108 -0
- package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
- package/dist/bin/forgebook/verifyVerdict.js +297 -0
- package/dist/bin/forgebook/workflowActions.d.ts +23 -0
- package/dist/bin/forgebook/workflowActions.js +23 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
- package/dist/src/addressArgs.d.ts +29 -5
- package/dist/src/addressArgs.js +58 -16
- package/dist/src/addressArgsParam.d.ts +54 -0
- package/dist/src/addressArgsParam.js +51 -0
- package/dist/src/addressTexts.d.ts +14 -0
- package/dist/src/addressTexts.js +28 -21
- package/dist/src/agentIndexFile.d.ts +11 -0
- package/dist/src/agentIndexFile.js +11 -0
- package/dist/src/argConditions.d.ts +52 -0
- package/dist/src/argConditions.js +80 -0
- package/dist/src/argControl.d.ts +100 -0
- package/dist/src/argControl.js +0 -0
- package/dist/src/argExpression.d.ts +21 -0
- package/dist/src/argExpression.js +30 -0
- package/dist/src/argTypes.d.ts +40 -51
- package/dist/src/argTypes.js +66 -184
- package/dist/src/argsProps.d.ts +3 -3
- package/dist/src/argsProps.js +11 -5
- package/dist/src/bundlerErrors.d.ts +29 -0
- package/dist/src/bundlerErrors.js +49 -0
- package/dist/src/catalogue.d.ts +31 -0
- package/dist/src/catalogue.js +13 -2
- package/dist/src/catalogueRefs.d.ts +75 -0
- package/dist/src/catalogueRefs.js +122 -0
- package/dist/src/componentDocs.d.ts +71 -0
- package/dist/src/componentDocs.js +15 -2
- package/dist/src/frame/callValues.d.ts +19 -0
- package/dist/src/frame/callValues.js +58 -0
- package/dist/src/frame/canvasScheme.d.ts +33 -0
- package/dist/src/frame/canvasScheme.js +67 -0
- package/dist/src/frame/frame.css +36 -3
- package/dist/src/frame/frameStatus.d.ts +16 -1
- package/dist/src/frame/frameStatus.js +16 -1
- package/dist/src/frame/frameView.js +4 -3
- package/dist/src/frame/mountFrame.d.ts +7 -1
- package/dist/src/frame/mountFrame.js +153 -46
- package/dist/src/frame/panelValues.d.ts +35 -0
- package/dist/src/frame/panelValues.js +127 -0
- package/dist/src/frame/playActions.d.ts +39 -0
- package/dist/src/frame/playActions.js +98 -0
- package/dist/src/frame/playStepper.d.ts +28 -0
- package/dist/src/frame/playStepper.js +38 -0
- package/dist/src/frame/playStory.d.ts +9 -1
- package/dist/src/frame/playStory.js +49 -3
- package/dist/src/frame/renderer.d.ts +34 -1
- package/dist/src/frame/renderer.js +24 -0
- package/dist/src/frame/shellChannel.d.ts +1 -1
- package/dist/src/frame/shellChannel.js +1 -1
- package/dist/src/frame/shellCheck.d.ts +17 -0
- package/dist/src/frame/shellCheck.js +25 -0
- package/dist/src/frame/shellMessageCheck.d.ts +7 -0
- package/dist/src/frame/shellMessageCheck.js +53 -0
- package/dist/src/frame/storyContent.d.ts +50 -0
- package/dist/src/frame/storyContent.js +73 -0
- package/dist/src/frame/storyModule.d.ts +9 -0
- package/dist/src/frame/storyModule.js +20 -2
- package/dist/src/frame/storyRun.d.ts +15 -7
- package/dist/src/frame/storyRun.js +64 -15
- package/dist/src/frame/valueSheets.d.ts +35 -0
- package/dist/src/frame/valueSheets.js +99 -0
- package/dist/src/hotModules.d.ts +20 -0
- package/dist/src/hotModules.js +23 -0
- package/dist/src/jsxCode.d.ts +1 -14
- package/dist/src/jsxCode.js +46 -10
- package/dist/src/liveErrors.d.ts +30 -4
- package/dist/src/liveErrors.js +18 -3
- package/dist/src/messages.d.ts +77 -27
- package/dist/src/messages.js +58 -100
- package/dist/src/namedValues.d.ts +2 -26
- package/dist/src/namedValues.js +0 -47
- package/dist/src/pageConfig.d.ts +2 -0
- package/dist/src/playTrace.d.ts +19 -2
- package/dist/src/playTrace.js +10 -5
- package/dist/src/plugin.d.ts +10 -3
- package/dist/src/previewRelay.js +9 -1
- package/dist/src/printable.d.ts +12 -0
- package/dist/src/printable.js +22 -0
- package/dist/src/propsSignature.d.ts +37 -0
- package/dist/src/propsSignature.js +40 -0
- package/dist/src/search.d.ts +41 -5
- package/dist/src/search.js +93 -23
- package/dist/src/searchMatch.d.ts +4 -1
- package/dist/src/searchMatch.js +26 -5
- package/dist/src/searchTypos.d.ts +88 -0
- package/dist/src/searchTypos.js +178 -0
- package/dist/src/shapeValues.d.ts +86 -0
- package/dist/src/shapeValues.js +295 -0
- package/dist/src/shell/ApiReference.js +6 -3
- package/dist/src/shell/ApiTableBox.d.ts +15 -0
- package/dist/src/shell/ApiTableBox.js +11 -0
- package/dist/src/shell/AppearanceMenu.d.ts +4 -1
- package/dist/src/shell/AppearanceMenu.js +9 -6
- package/dist/src/shell/CodeTab.d.ts +3 -2
- package/dist/src/shell/CodeTab.js +3 -2
- package/dist/src/shell/CodeText.d.ts +1 -1
- package/dist/src/shell/CodeText.js +2 -3
- package/dist/src/shell/CompareGrid.js +1 -1
- package/dist/src/shell/ComponentPage.d.ts +1 -1
- package/dist/src/shell/ComponentPage.js +5 -1
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +132 -0
- package/dist/src/shell/DocContainers.js +1 -1
- package/dist/src/shell/DocPage.js +2 -2
- package/dist/src/shell/DroppedArgsList.d.ts +2 -2
- package/dist/src/shell/DroppedArgsList.js +1 -1
- package/dist/src/shell/EmbedPage.js +30 -12
- package/dist/src/shell/Example.d.ts +5 -1
- package/dist/src/shell/Example.js +16 -8
- package/dist/src/shell/FrameView.d.ts +6 -3
- package/dist/src/shell/FrameView.js +2 -2
- package/dist/src/shell/HomePage.d.ts +3 -1
- package/dist/src/shell/HomePage.js +16 -6
- package/dist/src/shell/InfoTip.js +2 -2
- package/dist/src/shell/InteractionsTab.d.ts +11 -4
- package/dist/src/shell/InteractionsTab.js +18 -2
- package/dist/src/shell/LazyPage.js +1 -1
- package/dist/src/shell/PackageHtml.js +3 -1
- package/dist/src/shell/PinnedControl.js +14 -62
- package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
- package/dist/src/shell/PinnedControlMenu.js +72 -0
- package/dist/src/shell/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +23 -2
- package/dist/src/shell/PropRows.js +58 -19
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -21
- package/dist/src/shell/RefStoryPage.d.ts +33 -0
- package/dist/src/shell/RefStoryPage.js +123 -0
- package/dist/src/shell/SearchPanel.js +51 -24
- package/dist/src/shell/Shell.d.ts +18 -0
- package/dist/src/shell/Shell.js +137 -22
- package/dist/src/shell/ShortcutHelp.d.ts +22 -0
- package/dist/src/shell/ShortcutHelp.js +66 -0
- package/dist/src/shell/Sidebar.d.ts +17 -4
- package/dist/src/shell/Sidebar.js +92 -41
- package/dist/src/shell/SidebarDocs.js +2 -2
- package/dist/src/shell/SidebarEntries.js +5 -3
- package/dist/src/shell/SidebarHandle.d.ts +3 -5
- package/dist/src/shell/SidebarHandle.js +4 -4
- package/dist/src/shell/SidebarRefs.d.ts +39 -0
- package/dist/src/shell/SidebarRefs.js +99 -0
- package/dist/src/shell/SidebarSearch.js +37 -9
- package/dist/src/shell/SignatureReference.js +3 -1
- package/dist/src/shell/Stage.d.ts +10 -2
- package/dist/src/shell/Stage.js +29 -49
- package/dist/src/shell/StatusBadges.d.ts +54 -0
- package/dist/src/shell/StatusBadges.js +77 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
- package/dist/src/shell/StoryCodeBlock.js +7 -6
- package/dist/src/shell/SwitchGallery.d.ts +36 -0
- package/dist/src/shell/SwitchGallery.js +17 -0
- package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
- package/dist/src/shell/SwitchGalleryPanel.js +99 -0
- package/dist/src/shell/TagFilter.d.ts +24 -0
- package/dist/src/shell/TagFilter.js +45 -0
- package/dist/src/shell/TagViews.d.ts +39 -0
- package/dist/src/shell/TagViews.js +20 -0
- package/dist/src/shell/Toolbar.d.ts +4 -1
- package/dist/src/shell/Toolbar.js +17 -7
- package/dist/src/shell/ToolbarControl.d.ts +3 -0
- package/dist/src/shell/ToolbarControl.js +23 -6
- package/dist/src/shell/ViewMenuPanel.js +6 -1
- package/dist/src/shell/argChecks.d.ts +22 -0
- package/dist/src/shell/argChecks.js +20 -0
- package/dist/src/shell/asideStory.js +7 -2
- package/dist/src/shell/audienceSections.css +9 -9
- package/dist/src/shell/catalogueContext.d.ts +1 -1
- package/dist/src/shell/catalogueContext.js +6 -1
- package/dist/src/shell/codeSpans.d.ts +27 -0
- package/dist/src/shell/codeSpans.js +76 -0
- package/dist/src/shell/compareVariants.d.ts +4 -2
- package/dist/src/shell/compareVariants.js +16 -8
- package/dist/src/shell/composition.d.ts +23 -0
- package/dist/src/shell/composition.js +26 -0
- package/dist/src/shell/controlCycle.d.ts +1 -1
- package/dist/src/shell/controlCycle.js +3 -2
- package/dist/src/shell/customControls.d.ts +55 -0
- package/dist/src/shell/customControls.js +70 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +28 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/framesOrigin.d.ts +7 -0
- package/dist/src/shell/framesOrigin.js +1 -1
- package/dist/src/shell/galleryPlace.d.ts +20 -0
- package/dist/src/shell/galleryPlace.js +26 -0
- package/dist/src/shell/icons.d.ts +1 -0
- package/dist/src/shell/icons.js +1 -0
- package/dist/src/shell/keyboard.d.ts +14 -12
- package/dist/src/shell/keyboard.js +21 -6
- package/dist/src/shell/laterStrings.d.ts +29 -0
- package/dist/src/shell/laterStrings.js +42 -3
- package/dist/src/shell/mountShell.js +3 -0
- package/dist/src/shell/pageStrings.d.ts +4 -0
- package/dist/src/shell/pageStrings.js +4 -0
- package/dist/src/shell/pageTagView.d.ts +18 -0
- package/dist/src/shell/pageTagView.js +10 -0
- package/dist/src/shell/playMemory.d.ts +14 -0
- package/dist/src/shell/playMemory.js +8 -0
- package/dist/src/shell/propNotes.d.ts +23 -0
- package/dist/src/shell/propNotes.js +37 -0
- package/dist/src/shell/refIndexLoad.d.ts +17 -0
- package/dist/src/shell/refIndexLoad.js +38 -0
- package/dist/src/shell/refParts.d.ts +34 -0
- package/dist/src/shell/refParts.js +9 -0
- package/dist/src/shell/refStory.css +21 -0
- package/dist/src/shell/refStrings.d.ts +13 -0
- package/dist/src/shell/refStrings.js +21 -0
- package/dist/src/shell/search.css +11 -11
- package/dist/src/shell/shell.css +348 -168
- package/dist/src/shell/shellScheme.js +2 -2
- package/dist/src/shell/shortcutHelp.css +64 -0
- package/dist/src/shell/stageArgs.d.ts +53 -0
- package/dist/src/shell/stageArgs.js +64 -0
- package/dist/src/shell/statusBadges.css +51 -0
- package/dist/src/shell/strings.d.ts +7 -16
- package/dist/src/shell/strings.js +12 -17
- package/dist/src/shell/switchGallery.css +104 -0
- package/dist/src/shell/tagFilter.css +46 -0
- package/dist/src/shell/tagView.d.ts +20 -0
- package/dist/src/shell/tagView.js +10 -0
- package/dist/src/shell/useAddressArgs.d.ts +9 -0
- package/dist/src/shell/useAddressArgs.js +56 -11
- package/dist/src/shell/useControlKeys.js +2 -2
- package/dist/src/shell/useEditedProblems.d.ts +6 -0
- package/dist/src/shell/useEditedProblems.js +40 -0
- package/dist/src/shell/useFrameMessages.js +3 -0
- package/dist/src/shell/useListedTree.d.ts +13 -0
- package/dist/src/shell/useListedTree.js +32 -0
- package/dist/src/shell/usePageFrames.js +2 -2
- package/dist/src/shell/usePopover.d.ts +5 -0
- package/dist/src/shell/usePopover.js +7 -1
- package/dist/src/shell/useRefIndex.d.ts +22 -0
- package/dist/src/shell/useRefIndex.js +36 -0
- package/dist/src/shell/useScrollStops.d.ts +20 -0
- package/dist/src/shell/useScrollStops.js +41 -0
- package/dist/src/shell/useShortcutHelp.d.ts +18 -0
- package/dist/src/shell/useShortcutHelp.js +32 -0
- package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
- package/dist/src/shell/useSidebarOverlay.js +12 -4
- package/dist/src/shell/useStoryCode.d.ts +2 -1
- package/dist/src/shell/useStoryCode.js +12 -7
- package/dist/src/shell/useToolbarLayout.d.ts +5 -1
- package/dist/src/shell/useToolbarLayout.js +2 -2
- package/dist/src/shell/useWorstCase.d.ts +8 -2
- package/dist/src/shell/useWorstCase.js +2 -2
- package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
- package/dist/src/shell/valueEditors/FileEditor.js +66 -0
- package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
- package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
- package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
- package/dist/src/shell/valueEditors/ListEditor.js +82 -0
- package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
- package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
- package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
- package/dist/src/shell/valueEditors/PropEditor.js +53 -0
- package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
- package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
- package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
- package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
- package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
- package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
- package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
- package/dist/src/shell/valueEditors/ValueField.js +147 -0
- package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
- package/dist/src/shell/valueEditors/editorStrings.js +66 -0
- package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
- package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
- package/dist/src/shell/valueEditors/valueEditors.css +153 -0
- package/dist/src/shell/worstArgs.d.ts +8 -5
- package/dist/src/shell/worstArgs.js +14 -7
- package/dist/src/shellTheme.d.ts +1 -1
- package/dist/src/shellTheme.js +15 -1
- package/dist/src/shellTheme.types.d.ts +4 -0
- package/dist/src/shellWord.d.ts +12 -0
- package/dist/src/shellWord.js +15 -0
- package/dist/src/sourceFiles.js +2 -1
- package/dist/src/storyArgTypes.d.ts +57 -0
- package/dist/src/storyArgTypes.js +195 -0
- package/dist/src/storyBackground.js +14 -3
- package/dist/src/storyCheck.d.ts +85 -3
- package/dist/src/storyCheck.js +23 -1
- package/dist/src/storyCodeText.d.ts +46 -0
- package/dist/src/storyCodeText.js +27 -0
- package/dist/src/storyControls.d.ts +100 -0
- package/dist/src/storyControls.js +100 -0
- package/dist/src/storyStatuses.d.ts +55 -0
- package/dist/src/storyStatuses.js +104 -0
- package/dist/src/storyTagNames.d.ts +25 -0
- package/dist/src/storyTagNames.js +25 -0
- package/dist/src/storyTags.d.ts +29 -0
- package/dist/src/storyTags.js +85 -0
- package/dist/src/storyTree.d.ts +13 -0
- package/dist/src/storyTree.js +24 -4
- package/dist/src/storybookArgs.d.ts +24 -0
- package/dist/src/storybookArgs.js +185 -0
- package/dist/src/switches.d.ts +66 -3
- package/dist/src/switches.js +42 -1
- package/dist/src/valueSchema.d.ts +28 -0
- package/dist/src/valueSchema.js +196 -0
- package/dist/src/valueShape.d.ts +94 -0
- package/dist/src/valueShape.js +25 -0
- package/dist/src/viewState.d.ts +8 -3
- package/dist/src/viewState.js +27 -10
- package/dist/src/vite/adapter.d.ts +40 -2
- package/dist/src/vite/adapter.js +1 -0
- package/dist/src/vite/agent.types.d.ts +347 -7
- package/dist/src/vite/agentApi.d.ts +23 -0
- package/dist/src/vite/agentApi.js +90 -17
- package/dist/src/vite/agentIndex.d.ts +0 -2
- package/dist/src/vite/agentIndex.js +5 -6
- package/dist/src/vite/agentRoutes.d.ts +20 -1
- package/dist/src/vite/agentRoutes.js +106 -65
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +48 -0
- package/dist/src/vite/agentStoryCode.js +38 -0
- package/dist/src/vite/agentVisibility.d.ts +47 -0
- package/dist/src/vite/agentVisibility.js +174 -0
- package/dist/src/vite/appAudit.d.ts +134 -0
- package/dist/src/vite/appAudit.js +333 -0
- package/dist/src/vite/appBuildOption.d.ts +53 -0
- package/dist/src/vite/appBuildOption.js +55 -0
- package/dist/src/vite/appTokenFiles.d.ts +92 -0
- package/dist/src/vite/appTokenFiles.js +433 -0
- package/dist/src/vite/appTokens.d.ts +23 -0
- package/dist/src/vite/appTokens.js +275 -0
- package/dist/src/vite/builtTexts.d.ts +10 -0
- package/dist/src/vite/builtTexts.js +59 -22
- package/dist/src/vite/catalogueConfig.d.ts +3 -1
- package/dist/src/vite/catalogueConfig.js +15 -3
- package/dist/src/vite/changeCoverage.d.ts +74 -0
- package/dist/src/vite/changeCoverage.js +120 -0
- package/dist/src/vite/changedRoute.d.ts +30 -0
- package/dist/src/vite/changedRoute.js +197 -0
- package/dist/src/vite/checkCode.d.ts +105 -3
- package/dist/src/vite/checkCode.js +323 -36
- package/dist/src/vite/checkoutWatch.d.ts +97 -0
- package/dist/src/vite/checkoutWatch.js +287 -0
- package/dist/src/vite/closeWatch.d.ts +8 -0
- package/dist/src/vite/closeWatch.js +1 -1
- package/dist/src/vite/componentCache.d.ts +8 -0
- package/dist/src/vite/componentCache.js +66 -0
- package/dist/src/vite/componentGraph.d.ts +71 -0
- package/dist/src/vite/componentGraph.js +133 -0
- package/dist/src/vite/componentRules.d.ts +33 -0
- package/dist/src/vite/componentRules.js +105 -0
- package/dist/src/vite/componentScan.d.ts +69 -0
- package/dist/src/vite/componentScan.js +418 -0
- package/dist/src/vite/compositionCheck.d.ts +15 -0
- package/dist/src/vite/compositionCheck.js +243 -0
- package/dist/src/vite/config.d.ts +32 -1
- package/dist/src/vite/configFile.d.ts +14 -2
- package/dist/src/vite/configFile.js +124 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +171 -0
- package/dist/src/vite/configLoadError.d.ts +23 -0
- package/dist/src/vite/configLoadError.js +71 -0
- package/dist/src/vite/cssDeclarations.d.ts +71 -0
- package/dist/src/vite/cssDeclarations.js +290 -0
- package/dist/src/vite/cssImports.d.ts +14 -0
- package/dist/src/vite/cssImports.js +48 -0
- package/dist/src/vite/cssReferences.d.ts +54 -0
- package/dist/src/vite/cssReferences.js +157 -0
- package/dist/src/vite/cssTokenValues.d.ts +50 -0
- package/dist/src/vite/cssTokenValues.js +233 -0
- package/dist/src/vite/designTokens.d.ts +24 -0
- package/dist/src/vite/designTokens.js +5 -1
- package/dist/src/vite/docsExtractor.d.ts +9 -3
- package/dist/src/vite/docsExtractor.js +11 -3
- package/dist/src/vite/docsProgram.d.ts +17 -4
- package/dist/src/vite/docsProgram.js +52 -11
- package/dist/src/vite/docsWorker.js +7 -2
- package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
- package/dist/src/vite/emptyStoryGlobs.js +52 -0
- package/dist/src/vite/fileImports.d.ts +17 -0
- package/dist/src/vite/fileImports.js +57 -0
- package/dist/src/vite/findComponent.d.ts +10 -2
- package/dist/src/vite/findComponent.js +27 -22
- package/dist/src/vite/findRoute.js +3 -2
- package/dist/src/vite/forcedStates.d.ts +9 -2
- package/dist/src/vite/forcedStates.js +12 -3
- package/dist/src/vite/forgebookPlugin.d.ts +2 -0
- package/dist/src/vite/forgebookPlugin.js +52 -72
- package/dist/src/vite/frameErrors.d.ts +19 -0
- package/dist/src/vite/frameErrors.js +70 -0
- package/dist/src/vite/framesServer.d.ts +12 -0
- package/dist/src/vite/framesServer.js +21 -4
- package/dist/src/vite/functionComponentDocs.js +81 -12
- package/dist/src/vite/generatedModules.js +4 -2
- package/dist/src/vite/gitChange.d.ts +38 -5
- package/dist/src/vite/gitChange.js +71 -11
- package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
- package/dist/src/vite/hiddenStoryFiles.js +107 -0
- package/dist/src/vite/hotSnippets.d.ts +38 -14
- package/dist/src/vite/hotSnippets.js +137 -39
- package/dist/src/vite/importedNames.d.ts +37 -0
- package/dist/src/vite/importedNames.js +138 -0
- package/dist/src/vite/indexFields.d.ts +6 -0
- package/dist/src/vite/indexFields.js +21 -0
- package/dist/src/vite/indexStoryFile.d.ts +8 -1
- package/dist/src/vite/indexStoryFile.js +22 -157
- package/dist/src/vite/jsxCallSites.d.ts +33 -0
- package/dist/src/vite/jsxCallSites.js +200 -0
- package/dist/src/vite/jsxInScripts.d.ts +67 -0
- package/dist/src/vite/jsxInScripts.js +138 -0
- package/dist/src/vite/jsxTree.d.ts +20 -0
- package/dist/src/vite/jsxTree.js +163 -0
- package/dist/src/vite/lineAndColumn.d.ts +13 -0
- package/dist/src/vite/lineAndColumn.js +18 -0
- package/dist/src/vite/lookAlikes.d.ts +65 -0
- package/dist/src/vite/lookAlikes.js +228 -0
- package/dist/src/vite/nearestToken.d.ts +17 -0
- package/dist/src/vite/nearestToken.js +9 -2
- package/dist/src/vite/packageEntries.d.ts +42 -0
- package/dist/src/vite/packageEntries.js +127 -0
- package/dist/src/vite/pages.d.ts +9 -1
- package/dist/src/vite/pages.js +108 -4
- package/dist/src/vite/pluginConfig.js +4 -0
- package/dist/src/vite/pluginIds.d.ts +2 -0
- package/dist/src/vite/pluginIds.js +5 -1
- package/dist/src/vite/pluginModules.d.ts +81 -11
- package/dist/src/vite/pluginModules.js +109 -21
- package/dist/src/vite/prebundled.d.ts +57 -15
- package/dist/src/vite/prebundled.js +80 -0
- package/dist/src/vite/previewTags.d.ts +25 -0
- package/dist/src/vite/previewTags.js +56 -0
- package/dist/src/vite/projectFiles.d.ts +54 -0
- package/dist/src/vite/projectFiles.js +116 -0
- package/dist/src/vite/projectPostcss.d.ts +70 -0
- package/dist/src/vite/projectPostcss.js +250 -0
- package/dist/src/vite/propDocs.d.ts +12 -0
- package/dist/src/vite/propDocs.js +130 -58
- package/dist/src/vite/propKind.d.ts +40 -0
- package/dist/src/vite/propKind.js +71 -0
- package/dist/src/vite/propTypeNotes.d.ts +22 -0
- package/dist/src/vite/propTypeNotes.js +51 -0
- package/dist/src/vite/publishedExports.d.ts +27 -0
- package/dist/src/vite/publishedExports.js +298 -0
- package/dist/src/vite/realFolder.d.ts +6 -0
- package/dist/src/vite/realFolder.js +25 -0
- package/dist/src/vite/refsConfig.d.ts +39 -0
- package/dist/src/vite/refsConfig.js +54 -0
- package/dist/src/vite/reuseCheck.d.ts +45 -0
- package/dist/src/vite/reuseCheck.js +260 -0
- package/dist/src/vite/runningVersions.d.ts +33 -0
- package/dist/src/vite/runningVersions.js +25 -0
- package/dist/src/vite/scriptProblems.d.ts +60 -0
- package/dist/src/vite/scriptProblems.js +155 -0
- package/dist/src/vite/searchModule.js +3 -2
- package/dist/src/vite/searchRoute.js +4 -2
- package/dist/src/vite/shapeDocs.d.ts +36 -0
- package/dist/src/vite/shapeDocs.js +177 -0
- package/dist/src/vite/singleFileComponent.d.ts +17 -0
- package/dist/src/vite/singleFileComponent.js +83 -0
- package/dist/src/vite/sourceText.d.ts +34 -0
- package/dist/src/vite/sourceText.js +72 -0
- package/dist/src/vite/sourceTokens.d.ts +7 -0
- package/dist/src/vite/sourceTokens.js +7 -2
- package/dist/src/vite/stackLines.d.ts +49 -0
- package/dist/src/vite/stackLines.js +96 -0
- package/dist/src/vite/storyCode.d.ts +22 -7
- package/dist/src/vite/storyCode.js +263 -37
- package/dist/src/vite/storyCoverage.d.ts +48 -0
- package/dist/src/vite/storyCoverage.js +179 -0
- package/dist/src/vite/storyFilesModule.d.ts +48 -3
- package/dist/src/vite/storyFilesModule.js +105 -15
- package/dist/src/vite/storyPatterns.d.ts +31 -0
- package/dist/src/vite/storyPatterns.js +140 -5
- package/dist/src/vite/storyReach.d.ts +10 -2
- package/dist/src/vite/storyReach.js +15 -11
- package/dist/src/vite/storyTopLevel.d.ts +51 -0
- package/dist/src/vite/storyTopLevel.js +146 -0
- package/dist/src/vite/storylessRoutes.d.ts +4 -3
- package/dist/src/vite/storylessRoutes.js +210 -19
- package/dist/src/vite/switchValuesCheck.d.ts +19 -0
- package/dist/src/vite/switchValuesCheck.js +164 -0
- package/dist/src/vite/switchesDocument.d.ts +15 -0
- package/dist/src/vite/switchesDocument.js +47 -0
- package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
- package/dist/src/vite/tailwindConfigTokens.js +306 -0
- package/dist/src/vite/textImports.d.ts +15 -0
- package/dist/src/vite/textImports.js +58 -0
- package/dist/src/vite/textModules.d.ts +6 -5
- package/dist/src/vite/textModules.js +13 -8
- package/dist/src/vite/tokenAnswers.d.ts +6 -2
- package/dist/src/vite/tokenAnswers.js +11 -7
- package/dist/src/vite/typeParameters.d.ts +83 -0
- package/dist/src/vite/typeParameters.js +270 -0
- package/dist/src/vite/unionProps.d.ts +37 -0
- package/dist/src/vite/unionProps.js +121 -0
- package/dist/src/vite/unresolvedTokens.d.ts +20 -0
- package/dist/src/vite/unresolvedTokens.js +193 -0
- package/dist/src/vite/usageGraph.js +10 -52
- package/dist/src/vite/usageGuidance.d.ts +9 -2
- package/dist/src/vite/usageGuidance.js +36 -8
- package/dist/src/vite/usageImports.d.ts +35 -0
- package/dist/src/vite/usageImports.js +280 -0
- package/dist/src/vite/visibilityRoute.d.ts +16 -0
- package/dist/src/vite/visibilityRoute.js +320 -0
- package/dist/src/worstCase.d.ts +2 -0
- package/dist/src/worstCase.js +2 -0
- package/package.json +28 -8
|
@@ -1,206 +1,35 @@
|
|
|
1
1
|
## Stories (Forgebook)
|
|
2
2
|
|
|
3
3
|
This project's components have stories, shown by [Forgebook](https://github.com/ensiria/forgebook) (`forgebook dev`).
|
|
4
|
-
|
|
5
|
-
in JSON with `--json`, and every answer about a story carries the links that open it for a person.
|
|
4
|
+
A component you add or change gets its stories added or changed in the same change, whether or not a check asks for them.
|
|
6
5
|
|
|
7
|
-
###
|
|
8
|
-
|
|
9
|
-
- One file per component, beside it: `Badge.tsx` and `Badge.stories.tsx`, in CSF 3 (Storybook's format; Forgebook
|
|
10
|
-
reads it, never MDX or addons). Files with the same title are one component, as in Storybook: each story keeps its
|
|
11
|
-
own file (`file` in `forgebook stories --json`), and the component lists them all (`files`).
|
|
12
|
-
- Every named export of a story file is a story; leave helpers and data out with the meta's `excludeStories`.
|
|
13
|
-
- The catalogue lists the files its `stories` globs name in `forgebook.config.ts`; a glob that starts with `!` leaves
|
|
14
|
-
files out (`"!src/**/drafts/**"`), whatever its place in the list. A new story file that `forgebook stories` does not
|
|
15
|
-
list is outside the globs, left out by a `!` one, or refused by Vite's `server.fs.deny` (the dev server warns): put it
|
|
16
|
-
where they list it, or change the globs on purpose.
|
|
17
|
-
- Story ids are Storybook's (`inputs-readmore--open-by-default`, prefixed by the source's id); the commands also take
|
|
18
|
-
the ids Forgebook gave before (`inputs-read-more--open-by-default`) and answer with the current one.
|
|
19
|
-
- The meta is the default export; the stories are named exports, each with a one-line TSDoc saying what it shows (the
|
|
20
|
-
catalogue shows that sentence):
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
import type { Meta, Story } from "@forgebook/react";
|
|
24
|
-
|
|
25
|
-
import { Badge } from "./Badge";
|
|
26
|
-
|
|
27
|
-
export default { title: "Data/Badge", component: Badge } satisfies Meta<typeof Badge>;
|
|
28
|
-
|
|
29
|
-
/** The label as most pages use it. */
|
|
30
|
-
export const Default: Story<typeof Badge> = { args: { label: "New" }, parameters: { main: true } };
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
- In a Vue project, the same with `Badge.vue` and `Badge.stories.ts`: the types from `@forgebook/vue`, the component by its
|
|
34
|
-
default import, a slot as the arg `#name` (`"#default": "Text"`) and an event as its listener (`onRemove`). Open a `.vue`
|
|
35
|
-
file's script with its TSDoc block: that comment is the component's.
|
|
36
|
-
- In a Svelte project, the same with `Badge.svelte` and `Badge.stories.ts`: the types from `@forgebook/svelte`, the
|
|
37
|
-
component by its default import, a snippet's text as the arg `#name` (`"#children": "Text"`), a callback prop as it is
|
|
38
|
-
(`onremove`), and a render returning `{ Component, props }`. The `<!-- @component -->` comment is the component's.
|
|
39
|
-
- In a Solid or Preact project, the same as React's, with the types from `@forgebook/solid` or `@forgebook/preact`. In
|
|
40
|
-
Solid a render runs once: read the args inside its JSX (`<Badge label={args.label} />`) or spread them
|
|
41
|
-
(`<Badge {...args} />`), never destructured, so a new value reaches the story without starting it over.
|
|
42
|
-
- With custom elements, `my-badge.ts` and `MyBadge.stories.ts`: the types from `@forgebook/web-components`, the element by
|
|
43
|
-
its tag (`component: "my-badge"`, the module imported for its definition) or its class. An arg's prefix says what it
|
|
44
|
-
sets: `label` the attribute, `.items` the property, `#icon` a slot (`#default` the unnamed one), `@change` an event the
|
|
45
|
-
catalogue records, which a render does not bind. A render returns a Lit template. The props come from the package's
|
|
46
|
-
`custom-elements.json`: run its analyzer after changing an element, or the docs show the old one.
|
|
47
|
-
- With no framework, `button.ts` and `button.stories.ts`: the types from `@forgebook/html`, the meta's `component` the
|
|
48
|
-
function that draws (`createButton(args)`, returning an HTML string or a DOM node) and `satisfies
|
|
49
|
-
Meta<typeof createButton>`, so the args are its first parameter, documented by that type's TSDoc; a story without a
|
|
50
|
-
render calls it with the args. A story that only has a render types it with `Meta<ButtonArgs>`, or describes its args
|
|
51
|
-
in `argTypes` (plain JavaScript). A text arg written into HTML is the story's to escape; a shared link hands it only
|
|
52
|
-
plain words.
|
|
53
|
-
- In a Nuxt project, the same, the types from `@forgebook/nuxt`: a component's auto-imports, aliases and Nuxt's
|
|
54
|
-
components work as in the app. Set what Nuxt would have given it with `parameters.nuxt`: `route` (a path, or
|
|
55
|
-
`{ name, params }` of a page), `data` (what `useAsyncData` and `useFetch` return, by key; `useFetch`'s key is the
|
|
56
|
-
request as made, `/api/products?page=2`), `state`, `cookies`, `runtimeConfig.public` and `appConfig`. A story's
|
|
57
|
-
`nuxt` replaces the meta's, whole. Its router moves and `navigateTo` calls are listed among the story's events; a
|
|
58
|
-
play reads them with `storyNuxt()` from `@forgebook/nuxt/story`.
|
|
59
|
-
- In an Angular or Analog project, `badge.component.ts` and `Badge.stories.ts`: the types and Storybook's helpers
|
|
60
|
-
(`applicationConfig`, `moduleMetadata`, `componentWrapperDecorator`, `argsToTemplate`) from `@forgebook/angular`, the
|
|
61
|
-
class by its name, an input or an output by the name a template binds (its alias), an output's arg a handler, projected
|
|
62
|
-
content as `#default` or `#<selector>` (`"#[icon]": "*"`), and a template in a render as
|
|
63
|
-
`({ props: args, template: "…" })`. The Code tab writes the story by the component's selector.
|
|
64
|
-
- In a SvelteKit app (`framework: sveltekit()`), the types come from `@forgebook/sveltekit`, and a story sets the page its
|
|
65
|
-
components read with `parameters.sveltekit`: `page: { url: "/blog/hello" }` (the route and params are read from
|
|
66
|
-
`src/routes`), `page.data` or the page's own `load` (run before the story is drawn, its fetch answered by
|
|
67
|
-
`parameters.msw` in the frame and in the server tests, where a fetch of the page's origin that no handler answers
|
|
68
|
-
fails the story), and `forms.result` for what an enhanced form's action answers. Links and `goto` move the story's page and are listed among
|
|
69
|
-
its events; in a play, `storyPage()` from `@forgebook/sveltekit/page` reads where it went and the calls it made. A
|
|
70
|
-
component that imports `$app/env/private` or `$app/server` fails in its frame by design: give it what it reads instead.
|
|
71
|
-
- `parameters.main: true` marks the one real, well-made use drawn at the top of the component's page.
|
|
72
|
-
- `parameters.group` puts a story under a heading of the page (`"states"`, `"worst-case"`); keep one story per
|
|
73
|
-
meaningful state, not one per prop value.
|
|
74
|
-
- Add a worst case: very long text, words without spaces, huge numbers (`forgebook new` writes one).
|
|
75
|
-
- To try a component as on a phone, the catalogue's Touch switch (`touch=touch` in a view: `--view "touch=touch"`)
|
|
76
|
-
sends the story a finger's events and a phone's hover and pointer media; a tap on a text field focuses it and puts the
|
|
77
|
-
caret there. It is a simulation: native scrolling, the
|
|
78
|
-
virtual keyboard and real Safari still need a device, or `forgebook dev --touch` (Chromium's real touch).
|
|
79
|
-
A story reads it as `context.globals.touch` (`"mouse"` or `"touch"`) or fixes it with
|
|
80
|
-
`globals: { touch: "touch" }`. A story meant for a phone writes `parameters.touch: true` (or its meta does): the
|
|
81
|
-
catalogue draws it with a finger and offers a toggle to turn that off.
|
|
82
|
-
- In a React Native project (`reactNativeWeb()` in `forgebook.config.ts`), stories are written as React's, their
|
|
83
|
-
types from `@forgebook/react-native-web`, and drawn in the browser through react-native-web. A screen that fills
|
|
84
|
-
the window (`style={{ flex: 1 }}`) needs `parameters.layout: "fullscreen"`; the app's root providers
|
|
85
|
-
(`SafeAreaProvider`, a theme) go in the preview's decorators. A component that calls a native module or a gesture
|
|
86
|
-
of native code does not draw in a browser: give it a `.web.tsx` file, or mock what it calls in the preview.
|
|
87
|
-
- A link or an embed may carry the Props tab's values (`args=` in the address, JSON). The catalogue applies only the
|
|
88
|
-
props the story's panel can set, with a value of their type; to show a story with other values, write a story with
|
|
89
|
-
those args rather than a link.
|
|
90
|
-
- `parameters.height` gives the frame the room an overlay the story opens needs (a menu, a popover), in CSS px.
|
|
91
|
-
- A screen meant for a phone or a tablet can be shown in a drawn device by default:
|
|
92
|
-
`parameters: { device: { frame: true, model: "iphone-16" } }` (on the meta for every story; `orientation:
|
|
93
|
-
"landscape"` turns it; a story in a device is touched as a phone is, unless `touch: false`). The models: `iphone-16`, `iphone-16-pro-max`, `iphone-16e`, `pixel-9`, `galaxy-s24`, `phone`
|
|
94
|
-
(generic), `ipad-mini`, `ipad-pro-13`. The status bar, the camera's cut and the home indicator sit
|
|
95
|
-
around it: the story is drawn inside the safe areas. A screen drawn edge to edge says `edgeToEdge: true` and pads
|
|
96
|
-
itself with `var(--forgebook-safe-area-top, env(safe-area-inset-top))` (and `-bottom`, `-left`, `-right`). `get_story` returns the setting as `device`. Pictures and
|
|
97
|
-
tests stay unframed unless a view names a model: `forgebook shot <id> --view "iphone-16"` (or `"dark pixel-9
|
|
98
|
-
landscape"`) gives a framed picture.
|
|
99
|
-
- A hook or a function gets stories about logic: `parameters: { logic: true }` on the meta, its `component` the hook
|
|
100
|
-
(`satisfies LogicMeta<typeof useUndo>` in React), each story a `render` with a small scene using it and a `play`
|
|
101
|
-
that tries it. The catalogue documents its signature from its types and TSDoc (`@param`, `@returns`), and the tests
|
|
102
|
-
check it once instead of in every look. A title like `Hooks/useUndo` puts it in a Hooks section.
|
|
103
|
-
- `parameters.design: { figma: "<node link>" }` on the meta links a component to its design in Figma; a story writes its
|
|
104
|
-
own over it. `forgebook story` returns it as `design` (the link, `fileKey`, `nodeId`, and the `address` to hand a
|
|
105
|
-
person); with `@forgebook/plugin-figma` listed the panel adds a Design tab.
|
|
106
|
-
- `parameters.msw: { handlers: [...] }` answers a story's requests, with `@forgebook/plugin-msw` listed in the
|
|
107
|
-
configuration's `plugins`, which also adds a Network tab; without the plugin the parameter does nothing.
|
|
108
|
-
- Texts a person reads come from the source's texts, not from the story: `args: { label: storyText("badge.new") }`
|
|
109
|
-
(`@forgebook/story-format/texts`), or `useStoryText()` inside a `render`. A source gives each language's table, or a
|
|
110
|
-
loader of it (`texts: { en: () => import("./locales/en.json") }`), which keeps the texts out of the catalogue's page.
|
|
111
|
-
- Write `title`, `parameters.main`, `group`, `height`, `touch`, `logic`, `requiredFirst` and `design.figma` as plain
|
|
112
|
-
values: the catalogue reads them without running the file.
|
|
113
|
-
- In a Next.js project (`framework: nextjs()`), stories take their types from `@forgebook/nextjs`. A story says where
|
|
114
|
-
its component is with `parameters.nextjs.navigation` (`pathname`, `query`, `params`; `router` for the Pages Router),
|
|
115
|
-
and what its server code reads with `nextjs.cookies`, `headers` and `draftMode`. A link or a router call moves the
|
|
116
|
-
story's route and is listed among its events; a `play` reads where it went with `storyRoute()`
|
|
117
|
-
(`@forgebook/nextjs/route`). Async server components are drawn; what they reach on a server (a database, the file
|
|
118
|
-
system) is not there: fetch it and mock it with `parameters.msw`. In the server tests a server component's `fetch` never
|
|
119
|
-
reaches the network, whatever its address: a fetch no handler answers fails the story, naming the address.
|
|
120
|
-
|
|
121
|
-
- Say when a component is for and when it is not, in its TSDoc: `@useWhen`, `@avoidWhen`, `@alternatives`, `@deprecated`,
|
|
122
|
-
`@replacedBy`. `forgebook story` returns them as `docs.guidance`: read them before using a component, and never use a
|
|
123
|
-
deprecated one.
|
|
124
|
-
- A component with many props names their groups in its TSDoc (`@group Paging`): `forgebook story` returns each
|
|
125
|
-
prop's `group`, and a prop typed with a documented object (`texts?: FinderTexts`) its `members`, each with its type,
|
|
126
|
-
default and TSDoc: read them to know every text a component takes before passing one.
|
|
127
|
-
- `forgebook story --json` and `get_story` give `requiredProps` at the top, the names of the component's props every
|
|
128
|
-
use must set (events among them; a subcomponent's say it with their own `isRequired`); `docs.props` stays in the
|
|
129
|
-
order of the source, whatever the catalogue's `requiredFirst` shows a person.
|
|
130
|
-
Set every name in `requiredProps` when you use the component or write its story.
|
|
131
|
-
|
|
132
|
-
### Docs pages
|
|
133
|
-
|
|
134
|
-
Guides live in Markdown files, listed in the catalogue's Docs section. Read one before writing against it
|
|
135
|
-
(`npx forgebook page <id>`). When you write one: front matter with `title` (`Guides/Theming`), `order` and `description`, a
|
|
136
|
-
fence named `story <id>` for a live story and `props <component id>` for an API table, and links to other pages by their
|
|
137
|
-
file (`./colours.md#brand`). A page never holds a story's code: show the story. Blocks are `:::note`, `:::tip`,
|
|
138
|
-
`:::important`, `:::caution`, `:::danger` (or GitHub's `> [!NOTE]`), `::::tabs{syncKey="…"}` around `:::tab[Label]`,
|
|
139
|
-
`:::steps` around a numbered list, `::::cards` around `:::card[Title]` and `::link-card[Title]{href="…"}`; a block inside
|
|
140
|
-
another has fewer colons. A code fence takes `title="…"`, `{1,4-6}`, `ins={…}`, `del={…}`, `wrap`, and `diff lang="tsx"`.
|
|
141
|
-
After writing one, run `npx forgebook pages`: it fails with each problem's line and column.
|
|
142
|
-
|
|
143
|
-
The catalogue's home may be written too (`forgebook.home.md`): `npx forgebook page home` reads it, and its values
|
|
144
|
-
(`{{components}}`) and pieces (`::families`, `::libraries`, `::recent`, `::pages`) are listed in the README.
|
|
145
|
-
|
|
146
|
-
### Links for a person
|
|
147
|
-
|
|
148
|
-
Every story's `links` hold its page (`address`), its frame (`frame`), its component's page (`component`) and its
|
|
149
|
-
embed (`embed`). A component's
|
|
150
|
-
page can be drawn for who reads it: add an audience to the view, and send that link. `designer` shows usage guidance first
|
|
151
|
-
and no code, `coder` the API first with the code open, `tester` what the stories cover and their accessibility check:
|
|
6
|
+
### Before you say a change is done
|
|
152
7
|
|
|
153
8
|
```sh
|
|
154
|
-
npx forgebook
|
|
9
|
+
npx forgebook verify --json # every changed UI file in stories that ran, every variant, and check-code
|
|
10
|
+
npx forgebook check-code --json # what the change adds against the design system, tokens file or not
|
|
155
11
|
```
|
|
156
12
|
|
|
157
|
-
|
|
158
|
-
|
|
13
|
+
A non-zero exit (`not-verified`, `failed`) means not done, and a UI file with no stories, or `unseen`, is `not-verified`: `fix` names the
|
|
14
|
+
next step, usually writing them; do it and run it again. Report `partly-verified` with what `skipped` says, never as verified. To look at one story, `npx forgebook check <id> --json`
|
|
15
|
+
and `npx forgebook shot <id> --view "dark 360"`.
|
|
159
16
|
|
|
160
|
-
###
|
|
17
|
+
### Look it up when you need it
|
|
161
18
|
|
|
162
|
-
| Command | What it
|
|
19
|
+
| Command | What it answers |
|
|
163
20
|
|---|---|
|
|
164
|
-
| `npx forgebook find "selectable card" --json` | Whether
|
|
165
|
-
| `npx forgebook
|
|
166
|
-
| `npx forgebook
|
|
167
|
-
| `npx forgebook
|
|
168
|
-
| `npx forgebook
|
|
169
|
-
| `npx forgebook pages --json` | The docs pages, with their ids and addresses; fails when a page names what is not there |
|
|
170
|
-
| `npx forgebook page <id> --json` | One docs page: its Markdown, its headings, the address that opens it |
|
|
171
|
-
| `npx forgebook check <id> --json` | The catalogue's checks on one story: accessibility, spills, overlays, a modal's focus, errors, a failed play |
|
|
172
|
-
| `npx forgebook check <id> --json` | The catalogue's checks on one story: accessibility, spills, overlays, errors, a failed play |
|
|
173
|
-
| `npx forgebook plugins --json` | The plugins the catalogue lists: their tabs (`tab=<id>` in a view opens one), switches and docs fences |
|
|
174
|
-
| `npx forgebook tokens --category color --json` | The design tokens, of the catalogue and of the libraries it shows; `clashes` says whose value stands where two disagree |
|
|
175
|
-
| `npx forgebook tokens --nearest "#1c1b1b" --json` | The token to write instead of a raw value; the type comes from the value, or `--type padding` |
|
|
176
|
-
| `npx forgebook check-page http://localhost:3000/checkout --json` | The same checks on a real page of the application: the screen you built, not only its stories |
|
|
177
|
-
| `npx forgebook changed --json` | The stories your change touches, through what they import |
|
|
178
|
-
| `npx forgebook verify --json` | The checks on all of them, with one exit code: run it before you say a change is done |
|
|
179
|
-
| `npx forgebook check-code --json` | What your change adds against the design system: raw values, with the token to use, turned-off checks, deleted tests |
|
|
180
|
-
| `npx forgebook errors --json` | What the open frames reported while you edited: render errors, failed plays |
|
|
181
|
-
| `npx forgebook shot <id> --view "dark 360"` | The story as a picture, to look at it (a view as words, or `theme=dark&width=360`); a model's id in the view (`iphone-16`) frames it in that device |
|
|
182
|
-
| `npx forgebook story <id> --json` | Its `links`: `address` in the catalogue, `frame` alone, `embed` with no chrome, for a wiki or an iframe |
|
|
183
|
-
| `npx forgebook shot <id> --update` then `npx forgebook diff <id> --json` | Baselines, then what changed against them: the region, the percentage, a marked picture |
|
|
184
|
-
|
|
185
|
-
Never write a raw colour or size when a token exists: ask `tokens --nearest` first, and use a match only when it says
|
|
186
|
-
`isClose` or `isExact`. A match that is not close means no token fits: say so, do not force one.
|
|
187
|
-
|
|
188
|
-
A catalogue may turn off its accessibility check (`a11y: false`) or its component docs (`componentDocs: false`). Then a
|
|
189
|
-
check's report says `"a11y": "off"` (it ran no axe: a pass says nothing of accessibility), and `story` says
|
|
190
|
-
`"componentDocs": "off"` with no `docs` and no required props: read the component's source for its props, and the
|
|
191
|
-
story's args for what it sets; `changed` finds no story through the imports, so check the stories you touched by name.
|
|
21
|
+
| `npx forgebook find "selectable card" --json` | Whether it already exists: ask before writing a component |
|
|
22
|
+
| `npx forgebook story <id> --json` | `requiredProps` (set every name), props, `docs.guidance` (never use a deprecated component), the `links` a person opens |
|
|
23
|
+
| `npx forgebook tokens --nearest "#1c1b1b" --json` | The token to write instead of a raw colour or size; only when it says `isClose` or `isExact` |
|
|
24
|
+
| `npx forgebook search onValueChange --json` | A prop or a sentence anywhere in the catalogue |
|
|
25
|
+
| `npx forgebook guide <topic>` | The full text on demand: `stories`, `devices`, `switches`, `docs-pages`, `links`, `commands`, `setup`, a framework's name, or `all`; with no topic, the list |
|
|
192
26
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
gives, never by building a frame's address yourself, and do not expect a story's code to reach the catalogue's page or
|
|
196
|
-
its API.
|
|
27
|
+
`npx forgebook <command> --help` gives the options. With an MCP client, `npx forgebook mcp` offers the same as tools:
|
|
28
|
+
`find_component`, `get_story`, `nearest_token`, `check_story`, `story_shot`, `get_guide`.
|
|
197
29
|
|
|
198
|
-
|
|
199
|
-
not show may not have reached the dev server: in a container, a Windows drive under WSL or a network drive, run it
|
|
200
|
-
with `forgebook dev --poll`.
|
|
30
|
+
### Writing a story
|
|
201
31
|
|
|
202
|
-
|
|
32
|
+
One file per component, beside it, in CSF 3 (`npx forgebook new <component file>` writes the first). Every named export is a
|
|
33
|
+
story, with a one-line TSDoc. Add a worst case: very long text, words without spaces, huge numbers.
|
|
203
34
|
|
|
204
|
-
|
|
205
|
-
You do not see what it shows: to look at a story yourself, use `shot` (`story_shot`). Where the tool is not listed, the
|
|
206
|
-
client cannot show one: give the person the story's link, or its picture.
|
|
35
|
+
{{framework}}
|
|
@@ -29,7 +29,8 @@ export const withAgentsSection = (existing, section) => {
|
|
|
29
29
|
const after = existing.slice(end + AGENTS_END.length).replace(/^\n/, "");
|
|
30
30
|
return `${existing.slice(0, start)}${block}${after}`;
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
// not a pattern anchored at the end, which backtracks on a long run of blank lines
|
|
33
|
+
return `${existing.trimEnd()}\n\n${block}`;
|
|
33
34
|
};
|
|
34
35
|
/**
|
|
35
36
|
* Where the skill is written, from the project's root: `.agents/skills` is the Agent Skills standard's folder, which
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ConfigEnv, PluginOption } from "vite";
|
|
2
|
+
import type { ResolvedConfig } from "../../../src/vite/configFile.ts";
|
|
3
|
+
/** What a catalogue read of the app's build, for the line it prints and for tools. */
|
|
4
|
+
export type AppBuildReport = {
|
|
5
|
+
/** The Vite configuration it loaded, from the catalogue's folder; none when it loaded none. */
|
|
6
|
+
readonly viteConfig: string | undefined;
|
|
7
|
+
/** The names of the plugins of it the catalogue runs. */
|
|
8
|
+
readonly plugins: readonly string[];
|
|
9
|
+
/** The names of the plugins of it the catalogue leaves out. */
|
|
10
|
+
readonly leftOutPlugins: readonly string[];
|
|
11
|
+
/** Whether `tsconfig.json`'s `paths` are read. */
|
|
12
|
+
readonly tsconfigPaths: boolean;
|
|
13
|
+
/** Whether the project's PostCSS runs. */
|
|
14
|
+
readonly postcss: boolean;
|
|
15
|
+
/** What could not be read, each with what to do. */
|
|
16
|
+
readonly problems: readonly string[];
|
|
17
|
+
};
|
|
18
|
+
/** A catalogue's Vite plugins for the app's build, and what they read. */
|
|
19
|
+
export type AppBuild = {
|
|
20
|
+
/** The plugins; none for a project with nothing to read. */
|
|
21
|
+
readonly plugins: readonly PluginOption[];
|
|
22
|
+
/** What they read. */
|
|
23
|
+
readonly report: AppBuildReport;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* The sentence for a Vite configuration that did not load.
|
|
27
|
+
*
|
|
28
|
+
* @param file - the file.
|
|
29
|
+
* @param error - what it threw.
|
|
30
|
+
*/
|
|
31
|
+
export declare const viteConfigProblem: (file: string, error: unknown) => string;
|
|
32
|
+
/** The line a catalogue prints of what it read; none when it read nothing. */
|
|
33
|
+
export declare const appBuildLine: (report: AppBuildReport) => string | undefined;
|
|
34
|
+
/** What a catalogue will read of a project's build, as a command that runs none of it tells. */
|
|
35
|
+
export type AppBuildPlan = {
|
|
36
|
+
/** The Vite configuration it will load, from the project's folder; none when there is nothing to load. */
|
|
37
|
+
readonly viteConfig: string | undefined;
|
|
38
|
+
/** Whether it will read `tsconfig.json`'s `paths`, which runs nothing. */
|
|
39
|
+
readonly tsconfigPaths: boolean;
|
|
40
|
+
/** The PostCSS configuration it will run, as a path; none when there is none. */
|
|
41
|
+
readonly postcss: string | undefined;
|
|
42
|
+
/** The files whose code runs when the catalogue starts, from the project's folder. */
|
|
43
|
+
readonly runsCode: readonly string[];
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* What a catalogue will read of a project's build, from the files alone: nothing here runs any of it.
|
|
47
|
+
*
|
|
48
|
+
* @param dir - the project's folder.
|
|
49
|
+
* @param framework - the adapter's name.
|
|
50
|
+
*/
|
|
51
|
+
export declare const appBuildPlan: (dir: string, framework: string) => AppBuildPlan;
|
|
52
|
+
/**
|
|
53
|
+
* What a catalogue reads of the app's build.
|
|
54
|
+
*
|
|
55
|
+
* @param config - the catalogue's configuration, read.
|
|
56
|
+
* @param environment - the command and the mode the catalogue runs for.
|
|
57
|
+
* @param isOneShot - whether the server is a one-shot command's, which leaves out the plugins' `configureServer`.
|
|
58
|
+
*/
|
|
59
|
+
export declare const appBuildOf: (config: ResolvedConfig, environment: ConfigEnv, isOneShot?: boolean) => Promise<AppBuild>;
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The app's own build, as a catalogue draws its stories with it: the Vite plugins that give the catalogue the project's
|
|
3
|
+
* `tsconfig` paths, what its `vite.config` keeps, and its PostCSS.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* A project with none of these pays a few file checks, and nothing is imported. A framework whose adapter reads a part
|
|
7
|
+
* itself keeps doing so: Next.js has no Vite configuration and runs PostCSS itself, Nuxt and SvelteKit bring their
|
|
8
|
+
* aliases from their own configuration, SvelteKit reads its `vite.config` for its options, and React Native runs its
|
|
9
|
+
* own PostCSS. What could not be read never stops a catalogue: the stories that do not need it still draw, and each
|
|
10
|
+
* problem is said once with what to do.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync } from "node:fs";
|
|
15
|
+
import { join, relative } from "node:path";
|
|
16
|
+
import { PostcssConfigError, postcssConfigPlace, projectPostcss, watchedFiles } from "../../../src/vite/projectPostcss.js";
|
|
17
|
+
import { isWorthLoading, loadAppViteConfig, viteConfigFile } from "./appViteConfig.js";
|
|
18
|
+
import { hasTsconfigPaths } from "./tsconfigPaths.js";
|
|
19
|
+
/** The names of a Nuxt config, whose modules the Nuxt adapter loads. */
|
|
20
|
+
const NUXT_CONFIGS = ["nuxt.config.ts", "nuxt.config.js", "nuxt.config.mjs"];
|
|
21
|
+
/** What each framework's adapter reads itself, by the adapter's name. */
|
|
22
|
+
const READ_BY_ADAPTER = {
|
|
23
|
+
nextjs: ["vite-config", "postcss", "tsconfig-paths"],
|
|
24
|
+
nuxt: ["vite-config", "tsconfig-paths"],
|
|
25
|
+
sveltekit: ["vite-config"],
|
|
26
|
+
angular: ["vite-config"],
|
|
27
|
+
"react-native-web": ["postcss"]
|
|
28
|
+
};
|
|
29
|
+
/** A style sheet PostCSS runs on: plain CSS, a component's style block among them; Sass compiles its own first. */
|
|
30
|
+
const CSS_FILE = /\.(?:css|pcss|postcss)(?:\?.*)?$/;
|
|
31
|
+
/**
|
|
32
|
+
* Whether a sheet is one nobody sees: a global sheet on the server, which loads a preview for its args and parameters.
|
|
33
|
+
* Run through Tailwind 3 there, it scanned every component, most of a command's start. A module's sheet keeps its class
|
|
34
|
+
* names, which a component reads wherever it runs.
|
|
35
|
+
*
|
|
36
|
+
* @param consumer - who the environment serves.
|
|
37
|
+
* @param id - the sheet.
|
|
38
|
+
*/
|
|
39
|
+
const isUnseenOnServer = (consumer, id) => consumer === "server" && !CSS_MODULE.test(id);
|
|
40
|
+
/** A CSS module, whose class names a component reads wherever it runs. */
|
|
41
|
+
const CSS_MODULE = /\.module\.[a-z]+(?:\?.*)?$/;
|
|
42
|
+
/** A style sheet's imports that are not compiled, which Vite's own CSS pipeline leaves alone too. */
|
|
43
|
+
const NOT_COMPILED = /[?&](?:raw|url)\b/;
|
|
44
|
+
/**
|
|
45
|
+
* The plugin that runs the project's PostCSS before Lightning CSS.
|
|
46
|
+
*
|
|
47
|
+
* @param dir - the catalogue's folder.
|
|
48
|
+
* @param inlinePlugins - what the app's `css.postcss` makes; the project's file is read when none.
|
|
49
|
+
* @returns the plugin, or none for a project with no PostCSS.
|
|
50
|
+
*/
|
|
51
|
+
const postcssPlugin = (dir, inlinePlugins) => {
|
|
52
|
+
const run = projectPostcss(dir, inlinePlugins === undefined ? {} : { plugins: inlinePlugins });
|
|
53
|
+
if (run === undefined)
|
|
54
|
+
return undefined;
|
|
55
|
+
let isSaid = false;
|
|
56
|
+
// Vite runs the project's PostCSS itself when the catalogue's CSS goes through PostCSS rather than Lightning CSS (an
|
|
57
|
+
// app's configuration may ask for it): a second run would cost every style sheet as much again, for the same output
|
|
58
|
+
let isRunByVite = false;
|
|
59
|
+
const isLeftAlone = (id) => isRunByVite || NOT_COMPILED.test(id);
|
|
60
|
+
return {
|
|
61
|
+
name: "forgebook:app-postcss",
|
|
62
|
+
enforce: "pre",
|
|
63
|
+
configResolved(resolved) {
|
|
64
|
+
isRunByVite = resolved.css.transformer !== "lightningcss";
|
|
65
|
+
},
|
|
66
|
+
transform: {
|
|
67
|
+
filter: { id: CSS_FILE },
|
|
68
|
+
async handler(code, id) {
|
|
69
|
+
if (isLeftAlone(id))
|
|
70
|
+
return undefined;
|
|
71
|
+
if (isUnseenOnServer(this.environment.config.consumer, id))
|
|
72
|
+
return { code: "", map: null };
|
|
73
|
+
let result;
|
|
74
|
+
try {
|
|
75
|
+
result = await run(code, id.split("?")[0] ?? id);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (!(error instanceof PostcssConfigError))
|
|
79
|
+
throw error;
|
|
80
|
+
if (!isSaid)
|
|
81
|
+
this.warn(`The project's PostCSS could not be loaded: ${error.message}. Set appBuild: { postcss: false } to leave it out`);
|
|
82
|
+
isSaid = true;
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
// the files a plugin read (Tailwind CSS reads the components for their classes) renew the style sheet
|
|
86
|
+
for (const watched of watchedFiles(result.messages))
|
|
87
|
+
this.addWatchFile(watched);
|
|
88
|
+
return { code: result.css, map: null };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* The sentence for a Vite configuration that did not load.
|
|
95
|
+
*
|
|
96
|
+
* @param file - the file.
|
|
97
|
+
* @param error - what it threw.
|
|
98
|
+
*/
|
|
99
|
+
export const viteConfigProblem = (file, error) => `${file} could not be loaded, so its aliases and plugins are not in the catalogue: ${error instanceof Error ? error.message.split("\n")[0] : String(error)}. Fix it, or set \`appBuild: { viteConfig: false }\` in the catalogue's configuration`;
|
|
100
|
+
/** The line a catalogue prints of what it read; none when it read nothing. */
|
|
101
|
+
export const appBuildLine = (report) => {
|
|
102
|
+
const parts = [
|
|
103
|
+
...(report.viteConfig === undefined
|
|
104
|
+
? []
|
|
105
|
+
: [`${report.viteConfig}${report.plugins.length === 0 ? "" : ` (${report.plugins.join(", ")})`}`]),
|
|
106
|
+
...(report.tsconfigPaths ? ["tsconfig paths"] : []),
|
|
107
|
+
...(report.postcss ? ["PostCSS"] : [])
|
|
108
|
+
];
|
|
109
|
+
return parts.length === 0 ? undefined : `Drawing with the app's build: ${parts.join(", ")}`;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* What a catalogue will read of a project's build, from the files alone: nothing here runs any of it.
|
|
113
|
+
*
|
|
114
|
+
* @param dir - the project's folder.
|
|
115
|
+
* @param framework - the adapter's name.
|
|
116
|
+
*/
|
|
117
|
+
export const appBuildPlan = (dir, framework) => {
|
|
118
|
+
const readByAdapter = READ_BY_ADAPTER[framework] ?? [];
|
|
119
|
+
const file = readByAdapter.includes("vite-config") ? undefined : viteConfigFile(dir, undefined);
|
|
120
|
+
const viteConfig = file !== undefined && isWorthLoading(dir, file) ? file : undefined;
|
|
121
|
+
const place = readByAdapter.includes("postcss") ? undefined : postcssConfigPlace(dir);
|
|
122
|
+
const postcss = place === undefined ? undefined : relative(dir, place.file);
|
|
123
|
+
return {
|
|
124
|
+
viteConfig,
|
|
125
|
+
tsconfigPaths: !readByAdapter.includes("tsconfig-paths") && hasTsconfigPaths(dir),
|
|
126
|
+
postcss,
|
|
127
|
+
// a JSON file too: the plugins it names run, and a path in it can name a file of the project's
|
|
128
|
+
runsCode: [
|
|
129
|
+
...(viteConfig === undefined ? [] : [viteConfig]),
|
|
130
|
+
...(postcss === undefined ? [] : [postcss]),
|
|
131
|
+
// Nuxt's adapter loads the project's modules through its nuxt.config
|
|
132
|
+
...(framework === "nuxt" ? NUXT_CONFIGS.filter((name) => existsSync(join(dir, name))) : [])
|
|
133
|
+
]
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* The plugin that gives Vite what was read, and says what it read and what it could not.
|
|
138
|
+
*
|
|
139
|
+
* @param fields - what the app's configuration keeps, and the `paths` reading.
|
|
140
|
+
* @param report - what was read.
|
|
141
|
+
*/
|
|
142
|
+
const settingsPlugin = (fields, report) => ({
|
|
143
|
+
name: "forgebook:app-build",
|
|
144
|
+
config: () => fields,
|
|
145
|
+
configResolved: (resolved) => {
|
|
146
|
+
const line = appBuildLine(report);
|
|
147
|
+
if (line !== undefined)
|
|
148
|
+
resolved.logger.info(`[forgebook] ${line}`);
|
|
149
|
+
// an error's level: a command's server logs nothing less, and the run must not pass this over in silence
|
|
150
|
+
for (const problem of report.problems)
|
|
151
|
+
resolved.logger.error(`[forgebook] ${problem}`);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
/**
|
|
155
|
+
* Loads the app's Vite configuration, when the catalogue reads it and it has something to give.
|
|
156
|
+
*
|
|
157
|
+
* @param config - the catalogue's configuration, read.
|
|
158
|
+
* @param environment - the command and the mode the catalogue runs for.
|
|
159
|
+
* @param isReadingPaths - whether Vite reads `tsconfig` paths here.
|
|
160
|
+
* @param isOneShot - whether the server is a one-shot command's.
|
|
161
|
+
* @returns what it gives; why it could not be loaded.
|
|
162
|
+
*/
|
|
163
|
+
const appViteConfigOf = async (config, environment, isReadingPaths, isOneShot) => {
|
|
164
|
+
const isOwn = READ_BY_ADAPTER[config.framework.name]?.includes("vite-config") === true;
|
|
165
|
+
const file = isOwn ? undefined : viteConfigFile(config.dir, config.appBuild.viteConfig);
|
|
166
|
+
if (file === undefined || !isWorthLoading(config.dir, file))
|
|
167
|
+
return {};
|
|
168
|
+
try {
|
|
169
|
+
return {
|
|
170
|
+
app: await loadAppViteConfig(config.dir, file, environment, config.framework.name, config.appBuild, isReadingPaths, isOneShot)
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
return { problem: viteConfigProblem(file, error) };
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* What a catalogue reads of the app's build.
|
|
179
|
+
*
|
|
180
|
+
* @param config - the catalogue's configuration, read.
|
|
181
|
+
* @param environment - the command and the mode the catalogue runs for.
|
|
182
|
+
* @param isOneShot - whether the server is a one-shot command's, which leaves out the plugins' `configureServer`.
|
|
183
|
+
*/
|
|
184
|
+
export const appBuildOf = async (config, environment, isOneShot = false) => {
|
|
185
|
+
const options = config.appBuild;
|
|
186
|
+
const readByAdapter = READ_BY_ADAPTER[config.framework.name] ?? [];
|
|
187
|
+
const tsconfigPaths = options.tsconfigPaths && !readByAdapter.includes("tsconfig-paths") && hasTsconfigPaths(config.dir);
|
|
188
|
+
const { app, problem } = await appViteConfigOf(config, environment, tsconfigPaths, isOneShot);
|
|
189
|
+
const postcss = options.postcss && !readByAdapter.includes("postcss")
|
|
190
|
+
? postcssPlugin(config.dir, app?.postcssPlugins)
|
|
191
|
+
: undefined;
|
|
192
|
+
const report = {
|
|
193
|
+
viteConfig: app?.file,
|
|
194
|
+
plugins: (app?.plugins ?? []).map((plugin) => plugin.name),
|
|
195
|
+
leftOutPlugins: app?.leftOut ?? [],
|
|
196
|
+
tsconfigPaths,
|
|
197
|
+
postcss: postcss !== undefined,
|
|
198
|
+
problems: [...(problem === undefined ? [] : [problem]), ...(app?.notes ?? [])]
|
|
199
|
+
};
|
|
200
|
+
const fields = app?.fields ?? {};
|
|
201
|
+
const settings = tsconfigPaths
|
|
202
|
+
? { ...fields, resolve: { ...fields.resolve, tsconfigPaths: true } }
|
|
203
|
+
: fields;
|
|
204
|
+
const isEmpty = Object.keys(settings).length === 0 && report.problems.length === 0 && appBuildLine(report) === undefined;
|
|
205
|
+
return {
|
|
206
|
+
plugins: [
|
|
207
|
+
...(isEmpty ? [] : [settingsPlugin(settings, report)]),
|
|
208
|
+
...(app?.plugins ?? []),
|
|
209
|
+
...(postcss === undefined ? [] : [postcss])
|
|
210
|
+
],
|
|
211
|
+
report
|
|
212
|
+
};
|
|
213
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { ConfigEnv, Plugin, UserConfig } from "vite";
|
|
2
|
+
import type { ResolvedAppBuild } from "../../../src/vite/appBuildOption.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Whether a `vite.config` can hold nothing for a catalogue, as its text shows: it loads only Vite and the framework's
|
|
5
|
+
* plugin, and names none of the settings taken nor anything a plugin written in the file would hold.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* The usual configuration of a new project is exactly this, and loading it means bundling it and starting the module
|
|
9
|
+
* graph it imports, which a project with nothing to read must not pay. The check only ever errs towards loading: a word
|
|
10
|
+
* in a comment loads a file that gives nothing.
|
|
11
|
+
*
|
|
12
|
+
* @param text - the file's text.
|
|
13
|
+
*/
|
|
14
|
+
export declare const holdsNothingForCatalogue: (text: string) => boolean;
|
|
15
|
+
/** The app's Vite configuration, as a catalogue takes it. */
|
|
16
|
+
export type AppViteConfig = {
|
|
17
|
+
/** The file, from the catalogue's folder. */
|
|
18
|
+
readonly file: string;
|
|
19
|
+
/** What is about how its modules and style sheets resolve and compile. */
|
|
20
|
+
readonly fields: UserConfig;
|
|
21
|
+
/** The plugins kept. */
|
|
22
|
+
readonly plugins: readonly Plugin[];
|
|
23
|
+
/** The names of the plugins left out, each once. */
|
|
24
|
+
readonly leftOut: readonly string[];
|
|
25
|
+
/** The PostCSS plugins its `css.postcss` makes; none when it makes none. */
|
|
26
|
+
readonly postcssPlugins: readonly unknown[] | undefined;
|
|
27
|
+
/** What it sets that a catalogue cannot do, each said. */
|
|
28
|
+
readonly notes: readonly string[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* The app's Vite configuration file, from the catalogue's folder, or none.
|
|
32
|
+
*
|
|
33
|
+
* @param dir - the catalogue's folder.
|
|
34
|
+
* @param asked - `appBuild.viteConfig`.
|
|
35
|
+
*/
|
|
36
|
+
export declare const viteConfigFile: (dir: string, asked: string | false | undefined) => string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Whether the app's Vite configuration is worth loading.
|
|
39
|
+
*
|
|
40
|
+
* @param dir - the catalogue's folder.
|
|
41
|
+
* @param file - the file, from there.
|
|
42
|
+
*/
|
|
43
|
+
export declare const isWorthLoading: (dir: string, file: string) => boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Whether one of the app's plugins goes into the catalogue.
|
|
46
|
+
*
|
|
47
|
+
* @param name - the plugin's name.
|
|
48
|
+
* @param framework - the adapter's name.
|
|
49
|
+
* @param options - what the catalogue's configuration asks.
|
|
50
|
+
* @param isReadingPaths - whether Vite reads `tsconfig` paths here, which a plugin that does the same is then not needed for.
|
|
51
|
+
*/
|
|
52
|
+
export declare const keepsAppPlugin: (name: string, framework: string, options: ResolvedAppBuild, isReadingPaths?: boolean) => boolean;
|
|
53
|
+
/**
|
|
54
|
+
* A `define` without a whole environment written out: a catalogue bundles code the app does not (Testing Library reads
|
|
55
|
+
* `process.env`), so what the app kept out of its bundles would reach the catalogue's.
|
|
56
|
+
*
|
|
57
|
+
* @param define - the configuration's.
|
|
58
|
+
*/
|
|
59
|
+
export declare const withoutWholeEnvironment: (define: NonNullable<UserConfig["define"]>) => NonNullable<UserConfig["define"]>;
|
|
60
|
+
/**
|
|
61
|
+
* What a catalogue takes of the app's configuration besides its plugins: what decides how a module resolves and
|
|
62
|
+
* compiles. `root`, `base`, `build`, `server`, `preview` and `test` are about the app's page and output.
|
|
63
|
+
*
|
|
64
|
+
* @param config - the configuration, loaded.
|
|
65
|
+
* @param dir - the catalogue's folder, which its relative paths are read against when it names no root.
|
|
66
|
+
*/
|
|
67
|
+
export declare const appConfigFields: (config: UserConfig, dir: string) => UserConfig;
|
|
68
|
+
/**
|
|
69
|
+
* One of the app's plugins, kept from reaching past what a catalogue takes of an app.
|
|
70
|
+
*
|
|
71
|
+
* @remarks
|
|
72
|
+
* What its `config` returns goes through the same filter as the file's, or a plugin could set the host, `fs.strict` or the
|
|
73
|
+
* output. Its `configureServer` runs at the normal time, after the middlewares that keep each origin to itself: `order: "pre"`
|
|
74
|
+
* would answer ahead of them. Its `transformIndexHtml` reaches the frames and not the catalogue's page, whose origin holds the
|
|
75
|
+
* agent API: a story's frame is what the app's page stands for. A one-shot command's server runs no `configureServer` at all:
|
|
76
|
+
* that hook is where a plugin starts a backend or a watcher of its own, whose output on an inherited stdout would break a
|
|
77
|
+
* command's `--json`, and nothing a story asks for in the moment it is checked needs what it sets up for edits.
|
|
78
|
+
*
|
|
79
|
+
* @param plugin - the plugin.
|
|
80
|
+
* @param dir - the folder its relative paths are read against.
|
|
81
|
+
* @param isOneShot - whether the server is a one-shot command's.
|
|
82
|
+
*/
|
|
83
|
+
export declare const guardedAppPlugin: (plugin: Plugin, dir: string, isOneShot?: boolean) => Plugin;
|
|
84
|
+
/**
|
|
85
|
+
* Loads the app's Vite configuration, and takes what a catalogue takes of it.
|
|
86
|
+
*
|
|
87
|
+
* @param dir - the catalogue's folder.
|
|
88
|
+
* @param file - the file, from there.
|
|
89
|
+
* @param environment - the command and the mode it is loaded for: a configuration may be a function of them.
|
|
90
|
+
* @param framework - the adapter's name.
|
|
91
|
+
* @param options - what the catalogue's configuration asks.
|
|
92
|
+
* @param isReadingPaths - whether Vite reads `tsconfig` paths here.
|
|
93
|
+
* @param isOneShot - whether the server is a one-shot command's.
|
|
94
|
+
* @throws what the file throws when it loads.
|
|
95
|
+
*/
|
|
96
|
+
export declare const loadAppViteConfig: (dir: string, file: string, environment: ConfigEnv, framework: string, options: ResolvedAppBuild, isReadingPaths: boolean, isOneShot: boolean) => Promise<AppViteConfig>;
|