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
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useId, useState } from "react";
|
|
3
3
|
import { deviceDefaultOf, shownDevice } from "../deviceView.js";
|
|
4
|
+
import { storyCodeText } from "../storyCodeText.js";
|
|
5
|
+
import { isFilterTag } from "../storyTagNames.js";
|
|
4
6
|
import { frameAddress, schemeOf } from "../viewState.js";
|
|
5
7
|
import { BoxWidthControl, useBoxWidth } from "./BoxWidth.js";
|
|
6
8
|
import { CodeText } from "./CodeText.js";
|
|
@@ -10,8 +12,9 @@ import { DeviceSlot, deviceAddress, inkScheme, isWaitingForDevice, roomSizing, u
|
|
|
10
12
|
import { FrameView } from "./FrameView.js";
|
|
11
13
|
import { Icon } from "./icons.js";
|
|
12
14
|
import { LATER_STRINGS } from "./laterStrings.js";
|
|
15
|
+
import { PageTagView } from "./pageTagView.js";
|
|
13
16
|
import { StageViewport } from "./StageViewport.js";
|
|
14
|
-
import { StoryCodeBlock
|
|
17
|
+
import { StoryCodeBlock } from "./StoryCodeBlock.js";
|
|
15
18
|
import { touchedView } from "./storyTouch.js";
|
|
16
19
|
import { STRINGS } from "./strings.js";
|
|
17
20
|
import { useCopy } from "./useCopy.js";
|
|
@@ -39,7 +42,12 @@ export const StoryLink = ({ story, hrefOf, onOpen, className, label, children })
|
|
|
39
42
|
const ExampleCode = ({ id, source, isShown }) => {
|
|
40
43
|
const { isCopied, copy } = useCopy();
|
|
41
44
|
const write = useCodeWriter();
|
|
42
|
-
|
|
45
|
+
// a page of fifty stories would hold fifty coloured blocks nobody opened: the code is written when first shown, then
|
|
46
|
+
// kept, so closing it plays the same transition as opening it
|
|
47
|
+
const [wasShown, setWasShown] = useState(isShown);
|
|
48
|
+
if (isShown && !wasShown)
|
|
49
|
+
setWasShown(true);
|
|
50
|
+
return (_jsx("div", { id: id, className: "forgebook-example__code", "data-open": isShown ? "" : undefined, inert: !isShown, children: _jsx("div", { className: "forgebook-example__code-inner", children: wasShown || isShown ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "forgebook-example__copy", onClick: () => copy(storyCodeText(source, write)), "aria-live": "polite", children: isCopied ? STRINGS.copied : LATER_STRINGS.copy }), _jsx(StoryCodeBlock, { ...source })] })) : null }) }));
|
|
43
51
|
};
|
|
44
52
|
/**
|
|
45
53
|
* The height an example's story is drawn at least at: its scene's, and over the page the room its stage has.
|
|
@@ -49,11 +57,11 @@ const ExampleCode = ({ id, source, isShown }) => {
|
|
|
49
57
|
*/
|
|
50
58
|
const sceneHeightOf = (story, stageHeight) => stageHeight === undefined ? story.height : Math.max(story.height ?? 0, stageHeight);
|
|
51
59
|
/**
|
|
52
|
-
* An example's title, a link to its story's page, and its description.
|
|
60
|
+
* An example's title, a link to its story's page with the statuses the story holds of its own, and its description.
|
|
53
61
|
*
|
|
54
62
|
* @param props - the story and how its link opens it.
|
|
55
63
|
*/
|
|
56
|
-
const ExampleHead = ({ story, context }) => (_jsxs("header", { className: "forgebook-example__head", children: [
|
|
64
|
+
const ExampleHead = ({ story, titleTag: Title, context }) => (_jsxs("header", { className: "forgebook-example__head", children: [_jsxs(Title, { className: "forgebook-example__title", children: [_jsx(StoryLink, { story: story, hrefOf: context.hrefOf, onOpen: context.onOpen, className: "forgebook-link", children: story.name }), story.tags.some(isFilterTag) ? (_jsx(PageTagView, { place: "story", story: story, component: context.component })) : null] }), story.description === undefined ? null : (_jsx("p", { className: "forgebook-example__description", children: _jsx(CodeText, { text: story.description }) }))] }));
|
|
57
65
|
/**
|
|
58
66
|
* What keeps an example's place while its box is over the page: a slot of its height in the list, and the shade
|
|
59
67
|
* under the box, a press on which brings it back.
|
|
@@ -137,17 +145,17 @@ const exampleHeights = (story, context, isDemo) => {
|
|
|
137
145
|
* @param props - the story, whether it is the demo, whether its frame may load, where the queue watches it, and what
|
|
138
146
|
* every example shares.
|
|
139
147
|
*/
|
|
140
|
-
export const Example = ({ story, isDemo, isMounted, observe, ...context }) => {
|
|
148
|
+
export const Example = ({ story, isDemo, titleTag = "h3", isMounted, observe, ...context }) => {
|
|
141
149
|
const { source, hasCode, isCodeShown, setIsCodeShown } = useExampleCode(story, context);
|
|
142
150
|
const codeId = useId();
|
|
143
151
|
const full = useFullPage();
|
|
144
152
|
const { touch } = useCatalogue();
|
|
145
153
|
const { shown, framed, scheme } = useExampleDevice(story, context);
|
|
146
154
|
// the frame loads with the story's finger as it is then; a change after reaches it live, keeping the story's state
|
|
147
|
-
const loadedView = useLoadedView(context.frameView.sheets
|
|
155
|
+
const loadedView = useLoadedView(`${context.frameView.sheets}|${context.frameView.play}`, touchedView(context.frameView, story.id, context.touches, touch));
|
|
148
156
|
const boxWidth = useBoxWidth(full.isOver, context.view.width);
|
|
149
157
|
const { fallback: fallbackHeight, least: leastHeight } = exampleHeights(story, context, isDemo);
|
|
150
|
-
return (_jsxs("article", { ref: observe, className: "forgebook-example", "data-demo": isDemo ? "" : undefined, "aria-label": isDemo ? STRINGS.frameTitle(context.component.name, story.name) : story.name, children: [isDemo ? null : _jsx(ExampleHead, { story: story, context: context }), full.isOver ? _jsx(FullPageSlot, { full: full }) : null, _jsxs("div", { ref: full.boxRef, className: "forgebook-example__box", "data-full": full.isOver ? "" : undefined, ...(full.isFull ? { role: "dialog", "aria-label": story.name } : {}), children: [_jsx("div", { ref: full.stageRef, className: "forgebook-example__stage", children: _jsx(StageViewport, { ...roomSizing(framed, {
|
|
158
|
+
return (_jsxs("article", { ref: observe, className: "forgebook-example", "data-demo": isDemo ? "" : undefined, "aria-label": isDemo ? STRINGS.frameTitle(context.component.name, story.name) : story.name, children: [isDemo ? null : _jsx(ExampleHead, { story: story, titleTag: titleTag, context: context }), full.isOver ? _jsx(FullPageSlot, { full: full }) : null, _jsxs("div", { ref: full.boxRef, className: "forgebook-example__box", "data-full": full.isOver ? "" : undefined, ...(full.isFull ? { role: "dialog", "aria-label": story.name } : {}), children: [_jsx("div", { ref: full.stageRef, className: "forgebook-example__stage", children: _jsx(StageViewport, { ...roomSizing(framed, {
|
|
151
159
|
width: boxWidth.width,
|
|
152
160
|
onWidthChange: boxWidth.onWidthChange,
|
|
153
161
|
onShownWidthChange: boxWidth.onShownWidthChange,
|
|
@@ -29,8 +29,11 @@ export type FrameViewProps = {
|
|
|
29
29
|
readonly fixedHeight?: number | undefined;
|
|
30
30
|
/** The addresses of the frames that finished loading: until its own is there, the frame shows that it loads. */
|
|
31
31
|
readonly settled: ReadonlySet<string>;
|
|
32
|
-
/**
|
|
33
|
-
|
|
32
|
+
/**
|
|
33
|
+
* The ref the iframe is given. A prop of its own rather than `ref`: the shell runs on the project's React, and React 18
|
|
34
|
+
* passes no `ref` to a function component. Short, as every byte of the shell's first load counts.
|
|
35
|
+
*/
|
|
36
|
+
readonly frame?: Ref<HTMLIFrameElement>;
|
|
34
37
|
};
|
|
35
38
|
/**
|
|
36
39
|
* A story's frame, as tall as its story.
|
|
@@ -38,7 +41,7 @@ export type FrameViewProps = {
|
|
|
38
41
|
* @param props - the frame's title, address, the reported heights, the height until its own arrives, and the frames
|
|
39
42
|
* that finished loading.
|
|
40
43
|
*/
|
|
41
|
-
export declare const FrameView: ({ title, address, heights, fallbackHeight, settled, sceneHeight, fixedHeight,
|
|
44
|
+
export declare const FrameView: ({ title, address, heights, fallbackHeight, settled, sceneHeight, fixedHeight, frame }: FrameViewProps) => ReactNode;
|
|
42
45
|
/**
|
|
43
46
|
* Sends a message to every frame inside an element.
|
|
44
47
|
*
|
|
@@ -7,14 +7,14 @@ import { STRINGS } from "./strings.js";
|
|
|
7
7
|
* @param props - the frame's title, address, the reported heights, the height until its own arrives, and the frames
|
|
8
8
|
* that finished loading.
|
|
9
9
|
*/
|
|
10
|
-
export const FrameView = ({ title, address, heights, fallbackHeight, settled, sceneHeight = 0, fixedHeight,
|
|
10
|
+
export const FrameView = ({ title, address, heights, fallbackHeight, settled, sceneHeight = 0, fixedHeight, frame }) => {
|
|
11
11
|
const isLoading = !settled.has(address);
|
|
12
12
|
// while it loads, an empty document reports a height of nothing: the box keeps its waiting height until the story
|
|
13
13
|
// is there, then takes the story's
|
|
14
14
|
const reported = heights.get(address);
|
|
15
15
|
const contentHeight = isLoading ? Math.max(reported ?? 0, fallbackHeight) : (reported ?? fallbackHeight);
|
|
16
16
|
const height = fixedHeight ?? Math.max(contentHeight, sceneHeight);
|
|
17
|
-
return (_jsxs("div", { className: "forgebook-frame-box", "data-loading": isLoading ? "" : undefined, children: [_jsx("iframe", { ref:
|
|
17
|
+
return (_jsxs("div", { className: "forgebook-frame-box", "data-loading": isLoading ? "" : undefined, children: [_jsx("iframe", { ref: frame, className: "forgebook-frame-view", title: title, src: address, ...storyFrameAttributes(), style: { height } }), isLoading ? (_jsx("div", { className: "forgebook-frame-loading", role: "status", children: _jsxs("span", { className: "forgebook-frame-loading__label", children: [_jsx("span", { className: "forgebook-spinner", "aria-hidden": "true" }), STRINGS.loadingStory] }) })) : null] }));
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
20
|
* Sends a message to every frame inside an element.
|
|
@@ -21,6 +21,8 @@ export type HomePageProps = {
|
|
|
21
21
|
readonly tree: StoryTree;
|
|
22
22
|
/** The sources, for their introductions. */
|
|
23
23
|
readonly sources: readonly StorySource[];
|
|
24
|
+
/** The catalogue's own story patterns, for a home with no story to say where it looks; none by default. */
|
|
25
|
+
readonly storyGlobs?: readonly string[] | undefined;
|
|
24
26
|
/** The pages opened last, the newest first. */
|
|
25
27
|
readonly recent: readonly RecentPage[];
|
|
26
28
|
/** A page's address, for its link. */
|
|
@@ -109,5 +111,5 @@ export declare const LibrarySection: ({ source, sources, hrefOf, onOpen }: Pick<
|
|
|
109
111
|
*
|
|
110
112
|
* @param props - the title, the tree, the sources, the recent pages, and how to open a page.
|
|
111
113
|
*/
|
|
112
|
-
export declare const HomePage: ({ title, tree, sources, recent, hrefOf, onOpen, header }: HomePageProps) => ReactNode;
|
|
114
|
+
export declare const HomePage: ({ title, tree, sources, storyGlobs, recent, hrefOf, onOpen, header }: HomePageProps) => ReactNode;
|
|
113
115
|
export {};
|
|
@@ -2,12 +2,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { findPage } from "../pageTree.js";
|
|
4
4
|
import { findComponent, findStory } from "../storyTree.js";
|
|
5
|
+
import { LATER_STRINGS } from "./laterStrings.js";
|
|
5
6
|
import { PackageHtml } from "./PackageHtml.js";
|
|
6
7
|
import { PAGE_STRINGS } from "./pageStrings.js";
|
|
7
|
-
import { STRINGS } from "./strings.js";
|
|
8
8
|
import { useLoaded } from "./useLoaded.js";
|
|
9
9
|
/** The most components a family's card lists before "Show all". */
|
|
10
10
|
const CARD_COMPONENTS = 6;
|
|
11
|
+
/**
|
|
12
|
+
* What the home says before the first story: where the catalogue looks, and how to write one.
|
|
13
|
+
*
|
|
14
|
+
* @param props - the catalogue's story patterns.
|
|
15
|
+
*/
|
|
16
|
+
const NoStoryYet = ({ globs }) => (_jsxs("section", { className: "forgebook-home__no-story", "data-testid": "forgebook-no-story", children: [_jsx("p", { children: PAGE_STRINGS.homeNoStoryLead }), _jsx("ul", { children: globs.map((glob) => (_jsx("li", { children: _jsx("code", { children: glob }) }, glob))) }), _jsx("p", { children: PAGE_STRINGS.homeNoStoryHelp }), _jsx("pre", { children: _jsx("code", { children: PAGE_STRINGS.homeNoStoryCommand }) })] }));
|
|
11
17
|
/** A link to a page, opened in place unless the user asks for another tab. */
|
|
12
18
|
export const PageLink = ({ page, hrefOf, onOpen, className, children }) => (_jsx("a", { className: className, href: hrefOf(page), onClick: (event) => {
|
|
13
19
|
if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0)
|
|
@@ -83,7 +89,7 @@ export const FamilyCard = ({ family, hrefOf, onOpen }) => {
|
|
|
83
89
|
*
|
|
84
90
|
* @param props - the source, and how to open a page.
|
|
85
91
|
*/
|
|
86
|
-
export const DocsCard = ({ source, hrefOf, onOpen }) => (_jsxs("article", { className: "forgebook-home__card", "aria-label":
|
|
92
|
+
export const DocsCard = ({ source, hrefOf, onOpen }) => (_jsxs("article", { className: "forgebook-home__card", "aria-label": LATER_STRINGS.docsNav, children: [_jsx("h3", { className: "forgebook-home__card-title", children: LATER_STRINGS.docsNav }), _jsx("ul", { className: "forgebook-home__components", children: source.pages.map((page) => (_jsx("li", { children: _jsx(PageLink, { page: { kind: "page", id: page.id }, hrefOf: hrefOf, onOpen: onOpen, className: "forgebook-link", children: page.name }) }, page.id))) })] }));
|
|
87
93
|
/**
|
|
88
94
|
* How many components a tree has, in every library.
|
|
89
95
|
*
|
|
@@ -117,8 +123,12 @@ export const LibrarySection = ({ source, sources, hrefOf, onOpen }) => (_jsxs("s
|
|
|
117
123
|
*
|
|
118
124
|
* @param props - the title, the tree, the sources, the recent pages, and how to open a page.
|
|
119
125
|
*/
|
|
120
|
-
export const HomePage = ({ title, tree, sources, recent, hrefOf, onOpen, header }) => {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
126
|
+
export const HomePage = ({ title, tree, sources, storyGlobs = [], recent, hrefOf, onOpen, header }) => {
|
|
127
|
+
// a catalogue that names patterns and lists nothing is one about to get its first story: a build never gets here, since
|
|
128
|
+
// it stops on a pattern that matches nothing
|
|
129
|
+
const listingGlobs = storyGlobs.filter((glob) => !glob.startsWith("!") || glob.startsWith("!("));
|
|
130
|
+
const isWaiting = listingGlobs.length > 0 && componentCount(tree) === 0;
|
|
131
|
+
return (_jsxs("div", { className: "forgebook-workspace", children: [header, _jsx("div", { className: "forgebook-scroll", children: _jsxs("div", { className: "forgebook-home", children: [_jsxs("header", { className: "forgebook-home__head", children: [_jsx("h1", { className: "forgebook-home__title", children: title }), _jsxs("p", { className: "forgebook-doc__lead", children: [isWaiting ? PAGE_STRINGS.homeNoStoryTitle : null, !isWaiting && tree.sources.length === 0 ? PAGE_STRINGS.homeEmpty : null, !isWaiting && tree.sources.length > 0
|
|
132
|
+
? PAGE_STRINGS.homeSummary(componentCount(tree), libraryCount(tree))
|
|
133
|
+
: null] })] }), isWaiting ? _jsx(NoStoryYet, { globs: listingGlobs }) : null, _jsx(RecentSection, { tree: tree, recent: recent, hrefOf: hrefOf, onOpen: onOpen }), tree.sources.map((source) => (_jsx(LibrarySection, { source: source, sources: sources, hrefOf: hrefOf, onOpen: onOpen }, source.id)))] }) })] }));
|
|
124
134
|
};
|
|
@@ -11,7 +11,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
11
11
|
*/
|
|
12
12
|
import { useId, useRef } from "react";
|
|
13
13
|
import { Icon } from "./icons.js";
|
|
14
|
-
import {
|
|
14
|
+
import { LATER_STRINGS } from "./laterStrings.js";
|
|
15
15
|
/** The room kept between the note, its button and the window's edges, in CSS px. */
|
|
16
16
|
const GAP_PX = 6;
|
|
17
17
|
/**
|
|
@@ -40,7 +40,7 @@ export const InfoTip = ({ note, about }) => {
|
|
|
40
40
|
if (noteRef.current?.matches(":popover-open") === true)
|
|
41
41
|
noteRef.current.hidePopover();
|
|
42
42
|
};
|
|
43
|
-
return (_jsxs(_Fragment, { children: [_jsx("button", { ref: buttonRef, type: "button", className: "forgebook-info-tip", "aria-label":
|
|
43
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { ref: buttonRef, type: "button", className: "forgebook-info-tip", "aria-label": LATER_STRINGS.aboutControl(about), "aria-describedby": noteId,
|
|
44
44
|
// its own note is its tooltip: an empty title keeps a parent's (a pinned control's key) from showing over it
|
|
45
45
|
title: "", onPointerEnter: show, onPointerLeave: hide, onFocus: show, onBlur: hide, onKeyDown: (event) => {
|
|
46
46
|
// an open note takes the first Escape; the menu around it, the next
|
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The panel's Interactions tab: the story's play function as it ran, whether it passed or where it failed, each step
|
|
3
|
-
* it named with `step`,
|
|
3
|
+
* it named with `step`, each action it took through its context's tools, a button that runs it again on a fresh mount,
|
|
4
|
+
* and a debugger that stops it before each action.
|
|
4
5
|
*
|
|
5
6
|
* @module
|
|
6
7
|
*/
|
|
7
8
|
import type { ReactNode } from "react";
|
|
9
|
+
import type { PlayStepCommand } from "../messages.ts";
|
|
8
10
|
import type { PlayTrace } from "../playTrace.ts";
|
|
11
|
+
import type { ViewState } from "../viewState.ts";
|
|
9
12
|
/** The tab's props. */
|
|
10
13
|
export type InteractionsTabProps = {
|
|
11
14
|
/** The play's trace. */
|
|
12
15
|
readonly trace: PlayTrace;
|
|
13
|
-
/** Runs the play again on a fresh mount. */
|
|
14
|
-
readonly
|
|
16
|
+
/** Runs the play again on a fresh mount, or steps through it. */
|
|
17
|
+
readonly onPlayStep: (command: PlayStepCommand) => void;
|
|
18
|
+
/** The view, whose play switch it shows. */
|
|
19
|
+
readonly view: ViewState;
|
|
20
|
+
/** Changes the view. */
|
|
21
|
+
readonly onViewChange: (view: ViewState) => void;
|
|
15
22
|
};
|
|
16
23
|
/**
|
|
17
24
|
* The Interactions tab.
|
|
18
25
|
*
|
|
19
26
|
* @param props - the trace and how to run the play again.
|
|
20
27
|
*/
|
|
21
|
-
export declare const InteractionsTab: (
|
|
28
|
+
export declare const InteractionsTab: (props: InteractionsTabProps) => ReactNode;
|
|
@@ -1,11 +1,27 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useCatalogue } from "./catalogueContext.js";
|
|
2
3
|
import { LATER_STRINGS } from "./laterStrings.js";
|
|
4
|
+
import { rememberPlay } from "./playMemory.js";
|
|
3
5
|
import { STRINGS } from "./strings.js";
|
|
4
6
|
/** A status with its time, as a line ends. */
|
|
5
7
|
const StatusNote = ({ status, ms }) => (_jsxs("span", { className: "forgebook-play__status", "data-status": status, children: [STRINGS.playStatus[status], ms === undefined ? null : ` · ${LATER_STRINGS.playTime(ms)}`] }));
|
|
8
|
+
/** Actions, in order; nothing when there are none. */
|
|
9
|
+
const ActionList = ({ actions }) => actions.length === 0 ? null : (_jsx("ol", { className: "forgebook-play__actions", children: actions.map((action, index) => (_jsxs("li", { className: "forgebook-play__action", "data-status": action.status, children: [_jsx("code", { className: "forgebook-play__label", children: action.label }), _jsx(StatusNote, { status: action.status, ms: action.ms }), action.error === undefined ? null : _jsx("p", { className: "forgebook-play__error", children: action.error })] }, index))) }));
|
|
10
|
+
/** The buttons that run the play: to its end, or one action at a time. */
|
|
11
|
+
const PlayButtons = ({ trace, onPlayStep }) => trace.pausedAt === undefined ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "forgebook-button", disabled: trace.status === "running", onClick: () => onPlayStep("start"), children: LATER_STRINGS.playStepThrough }), _jsx("button", { type: "button", className: "forgebook-button", disabled: trace.status === "running", onClick: () => onPlayStep("again"), children: trace.status === "off" ? LATER_STRINGS.playRun : LATER_STRINGS.playAgain })] })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "forgebook-button", onClick: () => onPlayStep("next"), children: LATER_STRINGS.playNext }), _jsx("button", { type: "button", className: "forgebook-button", onClick: () => onPlayStep("continue"), children: LATER_STRINGS.playContinue })] }));
|
|
6
12
|
/**
|
|
7
13
|
* The Interactions tab.
|
|
8
14
|
*
|
|
9
15
|
* @param props - the trace and how to run the play again.
|
|
10
16
|
*/
|
|
11
|
-
export const InteractionsTab = (
|
|
17
|
+
export const InteractionsTab = (props) => {
|
|
18
|
+
const { trace, view, onViewChange } = props;
|
|
19
|
+
const catalogue = useCatalogue();
|
|
20
|
+
const actions = trace.actions ?? [];
|
|
21
|
+
const outside = actions.filter((action) => action.step === undefined);
|
|
22
|
+
return (_jsxs("div", { className: "forgebook-prop-group", "aria-live": "polite", children: [_jsxs("div", { className: "forgebook-calls__head", children: [_jsxs("h3", { className: "forgebook-prop-group__title", children: [LATER_STRINGS.playTitle, " ", _jsx(StatusNote, { status: trace.status, ms: trace.ms })] }), _jsx("div", { className: "forgebook-play__buttons", children: _jsx(PlayButtons, { ...props }) })] }), _jsxs("label", { className: "forgebook-play__switch", children: [_jsx("input", { type: "checkbox", checked: view.play === "on", onChange: (event) => {
|
|
23
|
+
const play = event.target.checked ? "on" : "off";
|
|
24
|
+
rememberPlay(catalogue, play);
|
|
25
|
+
onViewChange({ ...view, play });
|
|
26
|
+
} }), LATER_STRINGS.playOnOpen] }), trace.pausedAt === undefined ? null : (_jsx("p", { className: "forgebook-play__paused", role: "status", children: LATER_STRINGS.playPaused(trace.pausedAt) })), trace.error === undefined ? null : (_jsx("p", { className: "forgebook-problems", role: "alert", children: trace.error })), trace.steps.length === 0 && actions.length === 0 ? (_jsx("p", { className: "forgebook-prop__description", children: trace.status === "off" ? LATER_STRINGS.playOff : LATER_STRINGS.playNoSteps })) : null, trace.steps.length === 0 ? null : (_jsx("ol", { className: "forgebook-play__steps", children: trace.steps.map((step, index) => (_jsxs("li", { className: "forgebook-play__step", "data-status": step.status, children: [_jsx("span", { className: "forgebook-play__label", children: step.label }), _jsx(StatusNote, { status: step.status, ms: step.ms }), step.error === undefined ? null : _jsx("p", { className: "forgebook-play__error", children: step.error }), _jsx(ActionList, { actions: actions.filter((action) => action.step === index) })] }, index))) })), _jsx(ActionList, { actions: outside }), actions.length === 0 ? (_jsx("p", { className: "forgebook-prop__description", children: LATER_STRINGS.playActionsNote })) : null] }));
|
|
27
|
+
};
|
|
@@ -6,4 +6,4 @@ import { STRINGS } from "./strings.js";
|
|
|
6
6
|
*
|
|
7
7
|
* @param props - the page's module, its own props and the header.
|
|
8
8
|
*/
|
|
9
|
-
export const LazyPage = ({ module, pageProps, header }) => (_jsx(LazyView, { module: module, props: pageProps, loading: _jsx("div", { className: "forgebook-workspace", "aria-busy": "true", children: header }), failed: (message) => (_jsxs("div", { className: "forgebook-workspace", children: [header, _jsxs("p", { className: "forgebook-problems", role: "alert", children: [STRINGS.pageLoadError, "
|
|
9
|
+
export const LazyPage = ({ module, pageProps, header }) => (_jsx(LazyView, { module: module, props: pageProps, loading: _jsx("div", { className: "forgebook-workspace", "aria-busy": "true", children: header }), failed: (message) => (_jsxs("div", { className: "forgebook-workspace", children: [header, _jsxs("p", { className: "forgebook-problems", role: "alert", children: [STRINGS.pageLoadError, ". ", message] })] })) }));
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useScrollStops } from "./useScrollStops.js";
|
|
2
3
|
/**
|
|
3
4
|
* The package's HTML, as trusted as its stories' code: it comes from the package's own files, read at build time.
|
|
4
5
|
*
|
|
5
6
|
* @param props - the element's class and the HTML.
|
|
6
7
|
*/
|
|
7
8
|
export const PackageHtml = ({ className, html }) => {
|
|
9
|
+
const rootRef = useScrollStops("pre", html);
|
|
8
10
|
// biome-ignore lint/style/useNamingConvention: React's own name for markup set as HTML
|
|
9
11
|
const markup = { __html: html };
|
|
10
12
|
// biome-ignore lint/security/noDangerouslySetInnerHtml: the package's own Markdown, rendered by the plugin
|
|
11
|
-
return _jsx("div", { className: className, dangerouslySetInnerHTML: markup });
|
|
13
|
+
return _jsx("div", { ref: rootRef, className: className, dangerouslySetInnerHTML: markup });
|
|
12
14
|
};
|
|
@@ -6,70 +6,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
-
import { useCallback,
|
|
9
|
+
import { useCallback, useState } from "react";
|
|
10
10
|
import { controlLabel } from "./controlLabel.js";
|
|
11
|
-
import {
|
|
11
|
+
import { LazyView, lazyModule } from "./lazyModule.js";
|
|
12
12
|
import { STRINGS } from "./strings.js";
|
|
13
13
|
import { ToolbarControl } from "./ToolbarControl.js";
|
|
14
|
-
/**
|
|
15
|
-
const
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
* choice, a press outside or Escape, the focus going back where it was.
|
|
19
|
-
*
|
|
20
|
-
* @param props - the control, where the menu opens, what its choices do, and what closing it does.
|
|
21
|
-
*/
|
|
22
|
-
const ControlMenu = ({ control, isHidden, at, layout, onClose }) => {
|
|
23
|
-
const menuRef = useRef(null);
|
|
24
|
-
// the menu stays inside the window: opened near its right or lower edge, it moves back by what would run past
|
|
25
|
-
useLayoutEffect(() => {
|
|
26
|
-
const menu = menuRef.current;
|
|
27
|
-
if (menu === null)
|
|
28
|
-
return;
|
|
29
|
-
const box = menu.getBoundingClientRect();
|
|
30
|
-
menu.style.left = `${Math.max(EDGE_PX, Math.min(at.x, window.innerWidth - box.width - EDGE_PX))}px`;
|
|
31
|
-
menu.style.top = `${Math.max(EDGE_PX, Math.min(at.y, window.innerHeight - box.height - EDGE_PX))}px`;
|
|
32
|
-
}, [at]);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
const before = document.activeElement;
|
|
35
|
-
menuRef.current?.querySelector("[role=menuitem]")?.focus();
|
|
36
|
-
const close = (event) => {
|
|
37
|
-
const isOutside = event instanceof PointerEvent &&
|
|
38
|
-
!(event.target instanceof Node && menuRef.current?.contains(event.target));
|
|
39
|
-
const isEscape = event instanceof KeyboardEvent && event.key === "Escape";
|
|
40
|
-
if (!isOutside && !isEscape)
|
|
41
|
-
return;
|
|
42
|
-
onClose();
|
|
43
|
-
if (isEscape && before instanceof HTMLElement)
|
|
44
|
-
before.focus();
|
|
45
|
-
};
|
|
46
|
-
document.addEventListener("pointerdown", close);
|
|
47
|
-
document.addEventListener("keydown", close);
|
|
48
|
-
return () => {
|
|
49
|
-
document.removeEventListener("pointerdown", close);
|
|
50
|
-
document.removeEventListener("keydown", close);
|
|
51
|
-
};
|
|
52
|
-
}, [onClose]);
|
|
53
|
-
const step = (event) => {
|
|
54
|
-
if (event.key !== "ArrowDown" && event.key !== "ArrowUp")
|
|
55
|
-
return;
|
|
56
|
-
event.preventDefault();
|
|
57
|
-
const items = [...(menuRef.current?.querySelectorAll("[role=menuitem]") ?? [])];
|
|
58
|
-
const focused = document.activeElement;
|
|
59
|
-
const index = focused instanceof HTMLButtonElement ? items.indexOf(focused) : -1;
|
|
60
|
-
const next = (index + (event.key === "ArrowDown" ? 1 : -1) + items.length) % items.length;
|
|
61
|
-
items[next]?.focus();
|
|
62
|
-
};
|
|
63
|
-
const unpin = () => {
|
|
64
|
-
onClose();
|
|
65
|
-
layout.pin(control.id, false);
|
|
66
|
-
};
|
|
67
|
-
const toggleHidden = () => {
|
|
68
|
-
onClose();
|
|
69
|
-
layout.hide(control.id, !isHidden);
|
|
70
|
-
};
|
|
71
|
-
return (_jsxs("div", { ref: menuRef, className: "forgebook-context-menu", role: "menu", "aria-label": STRINGS.controlMenu(controlLabel(control)), style: { left: at.x, top: at.y }, onKeyDown: step, children: [_jsx("button", { type: "button", role: "menuitem", className: "forgebook-context-menu__item", onClick: unpin, children: STRINGS.unpinControl }), _jsx("button", { type: "button", role: "menuitem", className: "forgebook-context-menu__item", onClick: toggleHidden, children: isHidden ? STRINGS.showInView : STRINGS.hideInView })] }));
|
|
72
|
-
};
|
|
14
|
+
/** A note's button, for the few switches with a note: most catalogues pin none of them. */
|
|
15
|
+
const INFO_TIP = lazyModule(() => import("./InfoTip.js").then((module) => module.InfoTip));
|
|
16
|
+
/** The control's menu, loaded the first time one opens. */
|
|
17
|
+
const CONTROL_MENU = lazyModule(() => import("./PinnedControlMenu.js").then((module) => module.ControlMenu));
|
|
73
18
|
/**
|
|
74
19
|
* A pinned control.
|
|
75
20
|
*
|
|
@@ -89,5 +34,12 @@ export const PinnedControl = ({ control, isHidden, isChanged, layout, ...context
|
|
|
89
34
|
};
|
|
90
35
|
return (_jsxs("div", { className: "forgebook-toolbar__pinned", "data-control": control.id,
|
|
91
36
|
// the key that cycles it, in the tooltip of every part that has no tooltip of its own
|
|
92
|
-
title: shortcut === undefined ? undefined : STRINGS.cycleKey(controlLabel(control), shortcut.toUpperCase()), onContextMenu: open, children: [_jsx(ToolbarControl, { control: control, form: "bar", ...context }), control.kind === "switch" && control.switch.description !== undefined ? (_jsx(
|
|
37
|
+
title: shortcut === undefined ? undefined : STRINGS.cycleKey(controlLabel(control), shortcut.toUpperCase()), onContextMenu: open, children: [_jsx(ToolbarControl, { control: control, form: "bar", ...context }), control.kind === "switch" && control.switch.description !== undefined ? (_jsx(LazyView, { module: INFO_TIP, props: { note: control.switch.description, about: controlLabel(control) }, loading: null, failed: () => null })) : null, isChanged ? (_jsx("span", { className: "forgebook-dot forgebook-toolbar__changed", role: "img", "aria-label": STRINGS.controlChanged(controlLabel(control)) })) : null, menuAt === undefined ? null : (_jsx(LazyView, { module: CONTROL_MENU, props: {
|
|
38
|
+
id: control.id,
|
|
39
|
+
label: controlLabel(control),
|
|
40
|
+
isHidden,
|
|
41
|
+
at: menuAt,
|
|
42
|
+
layout,
|
|
43
|
+
onClose: close
|
|
44
|
+
}, loading: null, failed: () => null }))] }));
|
|
93
45
|
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A pinned control's small menu, opened by a right-click or the keyboard's menu key: take it off the toolbar, hide it in
|
|
3
|
+
* the View menu or show it there again.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Loaded the first time one opens (`PinnedControl.tsx`): the control is on the first screen, and few readers ever ask for
|
|
7
|
+
* its menu.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { type ReactNode } from "react";
|
|
12
|
+
import type { ToolbarLayout } from "./useToolbarLayout.ts";
|
|
13
|
+
/** Where the menu opens, in the window's px. */
|
|
14
|
+
export type MenuPoint = {
|
|
15
|
+
/** From the window's left. */
|
|
16
|
+
readonly x: number;
|
|
17
|
+
/** From the window's top. */
|
|
18
|
+
readonly y: number;
|
|
19
|
+
};
|
|
20
|
+
/** The menu's props. */
|
|
21
|
+
export type ControlMenuProps = {
|
|
22
|
+
/** The control's id. */
|
|
23
|
+
readonly id: string;
|
|
24
|
+
/**
|
|
25
|
+
* The control's name. Given rather than read here: a module the page also imports would be taken into a chunk of its
|
|
26
|
+
* own, and the first load would grow by more than this menu saves.
|
|
27
|
+
*/
|
|
28
|
+
readonly label: string;
|
|
29
|
+
/** Whether it takes no row in the View menu. */
|
|
30
|
+
readonly isHidden: boolean;
|
|
31
|
+
/** Where the menu opens. */
|
|
32
|
+
readonly at: MenuPoint;
|
|
33
|
+
/** The toolbar's arrangement, which its choices change. */
|
|
34
|
+
readonly layout: ToolbarLayout;
|
|
35
|
+
/** Called when it closes. */
|
|
36
|
+
readonly onClose: () => void;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The control's menu: its two choices as menu items, the first focused, the arrow keys between them; closed by a
|
|
40
|
+
* choice, a press outside or Escape, the focus going back where it was.
|
|
41
|
+
*
|
|
42
|
+
* @param props - the control, where the menu opens, what its choices do, and what closing it does.
|
|
43
|
+
*/
|
|
44
|
+
export declare const ControlMenu: ({ id, label, isHidden, at, layout, onClose }: ControlMenuProps) => ReactNode;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* A pinned control's small menu, opened by a right-click or the keyboard's menu key: take it off the toolbar, hide it in
|
|
4
|
+
* the View menu or show it there again.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Loaded the first time one opens (`PinnedControl.tsx`): the control is on the first screen, and few readers ever ask for
|
|
8
|
+
* its menu.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { useEffect, useLayoutEffect, useRef } from "react";
|
|
13
|
+
import { LATER_STRINGS } from "./laterStrings.js";
|
|
14
|
+
/** The room the menu keeps from the window's edges, in CSS px. */
|
|
15
|
+
const EDGE_PX = 8;
|
|
16
|
+
/**
|
|
17
|
+
* The control's menu: its two choices as menu items, the first focused, the arrow keys between them; closed by a
|
|
18
|
+
* choice, a press outside or Escape, the focus going back where it was.
|
|
19
|
+
*
|
|
20
|
+
* @param props - the control, where the menu opens, what its choices do, and what closing it does.
|
|
21
|
+
*/
|
|
22
|
+
export const ControlMenu = ({ id, label, isHidden, at, layout, onClose }) => {
|
|
23
|
+
const menuRef = useRef(null);
|
|
24
|
+
// the menu stays inside the window: opened near its right or lower edge, it moves back by what would run past
|
|
25
|
+
useLayoutEffect(() => {
|
|
26
|
+
const menu = menuRef.current;
|
|
27
|
+
if (menu === null)
|
|
28
|
+
return;
|
|
29
|
+
const box = menu.getBoundingClientRect();
|
|
30
|
+
menu.style.left = `${Math.max(EDGE_PX, Math.min(at.x, window.innerWidth - box.width - EDGE_PX))}px`;
|
|
31
|
+
menu.style.top = `${Math.max(EDGE_PX, Math.min(at.y, window.innerHeight - box.height - EDGE_PX))}px`;
|
|
32
|
+
}, [at]);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const before = document.activeElement;
|
|
35
|
+
menuRef.current?.querySelector("[role=menuitem]")?.focus();
|
|
36
|
+
const close = (event) => {
|
|
37
|
+
const isOutside = event instanceof PointerEvent &&
|
|
38
|
+
!(event.target instanceof Node && menuRef.current?.contains(event.target));
|
|
39
|
+
const isEscape = event instanceof KeyboardEvent && event.key === "Escape";
|
|
40
|
+
if (!isOutside && !isEscape)
|
|
41
|
+
return;
|
|
42
|
+
onClose();
|
|
43
|
+
if (isEscape && before instanceof HTMLElement)
|
|
44
|
+
before.focus();
|
|
45
|
+
};
|
|
46
|
+
document.addEventListener("pointerdown", close);
|
|
47
|
+
document.addEventListener("keydown", close);
|
|
48
|
+
return () => {
|
|
49
|
+
document.removeEventListener("pointerdown", close);
|
|
50
|
+
document.removeEventListener("keydown", close);
|
|
51
|
+
};
|
|
52
|
+
}, [onClose]);
|
|
53
|
+
const step = (event) => {
|
|
54
|
+
if (event.key !== "ArrowDown" && event.key !== "ArrowUp")
|
|
55
|
+
return;
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
const items = [...(menuRef.current?.querySelectorAll("[role=menuitem]") ?? [])];
|
|
58
|
+
const focused = document.activeElement;
|
|
59
|
+
const index = focused instanceof HTMLButtonElement ? items.indexOf(focused) : -1;
|
|
60
|
+
const next = (index + (event.key === "ArrowDown" ? 1 : -1) + items.length) % items.length;
|
|
61
|
+
items[next]?.focus();
|
|
62
|
+
};
|
|
63
|
+
const unpin = () => {
|
|
64
|
+
onClose();
|
|
65
|
+
layout.pin(id, false);
|
|
66
|
+
};
|
|
67
|
+
const toggleHidden = () => {
|
|
68
|
+
onClose();
|
|
69
|
+
layout.hide(id, !isHidden);
|
|
70
|
+
};
|
|
71
|
+
return (_jsxs("div", { ref: menuRef, className: "forgebook-context-menu", role: "menu", "aria-label": LATER_STRINGS.controlMenu(label), style: { left: at.x, top: at.y }, onKeyDown: step, children: [_jsx("button", { type: "button", role: "menuitem", className: "forgebook-context-menu__item", onClick: unpin, children: LATER_STRINGS.unpinControl }), _jsx("button", { type: "button", role: "menuitem", className: "forgebook-context-menu__item", onClick: toggleHidden, children: isHidden ? LATER_STRINGS.showInView : LATER_STRINGS.hideInView })] }));
|
|
72
|
+
};
|
|
@@ -5,6 +5,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
7
|
import { useCallback, useMemo, useRef } from "react";
|
|
8
|
+
import { NO_ACCEPTED_ARGS } from "../addressArgs.js";
|
|
8
9
|
import { findStory } from "../storyTree.js";
|
|
9
10
|
import { frameAddress, isComparing, liveView } from "../viewState.js";
|
|
10
11
|
import { showAsideStory } from "./asideStory.js";
|
|
@@ -29,7 +30,7 @@ export const PluginBlockHost = ({ load, pluginId, argument, body, page }) => {
|
|
|
29
30
|
address: frameAddress(frameUrl, options.storyId, view, switches),
|
|
30
31
|
width: "fill",
|
|
31
32
|
background: backgroundOf(location.source),
|
|
32
|
-
args:
|
|
33
|
+
args: NO_ACCEPTED_ARGS,
|
|
33
34
|
view: isComparing(view) ? undefined : liveView(view)
|
|
34
35
|
});
|
|
35
36
|
}, []);
|
|
@@ -5,7 +5,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
|
-
import { useCallback, useMemo, useRef } from "react";
|
|
8
|
+
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
9
9
|
import { showAsideStory } from "./asideStory.js";
|
|
10
10
|
import { PluginViewHost, pluginText, useShellAppearance } from "./PluginViewHost.js";
|
|
11
11
|
/**
|
|
@@ -18,7 +18,24 @@ export const PluginTabHost = ({ load, pluginId, strings, story, report, aside })
|
|
|
18
18
|
// read when the view asks: the stage of that moment, without a new context for every change of the stage
|
|
19
19
|
const asideRef = useRef(aside);
|
|
20
20
|
asideRef.current = aside;
|
|
21
|
-
const
|
|
21
|
+
const asideFrames = useRef(new Set());
|
|
22
|
+
const showStory = useCallback((target, { title }) => {
|
|
23
|
+
const frame = showAsideStory(target, title, asideRef.current);
|
|
24
|
+
asideFrames.current.add(frame);
|
|
25
|
+
return {
|
|
26
|
+
remove: () => {
|
|
27
|
+
asideFrames.current.delete(frame);
|
|
28
|
+
frame.remove();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}, []);
|
|
32
|
+
const { args } = aside;
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (args === undefined)
|
|
35
|
+
return;
|
|
36
|
+
for (const frame of asideFrames.current)
|
|
37
|
+
frame.settle(args);
|
|
38
|
+
}, [args]);
|
|
22
39
|
const text = useMemo(() => pluginText(strings, pluginId), [strings, pluginId]);
|
|
23
40
|
const context = useMemo(() => ({ appearance, text, story, report, showStory }), [appearance, text, story, report, showStory]);
|
|
24
41
|
return _jsx(PluginViewHost, { load: load, context: context });
|
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
import type { ReactNode } from "react";
|
|
8
8
|
import type { PanelProp } from "../argTypes.ts";
|
|
9
9
|
import { type ArgValue } from "../messages.ts";
|
|
10
|
-
/** Called with a changed value; `undefined` removes the panel's value. */
|
|
10
|
+
/** Called with a changed value; `undefined` removes the panel's value, `UNSET_ARG` leaves the prop with none. */
|
|
11
11
|
export type OnValueChange = (name: string, value: ArgValue | undefined) => void;
|
|
12
12
|
/** A value as a text field shows it: texts and numbers as they are, anything else empty. */
|
|
13
13
|
export declare const textOf: (value: ArgValue | undefined) => string;
|
|
14
|
+
/** The most options a native list holds before the panel offers a search among them. */
|
|
15
|
+
export declare const MOST_PLAIN_OPTIONS = 12;
|
|
14
16
|
/**
|
|
15
17
|
* A choice's control: buttons side by side for `radio` or a few short values, a list for `select` or otherwise, and
|
|
16
18
|
* a multiple choice for `check` and `multi-select`.
|