forgebook 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +914 -72
- package/dist/bin/forgebook/agentClient.d.ts +2 -1
- package/dist/bin/forgebook/agentClient.js +13 -6
- package/dist/bin/forgebook/agentGuide.d.ts +59 -0
- package/dist/bin/forgebook/agentGuide.js +203 -0
- package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
- package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
- package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
- package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
- package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
- package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
- package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
- package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
- package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
- package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
- package/dist/bin/forgebook/agentText.d.ts +23 -3
- package/dist/bin/forgebook/agentText.js +175 -28
- package/dist/bin/forgebook/agents.md +20 -191
- package/dist/bin/forgebook/agentsText.js +2 -1
- package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
- package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
- package/dist/bin/forgebook/auditCommand.d.mts +8 -0
- package/dist/bin/forgebook/auditCommand.mjs +75 -0
- package/dist/bin/forgebook/auditRun.d.ts +95 -0
- package/dist/bin/forgebook/auditRun.js +270 -0
- package/dist/bin/forgebook/browserRun.d.ts +21 -0
- package/dist/bin/forgebook/browserRun.js +57 -0
- package/dist/bin/forgebook/buildFailure.d.ts +7 -0
- package/dist/bin/forgebook/buildFailure.js +47 -0
- package/dist/bin/forgebook/buildWatch.d.ts +52 -0
- package/dist/bin/forgebook/buildWatch.js +137 -0
- package/dist/bin/forgebook/builtCatalogue.js +9 -5
- package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
- package/dist/bin/forgebook/catalogueCommands.js +23 -0
- package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
- package/dist/bin/forgebook/catalogueVite.js +14 -6
- package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
- package/dist/bin/forgebook/commandCacheClaim.js +170 -0
- package/dist/bin/forgebook/commandServer.d.ts +8 -0
- package/dist/bin/forgebook/commandServer.js +61 -13
- package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
- package/dist/bin/forgebook/graphCommand.d.mts +8 -0
- package/dist/bin/forgebook/graphCommand.mjs +84 -0
- package/dist/bin/forgebook/guide/commands.md +57 -0
- package/dist/bin/forgebook/guide/devices.md +17 -0
- package/dist/bin/forgebook/guide/docs-pages.md +13 -0
- package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
- package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
- package/dist/bin/forgebook/guide/links.md +29 -0
- package/dist/bin/forgebook/guide/setup.md +23 -0
- package/dist/bin/forgebook/guide/stories.md +90 -0
- package/dist/bin/forgebook/guide/switches.md +43 -0
- package/dist/bin/forgebook/guideCommand.d.mts +13 -0
- package/dist/bin/forgebook/guideCommand.mjs +37 -0
- package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
- package/dist/bin/forgebook/importers/storybook.js +11 -5
- package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
- package/dist/bin/forgebook/initCommands.d.mts +11 -0
- package/dist/bin/forgebook/initCommands.mjs +51 -78
- package/dist/bin/forgebook/initConfig.d.ts +5 -3
- package/dist/bin/forgebook/initConfig.js +6 -3
- package/dist/bin/forgebook/initInstall.d.ts +15 -0
- package/dist/bin/forgebook/initInstall.js +77 -0
- package/dist/bin/forgebook/initPrint.d.ts +9 -0
- package/dist/bin/forgebook/initPrint.js +60 -0
- package/dist/bin/forgebook/initRefusals.d.ts +45 -0
- package/dist/bin/forgebook/initRefusals.js +91 -0
- package/dist/bin/forgebook/initRun.d.ts +28 -0
- package/dist/bin/forgebook/initRun.js +311 -0
- package/dist/bin/forgebook/mcpCommand.mjs +38 -4
- package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
- package/dist/bin/forgebook/mcpGraph.js +24 -0
- package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
- package/dist/bin/forgebook/mcpTokens.js +58 -0
- package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
- package/dist/bin/forgebook/mcpToolParts.js +10 -0
- package/dist/bin/forgebook/mcpTools.d.ts +13 -6
- package/dist/bin/forgebook/mcpTools.js +57 -90
- package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
- package/dist/bin/forgebook/mcpVerify.js +36 -0
- package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
- package/dist/bin/forgebook/migrate/codemods.js +61 -0
- package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
- package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
- package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
- package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
- package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
- package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
- package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
- package/dist/bin/forgebook/migrate/migrateText.js +30 -0
- package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
- package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
- package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
- package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
- package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
- package/dist/bin/forgebook/newProject/newProject.js +180 -0
- package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
- package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
- package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
- package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
- package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
- package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
- package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
- package/dist/bin/forgebook/newProject/projectLook.js +293 -0
- package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
- package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
- package/dist/bin/forgebook/newRepair.d.ts +45 -0
- package/dist/bin/forgebook/newRepair.js +157 -0
- package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
- package/dist/bin/forgebook/newRepairRun.js +148 -0
- package/dist/bin/forgebook/newStories.d.ts +23 -1
- package/dist/bin/forgebook/newStories.js +101 -11
- package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
- package/dist/bin/forgebook/newStoriesFile.js +43 -4
- package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
- package/dist/bin/forgebook/prebundleRun.js +28 -8
- package/dist/bin/forgebook/proofCommand.d.mts +15 -0
- package/dist/bin/forgebook/proofCommand.mjs +212 -0
- package/dist/bin/forgebook/proofRun.d.ts +63 -0
- package/dist/bin/forgebook/proofRun.js +412 -0
- package/dist/bin/forgebook/proofText.d.ts +36 -0
- package/dist/bin/forgebook/proofText.js +131 -0
- package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
- package/dist/bin/forgebook/proofWorkflow.js +205 -0
- package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
- package/dist/bin/forgebook/setArgsTool.js +70 -0
- package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
- package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
- package/dist/bin/forgebook/storyCheckRun.js +83 -9
- package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
- package/dist/bin/forgebook/storyFileIds.js +14 -0
- package/dist/bin/forgebook/stressCases.d.ts +31 -0
- package/dist/bin/forgebook/stressCases.js +79 -0
- package/dist/bin/forgebook/stressRun.d.ts +12 -0
- package/dist/bin/forgebook/stressRun.js +61 -0
- package/dist/bin/forgebook/stressText.d.ts +27 -0
- package/dist/bin/forgebook/stressText.js +46 -0
- package/dist/bin/forgebook/verifyBase.d.ts +45 -0
- package/dist/bin/forgebook/verifyBase.js +196 -0
- package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
- package/dist/bin/forgebook/verifyCommand.mjs +125 -0
- package/dist/bin/forgebook/verifyRun.d.ts +63 -0
- package/dist/bin/forgebook/verifyRun.js +108 -0
- package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
- package/dist/bin/forgebook/verifyVerdict.js +297 -0
- package/dist/bin/forgebook/workflowActions.d.ts +23 -0
- package/dist/bin/forgebook/workflowActions.js +23 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
- package/dist/src/addressArgs.d.ts +29 -5
- package/dist/src/addressArgs.js +58 -16
- package/dist/src/addressArgsParam.d.ts +54 -0
- package/dist/src/addressArgsParam.js +51 -0
- package/dist/src/addressTexts.d.ts +14 -0
- package/dist/src/addressTexts.js +28 -21
- package/dist/src/agentIndexFile.d.ts +11 -0
- package/dist/src/agentIndexFile.js +11 -0
- package/dist/src/argConditions.d.ts +52 -0
- package/dist/src/argConditions.js +80 -0
- package/dist/src/argControl.d.ts +100 -0
- package/dist/src/argControl.js +0 -0
- package/dist/src/argExpression.d.ts +21 -0
- package/dist/src/argExpression.js +30 -0
- package/dist/src/argTypes.d.ts +40 -51
- package/dist/src/argTypes.js +66 -184
- package/dist/src/argsProps.d.ts +3 -3
- package/dist/src/argsProps.js +11 -5
- package/dist/src/bundlerErrors.d.ts +29 -0
- package/dist/src/bundlerErrors.js +49 -0
- package/dist/src/catalogue.d.ts +31 -0
- package/dist/src/catalogue.js +13 -2
- package/dist/src/catalogueRefs.d.ts +75 -0
- package/dist/src/catalogueRefs.js +122 -0
- package/dist/src/componentDocs.d.ts +71 -0
- package/dist/src/componentDocs.js +15 -2
- package/dist/src/frame/callValues.d.ts +19 -0
- package/dist/src/frame/callValues.js +58 -0
- package/dist/src/frame/canvasScheme.d.ts +33 -0
- package/dist/src/frame/canvasScheme.js +67 -0
- package/dist/src/frame/frame.css +36 -3
- package/dist/src/frame/frameStatus.d.ts +16 -1
- package/dist/src/frame/frameStatus.js +16 -1
- package/dist/src/frame/frameView.js +4 -3
- package/dist/src/frame/mountFrame.d.ts +7 -1
- package/dist/src/frame/mountFrame.js +153 -46
- package/dist/src/frame/panelValues.d.ts +35 -0
- package/dist/src/frame/panelValues.js +127 -0
- package/dist/src/frame/playActions.d.ts +39 -0
- package/dist/src/frame/playActions.js +98 -0
- package/dist/src/frame/playStepper.d.ts +28 -0
- package/dist/src/frame/playStepper.js +38 -0
- package/dist/src/frame/playStory.d.ts +9 -1
- package/dist/src/frame/playStory.js +49 -3
- package/dist/src/frame/renderer.d.ts +34 -1
- package/dist/src/frame/renderer.js +24 -0
- package/dist/src/frame/shellChannel.d.ts +1 -1
- package/dist/src/frame/shellChannel.js +1 -1
- package/dist/src/frame/shellCheck.d.ts +17 -0
- package/dist/src/frame/shellCheck.js +25 -0
- package/dist/src/frame/shellMessageCheck.d.ts +7 -0
- package/dist/src/frame/shellMessageCheck.js +53 -0
- package/dist/src/frame/storyContent.d.ts +50 -0
- package/dist/src/frame/storyContent.js +73 -0
- package/dist/src/frame/storyModule.d.ts +9 -0
- package/dist/src/frame/storyModule.js +20 -2
- package/dist/src/frame/storyRun.d.ts +15 -7
- package/dist/src/frame/storyRun.js +64 -15
- package/dist/src/frame/valueSheets.d.ts +35 -0
- package/dist/src/frame/valueSheets.js +99 -0
- package/dist/src/hotModules.d.ts +20 -0
- package/dist/src/hotModules.js +23 -0
- package/dist/src/jsxCode.d.ts +1 -14
- package/dist/src/jsxCode.js +46 -10
- package/dist/src/liveErrors.d.ts +30 -4
- package/dist/src/liveErrors.js +18 -3
- package/dist/src/messages.d.ts +77 -27
- package/dist/src/messages.js +58 -100
- package/dist/src/namedValues.d.ts +2 -26
- package/dist/src/namedValues.js +0 -47
- package/dist/src/pageConfig.d.ts +2 -0
- package/dist/src/playTrace.d.ts +19 -2
- package/dist/src/playTrace.js +10 -5
- package/dist/src/plugin.d.ts +10 -3
- package/dist/src/previewRelay.js +9 -1
- package/dist/src/printable.d.ts +12 -0
- package/dist/src/printable.js +22 -0
- package/dist/src/propsSignature.d.ts +37 -0
- package/dist/src/propsSignature.js +40 -0
- package/dist/src/search.d.ts +41 -5
- package/dist/src/search.js +93 -23
- package/dist/src/searchMatch.d.ts +4 -1
- package/dist/src/searchMatch.js +26 -5
- package/dist/src/searchTypos.d.ts +88 -0
- package/dist/src/searchTypos.js +178 -0
- package/dist/src/shapeValues.d.ts +86 -0
- package/dist/src/shapeValues.js +295 -0
- package/dist/src/shell/ApiReference.js +6 -3
- package/dist/src/shell/ApiTableBox.d.ts +15 -0
- package/dist/src/shell/ApiTableBox.js +11 -0
- package/dist/src/shell/AppearanceMenu.d.ts +4 -1
- package/dist/src/shell/AppearanceMenu.js +9 -6
- package/dist/src/shell/CodeTab.d.ts +3 -2
- package/dist/src/shell/CodeTab.js +3 -2
- package/dist/src/shell/CodeText.d.ts +1 -1
- package/dist/src/shell/CodeText.js +2 -3
- package/dist/src/shell/CompareGrid.js +1 -1
- package/dist/src/shell/ComponentPage.d.ts +1 -1
- package/dist/src/shell/ComponentPage.js +5 -1
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +132 -0
- package/dist/src/shell/DocContainers.js +1 -1
- package/dist/src/shell/DocPage.js +2 -2
- package/dist/src/shell/DroppedArgsList.d.ts +2 -2
- package/dist/src/shell/DroppedArgsList.js +1 -1
- package/dist/src/shell/EmbedPage.js +30 -12
- package/dist/src/shell/Example.d.ts +5 -1
- package/dist/src/shell/Example.js +16 -8
- package/dist/src/shell/FrameView.d.ts +6 -3
- package/dist/src/shell/FrameView.js +2 -2
- package/dist/src/shell/HomePage.d.ts +3 -1
- package/dist/src/shell/HomePage.js +16 -6
- package/dist/src/shell/InfoTip.js +2 -2
- package/dist/src/shell/InteractionsTab.d.ts +11 -4
- package/dist/src/shell/InteractionsTab.js +18 -2
- package/dist/src/shell/LazyPage.js +1 -1
- package/dist/src/shell/PackageHtml.js +3 -1
- package/dist/src/shell/PinnedControl.js +14 -62
- package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
- package/dist/src/shell/PinnedControlMenu.js +72 -0
- package/dist/src/shell/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +23 -2
- package/dist/src/shell/PropRows.js +58 -19
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -21
- package/dist/src/shell/RefStoryPage.d.ts +33 -0
- package/dist/src/shell/RefStoryPage.js +123 -0
- package/dist/src/shell/SearchPanel.js +51 -24
- package/dist/src/shell/Shell.d.ts +18 -0
- package/dist/src/shell/Shell.js +137 -22
- package/dist/src/shell/ShortcutHelp.d.ts +22 -0
- package/dist/src/shell/ShortcutHelp.js +66 -0
- package/dist/src/shell/Sidebar.d.ts +17 -4
- package/dist/src/shell/Sidebar.js +92 -41
- package/dist/src/shell/SidebarDocs.js +2 -2
- package/dist/src/shell/SidebarEntries.js +5 -3
- package/dist/src/shell/SidebarHandle.d.ts +3 -5
- package/dist/src/shell/SidebarHandle.js +4 -4
- package/dist/src/shell/SidebarRefs.d.ts +39 -0
- package/dist/src/shell/SidebarRefs.js +99 -0
- package/dist/src/shell/SidebarSearch.js +37 -9
- package/dist/src/shell/SignatureReference.js +3 -1
- package/dist/src/shell/Stage.d.ts +10 -2
- package/dist/src/shell/Stage.js +29 -49
- package/dist/src/shell/StatusBadges.d.ts +54 -0
- package/dist/src/shell/StatusBadges.js +77 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
- package/dist/src/shell/StoryCodeBlock.js +7 -6
- package/dist/src/shell/SwitchGallery.d.ts +36 -0
- package/dist/src/shell/SwitchGallery.js +17 -0
- package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
- package/dist/src/shell/SwitchGalleryPanel.js +99 -0
- package/dist/src/shell/TagFilter.d.ts +24 -0
- package/dist/src/shell/TagFilter.js +45 -0
- package/dist/src/shell/TagViews.d.ts +39 -0
- package/dist/src/shell/TagViews.js +20 -0
- package/dist/src/shell/Toolbar.d.ts +4 -1
- package/dist/src/shell/Toolbar.js +17 -7
- package/dist/src/shell/ToolbarControl.d.ts +3 -0
- package/dist/src/shell/ToolbarControl.js +23 -6
- package/dist/src/shell/ViewMenuPanel.js +6 -1
- package/dist/src/shell/argChecks.d.ts +22 -0
- package/dist/src/shell/argChecks.js +20 -0
- package/dist/src/shell/asideStory.js +7 -2
- package/dist/src/shell/audienceSections.css +9 -9
- package/dist/src/shell/catalogueContext.d.ts +1 -1
- package/dist/src/shell/catalogueContext.js +6 -1
- package/dist/src/shell/codeSpans.d.ts +27 -0
- package/dist/src/shell/codeSpans.js +76 -0
- package/dist/src/shell/compareVariants.d.ts +4 -2
- package/dist/src/shell/compareVariants.js +16 -8
- package/dist/src/shell/composition.d.ts +23 -0
- package/dist/src/shell/composition.js +26 -0
- package/dist/src/shell/controlCycle.d.ts +1 -1
- package/dist/src/shell/controlCycle.js +3 -2
- package/dist/src/shell/customControls.d.ts +55 -0
- package/dist/src/shell/customControls.js +70 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +28 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/framesOrigin.d.ts +7 -0
- package/dist/src/shell/framesOrigin.js +1 -1
- package/dist/src/shell/galleryPlace.d.ts +20 -0
- package/dist/src/shell/galleryPlace.js +26 -0
- package/dist/src/shell/icons.d.ts +1 -0
- package/dist/src/shell/icons.js +1 -0
- package/dist/src/shell/keyboard.d.ts +14 -12
- package/dist/src/shell/keyboard.js +21 -6
- package/dist/src/shell/laterStrings.d.ts +29 -0
- package/dist/src/shell/laterStrings.js +42 -3
- package/dist/src/shell/mountShell.js +3 -0
- package/dist/src/shell/pageStrings.d.ts +4 -0
- package/dist/src/shell/pageStrings.js +4 -0
- package/dist/src/shell/pageTagView.d.ts +18 -0
- package/dist/src/shell/pageTagView.js +10 -0
- package/dist/src/shell/playMemory.d.ts +14 -0
- package/dist/src/shell/playMemory.js +8 -0
- package/dist/src/shell/propNotes.d.ts +23 -0
- package/dist/src/shell/propNotes.js +37 -0
- package/dist/src/shell/refIndexLoad.d.ts +17 -0
- package/dist/src/shell/refIndexLoad.js +38 -0
- package/dist/src/shell/refParts.d.ts +34 -0
- package/dist/src/shell/refParts.js +9 -0
- package/dist/src/shell/refStory.css +21 -0
- package/dist/src/shell/refStrings.d.ts +13 -0
- package/dist/src/shell/refStrings.js +21 -0
- package/dist/src/shell/search.css +11 -11
- package/dist/src/shell/shell.css +348 -168
- package/dist/src/shell/shellScheme.js +2 -2
- package/dist/src/shell/shortcutHelp.css +64 -0
- package/dist/src/shell/stageArgs.d.ts +53 -0
- package/dist/src/shell/stageArgs.js +64 -0
- package/dist/src/shell/statusBadges.css +51 -0
- package/dist/src/shell/strings.d.ts +7 -16
- package/dist/src/shell/strings.js +12 -17
- package/dist/src/shell/switchGallery.css +104 -0
- package/dist/src/shell/tagFilter.css +46 -0
- package/dist/src/shell/tagView.d.ts +20 -0
- package/dist/src/shell/tagView.js +10 -0
- package/dist/src/shell/useAddressArgs.d.ts +9 -0
- package/dist/src/shell/useAddressArgs.js +56 -11
- package/dist/src/shell/useControlKeys.js +2 -2
- package/dist/src/shell/useEditedProblems.d.ts +6 -0
- package/dist/src/shell/useEditedProblems.js +40 -0
- package/dist/src/shell/useFrameMessages.js +3 -0
- package/dist/src/shell/useListedTree.d.ts +13 -0
- package/dist/src/shell/useListedTree.js +32 -0
- package/dist/src/shell/usePageFrames.js +2 -2
- package/dist/src/shell/usePopover.d.ts +5 -0
- package/dist/src/shell/usePopover.js +7 -1
- package/dist/src/shell/useRefIndex.d.ts +22 -0
- package/dist/src/shell/useRefIndex.js +36 -0
- package/dist/src/shell/useScrollStops.d.ts +20 -0
- package/dist/src/shell/useScrollStops.js +41 -0
- package/dist/src/shell/useShortcutHelp.d.ts +18 -0
- package/dist/src/shell/useShortcutHelp.js +32 -0
- package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
- package/dist/src/shell/useSidebarOverlay.js +12 -4
- package/dist/src/shell/useStoryCode.d.ts +2 -1
- package/dist/src/shell/useStoryCode.js +12 -7
- package/dist/src/shell/useToolbarLayout.d.ts +5 -1
- package/dist/src/shell/useToolbarLayout.js +2 -2
- package/dist/src/shell/useWorstCase.d.ts +8 -2
- package/dist/src/shell/useWorstCase.js +2 -2
- package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
- package/dist/src/shell/valueEditors/FileEditor.js +66 -0
- package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
- package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
- package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
- package/dist/src/shell/valueEditors/ListEditor.js +82 -0
- package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
- package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
- package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
- package/dist/src/shell/valueEditors/PropEditor.js +53 -0
- package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
- package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
- package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
- package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
- package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
- package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
- package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
- package/dist/src/shell/valueEditors/ValueField.js +147 -0
- package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
- package/dist/src/shell/valueEditors/editorStrings.js +66 -0
- package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
- package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
- package/dist/src/shell/valueEditors/valueEditors.css +153 -0
- package/dist/src/shell/worstArgs.d.ts +8 -5
- package/dist/src/shell/worstArgs.js +14 -7
- package/dist/src/shellTheme.d.ts +1 -1
- package/dist/src/shellTheme.js +15 -1
- package/dist/src/shellTheme.types.d.ts +4 -0
- package/dist/src/shellWord.d.ts +12 -0
- package/dist/src/shellWord.js +15 -0
- package/dist/src/sourceFiles.js +2 -1
- package/dist/src/storyArgTypes.d.ts +57 -0
- package/dist/src/storyArgTypes.js +195 -0
- package/dist/src/storyBackground.js +14 -3
- package/dist/src/storyCheck.d.ts +85 -3
- package/dist/src/storyCheck.js +23 -1
- package/dist/src/storyCodeText.d.ts +46 -0
- package/dist/src/storyCodeText.js +27 -0
- package/dist/src/storyControls.d.ts +100 -0
- package/dist/src/storyControls.js +100 -0
- package/dist/src/storyStatuses.d.ts +55 -0
- package/dist/src/storyStatuses.js +104 -0
- package/dist/src/storyTagNames.d.ts +25 -0
- package/dist/src/storyTagNames.js +25 -0
- package/dist/src/storyTags.d.ts +29 -0
- package/dist/src/storyTags.js +85 -0
- package/dist/src/storyTree.d.ts +13 -0
- package/dist/src/storyTree.js +24 -4
- package/dist/src/storybookArgs.d.ts +24 -0
- package/dist/src/storybookArgs.js +185 -0
- package/dist/src/switches.d.ts +66 -3
- package/dist/src/switches.js +42 -1
- package/dist/src/valueSchema.d.ts +28 -0
- package/dist/src/valueSchema.js +196 -0
- package/dist/src/valueShape.d.ts +94 -0
- package/dist/src/valueShape.js +25 -0
- package/dist/src/viewState.d.ts +8 -3
- package/dist/src/viewState.js +27 -10
- package/dist/src/vite/adapter.d.ts +40 -2
- package/dist/src/vite/adapter.js +1 -0
- package/dist/src/vite/agent.types.d.ts +347 -7
- package/dist/src/vite/agentApi.d.ts +23 -0
- package/dist/src/vite/agentApi.js +90 -17
- package/dist/src/vite/agentIndex.d.ts +0 -2
- package/dist/src/vite/agentIndex.js +5 -6
- package/dist/src/vite/agentRoutes.d.ts +20 -1
- package/dist/src/vite/agentRoutes.js +106 -65
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +48 -0
- package/dist/src/vite/agentStoryCode.js +38 -0
- package/dist/src/vite/agentVisibility.d.ts +47 -0
- package/dist/src/vite/agentVisibility.js +174 -0
- package/dist/src/vite/appAudit.d.ts +134 -0
- package/dist/src/vite/appAudit.js +333 -0
- package/dist/src/vite/appBuildOption.d.ts +53 -0
- package/dist/src/vite/appBuildOption.js +55 -0
- package/dist/src/vite/appTokenFiles.d.ts +92 -0
- package/dist/src/vite/appTokenFiles.js +433 -0
- package/dist/src/vite/appTokens.d.ts +23 -0
- package/dist/src/vite/appTokens.js +275 -0
- package/dist/src/vite/builtTexts.d.ts +10 -0
- package/dist/src/vite/builtTexts.js +59 -22
- package/dist/src/vite/catalogueConfig.d.ts +3 -1
- package/dist/src/vite/catalogueConfig.js +15 -3
- package/dist/src/vite/changeCoverage.d.ts +74 -0
- package/dist/src/vite/changeCoverage.js +120 -0
- package/dist/src/vite/changedRoute.d.ts +30 -0
- package/dist/src/vite/changedRoute.js +197 -0
- package/dist/src/vite/checkCode.d.ts +105 -3
- package/dist/src/vite/checkCode.js +323 -36
- package/dist/src/vite/checkoutWatch.d.ts +97 -0
- package/dist/src/vite/checkoutWatch.js +287 -0
- package/dist/src/vite/closeWatch.d.ts +8 -0
- package/dist/src/vite/closeWatch.js +1 -1
- package/dist/src/vite/componentCache.d.ts +8 -0
- package/dist/src/vite/componentCache.js +66 -0
- package/dist/src/vite/componentGraph.d.ts +71 -0
- package/dist/src/vite/componentGraph.js +133 -0
- package/dist/src/vite/componentRules.d.ts +33 -0
- package/dist/src/vite/componentRules.js +105 -0
- package/dist/src/vite/componentScan.d.ts +69 -0
- package/dist/src/vite/componentScan.js +418 -0
- package/dist/src/vite/compositionCheck.d.ts +15 -0
- package/dist/src/vite/compositionCheck.js +243 -0
- package/dist/src/vite/config.d.ts +32 -1
- package/dist/src/vite/configFile.d.ts +14 -2
- package/dist/src/vite/configFile.js +124 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +171 -0
- package/dist/src/vite/configLoadError.d.ts +23 -0
- package/dist/src/vite/configLoadError.js +71 -0
- package/dist/src/vite/cssDeclarations.d.ts +71 -0
- package/dist/src/vite/cssDeclarations.js +290 -0
- package/dist/src/vite/cssImports.d.ts +14 -0
- package/dist/src/vite/cssImports.js +48 -0
- package/dist/src/vite/cssReferences.d.ts +54 -0
- package/dist/src/vite/cssReferences.js +157 -0
- package/dist/src/vite/cssTokenValues.d.ts +50 -0
- package/dist/src/vite/cssTokenValues.js +233 -0
- package/dist/src/vite/designTokens.d.ts +24 -0
- package/dist/src/vite/designTokens.js +5 -1
- package/dist/src/vite/docsExtractor.d.ts +9 -3
- package/dist/src/vite/docsExtractor.js +11 -3
- package/dist/src/vite/docsProgram.d.ts +17 -4
- package/dist/src/vite/docsProgram.js +52 -11
- package/dist/src/vite/docsWorker.js +7 -2
- package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
- package/dist/src/vite/emptyStoryGlobs.js +52 -0
- package/dist/src/vite/fileImports.d.ts +17 -0
- package/dist/src/vite/fileImports.js +57 -0
- package/dist/src/vite/findComponent.d.ts +10 -2
- package/dist/src/vite/findComponent.js +27 -22
- package/dist/src/vite/findRoute.js +3 -2
- package/dist/src/vite/forcedStates.d.ts +9 -2
- package/dist/src/vite/forcedStates.js +12 -3
- package/dist/src/vite/forgebookPlugin.d.ts +2 -0
- package/dist/src/vite/forgebookPlugin.js +52 -72
- package/dist/src/vite/frameErrors.d.ts +19 -0
- package/dist/src/vite/frameErrors.js +70 -0
- package/dist/src/vite/framesServer.d.ts +12 -0
- package/dist/src/vite/framesServer.js +21 -4
- package/dist/src/vite/functionComponentDocs.js +81 -12
- package/dist/src/vite/generatedModules.js +4 -2
- package/dist/src/vite/gitChange.d.ts +38 -5
- package/dist/src/vite/gitChange.js +71 -11
- package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
- package/dist/src/vite/hiddenStoryFiles.js +107 -0
- package/dist/src/vite/hotSnippets.d.ts +38 -14
- package/dist/src/vite/hotSnippets.js +137 -39
- package/dist/src/vite/importedNames.d.ts +37 -0
- package/dist/src/vite/importedNames.js +138 -0
- package/dist/src/vite/indexFields.d.ts +6 -0
- package/dist/src/vite/indexFields.js +21 -0
- package/dist/src/vite/indexStoryFile.d.ts +8 -1
- package/dist/src/vite/indexStoryFile.js +22 -157
- package/dist/src/vite/jsxCallSites.d.ts +33 -0
- package/dist/src/vite/jsxCallSites.js +200 -0
- package/dist/src/vite/jsxInScripts.d.ts +67 -0
- package/dist/src/vite/jsxInScripts.js +138 -0
- package/dist/src/vite/jsxTree.d.ts +20 -0
- package/dist/src/vite/jsxTree.js +163 -0
- package/dist/src/vite/lineAndColumn.d.ts +13 -0
- package/dist/src/vite/lineAndColumn.js +18 -0
- package/dist/src/vite/lookAlikes.d.ts +65 -0
- package/dist/src/vite/lookAlikes.js +228 -0
- package/dist/src/vite/nearestToken.d.ts +17 -0
- package/dist/src/vite/nearestToken.js +9 -2
- package/dist/src/vite/packageEntries.d.ts +42 -0
- package/dist/src/vite/packageEntries.js +127 -0
- package/dist/src/vite/pages.d.ts +9 -1
- package/dist/src/vite/pages.js +108 -4
- package/dist/src/vite/pluginConfig.js +4 -0
- package/dist/src/vite/pluginIds.d.ts +2 -0
- package/dist/src/vite/pluginIds.js +5 -1
- package/dist/src/vite/pluginModules.d.ts +81 -11
- package/dist/src/vite/pluginModules.js +109 -21
- package/dist/src/vite/prebundled.d.ts +57 -15
- package/dist/src/vite/prebundled.js +80 -0
- package/dist/src/vite/previewTags.d.ts +25 -0
- package/dist/src/vite/previewTags.js +56 -0
- package/dist/src/vite/projectFiles.d.ts +54 -0
- package/dist/src/vite/projectFiles.js +116 -0
- package/dist/src/vite/projectPostcss.d.ts +70 -0
- package/dist/src/vite/projectPostcss.js +250 -0
- package/dist/src/vite/propDocs.d.ts +12 -0
- package/dist/src/vite/propDocs.js +130 -58
- package/dist/src/vite/propKind.d.ts +40 -0
- package/dist/src/vite/propKind.js +71 -0
- package/dist/src/vite/propTypeNotes.d.ts +22 -0
- package/dist/src/vite/propTypeNotes.js +51 -0
- package/dist/src/vite/publishedExports.d.ts +27 -0
- package/dist/src/vite/publishedExports.js +298 -0
- package/dist/src/vite/realFolder.d.ts +6 -0
- package/dist/src/vite/realFolder.js +25 -0
- package/dist/src/vite/refsConfig.d.ts +39 -0
- package/dist/src/vite/refsConfig.js +54 -0
- package/dist/src/vite/reuseCheck.d.ts +45 -0
- package/dist/src/vite/reuseCheck.js +260 -0
- package/dist/src/vite/runningVersions.d.ts +33 -0
- package/dist/src/vite/runningVersions.js +25 -0
- package/dist/src/vite/scriptProblems.d.ts +60 -0
- package/dist/src/vite/scriptProblems.js +155 -0
- package/dist/src/vite/searchModule.js +3 -2
- package/dist/src/vite/searchRoute.js +4 -2
- package/dist/src/vite/shapeDocs.d.ts +36 -0
- package/dist/src/vite/shapeDocs.js +177 -0
- package/dist/src/vite/singleFileComponent.d.ts +17 -0
- package/dist/src/vite/singleFileComponent.js +83 -0
- package/dist/src/vite/sourceText.d.ts +34 -0
- package/dist/src/vite/sourceText.js +72 -0
- package/dist/src/vite/sourceTokens.d.ts +7 -0
- package/dist/src/vite/sourceTokens.js +7 -2
- package/dist/src/vite/stackLines.d.ts +49 -0
- package/dist/src/vite/stackLines.js +96 -0
- package/dist/src/vite/storyCode.d.ts +22 -7
- package/dist/src/vite/storyCode.js +263 -37
- package/dist/src/vite/storyCoverage.d.ts +48 -0
- package/dist/src/vite/storyCoverage.js +179 -0
- package/dist/src/vite/storyFilesModule.d.ts +48 -3
- package/dist/src/vite/storyFilesModule.js +105 -15
- package/dist/src/vite/storyPatterns.d.ts +31 -0
- package/dist/src/vite/storyPatterns.js +140 -5
- package/dist/src/vite/storyReach.d.ts +10 -2
- package/dist/src/vite/storyReach.js +15 -11
- package/dist/src/vite/storyTopLevel.d.ts +51 -0
- package/dist/src/vite/storyTopLevel.js +146 -0
- package/dist/src/vite/storylessRoutes.d.ts +4 -3
- package/dist/src/vite/storylessRoutes.js +210 -19
- package/dist/src/vite/switchValuesCheck.d.ts +19 -0
- package/dist/src/vite/switchValuesCheck.js +164 -0
- package/dist/src/vite/switchesDocument.d.ts +15 -0
- package/dist/src/vite/switchesDocument.js +47 -0
- package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
- package/dist/src/vite/tailwindConfigTokens.js +306 -0
- package/dist/src/vite/textImports.d.ts +15 -0
- package/dist/src/vite/textImports.js +58 -0
- package/dist/src/vite/textModules.d.ts +6 -5
- package/dist/src/vite/textModules.js +13 -8
- package/dist/src/vite/tokenAnswers.d.ts +6 -2
- package/dist/src/vite/tokenAnswers.js +11 -7
- package/dist/src/vite/typeParameters.d.ts +83 -0
- package/dist/src/vite/typeParameters.js +270 -0
- package/dist/src/vite/unionProps.d.ts +37 -0
- package/dist/src/vite/unionProps.js +121 -0
- package/dist/src/vite/unresolvedTokens.d.ts +20 -0
- package/dist/src/vite/unresolvedTokens.js +193 -0
- package/dist/src/vite/usageGraph.js +10 -52
- package/dist/src/vite/usageGuidance.d.ts +9 -2
- package/dist/src/vite/usageGuidance.js +36 -8
- package/dist/src/vite/usageImports.d.ts +35 -0
- package/dist/src/vite/usageImports.js +280 -0
- package/dist/src/vite/visibilityRoute.d.ts +16 -0
- package/dist/src/vite/visibilityRoute.js +320 -0
- package/dist/src/worstCase.d.ts +2 -0
- package/dist/src/worstCase.js +2 -0
- package/package.json +28 -8
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { canOrderRequired, laidOutProps, propGroupOrder } from "../propGroups.js";
|
|
4
|
+
import { ApiTableBox } from "./ApiTableBox.js";
|
|
4
5
|
import { Code } from "./Code.js";
|
|
5
6
|
import { CodeText } from "./CodeText.js";
|
|
6
7
|
import { useCatalogue } from "./catalogueContext.js";
|
|
7
8
|
import { Icon } from "./icons.js";
|
|
8
9
|
import { LATER_STRINGS } from "./laterStrings.js";
|
|
10
|
+
import { propNoteTexts, propsNoteText } from "./propNotes.js";
|
|
9
11
|
import { RequiredFirstSwitch } from "./RequiredFirstSwitch.js";
|
|
10
12
|
import { SignatureReference } from "./SignatureReference.js";
|
|
11
13
|
import { STRINGS } from "./strings.js";
|
|
@@ -39,7 +41,7 @@ const RowPlace = ({ row }) => {
|
|
|
39
41
|
const Row = ({ row, hasDefaults, columns, part, showsGroup }) => {
|
|
40
42
|
const [isOpen, setOpen] = useState(false);
|
|
41
43
|
const { members } = row;
|
|
42
|
-
return (_jsxs(_Fragment, { children: [_jsxs("tr", { "data-prop": part === undefined ? row.name : `${part}.${row.name}`, children: [_jsxs("th", { scope: "row", children: [_jsx("code", { className: "forgebook-api__name", children: row.name }), row.isRequired ? (_jsx("span", { className: "forgebook-prop__required", title: STRINGS.required, children: "*" })) : null, showsGroup ? _jsx(RowPlace, { row: row }) : null] }), _jsxs("td", { className: "forgebook-api__type", children: [_jsx(Code, { text: typeText(row), names: row.signature?.parameters.map((parameter) => parameter.name) ?? [] }), members === undefined ? null : (_jsxs("button", { type: "button", className: "forgebook-api__members-toggle", "aria-expanded": isOpen, "aria-label": `${LATER_STRINGS.membersOf(row.type)}: ${LATER_STRINGS.memberCount(members.length)}`, onClick: () => setOpen(!isOpen), children: [_jsx(Icon, { name: "chevronRight", size: 12 }), LATER_STRINGS.memberCount(members.length)] }))] }), hasDefaults ? (_jsx("td", { children: row.defaultValue === undefined ? null : (_jsx("code", { className: "forgebook-inline-code", children: row.defaultValue })) })) : null,
|
|
44
|
+
return (_jsxs(_Fragment, { children: [_jsxs("tr", { "data-prop": part === undefined ? row.name : `${part}.${row.name}`, children: [_jsxs("th", { scope: "row", children: [_jsx("code", { className: "forgebook-api__name", children: row.name }), row.isRequired ? (_jsx("span", { className: "forgebook-prop__required", title: STRINGS.required, children: "*" })) : null, showsGroup ? _jsx(RowPlace, { row: row }) : null] }), _jsxs("td", { className: "forgebook-api__type", children: [_jsx(Code, { text: typeText(row), names: row.signature?.parameters.map((parameter) => parameter.name) ?? [] }), members === undefined ? null : (_jsxs("button", { type: "button", className: "forgebook-api__members-toggle", "aria-expanded": isOpen, "aria-label": `${LATER_STRINGS.membersOf(row.type)}: ${LATER_STRINGS.memberCount(members.length)}`, onClick: () => setOpen(!isOpen), children: [_jsx(Icon, { name: "chevronRight", size: 12 }), LATER_STRINGS.memberCount(members.length)] }))] }), hasDefaults ? (_jsx("td", { children: row.defaultValue === undefined ? null : (_jsx("code", { className: "forgebook-inline-code", children: row.defaultValue })) })) : null, _jsxs("td", { children: [_jsx(CodeText, { text: row.description }), propNoteTexts(row).map((note) => (_jsx("span", { className: "forgebook-api__note", children: _jsx(CodeText, { text: note }) }, note)))] })] }), members !== undefined && isOpen ? (_jsx("tr", { className: "forgebook-api__members", children: _jsx("td", { colSpan: columns, children: _jsx(PropTable, { rows: members, kind: "members", label: LATER_STRINGS.membersOf(row.type), part: part === undefined ? row.name : `${part}.${row.name}` }) }) })) : null] }));
|
|
43
45
|
};
|
|
44
46
|
/**
|
|
45
47
|
* A table of props, events or members: the Default column only when one of them has a default.
|
|
@@ -49,7 +51,7 @@ const Row = ({ row, hasDefaults, columns, part, showsGroup }) => {
|
|
|
49
51
|
*/
|
|
50
52
|
const PropTable = ({ rows, kind, label, part, showsGroups = false }) => {
|
|
51
53
|
const hasDefaults = kind !== "events" && rows.some((row) => row.defaultValue !== undefined);
|
|
52
|
-
return (_jsx(
|
|
54
|
+
return (_jsx(ApiTableBox, { children: _jsxs("table", { className: "forgebook-api__table", "aria-label": label, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: NAME_HEADINGS[kind]() }), _jsx("th", { scope: "col", children: kind === "events" ? LATER_STRINGS.apiSignature : LATER_STRINGS.apiType }), hasDefaults ? _jsx("th", { scope: "col", children: LATER_STRINGS.apiDefault }) : null, _jsx("th", { scope: "col", children: LATER_STRINGS.apiWhat })] }) }), _jsx("tbody", { children: rows.map((row) => (_jsx(Row, { row: row, hasDefaults: hasDefaults, columns: hasDefaults ? 4 : 3, part: part, showsGroup: showsGroups }, row.name))) })] }) }));
|
|
53
55
|
};
|
|
54
56
|
/**
|
|
55
57
|
* A group of props: the props that name none as a table alone, a named group under its heading, open until a reader
|
|
@@ -100,5 +102,6 @@ export const ApiReference = ({ docs, isLogic, componentGroups = NO_GROUPS, requi
|
|
|
100
102
|
...(isSignature ? [] : docs.props),
|
|
101
103
|
...docs.subcomponents.flatMap((subcomponent) => subcomponent.props)
|
|
102
104
|
];
|
|
103
|
-
|
|
105
|
+
const propsNote = isSignature ? undefined : propsNoteText(docs);
|
|
106
|
+
return (_jsxs("section", { className: "forgebook-doc__section", "aria-labelledby": "forgebook-api", children: [_jsxs("div", { className: "forgebook-api__head", children: [_jsx("h2", { id: "forgebook-api", children: LATER_STRINGS.apiReference }), canOrderRequired(shown) ? _jsx(RequiredFirstSwitch, { state: ordering }) : null] }), isSignature ? (_jsx(SignatureReference, { name: docs.name, signature: docs.signature })) : (_jsx(PropsAndEvents, { props: docs.props, groupOrder: groupOrder, layout: ordering.layout, level: 3 })), propsNote === undefined ? null : (_jsx("p", { className: "forgebook-api__note", children: _jsx(CodeText, { text: propsNote }) })), docs.subcomponents.map((subcomponent) => (_jsx(SubcomponentReference, { docs: subcomponent, groupOrder: groupOrder, layout: ordering.layout }, subcomponent.name)))] }));
|
|
104
107
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The box around a table of the API reference: a table wider than the page scrolls in it, never the page, by the
|
|
3
|
+
* pointer or from its Tab stop.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import type { ReactNode } from "react";
|
|
8
|
+
/**
|
|
9
|
+
* A table's box.
|
|
10
|
+
*
|
|
11
|
+
* @param props - the table.
|
|
12
|
+
*/
|
|
13
|
+
export declare const ApiTableBox: ({ children }: {
|
|
14
|
+
readonly children: ReactNode;
|
|
15
|
+
}) => ReactNode;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useScrollStops } from "./useScrollStops.js";
|
|
3
|
+
/**
|
|
4
|
+
* A table's box.
|
|
5
|
+
*
|
|
6
|
+
* @param props - the table.
|
|
7
|
+
*/
|
|
8
|
+
export const ApiTableBox = ({ children }) => {
|
|
9
|
+
const boxRef = useScrollStops();
|
|
10
|
+
return (_jsx("div", { ref: boxRef, className: "forgebook-api", children: children }));
|
|
11
|
+
};
|
|
@@ -11,4 +11,7 @@ import type { AppearanceState } from "./useAppearance.ts";
|
|
|
11
11
|
*
|
|
12
12
|
* @param props - the appearance shown and its setter.
|
|
13
13
|
*/
|
|
14
|
-
export declare const AppearanceMenu: ({ appearance, setAppearance, offered }: AppearanceState
|
|
14
|
+
export declare const AppearanceMenu: ({ appearance, setAppearance, offered, onShowKeys }: AppearanceState & {
|
|
15
|
+
/** Opens the list of the shell's keys, which a reader who turned them off reaches here. */
|
|
16
|
+
readonly onShowKeys: () => void;
|
|
17
|
+
}) => ReactNode;
|
|
@@ -21,11 +21,14 @@ const ICONS = {
|
|
|
21
21
|
*
|
|
22
22
|
* @param props - the appearance shown and its setter.
|
|
23
23
|
*/
|
|
24
|
-
export const AppearanceMenu = ({ appearance, setAppearance, offered }) => {
|
|
25
|
-
const { isOpen, isDrawn, setIsOpen, buttonRef, panelRef, panelId } = usePopover();
|
|
24
|
+
export const AppearanceMenu = ({ appearance, setAppearance, offered, onShowKeys }) => {
|
|
25
|
+
const { isOpen, isDrawn, setIsOpen, closeAfterChoice, buttonRef, panelRef, panelId } = usePopover();
|
|
26
26
|
const name = useId();
|
|
27
|
-
return (_jsxs("div", { className: "forgebook-appearance", children: [_jsxs("button", { ref: buttonRef, type: "button", className: "forgebook-button forgebook-button--quiet", "aria-expanded": isOpen, "aria-controls": panelId, onClick: (event) => setIsOpen(!isOpen, event), children: [_jsx(Icon, { name: ICONS[appearance], size: 14 }), STRINGS.appearanceOf(STRINGS.appearances[appearance])] }), isDrawn ? (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
return (_jsxs("div", { className: "forgebook-appearance", children: [_jsxs("button", { ref: buttonRef, type: "button", className: "forgebook-button forgebook-button--quiet", "aria-expanded": isOpen, "aria-controls": panelId, onClick: (event) => setIsOpen(!isOpen, event), children: [_jsx(Icon, { name: ICONS[appearance], size: 14 }), STRINGS.appearanceOf(STRINGS.appearances[appearance])] }), isDrawn ? (_jsxs("div", { ref: panelRef, id: panelId, className: "forgebook-popover forgebook-popover--up", role: "dialog", "aria-label": STRINGS.appearance, children: [_jsxs("fieldset", { className: "forgebook-choices", children: [_jsx("legend", { className: "forgebook-visually-hidden", children: STRINGS.appearance }), offered.map((each) => (_jsxs("label", { className: "forgebook-choice", children: [_jsx("input", { type: "radio", name: name, checked: each === appearance, onChange: () => {
|
|
28
|
+
setAppearance(each);
|
|
29
|
+
closeAfterChoice();
|
|
30
|
+
} }), _jsx(Icon, { name: ICONS[each], size: 14 }), STRINGS.appearances[each]] }, each)))] }), _jsx("button", { type: "button", className: "forgebook-button forgebook-button--quiet", onClick: (event) => {
|
|
31
|
+
setIsOpen(false, event);
|
|
32
|
+
onShowKeys();
|
|
33
|
+
}, children: STRINGS.keys })] })) : null] }));
|
|
31
34
|
};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The panel's Code tab: the story's `render` as written in its file, or, for a story drawn from its args, the
|
|
3
|
-
* component's JSX with the values of the moment (the story's and the Props
|
|
3
|
+
* component's JSX with the args its file writes as code and the values of the moment (the story's and the Props
|
|
4
|
+
* tab's), with a button that copies it.
|
|
4
5
|
*
|
|
5
6
|
* @module
|
|
6
7
|
*/
|
|
7
8
|
import type { ReactNode } from "react";
|
|
8
|
-
import { type StoryCodeSource } from "
|
|
9
|
+
import { type StoryCodeSource } from "../storyCodeText.ts";
|
|
9
10
|
/** The tab's props: the story whose code it shows. */
|
|
10
11
|
export type CodeTabProps = StoryCodeSource;
|
|
11
12
|
/**
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { storyCodeText } from "../storyCodeText.js";
|
|
2
3
|
import { useCodeWriter } from "./codeWriter.js";
|
|
3
4
|
import { LATER_STRINGS } from "./laterStrings.js";
|
|
4
|
-
import {
|
|
5
|
+
import { hasRenderCode, StoryCodeBlock } from "./StoryCodeBlock.js";
|
|
5
6
|
import { STRINGS } from "./strings.js";
|
|
6
7
|
import { useCopy } from "./useCopy.js";
|
|
7
8
|
/**
|
|
@@ -12,6 +13,6 @@ import { useCopy } from "./useCopy.js";
|
|
|
12
13
|
export const CodeTab = (props) => {
|
|
13
14
|
const { isCopied, copy } = useCopy();
|
|
14
15
|
const write = useCodeWriter();
|
|
15
|
-
const hasRender = props
|
|
16
|
+
const hasRender = hasRenderCode(props);
|
|
16
17
|
return (_jsxs("div", { className: "forgebook-prop-group", children: [_jsxs("div", { className: "forgebook-calls__head", children: [_jsx("h3", { className: "forgebook-prop-group__title", children: hasRender ? LATER_STRINGS.codeRender : LATER_STRINGS.codeFromArgs }), _jsx("button", { type: "button", className: "forgebook-text-button", onClick: () => copy(storyCodeText(props, write)), "aria-live": "polite", children: isCopied ? STRINGS.copied : LATER_STRINGS.copy })] }), _jsx(StoryCodeBlock, { ...props })] }));
|
|
17
18
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A TSDoc or Markdown sentence with its code spans shown as code: what is between backticks (as `href` is written in
|
|
3
|
-
* a TSDoc) is set in the code face, the rest stays text.
|
|
3
|
+
* a TSDoc) is set in the code face, the rest stays text. Spans are read as CommonMark reads them (`codeSpans.ts`).
|
|
4
4
|
*
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { sentencePieces } from "./codeSpans.js";
|
|
2
3
|
/**
|
|
3
4
|
* A sentence, its backtick spans as code.
|
|
4
5
|
*
|
|
5
6
|
* @param props - the sentence.
|
|
6
7
|
*/
|
|
7
|
-
export const CodeText = ({ text }) =>
|
|
8
|
-
// a split on the backticks alternates text and code: the odd pieces were between backticks
|
|
9
|
-
text.split("`").map((piece, index) => index % 2 === 1 ? (_jsx("code", { className: "forgebook-inline-code", children: piece }, index)) : (piece));
|
|
8
|
+
export const CodeText = ({ text }) => sentencePieces(text).map((piece, index) => piece.isCode ? (_jsx("code", { className: "forgebook-inline-code", children: piece.text }, index)) : (piece.text));
|
|
@@ -14,7 +14,7 @@ export const CompareGrid = ({ story, title, view, frameUrl, framed, heights, set
|
|
|
14
14
|
const catalogue = useCatalogue();
|
|
15
15
|
const { switches } = catalogue;
|
|
16
16
|
const isSystemDark = useSystemDark();
|
|
17
|
-
return (_jsx("div", { className: "forgebook-compare", ...framed?.parts.compareGridProps(framed.drawing), children: compareVariants(view.compare, catalogue).map((variant) => {
|
|
17
|
+
return (_jsx("div", { className: "forgebook-compare", ...framed?.parts.compareGridProps(framed.drawing), children: compareVariants(view.compare, catalogue, view).map((variant) => {
|
|
18
18
|
const cellView = variant.viewOf(view);
|
|
19
19
|
// the label (the shell's text) reads on the page's colour, or on the shell's around a device, whose screen
|
|
20
20
|
// has it; the frame draws the backdrop
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A component's page, as a library documents a component: what it is, its demo (the story marked `main`) with
|
|
2
|
+
* A component's page, as a library documents a component: its status, what it is, its demo (the story marked `main`) with
|
|
3
3
|
* its code, the text of its documentation file, its API reference drawn from its types, then every other story as an
|
|
4
4
|
* example.
|
|
5
5
|
*
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { lazy, Suspense, useEffect, useMemo, useRef } from "react";
|
|
3
3
|
import { groupLabel } from "../catalogue.js";
|
|
4
4
|
import { codeNameOf } from "../componentDocs.js";
|
|
5
|
+
import { hasFilterTags } from "../storyTagNames.js";
|
|
5
6
|
import { groupedStories, isLogicComponent, mainStory } from "../storyTree.js";
|
|
6
7
|
import { usageLoader } from "../usedIn.js";
|
|
7
8
|
import { viewParams } from "../viewState.js";
|
|
@@ -13,6 +14,7 @@ import { Example } from "./Example.js";
|
|
|
13
14
|
import { LATER_STRINGS } from "./laterStrings.js";
|
|
14
15
|
import { LazyView, lazyModule } from "./lazyModule.js";
|
|
15
16
|
import { PackageHtml } from "./PackageHtml.js";
|
|
17
|
+
import { PageTagView } from "./pageTagView.js";
|
|
16
18
|
import { UsedIn } from "./UsedIn.js";
|
|
17
19
|
import { useComponentDocs } from "./useComponentDocs.js";
|
|
18
20
|
import { usePageDoc } from "./usePageDoc.js";
|
|
@@ -97,6 +99,8 @@ export const ComponentPage = ({ component, anchor, view, touchOverrides, onTouch
|
|
|
97
99
|
const demo = mainStory(component);
|
|
98
100
|
const examples = useMemo(() => component.stories.filter((story) => story.id !== demo?.id), [component, demo]);
|
|
99
101
|
const catalogue = useCatalogue();
|
|
102
|
+
// statuses are tags: a catalogue with none draws none, and loads nothing for them
|
|
103
|
+
const hasTags = useMemo(() => hasFilterTags(tree), [tree]);
|
|
100
104
|
// the demo first in the queue, at the top of the page, and counted in it: a frame of a library served as source asks
|
|
101
105
|
// for thousands of modules, and one more beside those the queue allows makes the browser refuse some of them
|
|
102
106
|
const queued = useMemo(() => [...(demo === undefined ? [] : [demo.id]), ...examples.map((story) => story.id)], [demo, examples]);
|
|
@@ -159,5 +163,5 @@ export const ComponentPage = ({ component, anchor, view, touchOverrides, onTouch
|
|
|
159
163
|
usedIn,
|
|
160
164
|
pageRef
|
|
161
165
|
};
|
|
162
|
-
return (_jsxs("div", { className: "forgebook-workspace", children: [header, anchor === undefined ? null : (_jsx(Suspense, { fallback: null, children: _jsx(AnchorScroll, { pageRef: pageRef, anchor: anchor, visit: scroll.visit, isReady: docs.status !== "loading" && page.status !== "loading" }) })), _jsx("div", { ref: pageRef, className: "forgebook-scroll", children: _jsxs("div", { className: "forgebook-doc", "data-audience": view.audience === "everyone" ? undefined : view.audience, children: [_jsx(AudienceSlot, { place: "beforeDemo", audience: audienceProps, children: _jsx(Lead, { page: page, docs: componentDocs }) }), demo === undefined ? null : (_jsx(Example, { ...context, story: demo, isDemo: true, isMounted: queue.mounted.has(demo.id), observe: queue.observerOf(demo.id) })), _jsxs(AudienceSlot, { place: "afterDemo", audience: audienceProps, children: [_jsx(Prose, { page: page }), _jsx(PageApi, { docs: componentDocs, isLogic: isLogic, componentGroups: component.propGroups, requiredFirst: component.requiredFirst })] }), examples.length === 0 ? null : (_jsxs("section", { className: "forgebook-doc__section", "aria-labelledby": "forgebook-examples", children: [_jsx("h2", { id: "forgebook-examples", children: LATER_STRINGS.examples }), groupedStories(examples, catalogue.storyGroups.map((group) => group.id)).map((section) => (_jsxs("section", { className: "forgebook-doc__group", children: [section.group === undefined ? null : (_jsx("h3", { className: "forgebook-doc__group-name", children: groupLabel(catalogue.storyGroups, section.group) })), section.stories.map((story) => (_jsx(Example, { ...context, story: story, isDemo: false, isMounted: queue.mounted.has(story.id), observe: queue.observerOf(story.id) }, story.id)))] }, section.group ?? "")))] })), _jsx(AudienceSlot, { place: "afterExamples", audience: audienceProps, children: usedIn === undefined ? null : _jsx(UsedIn, { title: component.title, ...usedIn }) })] }, `${component.file}|${component.title}`) })] }));
|
|
166
|
+
return (_jsxs("div", { className: "forgebook-workspace", children: [header, anchor === undefined ? null : (_jsx(Suspense, { fallback: null, children: _jsx(AnchorScroll, { pageRef: pageRef, anchor: anchor, visit: scroll.visit, isReady: docs.status !== "loading" && page.status !== "loading" }) })), _jsx("div", { ref: pageRef, className: "forgebook-scroll", children: _jsxs("div", { className: "forgebook-doc", "data-audience": view.audience === "everyone" ? undefined : view.audience, children: [hasTags ? _jsx(PageTagView, { place: "page", component: component, loadDocs: loadDocs }) : null, _jsx(AudienceSlot, { place: "beforeDemo", audience: audienceProps, children: _jsx(Lead, { page: page, docs: componentDocs }) }), demo === undefined ? null : (_jsx(Example, { ...context, story: demo, isDemo: true, isMounted: queue.mounted.has(demo.id), observe: queue.observerOf(demo.id) })), _jsxs(AudienceSlot, { place: "afterDemo", audience: audienceProps, children: [_jsx(Prose, { page: page }), _jsx(PageApi, { docs: componentDocs, isLogic: isLogic, componentGroups: component.propGroups, requiredFirst: component.requiredFirst })] }), examples.length === 0 ? null : (_jsxs("section", { className: "forgebook-doc__section", "aria-labelledby": "forgebook-examples", children: [_jsx("h2", { id: "forgebook-examples", children: LATER_STRINGS.examples }), groupedStories(examples, catalogue.storyGroups.map((group) => group.id)).map((section) => (_jsxs("section", { className: "forgebook-doc__group", children: [section.group === undefined ? null : (_jsx("h3", { className: "forgebook-doc__group-name", children: groupLabel(catalogue.storyGroups, section.group) })), section.stories.map((story) => (_jsx(Example, { ...context, story: story, isDemo: false, titleTag: section.group === undefined ? "h3" : "h4", isMounted: queue.mounted.has(story.id), observe: queue.observerOf(story.id) }, story.id)))] }, section.group ?? "")))] })), _jsx(AudienceSlot, { place: "afterExamples", audience: audienceProps, children: usedIn === undefined ? null : _jsx(UsedIn, { title: component.title, ...usedIn }) })] }, `${component.file}|${component.title}`) })] }));
|
|
163
167
|
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The element a custom control draws in, and what stands between it and the panel: its value checked both ways, and its
|
|
3
|
+
* failures kept beside the field. Loaded with the first story that names such a control.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The control keeps what it draws: mounting it again on each of its own changes would take the focus out of it. So it is
|
|
7
|
+
* mounted again only when the value differs from the one it last gave, which is a change from outside (Reset, a link). An error it throws later, in its own event handler, is out of reach here: the page's own, as a plugin's.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { type ReactNode } from "react";
|
|
12
|
+
import type { PanelProp } from "../argTypes.ts";
|
|
13
|
+
import { type ArgValue } from "../messages.ts";
|
|
14
|
+
import { type ArgControlLoaders } from "./customControls.ts";
|
|
15
|
+
import type { OnValueChange } from "./PropFields.tsx";
|
|
16
|
+
/** The host's props. */
|
|
17
|
+
export type CustomControlProps = {
|
|
18
|
+
/** The prop. */
|
|
19
|
+
readonly prop: PanelProp;
|
|
20
|
+
/** The name of the control it asks for. */
|
|
21
|
+
readonly name: string;
|
|
22
|
+
/** Its value. */
|
|
23
|
+
readonly value: ArgValue | undefined;
|
|
24
|
+
/** The catalogue's custom controls. */
|
|
25
|
+
readonly loaders: ArgControlLoaders;
|
|
26
|
+
/** Called with a changed value. */
|
|
27
|
+
readonly onValueChange: OnValueChange;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* A custom control, or why there is none.
|
|
31
|
+
*
|
|
32
|
+
* @param props - the prop, the control's name, its value, and the catalogue's controls.
|
|
33
|
+
*/
|
|
34
|
+
export declare const CustomControl: ({ loaders, ...props }: CustomControlProps) => ReactNode;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* The element a custom control draws in, and what stands between it and the panel: its value checked both ways, and its
|
|
4
|
+
* failures kept beside the field. Loaded with the first story that names such a control.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* The control keeps what it draws: mounting it again on each of its own changes would take the focus out of it. So it is
|
|
8
|
+
* mounted again only when the value differs from the one it last gave, which is a change from outside (Reset, a link). An error it throws later, in its own event handler, is out of reach here: the page's own, as a plugin's.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { useEffect, useRef, useState } from "react";
|
|
13
|
+
import { isArgValue, UNSET_ARG } from "../messages.js";
|
|
14
|
+
import { CONTROL_STRINGS, controlValueProblem, loadControl } from "./customControls.js";
|
|
15
|
+
/** What a control is told of its arg. */
|
|
16
|
+
const argTypeOf = (prop) => ({
|
|
17
|
+
name: prop.name,
|
|
18
|
+
label: prop.label ?? prop.name,
|
|
19
|
+
description: prop.description,
|
|
20
|
+
...(prop.choices === undefined ? {} : { options: prop.choices }),
|
|
21
|
+
...(prop.min === undefined ? {} : { min: prop.min }),
|
|
22
|
+
...(prop.max === undefined ? {} : { max: prop.max }),
|
|
23
|
+
...(prop.step === undefined ? {} : { step: prop.step }),
|
|
24
|
+
// the frame's word, read here since only a control needs it: what is no plain data never reaches a control
|
|
25
|
+
...(prop.settings === undefined || !isArgValue(prop.settings) ? {} : { settings: prop.settings })
|
|
26
|
+
});
|
|
27
|
+
/** The value as text, to tell whether it is still the one the control gave. */
|
|
28
|
+
const textOf = (value) => JSON.stringify(value) ?? "";
|
|
29
|
+
/** A value a control gave, checked: what to send, or what is wrong with it. */
|
|
30
|
+
const checkedChange = (module, next) => {
|
|
31
|
+
if (next === undefined)
|
|
32
|
+
return { value: undefined };
|
|
33
|
+
if (!isArgValue(next))
|
|
34
|
+
return { problem: "not plain JSON" };
|
|
35
|
+
const problem = controlValueProblem(module, next);
|
|
36
|
+
return problem === undefined ? { value: next } : { problem };
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The element one mount of a control draws in. It is given a new key for each mount, so nothing it holds outlives one.
|
|
40
|
+
*
|
|
41
|
+
* @param props - the module, the value it starts from, and what it reports to.
|
|
42
|
+
*/
|
|
43
|
+
const ControlRoom = ({ module, name, value, argType, onAccepted, onProblem }) => {
|
|
44
|
+
const element = useRef(null);
|
|
45
|
+
const start = useRef({ value, argType, onAccepted, onProblem });
|
|
46
|
+
start.current = { value, argType, onAccepted, onProblem };
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
const host = element.current;
|
|
49
|
+
if (host === null)
|
|
50
|
+
return;
|
|
51
|
+
const { value: shown, argType: told, onProblem: say } = start.current;
|
|
52
|
+
const refusal = shown === undefined ? undefined : controlValueProblem(module, shown);
|
|
53
|
+
say(refusal === undefined ? undefined : CONTROL_STRINGS.controlValue(name, refusal));
|
|
54
|
+
let isMounted = true;
|
|
55
|
+
let unmount;
|
|
56
|
+
try {
|
|
57
|
+
unmount = module.mount(host, {
|
|
58
|
+
// what does not fit never reaches a control that wrote its schema so as not to expect it
|
|
59
|
+
value: refusal === undefined ? shown : undefined,
|
|
60
|
+
onChange: (next) => {
|
|
61
|
+
if (!isMounted)
|
|
62
|
+
return;
|
|
63
|
+
const change = checkedChange(module, next);
|
|
64
|
+
if ("problem" in change)
|
|
65
|
+
start.current.onProblem(CONTROL_STRINGS.controlValue(name, change.problem));
|
|
66
|
+
else {
|
|
67
|
+
start.current.onProblem(undefined);
|
|
68
|
+
start.current.onAccepted(change.value);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
argType: told
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
say(CONTROL_STRINGS.controlThrew(name, error instanceof Error ? error.message : String(error)));
|
|
76
|
+
}
|
|
77
|
+
return () => {
|
|
78
|
+
isMounted = false;
|
|
79
|
+
// after this commit: a control written in React cannot take its own root away while the shell's is rendering
|
|
80
|
+
queueMicrotask(() => {
|
|
81
|
+
try {
|
|
82
|
+
if (typeof unmount === "function")
|
|
83
|
+
unmount();
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// it is leaving: there is no field left to say so beside, and the next mount says what is still wrong
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
}, [module, name]);
|
|
91
|
+
return _jsx("div", { ref: element, className: "forgebook-custom-control", "data-control": name });
|
|
92
|
+
};
|
|
93
|
+
/** A loaded control, and what it last said. */
|
|
94
|
+
const MountedControl = ({ module, prop, name, value, onValueChange }) => {
|
|
95
|
+
const [problem, setProblem] = useState(undefined);
|
|
96
|
+
const given = useRef(textOf(value));
|
|
97
|
+
// counts the changes from outside: each is a new mount, which reads the value of its moment
|
|
98
|
+
const [mounts, setMounts] = useState(0);
|
|
99
|
+
if (textOf(value) !== given.current) {
|
|
100
|
+
given.current = textOf(value);
|
|
101
|
+
setMounts(mounts + 1);
|
|
102
|
+
}
|
|
103
|
+
const argType = argTypeOf(prop);
|
|
104
|
+
return (_jsxs(_Fragment, { children: [_jsx(ControlRoom, { module: module, name: name, value: value, argType: argType, onProblem: setProblem, onAccepted: (next) => {
|
|
105
|
+
given.current = textOf(next);
|
|
106
|
+
onValueChange(prop.name, next ?? UNSET_ARG);
|
|
107
|
+
} }, `${mounts}|${JSON.stringify(argType)}`), problem === undefined ? null : (_jsx("p", { className: "forgebook-prop__description forgebook-prop__problem", role: "alert", children: problem }))] }));
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* A custom control, or why there is none.
|
|
111
|
+
*
|
|
112
|
+
* @param props - the prop, the control's name, its value, and the catalogue's controls.
|
|
113
|
+
*/
|
|
114
|
+
export const CustomControl = ({ loaders, ...props }) => {
|
|
115
|
+
const [loaded, setLoaded] = useState(undefined);
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
let isCurrent = true;
|
|
118
|
+
void loadControl(props.name, loaders).then((control) => {
|
|
119
|
+
if (isCurrent)
|
|
120
|
+
setLoaded(control);
|
|
121
|
+
});
|
|
122
|
+
return () => {
|
|
123
|
+
isCurrent = false;
|
|
124
|
+
};
|
|
125
|
+
}, [props.name, loaders]);
|
|
126
|
+
if (loaded === undefined)
|
|
127
|
+
return null;
|
|
128
|
+
if (loaded.status === "failed") {
|
|
129
|
+
return (_jsx("p", { className: "forgebook-prop__description forgebook-prop__problem", role: "alert", children: loaded.message }));
|
|
130
|
+
}
|
|
131
|
+
return _jsx(MountedControl, { ...props, module: loaded.module });
|
|
132
|
+
};
|
|
@@ -22,7 +22,7 @@ import { useSyncedTab } from "./useSyncedTab.js";
|
|
|
22
22
|
*/
|
|
23
23
|
export const AsideBlock = ({ tone, title, children }) => {
|
|
24
24
|
const id = useId();
|
|
25
|
-
return (_jsxs("aside", { className: "forgebook-aside", "data-tone": tone, "aria-labelledby": id, children: [_jsx("p", { id: id, className: "forgebook-aside__title", children: title ?? PAGE_STRINGS.asides[tone] }), children] }));
|
|
25
|
+
return (_jsxs("aside", { className: "forgebook-aside", role: "note", "data-tone": tone, "aria-labelledby": id, children: [_jsx("p", { id: id, className: "forgebook-aside__title", children: title ?? PAGE_STRINGS.asides[tone] }), children] }));
|
|
26
26
|
};
|
|
27
27
|
/**
|
|
28
28
|
* The tab a key moves to in a tab list: the next or the one before, round the ends, or the first or the last.
|
|
@@ -21,8 +21,8 @@ import { useCatalogue } from "./catalogueContext.js";
|
|
|
21
21
|
import { blockPlaces, catalogueValues, DocBlocks, queuedBlocks } from "./DocBlocks.js";
|
|
22
22
|
import { DocContents } from "./DocContents.js";
|
|
23
23
|
import { Icon } from "./icons.js";
|
|
24
|
+
import { LATER_STRINGS } from "./laterStrings.js";
|
|
24
25
|
import { PAGE_STRINGS } from "./pageStrings.js";
|
|
25
|
-
import { STRINGS } from "./strings.js";
|
|
26
26
|
import { useAnchorScroll } from "./useAnchorScroll.js";
|
|
27
27
|
import { useLoaded } from "./useLoaded.js";
|
|
28
28
|
import { usePageFrames } from "./usePageFrames.js";
|
|
@@ -58,7 +58,7 @@ const PageFoot = ({ previous, next, hrefOf, onOpen }) => {
|
|
|
58
58
|
event.preventDefault();
|
|
59
59
|
onOpen(page.id);
|
|
60
60
|
}, children: [_jsx("span", { className: "forgebook-docs__around-label", children: label }), _jsxs("span", { className: "forgebook-docs__around-name", children: [page.name, side === "next" ? _jsx(Icon, { name: "chevronRight", size: 12 }) : null] })] }));
|
|
61
|
-
return previous === undefined && next === undefined ? null : (_jsxs("nav", { className: "forgebook-docs__foot", "aria-label":
|
|
61
|
+
return previous === undefined && next === undefined ? null : (_jsxs("nav", { className: "forgebook-docs__foot", "aria-label": LATER_STRINGS.docsNav, children: [link(previous, PAGE_STRINGS.previousPage, "previous"), link(next, PAGE_STRINGS.nextPage, "next")] }));
|
|
62
62
|
};
|
|
63
63
|
/**
|
|
64
64
|
* The page's width, followed as the window or the sidebar changes it.
|
|
@@ -15,8 +15,8 @@ import type { DroppedArg } from "../addressArgs.ts";
|
|
|
15
15
|
export type DroppedArgsListProps = {
|
|
16
16
|
/** The values left out. */
|
|
17
17
|
readonly dropped: readonly DroppedArg[];
|
|
18
|
-
/** Removes them from the address. */
|
|
19
|
-
readonly onRemove
|
|
18
|
+
/** Removes them from the address; none where nothing can rewrite it (an embed's is its author's). */
|
|
19
|
+
readonly onRemove?: () => void;
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* The note.
|
|
@@ -5,4 +5,4 @@ import { LATER_STRINGS } from "./laterStrings.js";
|
|
|
5
5
|
*
|
|
6
6
|
* @param props - the values left out and the remover.
|
|
7
7
|
*/
|
|
8
|
-
export const DroppedArgsList = ({ dropped, onRemove }) => (_jsxs("div", { className: "forgebook-dropped-args", role: "status", children: [_jsx("p", { className: "forgebook-dropped-args__text", children: LATER_STRINGS.droppedArgs }), _jsx("ul", { className: "forgebook-dropped-args__list", children: dropped.map(({ name, reason }) => (_jsxs("li", { children: [_jsx("code", { children: name }), " ", LATER_STRINGS.droppedArgReasons[reason]] }, name))) }), _jsx("button", { type: "button", className: "forgebook-text-button", onClick: onRemove, children: LATER_STRINGS.removeDroppedArgs })] }));
|
|
8
|
+
export const DroppedArgsList = ({ dropped, onRemove }) => (_jsxs("div", { className: "forgebook-dropped-args", role: "status", children: [_jsx("p", { className: "forgebook-dropped-args__text", children: LATER_STRINGS.droppedArgs }), _jsx("ul", { className: "forgebook-dropped-args__list", children: dropped.map(({ name, reason }) => (_jsxs("li", { children: [_jsx("code", { children: name }), " ", LATER_STRINGS.droppedArgReasons[reason]] }, name))) }), onRemove === undefined ? null : (_jsx("button", { type: "button", className: "forgebook-text-button", onClick: onRemove, children: LATER_STRINGS.removeDroppedArgs }))] }));
|
|
@@ -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 {};
|