forgebook 0.3.3 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +994 -72
- package/dist/bin/forgebook/agentClient.d.ts +2 -1
- package/dist/bin/forgebook/agentClient.js +13 -6
- package/dist/bin/forgebook/agentGuide.d.ts +59 -0
- package/dist/bin/forgebook/agentGuide.js +203 -0
- package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
- package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
- package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
- package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
- package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
- package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
- package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
- package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
- package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
- package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
- package/dist/bin/forgebook/agentText.d.ts +23 -3
- package/dist/bin/forgebook/agentText.js +182 -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 +62 -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 +95 -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 +204 -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 +323 -0
- package/dist/bin/forgebook/workflowActions.d.ts +23 -0
- package/dist/bin/forgebook/workflowActions.js +23 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
- package/dist/src/addressArgs.d.ts +29 -5
- package/dist/src/addressArgs.js +58 -16
- package/dist/src/addressArgsParam.d.ts +54 -0
- package/dist/src/addressArgsParam.js +51 -0
- package/dist/src/addressTexts.d.ts +14 -0
- package/dist/src/addressTexts.js +28 -21
- package/dist/src/agentIndexFile.d.ts +11 -0
- package/dist/src/agentIndexFile.js +11 -0
- package/dist/src/argConditions.d.ts +52 -0
- package/dist/src/argConditions.js +80 -0
- package/dist/src/argControl.d.ts +148 -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 +69 -185
- 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 +83 -0
- package/dist/src/componentDocs.js +20 -3
- package/dist/src/controlCode.d.ts +27 -0
- package/dist/src/controlCode.js +41 -0
- 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/controlValues.d.ts +39 -0
- package/dist/src/frame/controlValues.js +143 -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 +10 -1
- package/dist/src/frame/mountFrame.js +160 -55
- package/dist/src/frame/panelControls.d.ts +67 -0
- package/dist/src/frame/panelControls.js +110 -0
- 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/AuthoredHome.js +3 -1
- package/dist/src/shell/CodeTab.d.ts +12 -6
- package/dist/src/shell/CodeTab.js +47 -3
- 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 +6 -6
- package/dist/src/shell/ComponentPage.js +8 -2
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +125 -0
- package/dist/src/shell/DocContainers.js +1 -1
- package/dist/src/shell/DocPage.js +2 -2
- package/dist/src/shell/DroppedArgsList.d.ts +2 -2
- package/dist/src/shell/DroppedArgsList.js +1 -1
- package/dist/src/shell/EmbedPage.js +30 -12
- package/dist/src/shell/Example.d.ts +5 -1
- package/dist/src/shell/Example.js +16 -8
- package/dist/src/shell/FrameView.d.ts +6 -3
- package/dist/src/shell/FrameView.js +2 -2
- package/dist/src/shell/HomePage.d.ts +3 -1
- package/dist/src/shell/HomePage.js +18 -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/PageWidth.d.ts +29 -0
- package/dist/src/shell/PageWidth.js +18 -0
- package/dist/src/shell/PinnedControl.js +14 -62
- package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
- package/dist/src/shell/PinnedControlMenu.js +72 -0
- package/dist/src/shell/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +22 -11
- package/dist/src/shell/PropRows.js +62 -24
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -22
- 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 +141 -23
- package/dist/src/shell/ShortcutHelp.d.ts +22 -0
- package/dist/src/shell/ShortcutHelp.js +66 -0
- package/dist/src/shell/Sidebar.d.ts +17 -4
- package/dist/src/shell/Sidebar.js +92 -41
- package/dist/src/shell/SidebarDocs.js +2 -2
- package/dist/src/shell/SidebarEntries.js +5 -3
- package/dist/src/shell/SidebarHandle.d.ts +3 -5
- package/dist/src/shell/SidebarHandle.js +4 -4
- package/dist/src/shell/SidebarRefs.d.ts +39 -0
- package/dist/src/shell/SidebarRefs.js +99 -0
- package/dist/src/shell/SidebarSearch.js +37 -9
- package/dist/src/shell/SignatureReference.js +3 -1
- package/dist/src/shell/Stage.d.ts +10 -2
- package/dist/src/shell/Stage.js +29 -49
- package/dist/src/shell/StatusBadges.d.ts +54 -0
- package/dist/src/shell/StatusBadges.js +77 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
- package/dist/src/shell/StoryCodeBlock.js +7 -6
- package/dist/src/shell/StoryPicker.d.ts +4 -2
- package/dist/src/shell/StoryPicker.js +3 -3
- package/dist/src/shell/Switch.d.ts +29 -0
- package/dist/src/shell/Switch.js +11 -0
- package/dist/src/shell/SwitchGallery.d.ts +36 -0
- package/dist/src/shell/SwitchGallery.js +17 -0
- package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
- package/dist/src/shell/SwitchGalleryPanel.js +99 -0
- package/dist/src/shell/TagFilter.d.ts +24 -0
- package/dist/src/shell/TagFilter.js +45 -0
- package/dist/src/shell/TagViews.d.ts +39 -0
- package/dist/src/shell/TagViews.js +20 -0
- package/dist/src/shell/Toolbar.d.ts +4 -1
- package/dist/src/shell/Toolbar.js +17 -7
- package/dist/src/shell/ToolbarControl.d.ts +3 -0
- package/dist/src/shell/ToolbarControl.js +23 -6
- package/dist/src/shell/ViewMenuPanel.js +6 -1
- package/dist/src/shell/argChecks.d.ts +22 -0
- package/dist/src/shell/argChecks.js +20 -0
- package/dist/src/shell/asideStory.js +7 -2
- package/dist/src/shell/audienceSections.css +9 -9
- package/dist/src/shell/catalogueContext.d.ts +1 -1
- package/dist/src/shell/catalogueContext.js +6 -1
- package/dist/src/shell/codeSpans.d.ts +27 -0
- package/dist/src/shell/codeSpans.js +76 -0
- package/dist/src/shell/compareVariants.d.ts +4 -2
- package/dist/src/shell/compareVariants.js +16 -8
- package/dist/src/shell/composition.d.ts +23 -0
- package/dist/src/shell/composition.js +26 -0
- package/dist/src/shell/controlCycle.d.ts +1 -1
- package/dist/src/shell/controlCycle.js +3 -2
- package/dist/src/shell/customControls.d.ts +62 -0
- package/dist/src/shell/customControls.js +81 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +29 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/frameOrder.d.ts +35 -0
- package/dist/src/shell/frameOrder.js +45 -0
- 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 +30 -0
- package/dist/src/shell/laterStrings.js +43 -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 +376 -169
- package/dist/src/shell/shellScheme.js +2 -2
- package/dist/src/shell/shortcutHelp.css +64 -0
- package/dist/src/shell/stageArgs.d.ts +53 -0
- package/dist/src/shell/stageArgs.js +64 -0
- package/dist/src/shell/statusBadges.css +51 -0
- package/dist/src/shell/strings.d.ts +7 -16
- package/dist/src/shell/strings.js +12 -17
- package/dist/src/shell/switchGallery.css +104 -0
- package/dist/src/shell/tagFilter.css +46 -0
- package/dist/src/shell/tagView.d.ts +20 -0
- package/dist/src/shell/tagView.js +10 -0
- package/dist/src/shell/useAddressArgs.d.ts +9 -0
- package/dist/src/shell/useAddressArgs.js +56 -11
- package/dist/src/shell/useControlKeys.js +2 -2
- package/dist/src/shell/useEditedProblems.d.ts +6 -0
- package/dist/src/shell/useEditedProblems.js +40 -0
- package/dist/src/shell/useFrameMessages.js +3 -0
- package/dist/src/shell/useFrameQueue.d.ts +8 -3
- package/dist/src/shell/useFrameQueue.js +42 -12
- 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/useScrollSettled.d.ts +18 -0
- package/dist/src/shell/useScrollSettled.js +56 -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 +148 -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 +99 -3
- package/dist/src/storyCheck.js +39 -1
- package/dist/src/storyCodeText.d.ts +52 -0
- package/dist/src/storyCodeText.js +30 -0
- package/dist/src/storyControls.d.ts +103 -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 +354 -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 +135 -66
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +51 -0
- package/dist/src/vite/agentStoryCode.js +44 -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/argControlsConfig.d.ts +30 -0
- package/dist/src/vite/argControlsConfig.js +176 -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 +21 -4
- 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 +67 -1
- package/dist/src/vite/configFile.d.ts +15 -2
- package/dist/src/vite/configFile.js +109 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +172 -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 +55 -73
- 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 +119 -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 +187 -60
- 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/typedControls.d.ts +31 -0
- package/dist/src/vite/typedControls.js +66 -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
|
@@ -16,15 +16,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
16
16
|
import "./embed.css";
|
|
17
17
|
import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
18
18
|
import { checkedArgsMessage } from "../addressArgs.js";
|
|
19
|
-
import {
|
|
19
|
+
import { readArgsParam, readStorybookLink } from "../addressArgsParam.js";
|
|
20
|
+
import { addressArgsRead } from "../addressTexts.js";
|
|
20
21
|
import { EMBED_SIZE_TYPE } from "../embed.js";
|
|
21
|
-
import { parsePanelArgsParam } from "../messages.js";
|
|
22
22
|
import { sourceFiles } from "../sourceFiles.js";
|
|
23
23
|
import { storyBackground } from "../storyBackground.js";
|
|
24
24
|
import { NOT_FIXED, withFixed } from "../storyGlobals.js";
|
|
25
|
-
import { findStory, storyTree } from "../storyTree.js";
|
|
25
|
+
import { findStory, storyOfAddress, storyTree } from "../storyTree.js";
|
|
26
26
|
import { frameAddress, parseView, STAGE_HEIGHT_RANGE } from "../viewState.js";
|
|
27
27
|
import { CatalogueContext, useCatalogue, useConfiguredCatalogue } from "./catalogueContext.js";
|
|
28
|
+
import { DroppedArgsNote } from "./DroppedArgsNote.js";
|
|
28
29
|
import { FrameView } from "./FrameView.js";
|
|
29
30
|
import { framesOrigin } from "./framesOrigin.js";
|
|
30
31
|
import { LATER_STRINGS } from "./laterStrings.js";
|
|
@@ -106,24 +107,27 @@ const EmbedNotice = ({ message, detail, isFailure }) => {
|
|
|
106
107
|
*
|
|
107
108
|
* @param props - the story, the view, its args and the frame page.
|
|
108
109
|
*/
|
|
109
|
-
const EmbedStory = ({ location, view, panelArgs, loadDocs, namedValues, frameUrl }) => {
|
|
110
|
+
const EmbedStory = ({ location, view, panelArgs, link, loadDocs, namedValues, argControls, frameUrl }) => {
|
|
110
111
|
const catalogue = useCatalogue();
|
|
111
112
|
const { story, component, source } = location;
|
|
112
113
|
const [fixed, setFixed] = useState(NOT_FIXED);
|
|
113
114
|
const [failure, setFailure] = useState(undefined);
|
|
114
115
|
const [ready, setReady] = useState(undefined);
|
|
115
116
|
const storyRef = useRef(null);
|
|
117
|
+
const note = useRef(null);
|
|
116
118
|
// the docs only serve the check: an embed whose address names no value does not load them
|
|
117
|
-
const hasValues = Object.keys(panelArgs).length > 0;
|
|
119
|
+
const hasValues = Object.keys(panelArgs).length > 0 || link?.refused !== undefined;
|
|
118
120
|
const docs = usePanelDocs(hasValues ? loadDocs : undefined, component.name, ready?.args, ready?.actions ?? NO_ACTIONS);
|
|
119
121
|
// whoever embeds the story writes its address, as whoever shares a link does: the same check applies
|
|
120
122
|
const addressArgs = useAddressArgs({
|
|
121
123
|
panelArgs,
|
|
124
|
+
link,
|
|
122
125
|
docs,
|
|
123
126
|
storyArgs: ready?.args,
|
|
124
127
|
argTypes: ready?.argTypes ?? NO_ARG_TYPES,
|
|
125
128
|
controls: ready?.controls ?? "all",
|
|
126
129
|
namedValues,
|
|
130
|
+
argControls,
|
|
127
131
|
frames: storyRef
|
|
128
132
|
});
|
|
129
133
|
const { heights, settled } = useFrameMessages({
|
|
@@ -157,38 +161,52 @@ const EmbedStory = ({ location, view, panelArgs, loadDocs, namedValues, frameUrl
|
|
|
157
161
|
const reported = settled.has(address) ? heights.get(address) : undefined;
|
|
158
162
|
const fixedHeight = heightSet(shownView, reported);
|
|
159
163
|
const ownHeight = fixedHeight ?? (reported === undefined ? undefined : Math.max(reported, story.height ?? 0));
|
|
160
|
-
|
|
164
|
+
// the note sits above the frame and takes nothing from it: the page around the embed grows by the note
|
|
165
|
+
const noteHeight = useElementHeight(note) ?? 0;
|
|
166
|
+
useHostHeight(failure === undefined && ownHeight !== undefined ? ownHeight + noteHeight : undefined);
|
|
161
167
|
return (_jsxs("main", { className: "forgebook-embed", style: {
|
|
162
168
|
backgroundColor: storyBackground(source.background, shownView, catalogue, isSystemDark)
|
|
163
|
-
}, children: [failure === undefined ? null : (_jsx(EmbedNotice, { message: STRINGS.embedFailed, detail: failure, isFailure: true })), _jsx("div", { ref: storyRef, className: "forgebook-embed__story", hidden: failure !== undefined, style: { width: shownView.width === "fill" ? undefined : shownView.width }, children: _jsx(FrameView, { title: STRINGS.frameTitle(component.name, story.name), address: address, heights: heights, settled: settled, fallbackHeight: WAITING_HEIGHT,
|
|
169
|
+
}, children: [failure === undefined ? null : (_jsx(EmbedNotice, { message: STRINGS.embedFailed, detail: failure, isFailure: true })), _jsx("div", { ref: note, children: _jsx(DroppedArgsNote, { dropped: addressArgs.dropped }) }), _jsx("div", { ref: storyRef, className: "forgebook-embed__story", hidden: failure !== undefined, style: { width: shownView.width === "fill" ? undefined : shownView.width }, children: _jsx(FrameView, { title: STRINGS.frameTitle(component.name, story.name), address: address, heights: heights, settled: settled, fallbackHeight: WAITING_HEIGHT,
|
|
170
|
+
// the window follows the page's height, note included: counted here, the frame would grow with each answer
|
|
171
|
+
sceneHeight: Math.max(story.height ?? 0, windowHeight - noteHeight), fixedHeight: fixedHeight }) })] }));
|
|
164
172
|
};
|
|
165
173
|
/**
|
|
166
174
|
* The page: the story the address names, or why there is none.
|
|
167
175
|
*
|
|
168
176
|
* @param props - the catalogue's name, its sources, its frame page, and how its stories take the address's texts.
|
|
169
177
|
*/
|
|
170
|
-
const EmbedContent = ({ title, sources, frameUrl, addressTexts }) => {
|
|
178
|
+
const EmbedContent = ({ title, sources, frameUrl, argControls, addressTexts }) => {
|
|
171
179
|
const catalogue = useCatalogue();
|
|
172
180
|
const tree = useMemo(() => storyTree(sources), [sources]);
|
|
173
181
|
// the address is read once: an embed has nowhere to go, so nothing rewrites it
|
|
174
182
|
const [params] = useState(() => new URLSearchParams(window.location.search));
|
|
175
|
-
const storyId = params
|
|
183
|
+
const storyId = storyOfAddress(params);
|
|
176
184
|
const location = storyId === null ? undefined : findStory(tree, storyId);
|
|
177
185
|
const name = location?.component.name;
|
|
186
|
+
const [read, setRead] = useState(() => readArgsParam(params.get("args")));
|
|
187
|
+
const waiting = read.link?.isWaiting === true ? read.link.param : undefined;
|
|
188
|
+
useEffect(() => {
|
|
189
|
+
if (waiting === undefined)
|
|
190
|
+
return;
|
|
191
|
+
void readStorybookLink(waiting, ({ readStorybookArgs }, param) => readStorybookArgs(param)).then(setRead);
|
|
192
|
+
}, [waiting]);
|
|
178
193
|
// one object for as long as the address is read: the check is not run again for each render
|
|
179
|
-
const panelArgs = useMemo(() =>
|
|
194
|
+
const { panelArgs, link } = useMemo(() => addressArgsRead(read, params.get("args"), addressTexts), [read, params, addressTexts]);
|
|
180
195
|
useEffect(() => {
|
|
181
196
|
document.title = name === undefined ? title : `${name} · ${title}`;
|
|
182
197
|
}, [name, title]);
|
|
183
198
|
if (location === undefined) {
|
|
184
199
|
return (_jsx("main", { className: "forgebook-embed", children: _jsx(EmbedNotice, { message: storyId === null ? LATER_STRINGS.embedNoStory : LATER_STRINGS.embedUnknownStory(storyId) }) }));
|
|
185
200
|
}
|
|
201
|
+
// the values are known before the frame starts, so it is told them once
|
|
202
|
+
if (waiting !== undefined)
|
|
203
|
+
return null;
|
|
186
204
|
const source = sources.find((each) => each.id === location.source.id);
|
|
187
|
-
return (_jsx(EmbedStory, { location: location, view: parseView(params.toString(), catalogue), panelArgs: panelArgs, loadDocs: source === undefined ? undefined : sourceFiles(source).docs[location.story.file], namedValues: source?.namedValues, frameUrl: frameUrl }));
|
|
205
|
+
return (_jsx(EmbedStory, { location: location, view: parseView(params.toString(), catalogue), link: link, panelArgs: panelArgs, loadDocs: source === undefined ? undefined : sourceFiles(source).docs[location.story.file], namedValues: source?.namedValues, argControls: argControls, frameUrl: frameUrl }));
|
|
188
206
|
};
|
|
189
207
|
/**
|
|
190
208
|
* One story alone, inside the catalogue's settings.
|
|
191
209
|
*
|
|
192
210
|
* @param props - the catalogue's configuration.
|
|
193
211
|
*/
|
|
194
|
-
export const EmbedPage = (props) => (_jsx(CatalogueContext.Provider, { value: useConfiguredCatalogue(props), children: _jsx(EmbedContent, { title: props.title, sources: props.sources, frameUrl: props.frameUrl, addressTexts: props.addressTexts ?? "any" }) }));
|
|
212
|
+
export const EmbedPage = (props) => (_jsx(CatalogueContext.Provider, { value: useConfiguredCatalogue(props), children: _jsx(EmbedContent, { title: props.title, sources: props.sources, frameUrl: props.frameUrl, ...(props.argControls === undefined ? {} : { argControls: props.argControls }), addressTexts: props.addressTexts ?? "any" }) }));
|
|
@@ -21,6 +21,8 @@ export type ExampleReading = {
|
|
|
21
21
|
/** Whether the demo is drawn larger, with more room around it. */
|
|
22
22
|
readonly isDemoLarge: boolean;
|
|
23
23
|
};
|
|
24
|
+
/** The heading an example's title is: the level under the heading above it, so no level is skipped. */
|
|
25
|
+
type ExampleTitleTag = "h3" | "h4";
|
|
24
26
|
/** What every example of the page shares: the frames' address, view and reports, the code, how to open a story. */
|
|
25
27
|
export type ExampleContext = {
|
|
26
28
|
/** The component. */
|
|
@@ -73,9 +75,11 @@ export declare const StoryLink: ({ story, hrefOf, onOpen, className, label, chil
|
|
|
73
75
|
* @param props - the story, whether it is the demo, whether its frame may load, where the queue watches it, and what
|
|
74
76
|
* every example shares.
|
|
75
77
|
*/
|
|
76
|
-
export declare const Example: ({ story, isDemo, isMounted, observe, ...context }: ExampleContext & {
|
|
78
|
+
export declare const Example: ({ story, isDemo, titleTag, isMounted, observe, ...context }: ExampleContext & {
|
|
77
79
|
readonly story: TreeStory;
|
|
78
80
|
readonly isDemo: boolean;
|
|
81
|
+
readonly titleTag?: ExampleTitleTag;
|
|
79
82
|
readonly isMounted: boolean;
|
|
80
83
|
readonly observe?: (element: HTMLElement | null) => void;
|
|
81
84
|
}) => ReactNode;
|
|
85
|
+
export {};
|
|
@@ -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,19 @@ 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";
|
|
7
|
+
import { usePageWidth } from "./PageWidth.js";
|
|
6
8
|
import { PAGE_STRINGS } from "./pageStrings.js";
|
|
7
|
-
import { STRINGS } from "./strings.js";
|
|
8
9
|
import { useLoaded } from "./useLoaded.js";
|
|
9
10
|
/** The most components a family's card lists before "Show all". */
|
|
10
11
|
const CARD_COMPONENTS = 6;
|
|
12
|
+
/**
|
|
13
|
+
* What the home says before the first story: where the catalogue looks, and how to write one.
|
|
14
|
+
*
|
|
15
|
+
* @param props - the catalogue's story patterns.
|
|
16
|
+
*/
|
|
17
|
+
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
18
|
/** A link to a page, opened in place unless the user asks for another tab. */
|
|
12
19
|
export const PageLink = ({ page, hrefOf, onOpen, className, children }) => (_jsx("a", { className: className, href: hrefOf(page), onClick: (event) => {
|
|
13
20
|
if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0)
|
|
@@ -83,7 +90,7 @@ export const FamilyCard = ({ family, hrefOf, onOpen }) => {
|
|
|
83
90
|
*
|
|
84
91
|
* @param props - the source, and how to open a page.
|
|
85
92
|
*/
|
|
86
|
-
export const DocsCard = ({ source, hrefOf, onOpen }) => (_jsxs("article", { className: "forgebook-home__card", "aria-label":
|
|
93
|
+
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
94
|
/**
|
|
88
95
|
* How many components a tree has, in every library.
|
|
89
96
|
*
|
|
@@ -117,8 +124,13 @@ export const LibrarySection = ({ source, sources, hrefOf, onOpen }) => (_jsxs("s
|
|
|
117
124
|
*
|
|
118
125
|
* @param props - the title, the tree, the sources, the recent pages, and how to open a page.
|
|
119
126
|
*/
|
|
120
|
-
export const HomePage = ({ title, tree, sources, recent, hrefOf, onOpen, header }) => {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
127
|
+
export const HomePage = ({ title, tree, sources, storyGlobs = [], recent, hrefOf, onOpen, header }) => {
|
|
128
|
+
// a catalogue that names patterns and lists nothing is one about to get its first story: a build never gets here, since
|
|
129
|
+
// it stops on a pattern that matches nothing
|
|
130
|
+
const listingGlobs = storyGlobs.filter((glob) => !glob.startsWith("!") || glob.startsWith("!("));
|
|
131
|
+
const isWaiting = listingGlobs.length > 0 && componentCount(tree) === 0;
|
|
132
|
+
const pageWidth = usePageWidth();
|
|
133
|
+
return (_jsxs("div", { className: "forgebook-workspace", children: [header, _jsxs("div", { className: "forgebook-scroll", children: [_jsx("div", { className: "forgebook-home__tools", children: pageWidth.toggle }), _jsxs("div", { className: "forgebook-home", "data-page-width": pageWidth.width, 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
|
|
134
|
+
? PAGE_STRINGS.homeSummary(componentCount(tree), libraryCount(tree))
|
|
135
|
+
: 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
136
|
};
|
|
@@ -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
|
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The width of the pages that list stories, the home and a component's page: contained in a centred column, or the
|
|
3
|
+
* whole width of the page; a reader's choice kept in their browser.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* It loads with those pages, never with the first screen: the shell's header keeps an empty place of the button's size
|
|
7
|
+
* beside the stories' picker (`.forgebook-page-width`), which the component's page fills with the button, so the
|
|
8
|
+
* picker stays where it is between a component's page, while its code arrives, and its stories' pages. A story's page
|
|
9
|
+
* has its own width controls on its stage. Each page writes the width on its column (`data-page-width`), where
|
|
10
|
+
* `shell.scss` reads it.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import type { ReactNode } from "react";
|
|
15
|
+
/** How wide the pages that list stories are: in a centred column, or the whole page. */
|
|
16
|
+
export type PageWidth = "contained" | "full";
|
|
17
|
+
/** The reader's page width and the button that switches it. */
|
|
18
|
+
export type PageWidthState = {
|
|
19
|
+
/** The width, for the column's `data-page-width`. */
|
|
20
|
+
readonly width: PageWidth;
|
|
21
|
+
/** The button, pressed while the page is contained. */
|
|
22
|
+
readonly toggle: ReactNode;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The reader's page width, kept for the next visit, and its button.
|
|
26
|
+
*
|
|
27
|
+
* @returns the width and the button.
|
|
28
|
+
*/
|
|
29
|
+
export declare const usePageWidth: () => PageWidthState;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Icon } from "./icons.js";
|
|
3
|
+
import { LATER_STRINGS } from "./laterStrings.js";
|
|
4
|
+
import { useStored } from "./useStored.js";
|
|
5
|
+
/** The width a stored text holds: contained unless the reader chose the whole page. */
|
|
6
|
+
const storedWidth = (stored) => (stored === "full" ? "full" : "contained");
|
|
7
|
+
/**
|
|
8
|
+
* The reader's page width, kept for the next visit, and its button.
|
|
9
|
+
*
|
|
10
|
+
* @returns the width and the button.
|
|
11
|
+
*/
|
|
12
|
+
export const usePageWidth = () => {
|
|
13
|
+
const [width, setWidth] = useStored("page-width", storedWidth, String);
|
|
14
|
+
return {
|
|
15
|
+
width,
|
|
16
|
+
toggle: (_jsx("button", { type: "button", className: "forgebook-button forgebook-button--icon forgebook-page-width", title: LATER_STRINGS.pageContained, "aria-label": LATER_STRINGS.pageContained, "aria-pressed": width === "contained", onClick: () => setWidth(width === "full" ? "contained" : "full"), children: _jsx(Icon, { name: "width", size: 14 }) }))
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -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
|
};
|