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.
- package/README.md +917 -74
- 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 +54 -6
- package/dist/src/addressArgs.js +72 -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 +58 -14
- 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/PluginBlockHost.js +2 -1
- package/dist/src/shell/PluginTabHost.js +19 -2
- 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 +35 -60
- 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.d.ts +17 -4
- package/dist/src/shell/asideStory.js +21 -4
- 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 +27 -2
- package/dist/src/shell/useAddressArgs.js +71 -14
- 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
package/dist/src/shell/Stage.js
CHANGED
|
@@ -12,11 +12,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
12
12
|
* @module
|
|
13
13
|
*/
|
|
14
14
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
15
|
+
import { checkedArgsMessage } from "../addressArgs.js";
|
|
15
16
|
import { panelProps, settableProps } from "../argTypes.js";
|
|
16
17
|
import { matrixOf, matrixProps } from "../matrix.js";
|
|
17
|
-
import { panelArgsParam, parsePanelArgsParam } from "../messages.js";
|
|
18
18
|
import { withFixed, withOwnFixed } from "../storyGlobals.js";
|
|
19
|
-
import {
|
|
19
|
+
import { shownSwitches } from "../switches.js";
|
|
20
|
+
import { frameAddress, isComparing, liveView, schemeOf } from "../viewState.js";
|
|
20
21
|
import { useStoryClockControls } from "./ClockControls.js";
|
|
21
22
|
import { useCatalogue } from "./catalogueContext.js";
|
|
22
23
|
import { DeviceSlot, deviceAddress, isWaitingForDevice, roomSizing, useInkScheme, useStageDevice } from "./DeviceSlot.js";
|
|
@@ -30,6 +31,7 @@ import { StageCompare } from "./StageCompare.js";
|
|
|
30
31
|
import { StageTools } from "./StageTools.js";
|
|
31
32
|
import { StageViewport } from "./StageViewport.js";
|
|
32
33
|
import { StoryBar } from "./StoryBar.js";
|
|
34
|
+
import { embedHeight, embedQuery, takesArgs, usePanelValues } from "./stageArgs.js";
|
|
33
35
|
import { STRINGS } from "./strings.js";
|
|
34
36
|
import { useAddressArgs } from "./useAddressArgs.js";
|
|
35
37
|
import { useFrameMessages } from "./useFrameMessages.js";
|
|
@@ -52,42 +54,16 @@ const widthSetter = (fixed, view, onViewChange) => fixed.width === undefined ? (
|
|
|
52
54
|
const INITIAL_FRAME_HEIGHT = 240;
|
|
53
55
|
/** The most calls the Events tab keeps. */
|
|
54
56
|
const MAX_CALLS = 50;
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
* @param story - the story.
|
|
60
|
-
*/
|
|
61
|
-
const takesArgs = (story) => !story.isLogic && (story.controls === "all" || story.controls.length > 0);
|
|
62
|
-
/**
|
|
63
|
-
* What an embed of the story keeps of the page: its view and the values set in the panel. An embed draws no device
|
|
64
|
-
* frame, so the device chosen is left out: the embed is the story at the width its iframe gives it.
|
|
65
|
-
*
|
|
66
|
-
* @param view - the reader's view, without what the story fixes, which the story fixes again.
|
|
67
|
-
* @param panelArgs - the values set in the panel.
|
|
68
|
-
* @param switches - the catalogue's switches.
|
|
69
|
-
*/
|
|
70
|
-
const embedQuery = (view, panelArgs, switches) => {
|
|
71
|
-
const params = viewParams({ ...view, device: "auto", orientation: "auto" }, switches);
|
|
72
|
-
const args = panelArgsParam(panelArgs);
|
|
73
|
-
if (args !== "")
|
|
74
|
-
params.set("args", args);
|
|
75
|
-
return params.toString();
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* The height an embed's iframe starts at: as tall as the frame is on the stage.
|
|
79
|
-
*
|
|
80
|
-
* @param view - the view, with the height set on the stage.
|
|
81
|
-
* @param contentHeight - the story's content, in CSS px.
|
|
82
|
-
* @param story - the story, with the height its scene declares.
|
|
83
|
-
*/
|
|
84
|
-
const embedHeight = (view, contentHeight, story) => view.height === "auto" ? Math.max(contentHeight, story.height ?? 0) : view.height;
|
|
57
|
+
/** No args of the story's own, as one value: what is computed from them is kept while it stays the same. */
|
|
58
|
+
const NO_OWN_ARGS = {};
|
|
59
|
+
/** A story's own args, as its frame reported them; none before it did. */
|
|
60
|
+
const ownArgsOf = (reported, storyId) => reported.get(storyId) ?? NO_OWN_ARGS;
|
|
85
61
|
/**
|
|
86
62
|
* The stage.
|
|
87
63
|
*
|
|
88
64
|
* @param props - the component, the story, the view, the panel's values, the frame page and the loaders.
|
|
89
65
|
*/
|
|
90
|
-
export const Stage = ({ component, story, view: ownView, onViewChange: onOwnViewChange, onFixedChange, panelArgs, onPanelArgsChange, matrixAxes, onMatrixAxesChange, frameUrl, plugins, loadCode, loadDocs, namedValues, header, onShownWidthChange, measuredHeight, backgroundOf, scroll }) => {
|
|
66
|
+
export const Stage = ({ component, story, view: ownView, onViewChange: onOwnViewChange, onFixedChange, loadTokens, argControls, panelArgs, addressLink, onPanelArgsChange, matrixAxes, onMatrixAxesChange, frameUrl, plugins, loadCode, loadDocs, namedValues, header, onShownWidthChange, measuredHeight, backgroundOf, scroll }) => {
|
|
91
67
|
const frameRef = useRef(null);
|
|
92
68
|
const storyRef = useRef(null);
|
|
93
69
|
const code = useStoryCode(loadCode);
|
|
@@ -122,24 +98,31 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
|
|
|
122
98
|
null, [docs, matrixAxes, story.isLogic]);
|
|
123
99
|
// the address's values reach the frames only once checked against what the story declares
|
|
124
100
|
const addressArgs = useAddressArgs({
|
|
101
|
+
argControls,
|
|
125
102
|
panelArgs,
|
|
103
|
+
link: addressLink,
|
|
126
104
|
docs,
|
|
127
105
|
storyArgs: storyArgs.get(story.id),
|
|
128
106
|
argTypes: panel.argTypes,
|
|
129
107
|
controls: panel.controls,
|
|
130
|
-
namedValues
|
|
108
|
+
namedValues,
|
|
109
|
+
frames: storyRef
|
|
131
110
|
});
|
|
132
111
|
const acceptedArgs = addressArgs.accepted;
|
|
133
|
-
const
|
|
112
|
+
const ownArgs = ownArgsOf(storyArgs, story.id);
|
|
113
|
+
const panelValues = usePanelValues(acceptedArgs, ownArgs, onPanelArgsChange);
|
|
114
|
+
const { values } = panelValues;
|
|
134
115
|
const settable = useMemo(() => docs.status === "ready"
|
|
135
|
-
? settableProps(panelProps(docs.value.props, panel.argTypes), panel.controls, namedValues ?? {})
|
|
136
|
-
: [], [docs, panel.argTypes, panel.controls, namedValues]);
|
|
116
|
+
? settableProps(panelProps(docs.value.props, panel.argTypes, ownArgs), panel.controls, namedValues ?? {})
|
|
117
|
+
: [], [docs, panel.argTypes, panel.controls, namedValues, ownArgs]);
|
|
137
118
|
const worstCase = useWorstCase({
|
|
138
119
|
storyRef,
|
|
139
120
|
storyId: story.id,
|
|
140
121
|
settable,
|
|
141
122
|
values,
|
|
142
123
|
panelArgs: acceptedArgs,
|
|
124
|
+
namedValues,
|
|
125
|
+
worstOfShape: addressArgs.worstOfShape,
|
|
143
126
|
onPanelArgsChange
|
|
144
127
|
});
|
|
145
128
|
const clockControls = useStoryClockControls(frameRef, story.id);
|
|
@@ -160,7 +143,7 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
|
|
|
160
143
|
// checked against the shown story's declaration only: a late message of the story shown before sends nothing
|
|
161
144
|
const accepted = message.storyId === story.id ? addressArgs.acceptedFor(message) : undefined;
|
|
162
145
|
if (accepted !== undefined)
|
|
163
|
-
send(
|
|
146
|
+
send(checkedArgsMessage(accepted));
|
|
164
147
|
send({ type: "forgebook:matrix", matrix });
|
|
165
148
|
// the view may have changed while the frame loaded
|
|
166
149
|
if (!isComparing(view))
|
|
@@ -186,19 +169,6 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
|
|
|
186
169
|
// the docs may arrive after the frames: they learn the events then
|
|
187
170
|
useEffect(() => tellFrames(storyRef.current, { type: "forgebook:events", names: eventNames }), [eventNames]);
|
|
188
171
|
useEffect(() => tellFrames(storyRef.current, { type: "forgebook:matrix", matrix }), [matrix]);
|
|
189
|
-
// the values reach the frames from the address, so going back in the history sets them too; compared as text, so
|
|
190
|
-
// a frame is told again only when they change
|
|
191
|
-
const { acceptedParam } = addressArgs;
|
|
192
|
-
useEffect(() => {
|
|
193
|
-
if (acceptedParam === undefined)
|
|
194
|
-
return;
|
|
195
|
-
tellFrames(storyRef.current, { type: "forgebook:args", args: parsePanelArgsParam(acceptedParam) });
|
|
196
|
-
}, [acceptedParam]);
|
|
197
|
-
// a change starts from the values the story takes: one the address named and the story does not is let go
|
|
198
|
-
const changeValue = (name, value) => {
|
|
199
|
-
const { [name]: _removed, ...rest } = acceptedArgs;
|
|
200
|
-
onPanelArgsChange(value === undefined ? rest : { ...rest, [name]: value });
|
|
201
|
-
};
|
|
202
172
|
const replay = () => {
|
|
203
173
|
const message = { type: "forgebook:replay" };
|
|
204
174
|
frameRef.current?.contentWindow?.postMessage(message, framesOrigin());
|
|
@@ -211,7 +181,7 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
|
|
|
211
181
|
// among them) is sent live
|
|
212
182
|
// a device sets the story's width and height in place of the stage's own, and its story area is the toolbar's width
|
|
213
183
|
const { shown, framed } = useStageDevice(view, story.device, onShownWidthChange);
|
|
214
|
-
const address = deviceAddress(frameAddress(frameUrl, story.id, useLoadedView(`${story.id}|${view.sheets}`, view), switches), framed);
|
|
184
|
+
const address = deviceAddress(frameAddress(frameUrl, story.id, useLoadedView(`${story.id}|${view.sheets}|${view.play}`, view), switches), framed);
|
|
215
185
|
useLiveView(storyRef, view, !isComparing(view));
|
|
216
186
|
useScrollMemory(storyRef, scroll);
|
|
217
187
|
const ink = useInkScheme(schemeOf(view, switches));
|
|
@@ -235,7 +205,8 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
|
|
|
235
205
|
address: deviceAddress(frameAddress(frameUrl, story.id, view, switches), framed),
|
|
236
206
|
width: framed?.area.width ?? view.width,
|
|
237
207
|
background: backgroundOf(view),
|
|
238
|
-
|
|
208
|
+
// as the stage's frames receive them: an aside asked for while the check waits for the docs is told when it ends
|
|
209
|
+
args: addressArgs.checked,
|
|
239
210
|
view: liveView(view)
|
|
240
211
|
}
|
|
241
212
|
});
|
|
@@ -249,7 +220,12 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
|
|
|
249
220
|
controls: panel.controls,
|
|
250
221
|
actions: panel.actions,
|
|
251
222
|
values,
|
|
252
|
-
|
|
223
|
+
panelArgs: acceptedArgs,
|
|
224
|
+
storyArgs: ownArgs,
|
|
225
|
+
loadTokens,
|
|
226
|
+
argControls,
|
|
227
|
+
globals: shownSwitches(view.switches, switches),
|
|
228
|
+
onValueChange: panelValues.change,
|
|
253
229
|
onReset: () => onPanelArgsChange({}),
|
|
254
230
|
worstCase: worstCase.state,
|
|
255
231
|
namedValues,
|
|
@@ -261,17 +237,16 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
|
|
|
261
237
|
calls: calls.filter((call) => call.storyId === story.id),
|
|
262
238
|
onClearCalls: () => setCalls([]),
|
|
263
239
|
trace: isComparing(view) ? undefined : traces.get(story.id),
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
},
|
|
240
|
+
view,
|
|
241
|
+
onViewChange,
|
|
242
|
+
onPlayStep: (command) => tellFrames(storyRef.current, { type: "forgebook:play-step", command }),
|
|
268
243
|
check: storyCheck.check,
|
|
269
244
|
onCheck: isComparing(view) ? undefined : storyCheck.run,
|
|
270
245
|
pluginTabs
|
|
271
246
|
}).filter((tab) => catalogue.tabs.includes(tab.id));
|
|
272
247
|
return (_jsxs("div", { className: "forgebook-workspace", children: [header, _jsxs("div", { className: "forgebook-story-pane", children: [_jsx("div", { ref: storyRef, className: "forgebook-scroll", children: _jsxs("section", { className: "forgebook-story", "aria-label": STRINGS.storyLabel, children: [_jsx(StoryBar, { story: story, axisProps: axisProps, matrixAxes: matrixAxes, onMatrixAxesChange: onMatrixAxesChange, onReplay: canReplay ? replay : undefined, clockControls: hasClock ? clockControls : undefined, frameAddress: frameAddress(frameUrl, story.id, view, switches), embed: {
|
|
273
248
|
title,
|
|
274
|
-
query: embedQuery(ownView,
|
|
249
|
+
query: embedQuery(ownView, acceptedArgs, switches),
|
|
275
250
|
height: embedHeight(view, reportedHeight ?? lastHeight, story)
|
|
276
251
|
} }), _jsx(DroppedArgsNote, { dropped: addressArgs.dropped, onRemove: () => onPanelArgsChange(acceptedArgs) }), isComparing(view) ? (_jsx(StageCompare, { story: story, title: title, view: view, frameUrl: frameUrl, framed: framed, heights: heights, settled: settled, fallbackHeight: lastHeight, backgroundOf: backgroundOf })) : (_jsx(StageViewport, { zoom: view.zoom, ...roomSizing(framed, {
|
|
277
252
|
width: view.width,
|
|
@@ -280,5 +255,5 @@ export const Stage = ({ component, story, view: ownView, onViewChange: onOwnView
|
|
|
280
255
|
background: backgroundOf(view),
|
|
281
256
|
height: view.height,
|
|
282
257
|
onHeightChange: (height) => onViewChange({ ...view, height })
|
|
283
|
-
}), children: (fixedHeight) => (_jsx(DeviceSlot, { framed: framed, scheme: ink, background: backgroundOf(view), children: isWaitingForDevice(shown, framed) ? null : (_jsx(FrameView, {
|
|
258
|
+
}), children: (fixedHeight) => (_jsx(DeviceSlot, { framed: framed, scheme: ink, background: backgroundOf(view), children: isWaitingForDevice(shown, framed) ? null : (_jsx(FrameView, { frame: frameRef, title: title, address: address, heights: heights, settled: settled, fallbackHeight: measuredHeight ?? lastHeight, sceneHeight: story.height, fixedHeight: framed?.area.height ?? fixedHeight }, story.id)) })) }))] }) }), isComparing(view) ? null : (_jsx(StageTools, { zoom: view.zoom, onZoomChange: (zoom) => onViewChange({ ...view, zoom }), tools: view.tools, onToolsChange: (tools) => onViewChange({ ...view, tools }) }))] }), view.isPanelOpen ? (_jsx(Dock, { tabs: tabs, activeTab: view.panelTab, onTabChange: (panelTab) => onViewChange({ ...view, panelTab }), onClose: () => onViewChange({ ...view, isPanelOpen: false }) })) : null] }));
|
|
284
259
|
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The statuses' badges: in a component's entry of the sidebar, at the top of its page, beside a story's example that
|
|
3
|
+
* holds a status of its own, and in the tag filter's list.
|
|
4
|
+
* Loaded with the tag filter (`TagViews.tsx`), only for a catalogue whose stories have tags.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* A badge says its status in words, so its colour is never the only sign; a hidden word before the badges tells a
|
|
8
|
+
* screen reader what they are. A page whose component is `@deprecated` in its TSDoc shows the `deprecated` badge even
|
|
9
|
+
* when its meta has no such tag, with the TSDoc's reason in its tooltip, so the page never says less than the docs.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { type ReactNode } from "react";
|
|
14
|
+
import { type CatalogueStatus } from "../storyStatuses.ts";
|
|
15
|
+
import type { TreeComponent } from "../storyTree.ts";
|
|
16
|
+
import "./statusBadges.scss";
|
|
17
|
+
/**
|
|
18
|
+
* A status's text: the catalogue's label, else Forgebook's word for a default status, else its tag.
|
|
19
|
+
*
|
|
20
|
+
* @param status - the status.
|
|
21
|
+
*/
|
|
22
|
+
export declare const statusLabel: (status: CatalogueStatus) => string;
|
|
23
|
+
/**
|
|
24
|
+
* One badge.
|
|
25
|
+
*
|
|
26
|
+
* @param props - the status, and the tooltip it carries when there is more to say.
|
|
27
|
+
*/
|
|
28
|
+
export declare const StatusBadge: ({ status, hint }: {
|
|
29
|
+
readonly status: CatalogueStatus;
|
|
30
|
+
readonly hint?: string | undefined;
|
|
31
|
+
}) => ReactNode;
|
|
32
|
+
/**
|
|
33
|
+
* The catalogue's statuses, their defaults filled in, once per declaration.
|
|
34
|
+
*/
|
|
35
|
+
export declare const useStatuses: () => readonly CatalogueStatus[];
|
|
36
|
+
/**
|
|
37
|
+
* The badges of the statuses a list of tags holds; nothing for none.
|
|
38
|
+
*
|
|
39
|
+
* @param props - the tags, and the row's class.
|
|
40
|
+
*/
|
|
41
|
+
export declare const StatusBadges: ({ tags, className }: {
|
|
42
|
+
readonly tags: readonly string[];
|
|
43
|
+
readonly className: string;
|
|
44
|
+
}) => ReactNode;
|
|
45
|
+
/**
|
|
46
|
+
* The badges at the top of a component's page: its meta's statuses, and `deprecated` when its TSDoc says so, with the
|
|
47
|
+
* TSDoc's reason in that badge's tooltip.
|
|
48
|
+
*
|
|
49
|
+
* @param props - the component and its docs loader.
|
|
50
|
+
*/
|
|
51
|
+
export declare const ComponentBadges: ({ component, loadDocs }: {
|
|
52
|
+
readonly component: TreeComponent;
|
|
53
|
+
readonly loadDocs: (() => Promise<unknown>) | undefined;
|
|
54
|
+
}) => ReactNode;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The statuses' badges: in a component's entry of the sidebar, at the top of its page, beside a story's example that
|
|
4
|
+
* holds a status of its own, and in the tag filter's list.
|
|
5
|
+
* Loaded with the tag filter (`TagViews.tsx`), only for a catalogue whose stories have tags.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* A badge says its status in words, so its colour is never the only sign; a hidden word before the badges tells a
|
|
9
|
+
* screen reader what they are. A page whose component is `@deprecated` in its TSDoc shows the `deprecated` badge even
|
|
10
|
+
* when its meta has no such tag, with the TSDoc's reason in its tooltip, so the page never says less than the docs.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { useMemo } from "react";
|
|
15
|
+
import { catalogueStatuses, DEPRECATED_STATUS, statusesOf } from "../storyStatuses.js";
|
|
16
|
+
import "./statusBadges.css";
|
|
17
|
+
import { useCatalogue } from "./catalogueContext.js";
|
|
18
|
+
import { textsOfGroup } from "./strings.js";
|
|
19
|
+
import { useComponentDocs } from "./useComponentDocs.js";
|
|
20
|
+
/** The badges' texts, as shown: Forgebook's, with the catalogue's replacements (`strings: { "statuses.review": … }`). */
|
|
21
|
+
const STATUS_TEXTS = textsOfGroup("statuses", {
|
|
22
|
+
status: "Status",
|
|
23
|
+
review: "Review",
|
|
24
|
+
experimental: "Experimental",
|
|
25
|
+
deprecated: "Deprecated",
|
|
26
|
+
fromDocs: (reason) => `Deprecated in its TSDoc: ${reason}`
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* A status's text: the catalogue's label, else Forgebook's word for a default status, else its tag.
|
|
30
|
+
*
|
|
31
|
+
* @param status - the status.
|
|
32
|
+
*/
|
|
33
|
+
export const statusLabel = (status) => {
|
|
34
|
+
if (status.label !== undefined)
|
|
35
|
+
return status.label;
|
|
36
|
+
if (status.id === "review" || status.id === "experimental" || status.id === "deprecated")
|
|
37
|
+
return STATUS_TEXTS[status.id];
|
|
38
|
+
return status.id;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* One badge.
|
|
42
|
+
*
|
|
43
|
+
* @param props - the status, and the tooltip it carries when there is more to say.
|
|
44
|
+
*/
|
|
45
|
+
export const StatusBadge = ({ status, hint }) => (_jsx("span", { className: "forgebook-status", "data-tone": status.tone, title: hint ?? statusLabel(status), children: statusLabel(status) }));
|
|
46
|
+
/**
|
|
47
|
+
* A row of badges, with the hidden word that says what they are; nothing for none.
|
|
48
|
+
*
|
|
49
|
+
* @param props - the statuses, the tooltip of each by id, and the row's class.
|
|
50
|
+
*/
|
|
51
|
+
const Badges = ({ statuses, hints, className }) => statuses.length === 0 ? null : (_jsxs("span", { className: className, children: [_jsxs("span", { className: "forgebook-visually-hidden", children: [STATUS_TEXTS.status, ": "] }), statuses.map((status) => (_jsx(StatusBadge, { status: status, hint: hints?.[status.id] }, status.id)))] }));
|
|
52
|
+
/**
|
|
53
|
+
* The catalogue's statuses, their defaults filled in, once per declaration.
|
|
54
|
+
*/
|
|
55
|
+
export const useStatuses = () => {
|
|
56
|
+
const { statuses } = useCatalogue();
|
|
57
|
+
return useMemo(() => catalogueStatuses(statuses), [statuses]);
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* The badges of the statuses a list of tags holds; nothing for none.
|
|
61
|
+
*
|
|
62
|
+
* @param props - the tags, and the row's class.
|
|
63
|
+
*/
|
|
64
|
+
export const StatusBadges = ({ tags, className }) => _jsx(Badges, { className: className, statuses: statusesOf(tags, useStatuses()) });
|
|
65
|
+
/**
|
|
66
|
+
* The badges at the top of a component's page: its meta's statuses, and `deprecated` when its TSDoc says so, with the
|
|
67
|
+
* TSDoc's reason in that badge's tooltip.
|
|
68
|
+
*
|
|
69
|
+
* @param props - the component and its docs loader.
|
|
70
|
+
*/
|
|
71
|
+
export const ComponentBadges = ({ component, loadDocs }) => {
|
|
72
|
+
const statuses = useStatuses();
|
|
73
|
+
const docs = useComponentDocs(loadDocs);
|
|
74
|
+
const reason = docs.status === "ready" ? docs.value.guidance?.deprecated : undefined;
|
|
75
|
+
const { tags } = component;
|
|
76
|
+
return (_jsx(Badges, { className: "forgebook-status-badges forgebook-status-badges--page", statuses: statusesOf(reason === undefined ? tags : [...tags, DEPRECATED_STATUS], statuses), hints: reason === undefined ? {} : { [DEPRECATED_STATUS]: STATUS_TEXTS.fromDocs(reason) } }));
|
|
77
|
+
};
|
|
@@ -1,31 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A story's code, as the panel's Code tab and the component page show it: its `render` as written, coloured by the
|
|
3
|
-
* plugin, or, for a story drawn from its args, the component in the framework's code with the
|
|
3
|
+
* plugin, or, for a story drawn from its args, the component in the framework's code with the args its file writes as
|
|
4
|
+
* code (functions, elements) as written and the values of the moment for the rest.
|
|
5
|
+
*
|
|
6
|
+
* @see `../storyCodeText.ts` for the text.
|
|
4
7
|
*
|
|
5
8
|
* @module
|
|
6
9
|
*/
|
|
7
|
-
import type { StoryFileCode } from "@forgebook/story-format/source";
|
|
8
10
|
import type { ReactNode } from "react";
|
|
9
|
-
import type
|
|
10
|
-
import type { PanelArgs } from "../messages.ts";
|
|
11
|
-
/** Which story's code, and the values its JSX is drawn from when it has no `render`. */
|
|
12
|
-
export type StoryCodeSource = {
|
|
13
|
-
/** The story file's code. */
|
|
14
|
-
readonly code: StoryFileCode;
|
|
15
|
-
/** The story's export name. */
|
|
16
|
-
readonly exportName: string;
|
|
17
|
-
/** The component's name as code writes it (`codeNameOf`), for the code of a story drawn from its args. */
|
|
18
|
-
readonly componentName: string;
|
|
19
|
-
/** The values of the moment: the story's args, with the panel's over them on the story page. */
|
|
20
|
-
readonly args: PanelArgs;
|
|
21
|
-
};
|
|
11
|
+
import { type StoryCodeSource } from "../storyCodeText.ts";
|
|
22
12
|
/**
|
|
23
|
-
*
|
|
13
|
+
* Whether the story has a `render` of its own, shown as written.
|
|
24
14
|
*
|
|
25
|
-
* @param source - the file's code
|
|
26
|
-
* @param write - the framework's code writer, for a story drawn from its args.
|
|
15
|
+
* @param source - the file's code and the story.
|
|
27
16
|
*/
|
|
28
|
-
export declare const
|
|
17
|
+
export declare const hasRenderCode: (source: StoryCodeSource) => boolean;
|
|
29
18
|
/**
|
|
30
19
|
* The story's code, coloured.
|
|
31
20
|
*
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { renderCodeOf, storyCodeText, writtenArgsOf } from "../storyCodeText.js";
|
|
2
3
|
import { Code } from "./Code.js";
|
|
3
4
|
import { useCodeWriter } from "./codeWriter.js";
|
|
4
5
|
/**
|
|
5
|
-
*
|
|
6
|
+
* Whether the story has a `render` of its own, shown as written.
|
|
6
7
|
*
|
|
7
|
-
* @param source - the file's code
|
|
8
|
-
* @param write - the framework's code writer, for a story drawn from its args.
|
|
8
|
+
* @param source - the file's code and the story.
|
|
9
9
|
*/
|
|
10
|
-
export const
|
|
10
|
+
export const hasRenderCode = (source) => renderCodeOf(source) !== undefined;
|
|
11
11
|
/**
|
|
12
12
|
* The story's code, coloured.
|
|
13
13
|
*
|
|
@@ -15,12 +15,13 @@ export const storyCodeText = ({ code, exportName, componentName, args }, write)
|
|
|
15
15
|
*/
|
|
16
16
|
export const StoryCodeBlock = (source) => {
|
|
17
17
|
const write = useCodeWriter();
|
|
18
|
-
const render = source
|
|
18
|
+
const render = renderCodeOf(source);
|
|
19
19
|
if (render !== undefined) {
|
|
20
20
|
// biome-ignore lint/style/useNamingConvention: React's own name for markup set as HTML
|
|
21
21
|
const markup = { __html: render.html };
|
|
22
22
|
return (_jsx("pre", { className: "forgebook-code-block", children: _jsx("code", { className: "forgebook-code", dangerouslySetInnerHTML: markup }) }));
|
|
23
23
|
}
|
|
24
24
|
// the attributes' names are names, not types: only the component's name is coloured as one
|
|
25
|
-
|
|
25
|
+
const names = [...Object.keys(source.args), ...Object.keys(writtenArgsOf(source))];
|
|
26
|
+
return (_jsx("pre", { className: "forgebook-code-block", children: _jsx(Code, { text: storyCodeText(source, write), names: names }) }));
|
|
26
27
|
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A switch offered as a gallery (`control: "gallery"`): a button naming the value shown, which opens a menu of the
|
|
3
|
+
* values with their previews.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Only the button is on the first screen: the menu's code, its styles and the previews themselves load when it first
|
|
7
|
+
* opens (`SwitchGalleryPanel.tsx`), so a catalogue pays for its gallery only when a reader asks for it.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import type { ReactNode } from "react";
|
|
12
|
+
import { type ViewSwitch } from "../switches.ts";
|
|
13
|
+
import type { SwitchPreviews } from "./SwitchGalleryPanel.tsx";
|
|
14
|
+
/** A gallery's props. */
|
|
15
|
+
export type SwitchGalleryProps = {
|
|
16
|
+
/** The switch. */
|
|
17
|
+
readonly each: ViewSwitch;
|
|
18
|
+
/** Whether it sits on the toolbar, after its name, or in a row of the View menu, whose row names it. */
|
|
19
|
+
readonly isOnBar: boolean;
|
|
20
|
+
/** The value shown. */
|
|
21
|
+
readonly value: string;
|
|
22
|
+
/** Called with the chosen value. */
|
|
23
|
+
readonly onValueChange: (value: string) => void;
|
|
24
|
+
/** Whether it is off. */
|
|
25
|
+
readonly isDisabled: boolean;
|
|
26
|
+
/** Why it is off, as its tooltip. */
|
|
27
|
+
readonly disabledNote: string | undefined;
|
|
28
|
+
/** Loads the catalogue's previews; none when it gives none. */
|
|
29
|
+
readonly loadPreviews: (() => Promise<SwitchPreviews>) | undefined;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* A gallery's button, and its menu once open.
|
|
33
|
+
*
|
|
34
|
+
* @param props - the switch, the value shown and its setter.
|
|
35
|
+
*/
|
|
36
|
+
export declare const SwitchGallery: ({ each, isOnBar, value, onValueChange, isDisabled, disabledNote, loadPreviews }: SwitchGalleryProps) => ReactNode;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { switchValueOf } from "../switches.js";
|
|
3
|
+
import { Icon } from "./icons.js";
|
|
4
|
+
import { LazyView, lazyModule } from "./lazyModule.js";
|
|
5
|
+
import { usePopover } from "./usePopover.js";
|
|
6
|
+
/** The menu's module, loaded when a gallery first opens. */
|
|
7
|
+
const PANEL = lazyModule(() => import("./SwitchGalleryPanel.js").then((module) => module.SwitchGalleryPanel));
|
|
8
|
+
/**
|
|
9
|
+
* A gallery's button, and its menu once open.
|
|
10
|
+
*
|
|
11
|
+
* @param props - the switch, the value shown and its setter.
|
|
12
|
+
*/
|
|
13
|
+
export const SwitchGallery = ({ each, isOnBar, value, onValueChange, isDisabled, disabledNote, loadPreviews }) => {
|
|
14
|
+
const popover = usePopover();
|
|
15
|
+
const name = switchValueOf(each, value)?.label ?? value;
|
|
16
|
+
return (_jsxs("div", { className: "forgebook-toolbar__control", children: [isOnBar ? (_jsx("span", { className: "forgebook-toolbar__label", "aria-hidden": "true", children: each.label })) : null, _jsxs("button", { ref: popover.buttonRef, type: "button", className: "forgebook-button", "aria-label": `${each.label}: ${name}`, "aria-expanded": popover.isOpen, "aria-controls": popover.panelId, disabled: isDisabled, title: isDisabled ? disabledNote : undefined, onClick: (event) => popover.setIsOpen(!popover.isOpen, event), children: [_jsx("span", { className: "forgebook-gallery-names", children: each.values.map((option) => (_jsx("span", { "data-shown": option.value === value ? "" : undefined, children: option.label }, option.value))) }), _jsx(Icon, { name: "chevronDown", size: 12 })] }), popover.isDrawn ? (_jsx(LazyView, { module: PANEL, props: { each, value, onValueChange, popover, loadPreviews }, loading: null, failed: (message) => (_jsx("p", { className: "forgebook-problems", role: "alert", children: message })) })) : null] }));
|
|
17
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The menu of a gallery (`control: "gallery"`): each value of a switch with its preview, so a reader sees a look before
|
|
3
|
+
* applying it.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Native radio buttons, as the shell's other menus: one tab stop, the arrow keys move and choose, and a screen reader
|
|
7
|
+
* reads the group and each value's label. The pictures are decoration beside that label, so they are hidden from it.
|
|
8
|
+
* Drawn in the top layer, positioned from its button: inside the View menu, whose rows scroll, it would be clipped.
|
|
9
|
+
* Loaded when a gallery first opens, with the previews (`SwitchGallery.tsx`): their pictures are fetched only then.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { type ReactNode } from "react";
|
|
14
|
+
import type { SwitchPreview, ViewSwitch } from "../switches.ts";
|
|
15
|
+
import "./switchGallery.scss";
|
|
16
|
+
import type { Popover } from "./usePopover.ts";
|
|
17
|
+
/** The catalogue's previews, by switch id then value: the plugin's module, with each picture's address. */
|
|
18
|
+
export type SwitchPreviews = Readonly<Record<string, Readonly<Record<string, SwitchPreview>>>>;
|
|
19
|
+
/** The menu's props. */
|
|
20
|
+
export type SwitchGalleryPanelProps = {
|
|
21
|
+
/** The switch. */
|
|
22
|
+
readonly each: ViewSwitch;
|
|
23
|
+
/** The value shown. */
|
|
24
|
+
readonly value: string;
|
|
25
|
+
/** Called with the chosen value. */
|
|
26
|
+
readonly onValueChange: (value: string) => void;
|
|
27
|
+
/** The button's popover, which opens and closes the menu. */
|
|
28
|
+
readonly popover: Popover;
|
|
29
|
+
/** Loads the catalogue's previews; none when it gives none. */
|
|
30
|
+
readonly loadPreviews: (() => Promise<SwitchPreviews>) | undefined;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* The menu.
|
|
34
|
+
*
|
|
35
|
+
* @param props - the switch, the value shown and its setter, and the button's popover.
|
|
36
|
+
*/
|
|
37
|
+
export declare const SwitchGalleryPanel: ({ each, value, onValueChange, popover, loadPreviews }: SwitchGalleryPanelProps) => ReactNode;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The menu of a gallery (`control: "gallery"`): each value of a switch with its preview, so a reader sees a look before
|
|
4
|
+
* applying it.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Native radio buttons, as the shell's other menus: one tab stop, the arrow keys move and choose, and a screen reader
|
|
8
|
+
* reads the group and each value's label. The pictures are decoration beside that label, so they are hidden from it.
|
|
9
|
+
* Drawn in the top layer, positioned from its button: inside the View menu, whose rows scroll, it would be clipped.
|
|
10
|
+
* Loaded when a gallery first opens, with the previews (`SwitchGallery.tsx`): their pictures are fetched only then.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { useEffect, useId, useLayoutEffect, useState } from "react";
|
|
15
|
+
import { galleryPlace } from "./galleryPlace.js";
|
|
16
|
+
import { Icon } from "./icons.js";
|
|
17
|
+
import "./switchGallery.css";
|
|
18
|
+
/**
|
|
19
|
+
* What a value shows: its picture, its colours and font, or, with no preview, its label's first letter, so it still
|
|
20
|
+
* has a place of its own in the grid.
|
|
21
|
+
*
|
|
22
|
+
* @param props - the value and its preview.
|
|
23
|
+
*/
|
|
24
|
+
const PreviewArt = ({ option, preview }) => {
|
|
25
|
+
const [isBroken, setIsBroken] = useState(false);
|
|
26
|
+
if (preview !== undefined && "image" in preview && !isBroken) {
|
|
27
|
+
return (_jsx("img", { className: "forgebook-gallery__image", src: preview.image, alt: "", decoding: "async", onError: (_event) => setIsBroken(true) }));
|
|
28
|
+
}
|
|
29
|
+
if (preview !== undefined && "swatches" in preview) {
|
|
30
|
+
return (_jsxs(_Fragment, { children: [_jsx("span", { className: "forgebook-gallery__swatches", children: preview.swatches.map((colour, index) => (_jsx("span", { style: { backgroundColor: colour } }, index))) }), preview.font === undefined ? null : (_jsx("span", { className: "forgebook-gallery__font", style: { fontFamily: `"${preview.font}", var(--forgebook-font-sans)` }, children: preview.font }))] }));
|
|
31
|
+
}
|
|
32
|
+
return _jsx("span", { className: "forgebook-gallery__letter", children: Array.from(option.label)[0] });
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* The menu.
|
|
36
|
+
*
|
|
37
|
+
* @param props - the switch, the value shown and its setter, and the button's popover.
|
|
38
|
+
*/
|
|
39
|
+
export const SwitchGalleryPanel = ({ each, value, onValueChange, popover, loadPreviews }) => {
|
|
40
|
+
const { panelRef, buttonRef, panelId, setIsOpen, closeAfterChoice } = popover;
|
|
41
|
+
const name = useId();
|
|
42
|
+
const [previews, setPreviews] = useState({});
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
let isCurrent = true;
|
|
45
|
+
// without its previews the menu still works: every value then shows its letter
|
|
46
|
+
loadPreviews?.()
|
|
47
|
+
.then((loaded) => {
|
|
48
|
+
if (isCurrent)
|
|
49
|
+
setPreviews(loaded);
|
|
50
|
+
})
|
|
51
|
+
.catch(() => undefined);
|
|
52
|
+
return () => {
|
|
53
|
+
isCurrent = false;
|
|
54
|
+
};
|
|
55
|
+
}, [loadPreviews]);
|
|
56
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: both are refs, set once the panel is drawn
|
|
57
|
+
useLayoutEffect(() => {
|
|
58
|
+
const panel = panelRef.current;
|
|
59
|
+
const button = buttonRef.current;
|
|
60
|
+
if (panel === null || button === null)
|
|
61
|
+
return;
|
|
62
|
+
panel.showPopover();
|
|
63
|
+
const place = () => {
|
|
64
|
+
const { top, left } = galleryPlace(button.getBoundingClientRect(), panel.getBoundingClientRect(), {
|
|
65
|
+
width: window.innerWidth,
|
|
66
|
+
height: window.innerHeight
|
|
67
|
+
});
|
|
68
|
+
panel.style.top = `${top}px`;
|
|
69
|
+
panel.style.left = `${left}px`;
|
|
70
|
+
};
|
|
71
|
+
place();
|
|
72
|
+
// the first open arrives after its popover's own focus: the code was still loading
|
|
73
|
+
panel.querySelector("input:checked")?.focus();
|
|
74
|
+
window.addEventListener("resize", place);
|
|
75
|
+
return () => window.removeEventListener("resize", place);
|
|
76
|
+
}, []);
|
|
77
|
+
const closeWithKey = () => {
|
|
78
|
+
setIsOpen(false);
|
|
79
|
+
buttonRef.current?.focus();
|
|
80
|
+
};
|
|
81
|
+
// on the way down, wherever the focus is: this menu's alone, so a View menu around it stays open
|
|
82
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: both it calls read refs and the state's setter
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
const onEscape = (event) => {
|
|
85
|
+
if (event.key !== "Escape")
|
|
86
|
+
return;
|
|
87
|
+
event.stopPropagation();
|
|
88
|
+
closeWithKey();
|
|
89
|
+
};
|
|
90
|
+
document.addEventListener("keydown", onEscape, { capture: true });
|
|
91
|
+
return () => document.removeEventListener("keydown", onEscape, { capture: true });
|
|
92
|
+
}, []);
|
|
93
|
+
return (_jsx("div", { ref: panelRef, id: panelId, className: "forgebook-gallery", popover: "manual", role: "dialog", "aria-label": each.label, onKeyDown: (event) => {
|
|
94
|
+
if (event.key === "Enter")
|
|
95
|
+
closeWithKey();
|
|
96
|
+
}, children: _jsxs("fieldset", { className: "forgebook-gallery__grid", children: [_jsx("legend", { className: "forgebook-visually-hidden", children: each.label }), each.values.map((option) => (_jsxs("label", { className: "forgebook-gallery__item", children: [_jsx("input", { type: "radio", className: "forgebook-visually-hidden", name: name, checked: option.value === value, onChange: () => onValueChange(option.value),
|
|
97
|
+
// on the click, so a press on the value already shown closes the menu too
|
|
98
|
+
onClick: closeAfterChoice }), _jsx("span", { className: "forgebook-gallery__preview", "aria-hidden": "true", children: _jsx(PreviewArt, { option: option, preview: previews[each.id]?.[option.value] }) }), _jsxs("span", { className: "forgebook-gallery__name", children: [option.value === value ? _jsx(Icon, { name: "check", size: 12 }) : null, option.label] })] }, option.value)))] }) }));
|
|
99
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sidebar's tag filter: a button beside the search, with how many tags are on, which opens the catalogue's tags to
|
|
3
|
+
* ask for or to leave out, a status shown as its badge. Loaded only for a catalogue whose stories have tags.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { type ReactNode } from "react";
|
|
8
|
+
import type { StoryTree } from "../storyTree.ts";
|
|
9
|
+
import "./tagFilter.scss";
|
|
10
|
+
/** The filter's props. */
|
|
11
|
+
export type TagFilterProps = {
|
|
12
|
+
/** The whole tree, whose tags it offers. */
|
|
13
|
+
readonly tree: StoryTree;
|
|
14
|
+
/** The tags on, each `name` or `!name`. */
|
|
15
|
+
readonly tags: readonly string[];
|
|
16
|
+
/** Called with the tags on, when they change. */
|
|
17
|
+
readonly onTagsChange: (tags: readonly string[]) => void;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* The tag filter.
|
|
21
|
+
*
|
|
22
|
+
* @param props - the tree, the tags on and how to change them.
|
|
23
|
+
*/
|
|
24
|
+
export declare const TagFilter: ({ tree, tags, onTagsChange }: TagFilterProps) => ReactNode;
|