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,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The props panel's values an address names, as
|
|
3
|
-
*
|
|
2
|
+
* The props panel's values an address names, as a page hands them to the story's frames: only those the story declares,
|
|
3
|
+
* with a value of the declared type, once the story's frame and its component's docs say what that is.
|
|
4
4
|
*
|
|
5
5
|
* @remarks
|
|
6
6
|
* The address is written by whoever shares the link, so its values are checked here, in the core, before any frame
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module
|
|
11
11
|
*/
|
|
12
|
-
import { useMemo } from "react";
|
|
13
|
-
import { checkedAddressArgs } from "../addressArgs.js";
|
|
12
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
13
|
+
import { checkedAddressArgs, checkedArgsMessage, declaredArgProps, needsShapeChecks } from "../addressArgs.js";
|
|
14
14
|
import { panelArgsParam } from "../messages.js";
|
|
15
|
+
import { tellFrames } from "./FrameView.js";
|
|
15
16
|
/**
|
|
16
17
|
* What a story declares, once both its frame and its docs answered.
|
|
17
18
|
*
|
|
@@ -37,26 +38,82 @@ const NO_ARGS = {};
|
|
|
37
38
|
const NOTHING_DROPPED = [];
|
|
38
39
|
/** A source without named values. */
|
|
39
40
|
const NO_NAMED_VALUES = {};
|
|
41
|
+
/** No custom control registered. */
|
|
42
|
+
const NO_ARG_CONTROLS = {};
|
|
43
|
+
/**
|
|
44
|
+
* What checks a story's structured values, loaded when a story first has a prop that needs it. Until it arrives such a
|
|
45
|
+
* prop's value waits, whichever its story.
|
|
46
|
+
*
|
|
47
|
+
* @param declaration - what the story declares.
|
|
48
|
+
* @param loaders - the catalogue's custom controls.
|
|
49
|
+
*/
|
|
50
|
+
const useArgChecks = (declaration, loaders) => {
|
|
51
|
+
const props = declaration === undefined ? [] : declaredArgProps(declaration);
|
|
52
|
+
const names = props.flatMap((prop) => prop.customControl ?? []).join("\n");
|
|
53
|
+
const isNeeded = props.some(needsShapeChecks);
|
|
54
|
+
const [loaded, setLoaded] = useState();
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (!isNeeded)
|
|
57
|
+
return;
|
|
58
|
+
let isCurrent = true;
|
|
59
|
+
void import("./argChecks.js")
|
|
60
|
+
.then(({ loadedChecks }) => loadedChecks(names === "" ? [] : names.split("\n"), loaders ?? NO_ARG_CONTROLS))
|
|
61
|
+
.then((checks) => {
|
|
62
|
+
if (isCurrent)
|
|
63
|
+
setLoaded({ names, checks });
|
|
64
|
+
});
|
|
65
|
+
return () => {
|
|
66
|
+
isCurrent = false;
|
|
67
|
+
};
|
|
68
|
+
}, [isNeeded, names, loaders]);
|
|
69
|
+
return loaded?.names === names ? loaded.checks : undefined;
|
|
70
|
+
};
|
|
40
71
|
/**
|
|
41
72
|
* The address's values, checked against what the story declares.
|
|
42
73
|
*
|
|
43
74
|
* @param input - the address's values and what the stage knows of the story.
|
|
44
75
|
*/
|
|
45
76
|
export const useAddressArgs = (input) => {
|
|
46
|
-
const { panelArgs, docs, storyArgs, argTypes, controls } = input;
|
|
77
|
+
const { panelArgs, link, docs, storyArgs, argTypes, controls, frames } = input;
|
|
78
|
+
const typeValue = link?.typeValue;
|
|
47
79
|
const namedValues = input.namedValues ?? NO_NAMED_VALUES;
|
|
48
|
-
const
|
|
80
|
+
const declaration = useMemo(() => {
|
|
49
81
|
const ready = storyArgs === undefined ? undefined : { args: storyArgs, argTypes, controls };
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
82
|
+
return declarationOf(docs, ready, namedValues);
|
|
83
|
+
}, [docs, storyArgs, argTypes, controls, namedValues]);
|
|
84
|
+
const checks = useArgChecks(declaration, input.argControls);
|
|
85
|
+
const checked = useMemo(() => {
|
|
86
|
+
if (declaration === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
const read = checkedAddressArgs(panelArgs, declaration, typeValue, checks);
|
|
89
|
+
// nothing is told of the address until all of it can be: a story must not draw half a link
|
|
90
|
+
return read.isWaiting ? undefined : read;
|
|
91
|
+
}, [panelArgs, typeValue, declaration, checks]);
|
|
92
|
+
const acceptedParam = checked === undefined ? undefined : panelArgsParam(checked.accepted);
|
|
93
|
+
// the values reach the frames from the address, so going back in the history sets them too; compared as text, so a
|
|
94
|
+
// frame is told again only when they change
|
|
95
|
+
const sealedRef = useRef(checked?.sealed);
|
|
96
|
+
sealedRef.current = checked?.sealed;
|
|
97
|
+
useEffect(() => {
|
|
98
|
+
if (acceptedParam === undefined || sealedRef.current === undefined)
|
|
99
|
+
return;
|
|
100
|
+
tellFrames(frames.current, checkedArgsMessage(sealedRef.current));
|
|
101
|
+
}, [acceptedParam, frames]);
|
|
102
|
+
// said with the check's: the note's button keeps what the story accepts, which is not known before
|
|
103
|
+
const unread = (link?.unread ?? []).map((name) => ({ name, reason: "unreadable" }));
|
|
104
|
+
const refused = (link?.refused ?? []).map((name) => ({ name, reason: "markup" }));
|
|
53
105
|
return {
|
|
54
106
|
accepted: checked?.accepted ?? NO_ARGS,
|
|
55
|
-
|
|
56
|
-
|
|
107
|
+
checked: checked?.sealed,
|
|
108
|
+
dropped: checked === undefined ? NOTHING_DROPPED : [...unread, ...refused, ...checked.dropped],
|
|
109
|
+
acceptedParam,
|
|
57
110
|
acceptedFor: (message) => {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
111
|
+
const ready = declarationOf(docs, message, namedValues);
|
|
112
|
+
if (ready === undefined)
|
|
113
|
+
return undefined;
|
|
114
|
+
const read = checkedAddressArgs(panelArgs, ready, typeValue, checks);
|
|
115
|
+
return read.isWaiting ? undefined : read.sealed;
|
|
116
|
+
},
|
|
117
|
+
worstOfShape: checks?.worstOfShape
|
|
61
118
|
};
|
|
62
119
|
};
|
|
@@ -8,7 +8,7 @@ import { useEffect, useRef } from "react";
|
|
|
8
8
|
import { pressedControl } from "../controlKeys.js";
|
|
9
9
|
import { useCatalogue } from "./catalogueContext.js";
|
|
10
10
|
import { cycledView } from "./controlCycle.js";
|
|
11
|
-
import {
|
|
11
|
+
import { isSingleKeyFree } from "./keyboard.js";
|
|
12
12
|
/**
|
|
13
13
|
* Listens to the controls' keys.
|
|
14
14
|
*
|
|
@@ -21,7 +21,7 @@ export const useControlKeys = (input) => {
|
|
|
21
21
|
latest.current = input;
|
|
22
22
|
useEffect(() => {
|
|
23
23
|
const cycle = (event) => {
|
|
24
|
-
if (
|
|
24
|
+
if (!isSingleKeyFree(event))
|
|
25
25
|
return;
|
|
26
26
|
const { keys, view, onViewChange, fixed, isStoryPage, isComponentPage } = latest.current;
|
|
27
27
|
const pressed = pressedControl(keys, {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The index's problems as a dev server's edits leave them: a story file that an edit left unreadable, or a component
|
|
3
|
+
* that no longer parses, is named at once, without a reload that would take its story away from the reader, and no
|
|
4
|
+
* longer once a later edit fixed it.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { useEffect, useMemo, useState } from "react";
|
|
9
|
+
import { STORY_FILE_READ_EVENT, storyFileReadOf } from "../hotModules.js";
|
|
10
|
+
/** No file an edit told of. */
|
|
11
|
+
const NONE = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* The problems to show.
|
|
14
|
+
*
|
|
15
|
+
* @param problems - the index's problems, as the page read them.
|
|
16
|
+
*/
|
|
17
|
+
export const useEditedProblems = (problems) => {
|
|
18
|
+
const [edited, setEdited] = useState(NONE);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
// a build has no edits
|
|
21
|
+
if (import.meta.hot === undefined)
|
|
22
|
+
return undefined;
|
|
23
|
+
const follow = (event) => {
|
|
24
|
+
const read = storyFileReadOf(event);
|
|
25
|
+
if (read === undefined)
|
|
26
|
+
return;
|
|
27
|
+
setEdited((before) => {
|
|
28
|
+
// a fix is kept too: it takes away what the page read of the file (a component that did not parse)
|
|
29
|
+
return new Map(before).set(read.file, read.problem);
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
window.addEventListener(STORY_FILE_READ_EVENT, follow);
|
|
33
|
+
return () => window.removeEventListener(STORY_FILE_READ_EVENT, follow);
|
|
34
|
+
}, []);
|
|
35
|
+
// an edit's word on a file replaces what the page read of it: the problem names its file first
|
|
36
|
+
return useMemo(() => {
|
|
37
|
+
const kept = problems.filter((problem) => ![...edited.keys()].some((file) => problem.startsWith(file)));
|
|
38
|
+
return [...kept, ...[...edited.values()].filter((problem) => problem !== undefined)];
|
|
39
|
+
}, [problems, edited]);
|
|
40
|
+
};
|
|
@@ -38,6 +38,9 @@ const onFrameMessage = (message, frame, targets) => {
|
|
|
38
38
|
if (address !== undefined)
|
|
39
39
|
targets.setHeight(address, message.height);
|
|
40
40
|
return;
|
|
41
|
+
case "forgebook:scheme":
|
|
42
|
+
frame.style.colorScheme = message.scheme;
|
|
43
|
+
return;
|
|
41
44
|
case "forgebook:error":
|
|
42
45
|
handlers.onFailed?.(message.storyId, message.message);
|
|
43
46
|
return;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { taggedTree } from "../storyTags.ts";
|
|
2
|
+
import type { StoryTree } from "../storyTree.ts";
|
|
3
|
+
/** The filter, set by the tag filter's button, which loads its code: read during a render, never waited for. */
|
|
4
|
+
export declare const loadedTagFilter: {
|
|
5
|
+
current?: typeof taggedTree;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* The tree to list.
|
|
9
|
+
*
|
|
10
|
+
* @param tree - the whole tree.
|
|
11
|
+
* @param tags - the address's tags; none lists the whole tree.
|
|
12
|
+
*/
|
|
13
|
+
export declare const useListedTree: (tree: StoryTree, tags: readonly string[]) => StoryTree;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tree the sidebar and the story keys list: the whole one, or what the address's tags keep of it.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* The filter's code loads only when an address names a tag, or with the tag filter's button, which hands it over
|
|
6
|
+
* (`loadedTagFilter`) so the render that puts a checked tag in the address is already filtered. A catalogue nobody
|
|
7
|
+
* filters pays for a question and not for its answer. Opened on an address that names a tag, the whole tree shows
|
|
8
|
+
* until the code arrives, as the search's tree does before its list comes.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { useEffect, useMemo, useState } from "react";
|
|
13
|
+
/** The filter, set by the tag filter's button, which loads its code: read during a render, never waited for. */
|
|
14
|
+
export const loadedTagFilter = {};
|
|
15
|
+
/**
|
|
16
|
+
* The tree to list.
|
|
17
|
+
*
|
|
18
|
+
* @param tree - the whole tree.
|
|
19
|
+
* @param tags - the address's tags; none lists the whole tree.
|
|
20
|
+
*/
|
|
21
|
+
export const useListedTree = (tree, tags) => {
|
|
22
|
+
const [filter, setFilter] = useState();
|
|
23
|
+
const isFiltered = tags.length > 0;
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (isFiltered)
|
|
26
|
+
void import("../storyTags.js").then((module) => setFilter(() => module.taggedTree));
|
|
27
|
+
}, [isFiltered]);
|
|
28
|
+
return useMemo(() => {
|
|
29
|
+
const loaded = filter ?? loadedTagFilter.current;
|
|
30
|
+
return isFiltered && loaded !== undefined ? loaded(tree, tags) : tree;
|
|
31
|
+
}, [filter, isFiltered, tree, tags]);
|
|
32
|
+
};
|
|
@@ -20,9 +20,9 @@ import { useLiveView, useLoadedView } from "./useLiveView.js";
|
|
|
20
20
|
export const usePageFrames = ({ stories, queued, pageRef, view, touchOverrides }) => {
|
|
21
21
|
// each story's own args, as its frame reports them: the code of a story drawn from its args is written from them
|
|
22
22
|
const [storyArgs, setStoryArgs] = useState(new Map());
|
|
23
|
-
// the frames keep the view they loaded with; only the style sheets load them again, the rest of the view (the
|
|
23
|
+
// the frames keep the view they loaded with; only the style sheets and the play switch load them again, the rest of the view (the
|
|
24
24
|
// switches, the language among them) is sent to them live
|
|
25
|
-
const frameView = useLoadedView(view.sheets
|
|
25
|
+
const frameView = useLoadedView(`${view.sheets}|${view.play}`, view);
|
|
26
26
|
const catalogue = useCatalogue();
|
|
27
27
|
// each story meant for a phone (marked so, or shown in a device touched with a finger) with its own finger: its frame
|
|
28
28
|
// gets it in place of the toolbar's Touch
|
|
@@ -25,6 +25,11 @@ export type Popover = {
|
|
|
25
25
|
readonly setIsOpen: (isOpen: boolean, press?: {
|
|
26
26
|
readonly detail: number;
|
|
27
27
|
}) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Closes the panel after a choice in it was taken by the pointer. The arrow keys choose as they move: a panel that
|
|
30
|
+
* closed on the first would keep every choice past the next one out of reach, so with the keys Escape closes it.
|
|
31
|
+
*/
|
|
32
|
+
readonly closeAfterChoice: () => void;
|
|
28
33
|
/** The button. */
|
|
29
34
|
readonly buttonRef: RefObject<HTMLButtonElement | null>;
|
|
30
35
|
/** The panel. */
|
|
@@ -27,6 +27,7 @@ export const usePopover = () => {
|
|
|
27
27
|
const panelRef = useRef(null);
|
|
28
28
|
const closing = useRef(undefined);
|
|
29
29
|
const isByPointer = useRef(false);
|
|
30
|
+
const isLastInputKey = useRef(false);
|
|
30
31
|
const panelId = useId();
|
|
31
32
|
const setIsOpen = (isOpening, press) => {
|
|
32
33
|
const panel = panelRef.current;
|
|
@@ -60,6 +61,10 @@ export const usePopover = () => {
|
|
|
60
61
|
// a cancelled closing (opened again) leaves the panel open
|
|
61
62
|
.catch(() => undefined);
|
|
62
63
|
};
|
|
64
|
+
const closeAfterChoice = () => {
|
|
65
|
+
if (!isLastInputKey.current)
|
|
66
|
+
setIsOpen(false);
|
|
67
|
+
};
|
|
63
68
|
// it grows in from its button's corner as it is drawn
|
|
64
69
|
useLayoutEffect(() => {
|
|
65
70
|
const panel = panelRef.current;
|
|
@@ -76,6 +81,7 @@ export const usePopover = () => {
|
|
|
76
81
|
return;
|
|
77
82
|
panelRef.current?.querySelector("input:checked")?.focus();
|
|
78
83
|
const close = (event) => {
|
|
84
|
+
isLastInputKey.current = event instanceof KeyboardEvent;
|
|
79
85
|
const target = event.target instanceof Node ? event.target : null;
|
|
80
86
|
const isOutside = event instanceof PointerEvent &&
|
|
81
87
|
!panelRef.current?.contains(target) &&
|
|
@@ -95,5 +101,5 @@ export const usePopover = () => {
|
|
|
95
101
|
document.removeEventListener("keydown", close);
|
|
96
102
|
};
|
|
97
103
|
}, [isOpen]);
|
|
98
|
-
return { isOpen, isDrawn, setIsOpen, buttonRef, panelRef, panelId };
|
|
104
|
+
return { isOpen, isDrawn, setIsOpen, closeAfterChoice, buttonRef, panelRef, panelId };
|
|
99
105
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CatalogueRef, RefIndex } from "../catalogueRefs.ts";
|
|
2
|
+
/** A composed catalogue's index: loading, read, or why it could not be. */
|
|
3
|
+
export type RefIndexState = {
|
|
4
|
+
readonly status: "loading";
|
|
5
|
+
} | {
|
|
6
|
+
readonly status: "ready";
|
|
7
|
+
readonly index: RefIndex;
|
|
8
|
+
} | {
|
|
9
|
+
readonly status: "error";
|
|
10
|
+
readonly message: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A composed catalogue's index, fetched once it is wanted (its section open, one of its stories shown).
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* What a load ended with is kept with the address it was for, so another catalogue's index never stands in for this
|
|
17
|
+
* one's while its own loads: two catalogues built from one library share story ids.
|
|
18
|
+
*
|
|
19
|
+
* @param ref - the composed catalogue; none when there is none to read.
|
|
20
|
+
* @param isWanted - whether it is wanted yet.
|
|
21
|
+
*/
|
|
22
|
+
export declare const useRefIndex: (ref: CatalogueRef | undefined, isWanted: boolean) => RefIndexState;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A composed catalogue's index as a state the shell can show: loading, read, or why it failed.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { useEffect, useState } from "react";
|
|
7
|
+
import { loadRefIndex } from "./refIndexLoad.js";
|
|
8
|
+
/** Before any load ended. */
|
|
9
|
+
const LOADING = { status: "loading" };
|
|
10
|
+
/**
|
|
11
|
+
* A composed catalogue's index, fetched once it is wanted (its section open, one of its stories shown).
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* What a load ended with is kept with the address it was for, so another catalogue's index never stands in for this
|
|
15
|
+
* one's while its own loads: two catalogues built from one library share story ids.
|
|
16
|
+
*
|
|
17
|
+
* @param ref - the composed catalogue; none when there is none to read.
|
|
18
|
+
* @param isWanted - whether it is wanted yet.
|
|
19
|
+
*/
|
|
20
|
+
export const useRefIndex = (ref, isWanted) => {
|
|
21
|
+
const [settled, setSettled] = useState(undefined);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
if (ref === undefined || !isWanted)
|
|
24
|
+
return;
|
|
25
|
+
let isCurrent = true;
|
|
26
|
+
const settle = (state) => {
|
|
27
|
+
if (isCurrent)
|
|
28
|
+
setSettled({ url: ref.url, state });
|
|
29
|
+
};
|
|
30
|
+
loadRefIndex(ref).then((index) => settle({ status: "ready", index }), (error) => settle({ status: "error", message: error instanceof Error ? error.message : String(error) }));
|
|
31
|
+
return () => {
|
|
32
|
+
isCurrent = false;
|
|
33
|
+
};
|
|
34
|
+
}, [ref, isWanted]);
|
|
35
|
+
return settled !== undefined && settled.url === ref?.url ? settled.state : LOADING;
|
|
36
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tab stops for what scrolls sideways: a part with nothing of its own to focus can only be scrolled by a keyboard from a
|
|
3
|
+
* stop on the part itself.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* A part takes a stop only while it overflows: on a wide window, where a code block or a props table fits, a stop would
|
|
7
|
+
* be one more press on the way through the page with nothing to do there. The parts are read again whenever the root
|
|
8
|
+
* changes size: the window narrowed, a fold opened, the fonts arrived.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { type RefObject } from "react";
|
|
13
|
+
/**
|
|
14
|
+
* Gives the parts of an element that overflow sideways a Tab stop, and takes it back when they fit.
|
|
15
|
+
*
|
|
16
|
+
* @param selector - the parts, inside the element; the element itself when absent.
|
|
17
|
+
* @param content - what the parts are drawn from, when it can change with no change of the element's size.
|
|
18
|
+
* @returns the ref for the element.
|
|
19
|
+
*/
|
|
20
|
+
export declare const useScrollStops: (selector?: string, content?: string) => RefObject<HTMLDivElement | null>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tab stops for what scrolls sideways: a part with nothing of its own to focus can only be scrolled by a keyboard from a
|
|
3
|
+
* stop on the part itself.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* A part takes a stop only while it overflows: on a wide window, where a code block or a props table fits, a stop would
|
|
7
|
+
* be one more press on the way through the page with nothing to do there. The parts are read again whenever the root
|
|
8
|
+
* changes size: the window narrowed, a fold opened, the fonts arrived.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { useEffect, useRef } from "react";
|
|
13
|
+
/**
|
|
14
|
+
* Gives the parts of an element that overflow sideways a Tab stop, and takes it back when they fit.
|
|
15
|
+
*
|
|
16
|
+
* @param selector - the parts, inside the element; the element itself when absent.
|
|
17
|
+
* @param content - what the parts are drawn from, when it can change with no change of the element's size.
|
|
18
|
+
* @returns the ref for the element.
|
|
19
|
+
*/
|
|
20
|
+
export const useScrollStops = (selector, content) => {
|
|
21
|
+
const rootRef = useRef(null);
|
|
22
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: `content` replaces the parts, whose stops go with them
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const root = rootRef.current;
|
|
25
|
+
if (root === null)
|
|
26
|
+
return;
|
|
27
|
+
const update = () => {
|
|
28
|
+
const parts = selector === undefined ? [root] : root.querySelectorAll(selector);
|
|
29
|
+
for (const part of parts) {
|
|
30
|
+
if (part.scrollWidth > part.clientWidth)
|
|
31
|
+
part.tabIndex = 0;
|
|
32
|
+
else
|
|
33
|
+
part.removeAttribute("tabindex");
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const observer = new ResizeObserver(update);
|
|
37
|
+
observer.observe(root);
|
|
38
|
+
return () => observer.disconnect();
|
|
39
|
+
}, [selector, content]);
|
|
40
|
+
return rootRef;
|
|
41
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The list of the shell's keys: `?` opens it anywhere the shell's keys work, or the menu at the sidebar's foot.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Only the key and whether it is open sit in the first load; the list comes with its first opening.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { type ReactNode } from "react";
|
|
10
|
+
/** What the shell wires to the list. */
|
|
11
|
+
export type ShortcutHelp = {
|
|
12
|
+
/** The list, while it is open. */
|
|
13
|
+
readonly help: ReactNode;
|
|
14
|
+
/** Opens it. */
|
|
15
|
+
readonly showHelp: () => void;
|
|
16
|
+
};
|
|
17
|
+
/** Listens to the key that opens the list, and holds whether it is open. */
|
|
18
|
+
export declare const useShortcutHelp: () => ShortcutHelp;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The list of the shell's keys: `?` opens it anywhere the shell's keys work, or the menu at the sidebar's foot.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Only the key and whether it is open sit in the first load; the list comes with its first opening.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { useEffect, useState } from "react";
|
|
11
|
+
import { isSingleKeyFree } from "./keyboard.js";
|
|
12
|
+
import { LazyView, lazyModule } from "./lazyModule.js";
|
|
13
|
+
/** The list, loaded when first opened. */
|
|
14
|
+
const SHORTCUT_HELP = lazyModule(() => import("./ShortcutHelp.js").then((module) => module.ShortcutHelp));
|
|
15
|
+
/** Listens to the key that opens the list, and holds whether it is open. */
|
|
16
|
+
export const useShortcutHelp = () => {
|
|
17
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const open = (event) => {
|
|
20
|
+
if (event.key !== "?" || event.metaKey || event.ctrlKey || event.altKey || !isSingleKeyFree(event))
|
|
21
|
+
return;
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
setIsOpen(true);
|
|
24
|
+
};
|
|
25
|
+
document.addEventListener("keydown", open);
|
|
26
|
+
return () => document.removeEventListener("keydown", open);
|
|
27
|
+
}, []);
|
|
28
|
+
return {
|
|
29
|
+
help: isOpen ? (_jsx(LazyView, { module: SHORTCUT_HELP, props: { onClose: () => setIsOpen(false) }, loading: null, failed: () => null })) : null,
|
|
30
|
+
showHelp: () => setIsOpen(true)
|
|
31
|
+
};
|
|
32
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* What a sidebar lying over the page does beyond its look: Escape closes it, the focus moves into it as it opens and back
|
|
3
3
|
* to the button that shows it as it closes. The page behind is made inert by the shell, and a tap on the shade closes it.
|
|
4
|
+
* Beside the page, on a wide window, the focus only follows the button it stood on, which goes away with the press.
|
|
4
5
|
*
|
|
5
6
|
* @module
|
|
6
7
|
*/
|
|
@@ -26,7 +27,7 @@ export type SidebarOverlayState = {
|
|
|
26
27
|
readonly onClose: () => void;
|
|
27
28
|
};
|
|
28
29
|
/**
|
|
29
|
-
* Wires a sidebar lying over the page
|
|
30
|
+
* Wires a sidebar lying over the page, and the focus of one beside it on a wide window.
|
|
30
31
|
*
|
|
31
32
|
* @param state - the sidebar's state.
|
|
32
33
|
* @returns whether it lies over the page, and the references to give the sidebar and its buttons.
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* What a sidebar lying over the page does beyond its look: Escape closes it, the focus moves into it as it opens and back
|
|
3
3
|
* to the button that shows it as it closes. The page behind is made inert by the shell, and a tap on the shade closes it.
|
|
4
|
+
* Beside the page, on a wide window, the focus only follows the button it stood on, which goes away with the press.
|
|
4
5
|
*
|
|
5
6
|
* @module
|
|
6
7
|
*/
|
|
7
8
|
import { useEffect, useRef } from "react";
|
|
8
9
|
/**
|
|
9
|
-
* Wires a sidebar lying over the page
|
|
10
|
+
* Wires a sidebar lying over the page, and the focus of one beside it on a wide window.
|
|
10
11
|
*
|
|
11
12
|
* @param state - the sidebar's state.
|
|
12
13
|
* @returns whether it lies over the page, and the references to give the sidebar and its buttons.
|
|
@@ -32,20 +33,27 @@ export const useSidebarOverlay = ({ isOverlay, isOpen, onClose }) => {
|
|
|
32
33
|
return () => document.removeEventListener("keydown", closeOnEscape);
|
|
33
34
|
}, [isOver, onClose]);
|
|
34
35
|
const wasOver = useRef(false);
|
|
35
|
-
|
|
36
|
+
const wasOpen = useRef(isOpen);
|
|
37
|
+
// also looked at when the window crosses the width
|
|
36
38
|
useEffect(() => {
|
|
37
39
|
const focused = document.activeElement;
|
|
38
40
|
const isFocusInSidebar = sidebarRef.current?.contains(focused) === true;
|
|
41
|
+
const isFocusNowhere = focused === document.body || focused === null;
|
|
39
42
|
// the platform's search key has already put the focus on the search field
|
|
40
43
|
if (isOver && !isFocusInSidebar)
|
|
41
44
|
hideButtonRef.current?.focus({ preventScroll: true });
|
|
45
|
+
// shown beside the page, the sidebar took away the button that showed it, and Tab would start over from the top
|
|
46
|
+
if (isOpen && !wasOpen.current && !isOverlay && isFocusNowhere) {
|
|
47
|
+
hideButtonRef.current?.focus({ preventScroll: true });
|
|
48
|
+
}
|
|
42
49
|
// the sidebar went away with the focus in it, closed or by the window crossing the width; one still shown keeps the
|
|
43
50
|
// focus, and a search's result that has already taken it to what it found keeps it too
|
|
44
|
-
const isFocusLost = isFocusInSidebar || (wasOver.current &&
|
|
51
|
+
const isFocusLost = isFocusInSidebar || (wasOver.current && isFocusNowhere);
|
|
45
52
|
if (!isOver && sidebarRef.current?.inert === true && isFocusLost) {
|
|
46
53
|
showButtonRef.current?.focus({ preventScroll: true });
|
|
47
54
|
}
|
|
48
55
|
wasOver.current = isOver;
|
|
49
|
-
|
|
56
|
+
wasOpen.current = isOpen;
|
|
57
|
+
}, [isOver, isOverlay, isOpen]);
|
|
50
58
|
return { isOver, sidebarRef, hideButtonRef, showButtonRef };
|
|
51
59
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A story file's code for the Code card: each story's `render
|
|
2
|
+
* A story file's code for the Code card: each story's `render`, or the args it writes as code, as written, loaded from
|
|
3
|
+
* the source's `code`.
|
|
3
4
|
*
|
|
4
5
|
* @module
|
|
5
6
|
*/
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { useLoaded } from "./useLoaded.js";
|
|
2
|
-
/** Whether a value is
|
|
3
|
-
const
|
|
2
|
+
/** Whether a value is a record of texts, as a story's written args are. */
|
|
3
|
+
const isTexts = (value) => typeof value === "object" &&
|
|
4
4
|
value !== null &&
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
typeof value
|
|
9
|
-
|
|
5
|
+
Object.values(value).every((each) => typeof each === "string");
|
|
6
|
+
/** Whether a value is one story's code: its render's text and HTML, or the args it writes as code. */
|
|
7
|
+
const isStoryCode = (value) => {
|
|
8
|
+
if (typeof value !== "object" || value === null)
|
|
9
|
+
return false;
|
|
10
|
+
if ("args" in value)
|
|
11
|
+
return isTexts(value.args);
|
|
12
|
+
return ("text" in value && typeof value.text === "string" && "html" in value && typeof value.html === "string");
|
|
13
|
+
};
|
|
14
|
+
/** Whether the plugin's answer is a file's code: each story's, by export name. */
|
|
10
15
|
const isStoryFileCode = (value) => typeof value === "object" &&
|
|
11
16
|
value !== null &&
|
|
12
17
|
!("error" in value) &&
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
|
-
import { type ControlKeys } from "../controlKeys.ts";
|
|
8
|
+
import { type ControlKeys, type ReaderKeys } from "../controlKeys.ts";
|
|
9
9
|
import { type PlacedControl } from "../toolbarLayout.ts";
|
|
10
10
|
/** The arrangement and what changes it. */
|
|
11
11
|
export type ToolbarLayout = {
|
|
@@ -34,5 +34,9 @@ export type ToolbarLayout = {
|
|
|
34
34
|
*/
|
|
35
35
|
readonly setKey: (id: string, key: string | null) => string | undefined;
|
|
36
36
|
};
|
|
37
|
+
/** The person's keys a stored text holds; none for anything else. */
|
|
38
|
+
export declare const readKeys: (stored: string | null) => ReaderKeys;
|
|
39
|
+
/** The text the person's keys are stored as; empty for none. */
|
|
40
|
+
export declare const keysText: (keys: ReaderKeys) => string;
|
|
37
41
|
/** The person's arrangement of the toolbar. */
|
|
38
42
|
export declare const useToolbarLayout: () => ToolbarLayout;
|
|
@@ -10,7 +10,7 @@ import { arrangementOf, arrangementText, placedControls, readArrangement, withHi
|
|
|
10
10
|
import { useCatalogue } from "./catalogueContext.js";
|
|
11
11
|
import { useStored } from "./useStored.js";
|
|
12
12
|
/** The person's keys a stored text holds; none for anything else. */
|
|
13
|
-
const readKeys = (stored) => {
|
|
13
|
+
export const readKeys = (stored) => {
|
|
14
14
|
if (stored === null || stored === "")
|
|
15
15
|
return {};
|
|
16
16
|
try {
|
|
@@ -24,7 +24,7 @@ const readKeys = (stored) => {
|
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
/** The text the person's keys are stored as; empty for none. */
|
|
27
|
-
const keysText = (keys) =>
|
|
27
|
+
export const keysText = (keys) => Object.keys(keys).length === 0 ? "" : JSON.stringify(keys);
|
|
28
28
|
/** The person's arrangement of the toolbar. */
|
|
29
29
|
export const useToolbarLayout = () => {
|
|
30
30
|
const catalogue = useCatalogue();
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { type RefObject } from "react";
|
|
13
13
|
import type { PanelProp } from "../argTypes.ts";
|
|
14
|
-
import type { PanelArgs } from "../messages.ts";
|
|
14
|
+
import type { ArgValue, PanelArgs } from "../messages.ts";
|
|
15
|
+
import type { NamedValues } from "../namedValues.ts";
|
|
16
|
+
import type { ValueShape } from "../valueShape.ts";
|
|
15
17
|
import { type WorstCaseState } from "./worstArgs.ts";
|
|
16
18
|
/** What the hook reads. */
|
|
17
19
|
export type WorstCaseInput = {
|
|
@@ -25,6 +27,10 @@ export type WorstCaseInput = {
|
|
|
25
27
|
readonly values: PanelArgs;
|
|
26
28
|
/** The panel's own values. */
|
|
27
29
|
readonly panelArgs: PanelArgs;
|
|
30
|
+
/** The source's named values, for a required part only they can fill. */
|
|
31
|
+
readonly namedValues: NamedValues | undefined;
|
|
32
|
+
/** Gives a prop with a shape its worst value, once its module loaded. */
|
|
33
|
+
readonly worstOfShape: ((shape: ValueShape, namedValues: NamedValues) => ArgValue | undefined) | undefined;
|
|
28
34
|
/** Sets the panel's values. */
|
|
29
35
|
readonly onPanelArgsChange: (args: PanelArgs) => void;
|
|
30
36
|
};
|
|
@@ -42,4 +48,4 @@ export type WorstCase = {
|
|
|
42
48
|
*
|
|
43
49
|
* @param input - the frames, the story, its settable props and its values.
|
|
44
50
|
*/
|
|
45
|
-
export declare const useWorstCase: ({ storyRef, storyId, settable, values, panelArgs, onPanelArgsChange }: WorstCaseInput) => WorstCase;
|
|
51
|
+
export declare const useWorstCase: ({ storyRef, storyId, settable, values, panelArgs, namedValues, worstOfShape, onPanelArgsChange }: WorstCaseInput) => WorstCase;
|