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
package/dist/src/addressArgs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { panelProps, settableProps } from "./argTypes.js";
|
|
2
|
-
import { isChoiceList, isNamedArg } from "./messages.js";
|
|
2
|
+
import { isChoiceList, isNamedArg, isUnsetArg } from "./messages.js";
|
|
3
3
|
import { namedValueOf } from "./namedValues.js";
|
|
4
4
|
/** What only this module can write on values: the type system's proof that they went through the check. */
|
|
5
5
|
const ACCEPTED = Symbol("accepted");
|
|
@@ -17,8 +17,10 @@ const propOfStoryArg = (name, value) => {
|
|
|
17
17
|
// a named value keeps the type it is offered for, so only another value named for it is taken
|
|
18
18
|
if (isNamedArg(value))
|
|
19
19
|
return { ...prop, kind: "other", type: value.of };
|
|
20
|
-
// a
|
|
21
|
-
|
|
20
|
+
// a `null`'s type is not known: nothing the address names is taken for it
|
|
21
|
+
if (value === null)
|
|
22
|
+
return undefined;
|
|
23
|
+
return { ...prop, kind: "other", shape: { kind: "like", value } };
|
|
22
24
|
};
|
|
23
25
|
/**
|
|
24
26
|
* The props the panel sets for a story, whatever the address says: the component's props with the `argTypes` over
|
|
@@ -36,12 +38,21 @@ export const declaredArgProps = (declaration) => {
|
|
|
36
38
|
const prop = propOfStoryArg(name, value);
|
|
37
39
|
return prop === undefined ? [] : [prop];
|
|
38
40
|
});
|
|
39
|
-
return settableProps([...panelProps(props, argTypes), ...ownProps], controls, namedValues);
|
|
41
|
+
return settableProps([...panelProps(props, argTypes, storyArgs), ...ownProps], controls, namedValues);
|
|
40
42
|
};
|
|
41
43
|
/** Whether a value is a finite number: what a number field sets (an address's JSON has no `NaN` anyway). */
|
|
42
44
|
const isFiniteNumber = (value) => typeof value === "number" && Number.isFinite(value);
|
|
43
45
|
/** Whether a value is one of a choice's options. */
|
|
44
46
|
const isOption = (prop, value) => (typeof value === "string" || typeof value === "number") && (prop.choices ?? []).includes(value);
|
|
47
|
+
/**
|
|
48
|
+
* Whether a prop's values are checked by `shapeValues.ts`.
|
|
49
|
+
*
|
|
50
|
+
* @param prop - a prop the panel sets.
|
|
51
|
+
*/
|
|
52
|
+
export const needsShapeChecks = (prop) => prop.customControl !== undefined ||
|
|
53
|
+
prop.control === "file" ||
|
|
54
|
+
prop.control === "object" ||
|
|
55
|
+
(prop.control === undefined && prop.kind === "other" && prop.shape !== undefined);
|
|
45
56
|
/**
|
|
46
57
|
* Whether a value is one the panel could set for a prop: of the control the `argTypes` name, otherwise of the prop's
|
|
47
58
|
* kind.
|
|
@@ -49,8 +60,9 @@ const isOption = (prop, value) => (typeof value === "string" || typeof value ===
|
|
|
49
60
|
* @param prop - a prop the panel sets.
|
|
50
61
|
* @param value - the address's value.
|
|
51
62
|
* @param namedValues - the source's named values.
|
|
63
|
+
* @param shapes - what checks a value against a shape; none refuses a prop that needs it.
|
|
52
64
|
*/
|
|
53
|
-
export const isValueOfProp = (prop, value, namedValues) => {
|
|
65
|
+
export const isValueOfProp = (prop, value, namedValues, shapes) => {
|
|
54
66
|
switch (prop.control) {
|
|
55
67
|
case "select":
|
|
56
68
|
case "radio":
|
|
@@ -67,6 +79,13 @@ export const isValueOfProp = (prop, value, namedValues) => {
|
|
|
67
79
|
case "range":
|
|
68
80
|
case "date":
|
|
69
81
|
return isFiniteNumber(value);
|
|
82
|
+
case "textarea":
|
|
83
|
+
case "token":
|
|
84
|
+
return typeof value === "string";
|
|
85
|
+
case "object":
|
|
86
|
+
return prop.shape !== undefined && shapes?.isValueOfShape(prop.shape, value, namedValues) === true;
|
|
87
|
+
case "file":
|
|
88
|
+
return shapes?.isFileList(value) === true;
|
|
70
89
|
case "none":
|
|
71
90
|
return false;
|
|
72
91
|
case undefined:
|
|
@@ -82,35 +101,58 @@ export const isValueOfProp = (prop, value, namedValues) => {
|
|
|
82
101
|
case "toggle":
|
|
83
102
|
return typeof value === "boolean";
|
|
84
103
|
case "other":
|
|
85
|
-
if (isNamedArg(value)
|
|
86
|
-
|
|
87
|
-
|
|
104
|
+
if (isNamedArg(value) &&
|
|
105
|
+
value.of === prop.type &&
|
|
106
|
+
namedValueOf(namedValues, value.of, value.named) !== undefined)
|
|
107
|
+
return true;
|
|
108
|
+
if (prop.shape !== undefined && shapes?.isValueOfShape(prop.shape, value, namedValues) === true)
|
|
109
|
+
return true;
|
|
88
110
|
return prop.canTakeText === true && typeof value === "string";
|
|
89
111
|
case "event":
|
|
90
112
|
return false;
|
|
91
113
|
}
|
|
92
114
|
};
|
|
115
|
+
/** Whether a custom control takes a value: it loaded, and its check finds nothing wrong. */
|
|
116
|
+
const fitsControl = (custom, control, value) => Object.hasOwn(custom, control) && custom[control]?.(value) === undefined;
|
|
117
|
+
/** What becomes of a value for a prop the panel sets: the story takes it, it waits for its check, or why it is left out. */
|
|
118
|
+
const verdictOf = (prop, value, { namedValues, checks }) => {
|
|
119
|
+
if (isUnsetArg(value))
|
|
120
|
+
return "taken";
|
|
121
|
+
if (checks === undefined && needsShapeChecks(prop))
|
|
122
|
+
return "waiting";
|
|
123
|
+
if (prop.customControl !== undefined)
|
|
124
|
+
return fitsControl(checks?.custom ?? {}, prop.customControl, value) ? "taken" : "control";
|
|
125
|
+
return isValueOfProp(prop, value, namedValues, checks) ? "taken" : "type";
|
|
126
|
+
};
|
|
93
127
|
/**
|
|
94
128
|
* The address's values the story receives, and those left out with the reason.
|
|
95
129
|
*
|
|
96
130
|
* @param args - the values the address names.
|
|
97
131
|
* @param declaration - what the story declares.
|
|
132
|
+
* @param typeValue - types a value for its prop, for a link whose form does not say (`storybookArgs.ts`); none takes each
|
|
133
|
+
* as written.
|
|
134
|
+
* @param checks - what checks a structured value, a custom control's among them; none leaves such a value waiting.
|
|
98
135
|
*/
|
|
99
|
-
export const checkedAddressArgs = (args, declaration) => {
|
|
136
|
+
export const checkedAddressArgs = (args, declaration, typeValue, checks) => {
|
|
100
137
|
const declared = declaredArgProps(declaration);
|
|
101
138
|
const accepted = [];
|
|
102
139
|
const dropped = [];
|
|
103
|
-
|
|
140
|
+
let isWaiting = false;
|
|
141
|
+
for (const [name, written] of Object.entries(args)) {
|
|
104
142
|
const prop = declared.find((each) => each.name === name);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
143
|
+
const value = prop !== undefined && typeValue !== undefined ? typeValue(prop, written) : written;
|
|
144
|
+
const verdict = prop === undefined
|
|
145
|
+
? "undeclared"
|
|
146
|
+
: verdictOf(prop, value, { namedValues: declaration.namedValues, checks });
|
|
147
|
+
if (verdict === "taken")
|
|
110
148
|
accepted.push([name, value]);
|
|
149
|
+
else if (verdict === "waiting")
|
|
150
|
+
isWaiting = true;
|
|
151
|
+
else
|
|
152
|
+
dropped.push({ name, reason: verdict });
|
|
111
153
|
}
|
|
112
154
|
const values = Object.fromEntries(accepted);
|
|
113
|
-
return { accepted: values, dropped, sealed: { values, [ACCEPTED]: true } };
|
|
155
|
+
return { accepted: values, dropped, isWaiting, sealed: { values, [ACCEPTED]: true } };
|
|
114
156
|
};
|
|
115
157
|
/**
|
|
116
158
|
* The message that gives a frame its values.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `args` parameter of an address, in either form it comes in: Forgebook's own JSON (`{"label":"Hi","count":5}`), or
|
|
3
|
+
* Storybook's (`label:Hi;count:5`), which a link from before a move to Forgebook carries. Pure.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The two are told apart by their first character: JSON's is `{`, and in Storybook's form a parameter starts with an
|
|
7
|
+
* arg's name, which cannot hold one. Only JSON is read here: such a link is rare, so its reader (`storybookArgs.ts`) loads
|
|
8
|
+
* when one is opened, and until then the address's values are none.
|
|
9
|
+
*
|
|
10
|
+
* A value that cannot be held is named in `unread`, never lost silently. Nor is one bad entry a reason to lose the others:
|
|
11
|
+
* each is read on its own.
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import type { PanelProp } from "./argTypes.ts";
|
|
16
|
+
import { type ArgValue, type PanelArgs } from "./messages.ts";
|
|
17
|
+
/**
|
|
18
|
+
* What an address's `args` still has to say once read, when it is not plain JSON of readable values. Kept until the
|
|
19
|
+
* person changes a value, since the address must go on saying the same: Storybook's unmarked values have no JSON form
|
|
20
|
+
* until they are typed.
|
|
21
|
+
*/
|
|
22
|
+
export type AddressLink = {
|
|
23
|
+
/** The parameter as the address writes it. */
|
|
24
|
+
readonly param: string;
|
|
25
|
+
/** Whether it is Storybook's form and its reader has not loaded yet: its values are still to come. */
|
|
26
|
+
readonly isWaiting: boolean;
|
|
27
|
+
/** Types one of its values for the prop that receives it, for a form that does not say; none for JSON, which does. */
|
|
28
|
+
readonly typeValue?: (prop: PanelProp, value: ArgValue) => ArgValue;
|
|
29
|
+
/** The names of the values that could not be read; `args` for a parameter that could not be read at all. */
|
|
30
|
+
readonly unread: readonly string[];
|
|
31
|
+
/** The names of the values the framework's stories cannot take from an address (`addressTexts.ts`); none by default. */
|
|
32
|
+
readonly refused?: readonly string[];
|
|
33
|
+
};
|
|
34
|
+
/** An address's `args` once read. */
|
|
35
|
+
export type ArgsParamRead = {
|
|
36
|
+
/** The values read: as they will be checked, none of them yet known to be the story's. */
|
|
37
|
+
readonly args: PanelArgs;
|
|
38
|
+
/** What else the address says; none for plain JSON, or no parameter. */
|
|
39
|
+
readonly link: AddressLink | undefined;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* What an address's `args` names, as far as the first screen reads it.
|
|
43
|
+
*
|
|
44
|
+
* @param param - the `args` parameter, decoded as `URLSearchParams` gives it.
|
|
45
|
+
*/
|
|
46
|
+
export declare const readArgsParam: (param: string | null) => ArgsParamRead;
|
|
47
|
+
/**
|
|
48
|
+
* What a link waiting for Storybook's reader names, once it has loaded.
|
|
49
|
+
*
|
|
50
|
+
* @param param - the parameter.
|
|
51
|
+
* @param read - turns it into values: the reader's own, or one that types them for a page with no declaration.
|
|
52
|
+
* @returns what it names; the whole parameter unread when the reader cannot load.
|
|
53
|
+
*/
|
|
54
|
+
export declare const readStorybookLink: (param: string, read: (module: typeof import("./storybookArgs.ts"), param: string) => ArgsParamRead) => Promise<ArgsParamRead>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { isArgValue } from "./messages.js";
|
|
2
|
+
/** The name of a parameter that could not be read at all. */
|
|
3
|
+
const WHOLE_PARAMETER = "args";
|
|
4
|
+
/**
|
|
5
|
+
* Forgebook's own form, read entry by entry.
|
|
6
|
+
*
|
|
7
|
+
* @param param - the parameter.
|
|
8
|
+
*/
|
|
9
|
+
const readJsonArgs = (param) => {
|
|
10
|
+
let value;
|
|
11
|
+
try {
|
|
12
|
+
value = JSON.parse(param);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return { args: {}, link: { param, isWaiting: false, unread: [WHOLE_PARAMETER] } };
|
|
16
|
+
}
|
|
17
|
+
const entries = typeof value === "object" && value !== null ? Object.entries(value) : [];
|
|
18
|
+
const unread = entries.filter(([, each]) => !isArgValue(each)).map(([name]) => name);
|
|
19
|
+
const read = entries.flatMap(([name, each]) => isArgValue(each) ? [[name, each]] : []);
|
|
20
|
+
return {
|
|
21
|
+
args: Object.fromEntries(read),
|
|
22
|
+
link: unread.length === 0 ? undefined : { param, isWaiting: false, unread }
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* What an address's `args` names, as far as the first screen reads it.
|
|
27
|
+
*
|
|
28
|
+
* @param param - the `args` parameter, decoded as `URLSearchParams` gives it.
|
|
29
|
+
*/
|
|
30
|
+
export const readArgsParam = (param) => {
|
|
31
|
+
if (param === null || param === "")
|
|
32
|
+
return { args: {}, link: undefined };
|
|
33
|
+
return param.trimStart().startsWith("{")
|
|
34
|
+
? readJsonArgs(param)
|
|
35
|
+
: { args: {}, link: { param, isWaiting: true, unread: [] } };
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* What a link waiting for Storybook's reader names, once it has loaded.
|
|
39
|
+
*
|
|
40
|
+
* @param param - the parameter.
|
|
41
|
+
* @param read - turns it into values: the reader's own, or one that types them for a page with no declaration.
|
|
42
|
+
* @returns what it names; the whole parameter unread when the reader cannot load.
|
|
43
|
+
*/
|
|
44
|
+
export const readStorybookLink = async (param, read) => {
|
|
45
|
+
try {
|
|
46
|
+
return read(await import("./storybookArgs.js"), param);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return { args: {}, link: { param, isWaiting: false, unread: [WHOLE_PARAMETER] } };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @module
|
|
15
15
|
*/
|
|
16
|
+
import type { AddressLink, ArgsParamRead } from "./addressArgsParam.ts";
|
|
16
17
|
import { type PanelArgs } from "./messages.ts";
|
|
17
18
|
/**
|
|
18
19
|
* How a framework's stories take the texts an address carries: `any` where a text stays text (React, Vue), `plain`
|
|
@@ -33,3 +34,16 @@ export declare const isPlainText: (text: string) => boolean;
|
|
|
33
34
|
* @param addressTexts - the framework's rule.
|
|
34
35
|
*/
|
|
35
36
|
export declare const addressArgsFor: (args: PanelArgs, addressTexts: AddressTexts) => PanelArgs;
|
|
37
|
+
/**
|
|
38
|
+
* What an address's `args` gives a story under a framework's rule, and what it says of the values the rule took out, so
|
|
39
|
+
* the note above the story names them as it names what the story's check refuses.
|
|
40
|
+
*
|
|
41
|
+
* @param read - the parameter, once read.
|
|
42
|
+
* @param param - the parameter as the address writes it.
|
|
43
|
+
* @param addressTexts - the framework's rule.
|
|
44
|
+
* @returns the values, and the link they came from.
|
|
45
|
+
*/
|
|
46
|
+
export declare const addressArgsRead: (read: ArgsParamRead, param: string | null, addressTexts: AddressTexts) => {
|
|
47
|
+
readonly panelArgs: PanelArgs;
|
|
48
|
+
readonly link: AddressLink | undefined;
|
|
49
|
+
};
|
package/dist/src/addressTexts.js
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* The texts a catalogue's address may hand a story whose framework writes texts into markup: plain words only.
|
|
3
|
-
*
|
|
4
|
-
* @remarks
|
|
5
|
-
* A link shares the props panel's values in its address (`?args=`), so whoever writes the link chooses them, and the
|
|
6
|
-
* frame runs on the catalogue's own origin. React and Vue put a text into the page as text; a plain HTML story
|
|
7
|
-
* writes it into an HTML string (`<button class="${tone}">${label}</button>` in a template literal), where `<`, a
|
|
8
|
-
* quote or a `javascript:` address becomes markup or code. So for a framework that says its texts may become markup
|
|
9
|
-
* (`FrameworkAdapter.addressTexts`), a value the address carries reaches the story only when its name and its texts
|
|
10
|
-
* are plain: letters and digits of any script, spaces and a few marks that close no tag, attribute or address. The
|
|
11
|
-
* panel's own edits are the person's and are not checked; a link, or a reload of an edit with markup, falls back to
|
|
12
|
-
* the story's own value, as Storybook's address does. Pure.
|
|
13
|
-
*
|
|
14
|
-
* @module
|
|
15
|
-
*/
|
|
16
|
-
import { isNamedArg } from "./messages.js";
|
|
1
|
+
import { isArgList, isArgObject, isNamedArg } from "./messages.js";
|
|
17
2
|
/** A plain text: letters, marks and digits of any script, spaces, and `_ . , ! ? # % + -`. */
|
|
18
3
|
const PLAIN_TEXT = /^[\p{L}\p{M}\p{N} _.,!?#%+-]*$/u;
|
|
19
4
|
/** A plain name: what a script and an attribute both write bare (`label`, `item-count`, `$size`). */
|
|
@@ -26,17 +11,20 @@ const PLAIN_NAME = /^[A-Za-z_$][\w$-]*$/;
|
|
|
26
11
|
*/
|
|
27
12
|
export const isPlainText = (text) => PLAIN_TEXT.test(text);
|
|
28
13
|
/**
|
|
29
|
-
* Whether an address's value can reach a story whose texts may become markup: every text in it plain. A named
|
|
30
|
-
* looked up among the source's own values, so its name is never written into the page.
|
|
14
|
+
* Whether an address's value can reach a story whose texts may become markup: every text and name in it plain. A named
|
|
15
|
+
* value is looked up among the source's own values, so its name is never written into the page.
|
|
31
16
|
*
|
|
32
17
|
* @param value - the value.
|
|
33
18
|
*/
|
|
34
19
|
const isPlainValue = (value) => {
|
|
35
20
|
if (typeof value === "string")
|
|
36
21
|
return isPlainText(value);
|
|
37
|
-
if (
|
|
38
|
-
return value.every(
|
|
39
|
-
|
|
22
|
+
if (isArgList(value))
|
|
23
|
+
return value.every(isPlainValue);
|
|
24
|
+
if (isNamedArg(value) || !isArgObject(value))
|
|
25
|
+
return true;
|
|
26
|
+
// a name is written too, by a story that spreads the object into attributes
|
|
27
|
+
return Object.entries(value).every(([name, each]) => PLAIN_NAME.test(name) && isPlainValue(each));
|
|
40
28
|
};
|
|
41
29
|
/**
|
|
42
30
|
* The address's values a story receives under a framework's rule: all of them, or only those whose texts are plain.
|
|
@@ -49,3 +37,22 @@ export const addressArgsFor = (args, addressTexts) => addressTexts === "any"
|
|
|
49
37
|
: Object.fromEntries(
|
|
50
38
|
// a name is checked too: a story that spreads its args into attributes writes it into the markup
|
|
51
39
|
Object.entries(args).filter(([name, value]) => PLAIN_NAME.test(name) && isPlainValue(value)));
|
|
40
|
+
/**
|
|
41
|
+
* What an address's `args` gives a story under a framework's rule, and what it says of the values the rule took out, so
|
|
42
|
+
* the note above the story names them as it names what the story's check refuses.
|
|
43
|
+
*
|
|
44
|
+
* @param read - the parameter, once read.
|
|
45
|
+
* @param param - the parameter as the address writes it.
|
|
46
|
+
* @param addressTexts - the framework's rule.
|
|
47
|
+
* @returns the values, and the link they came from.
|
|
48
|
+
*/
|
|
49
|
+
export const addressArgsRead = (read, param, addressTexts) => {
|
|
50
|
+
const panelArgs = addressArgsFor(read.args, addressTexts);
|
|
51
|
+
const refused = Object.keys(read.args).filter((name) => !Object.hasOwn(panelArgs, name));
|
|
52
|
+
if (refused.length === 0)
|
|
53
|
+
return { panelArgs, link: read.link };
|
|
54
|
+
return {
|
|
55
|
+
panelArgs,
|
|
56
|
+
link: { param: param ?? "", isWaiting: false, unread: [], ...read.link, refused }
|
|
57
|
+
};
|
|
58
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The name of the index `forgebook build --agent-index` writes beside a built catalogue's pages.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Apart from the index's shape (`vite/agentIndex.ts`), so the shell, which reads a composed catalogue's index, takes
|
|
6
|
+
* the name without the code that answers from it.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
/** The file's name in the built catalogue. */
|
|
11
|
+
export declare const AGENT_INDEX_FILE = "forgebook-agent.json";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The name of the index `forgebook build --agent-index` writes beside a built catalogue's pages.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Apart from the index's shape (`vite/agentIndex.ts`), so the shell, which reads a composed catalogue's index, takes
|
|
6
|
+
* the name without the code that answers from it.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
/** The file's name in the built catalogue. */
|
|
11
|
+
export const AGENT_INDEX_FILE = "forgebook-agent.json";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An arg's condition, `argTypes.<name>.if` (Storybook's): whether the panel shows the arg, from another arg's or a
|
|
3
|
+
* global's value of the moment. Read in the frame, tested in the shell. Pure.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* `{ arg: "kind", eq: "link" }` shows the arg while `kind` is `link`, and `{ global: "theme", neq: "dark" }` reads the
|
|
7
|
+
* view's switch instead. `truthy`, `exists`, `eq` and `neq` test the value, one at a time; none tests that it is truthy. A
|
|
8
|
+
* condition hides an arg's control and nothing else: a value the address or the story sets still reaches the story, as in
|
|
9
|
+
* Storybook. Only what crosses between the documents is kept: a condition comparing with an object or a function, or
|
|
10
|
+
* that names neither an arg nor a global, is not one, and shows the arg.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
/** What a condition can compare a value with. */
|
|
15
|
+
export type ConditionValue = string | number | boolean | null | readonly (string | number)[];
|
|
16
|
+
/** An arg's condition: what it reads, and how it tests it. */
|
|
17
|
+
export type ArgCondition = {
|
|
18
|
+
/** The arg it reads; none when it reads a global. */
|
|
19
|
+
readonly arg?: string;
|
|
20
|
+
/** The global it reads: a switch's id; none when it reads an arg. */
|
|
21
|
+
readonly global?: string;
|
|
22
|
+
/** Whether the value should be truthy (`true`, the default test) or falsy. */
|
|
23
|
+
readonly truthy?: boolean;
|
|
24
|
+
/** Whether the value should be set, or not set. */
|
|
25
|
+
readonly exists?: boolean;
|
|
26
|
+
/** What the value should be. */
|
|
27
|
+
readonly eq?: ConditionValue;
|
|
28
|
+
/** What the value should not be. */
|
|
29
|
+
readonly neq?: ConditionValue;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* An `if` as it crosses between the documents: only the fields it reads, since anything else may be a function, which
|
|
33
|
+
* cannot be sent and would stop the frame from reporting at all.
|
|
34
|
+
*
|
|
35
|
+
* @param value - the entry's `if`.
|
|
36
|
+
* @returns the condition; none when it is not one.
|
|
37
|
+
*/
|
|
38
|
+
export declare const argConditionOf: (value: unknown) => ArgCondition | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Whether a value received from a frame is an arg's condition.
|
|
41
|
+
*
|
|
42
|
+
* @param value - any value.
|
|
43
|
+
*/
|
|
44
|
+
export declare const isArgCondition: (value: unknown) => value is ArgCondition;
|
|
45
|
+
/**
|
|
46
|
+
* Whether the panel shows an arg with a condition.
|
|
47
|
+
*
|
|
48
|
+
* @param condition - its condition; none shows it.
|
|
49
|
+
* @param args - the values of the moment, by arg.
|
|
50
|
+
* @param globals - the values of the switches, by id.
|
|
51
|
+
*/
|
|
52
|
+
export declare const isArgShown: (condition: ArgCondition | undefined, args: Readonly<Record<string, unknown>>, globals: Readonly<Record<string, unknown>>) => boolean;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An arg's condition, `argTypes.<name>.if` (Storybook's): whether the panel shows the arg, from another arg's or a
|
|
3
|
+
* global's value of the moment. Read in the frame, tested in the shell. Pure.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* `{ arg: "kind", eq: "link" }` shows the arg while `kind` is `link`, and `{ global: "theme", neq: "dark" }` reads the
|
|
7
|
+
* view's switch instead. `truthy`, `exists`, `eq` and `neq` test the value, one at a time; none tests that it is truthy. A
|
|
8
|
+
* condition hides an arg's control and nothing else: a value the address or the story sets still reaches the story, as in
|
|
9
|
+
* Storybook. Only what crosses between the documents is kept: a condition comparing with an object or a function, or
|
|
10
|
+
* that names neither an arg nor a global, is not one, and shows the arg.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
/** Whether a value can be compared with: it crosses between the documents, and compares as its JSON. */
|
|
15
|
+
const isConditionValue = (value) => value === null ||
|
|
16
|
+
["string", "number", "boolean"].includes(typeof value) ||
|
|
17
|
+
(Array.isArray(value) && value.every((item) => typeof item === "string" || typeof item === "number"));
|
|
18
|
+
/**
|
|
19
|
+
* An `if` as it crosses between the documents: only the fields it reads, since anything else may be a function, which
|
|
20
|
+
* cannot be sent and would stop the frame from reporting at all.
|
|
21
|
+
*
|
|
22
|
+
* @param value - the entry's `if`.
|
|
23
|
+
* @returns the condition; none when it is not one.
|
|
24
|
+
*/
|
|
25
|
+
export const argConditionOf = (value) => {
|
|
26
|
+
if (typeof value !== "object" || value === null)
|
|
27
|
+
return undefined;
|
|
28
|
+
const arg = Reflect.get(value, "arg");
|
|
29
|
+
const global = Reflect.get(value, "global");
|
|
30
|
+
const truthy = Reflect.get(value, "truthy");
|
|
31
|
+
const exists = Reflect.get(value, "exists");
|
|
32
|
+
const eq = Reflect.get(value, "eq");
|
|
33
|
+
const neq = Reflect.get(value, "neq");
|
|
34
|
+
if ((typeof arg === "string") === (typeof global === "string"))
|
|
35
|
+
return undefined;
|
|
36
|
+
if (eq !== undefined && !isConditionValue(eq))
|
|
37
|
+
return undefined;
|
|
38
|
+
if (neq !== undefined && !isConditionValue(neq))
|
|
39
|
+
return undefined;
|
|
40
|
+
return {
|
|
41
|
+
...(typeof arg === "string" ? { arg } : {}),
|
|
42
|
+
...(typeof global === "string" ? { global } : {}),
|
|
43
|
+
...(typeof truthy === "boolean" ? { truthy } : {}),
|
|
44
|
+
...(typeof exists === "boolean" ? { exists } : {}),
|
|
45
|
+
...(eq === undefined ? {} : { eq }),
|
|
46
|
+
...(neq === undefined ? {} : { neq })
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Whether a value received from a frame is an arg's condition.
|
|
51
|
+
*
|
|
52
|
+
* @param value - any value.
|
|
53
|
+
*/
|
|
54
|
+
export const isArgCondition = (value) => argConditionOf(value) !== undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Whether two values are the same, a list by its items.
|
|
57
|
+
*
|
|
58
|
+
* @param first - one value.
|
|
59
|
+
* @param second - the other.
|
|
60
|
+
*/
|
|
61
|
+
const isSameValue = (first, second) => JSON.stringify(first) === JSON.stringify(second);
|
|
62
|
+
/**
|
|
63
|
+
* Whether the panel shows an arg with a condition.
|
|
64
|
+
*
|
|
65
|
+
* @param condition - its condition; none shows it.
|
|
66
|
+
* @param args - the values of the moment, by arg.
|
|
67
|
+
* @param globals - the values of the switches, by id.
|
|
68
|
+
*/
|
|
69
|
+
export const isArgShown = (condition, args, globals) => {
|
|
70
|
+
if (condition === undefined)
|
|
71
|
+
return true;
|
|
72
|
+
const value = condition.arg === undefined ? globals[condition.global ?? ""] : args[condition.arg];
|
|
73
|
+
if (condition.eq !== undefined)
|
|
74
|
+
return isSameValue(value, condition.eq);
|
|
75
|
+
if (condition.neq !== undefined)
|
|
76
|
+
return !isSameValue(value, condition.neq);
|
|
77
|
+
if (condition.exists !== undefined)
|
|
78
|
+
return condition.exists === (value !== undefined);
|
|
79
|
+
return (condition.truthy ?? true) === Boolean(value);
|
|
80
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A custom control's contract: a module a catalogue registers by name (`argControls` in `forgebook.config`) and a story
|
|
3
|
+
* uses as `argTypes: { x: { control: "name" } }`.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* `mount` rather than a component, so a team writes one in whatever its stories are written in: the shell knows nothing of
|
|
7
|
+
* how it draws. The value is always JSON with a declared schema, so a link keeps working and an agent can set it with no
|
|
8
|
+
* UI. The module runs in the shell's page, with a plugin's trust.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import type { JsonValue } from "./plugin.ts";
|
|
13
|
+
/** The types a value may be, as JSON Schema names them. */
|
|
14
|
+
export type SchemaType = "string" | "number" | "integer" | "boolean" | "null" | "object" | "array";
|
|
15
|
+
/**
|
|
16
|
+
* What a custom control's value looks like: a part of JSON Schema. A keyword outside this type is refused rather than
|
|
17
|
+
* ignored: a schema that says less than it seems to would let a link through.
|
|
18
|
+
*/
|
|
19
|
+
export type ValueSchema = {
|
|
20
|
+
/** What it is, for a reader. */
|
|
21
|
+
readonly title?: string;
|
|
22
|
+
/** What it is for, for a reader. */
|
|
23
|
+
readonly description?: string;
|
|
24
|
+
/** What it holds at first, for a reader. */
|
|
25
|
+
readonly default?: unknown;
|
|
26
|
+
/** Its type, or the types it may be. */
|
|
27
|
+
readonly type?: SchemaType | readonly SchemaType[];
|
|
28
|
+
/** The values it may be. */
|
|
29
|
+
readonly enum?: readonly unknown[];
|
|
30
|
+
/** The one value it may be. */
|
|
31
|
+
readonly const?: unknown;
|
|
32
|
+
/** A number's lowest value. */
|
|
33
|
+
readonly minimum?: number;
|
|
34
|
+
/** A number's highest value. */
|
|
35
|
+
readonly maximum?: number;
|
|
36
|
+
/** A text's fewest characters. */
|
|
37
|
+
readonly minLength?: number;
|
|
38
|
+
/** A text's most characters. */
|
|
39
|
+
readonly maxLength?: number;
|
|
40
|
+
/** What a text matches: a regular expression with the `u` flag, without a repeat of a repeat, which could hang the page. */
|
|
41
|
+
readonly pattern?: string;
|
|
42
|
+
/** A list's items. */
|
|
43
|
+
readonly items?: ValueSchema;
|
|
44
|
+
/** A list's fewest items. */
|
|
45
|
+
readonly minItems?: number;
|
|
46
|
+
/** A list's most items. */
|
|
47
|
+
readonly maxItems?: number;
|
|
48
|
+
/** An object's fields. */
|
|
49
|
+
readonly properties?: Readonly<Record<string, ValueSchema>>;
|
|
50
|
+
/** The fields an object must give. */
|
|
51
|
+
readonly required?: readonly string[];
|
|
52
|
+
/** Any other field: `false` refuses them, a schema checks them; any by default. */
|
|
53
|
+
readonly additionalProperties?: boolean | ValueSchema;
|
|
54
|
+
/** Schemas of which it must fit at least one. */
|
|
55
|
+
readonly anyOf?: readonly ValueSchema[];
|
|
56
|
+
};
|
|
57
|
+
/** What a control is told of its arg, from the story's `argTypes` entry. */
|
|
58
|
+
export type ControlArgType = {
|
|
59
|
+
/** The arg's name. */
|
|
60
|
+
readonly name: string;
|
|
61
|
+
/** The name the panel shows. */
|
|
62
|
+
readonly label: string;
|
|
63
|
+
/** What the arg does; empty when nothing says. */
|
|
64
|
+
readonly description: string;
|
|
65
|
+
/** The entry's `options`: texts and numbers. */
|
|
66
|
+
readonly options?: readonly (string | number)[];
|
|
67
|
+
/** The control's `min`. */
|
|
68
|
+
readonly min?: number;
|
|
69
|
+
/** The control's `max`. */
|
|
70
|
+
readonly max?: number;
|
|
71
|
+
/** The control's `step`. */
|
|
72
|
+
readonly step?: number;
|
|
73
|
+
/** The control's `settings`: anything of its own, as JSON. */
|
|
74
|
+
readonly settings?: JsonValue;
|
|
75
|
+
};
|
|
76
|
+
/** What `mount` receives. */
|
|
77
|
+
export type ArgControlProps = {
|
|
78
|
+
/** The value to show; none when the prop has none. */
|
|
79
|
+
readonly value: JsonValue | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Gives the panel a new value, checked against `schema`; none leaves the prop without one. The control keeps what it
|
|
82
|
+
* draws: it is mounted again only when the value changes from outside (Reset, a link).
|
|
83
|
+
*/
|
|
84
|
+
readonly onChange: (value: JsonValue | undefined) => void;
|
|
85
|
+
/** What the story says of the arg. */
|
|
86
|
+
readonly argType: ControlArgType;
|
|
87
|
+
};
|
|
88
|
+
/** A custom control's module. */
|
|
89
|
+
export type ArgControlModule = {
|
|
90
|
+
/**
|
|
91
|
+
* Draws the control in an element the shell keeps for it.
|
|
92
|
+
*
|
|
93
|
+
* @param element - where it draws.
|
|
94
|
+
* @param props - its value, how to change it, and what the story says of the arg.
|
|
95
|
+
* @returns what takes it away.
|
|
96
|
+
*/
|
|
97
|
+
readonly mount: (element: HTMLElement, props: ArgControlProps) => () => void;
|
|
98
|
+
/** What its value looks like: a link's value and each `onChange` are checked against it. */
|
|
99
|
+
readonly schema: ValueSchema;
|
|
100
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A list or an object among a story's args as code, for the writers of a story's code in each framework: every framework
|
|
3
|
+
* writes it as a JavaScript literal, and differs only in how a text is quoted and how a named value is written. Pure.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { type ArgValue, type NamedArg } from "./messages.ts";
|
|
8
|
+
/** How a framework writes the leaves of a literal. */
|
|
9
|
+
export type ExpressionWriter = {
|
|
10
|
+
/** A text as an expression in this framework's markup. */
|
|
11
|
+
readonly text: (text: string) => string;
|
|
12
|
+
/** A named value as an expression, by its name. */
|
|
13
|
+
readonly named: (named: NamedArg) => string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A value as a JavaScript expression.
|
|
17
|
+
*
|
|
18
|
+
* @param value - the value.
|
|
19
|
+
* @param writer - how the framework writes its leaves.
|
|
20
|
+
*/
|
|
21
|
+
export declare const argExpression: (value: ArgValue, writer: ExpressionWriter) => string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A list or an object among a story's args as code, for the writers of a story's code in each framework: every framework
|
|
3
|
+
* writes it as a JavaScript literal, and differs only in how a text is quoted and how a named value is written. Pure.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { isArgList, isArgObject, isDateArg, isNamedArg } from "./messages.js";
|
|
8
|
+
/** A field's name in an object literal: bare when JavaScript allows it. */
|
|
9
|
+
const fieldName = (name, writer) => /^[A-Za-z_$][\w$]*$/.test(name) ? name : writer.text(name);
|
|
10
|
+
/**
|
|
11
|
+
* A value as a JavaScript expression.
|
|
12
|
+
*
|
|
13
|
+
* @param value - the value.
|
|
14
|
+
* @param writer - how the framework writes its leaves.
|
|
15
|
+
*/
|
|
16
|
+
export const argExpression = (value, writer) => {
|
|
17
|
+
if (typeof value === "string")
|
|
18
|
+
return writer.text(value);
|
|
19
|
+
if (isNamedArg(value))
|
|
20
|
+
return writer.named(value);
|
|
21
|
+
if (isDateArg(value))
|
|
22
|
+
return `new Date(${writer.text(value.forgebookDate)})`;
|
|
23
|
+
if (isArgList(value))
|
|
24
|
+
return `[${value.map((item) => argExpression(item, writer)).join(", ")}]`;
|
|
25
|
+
if (isArgObject(value)) {
|
|
26
|
+
const fields = Object.entries(value).map(([name, each]) => `${fieldName(name, writer)}: ${argExpression(each, writer)}`);
|
|
27
|
+
return fields.length === 0 ? "{}" : `{ ${fields.join(", ")} }`;
|
|
28
|
+
}
|
|
29
|
+
return String(value);
|
|
30
|
+
};
|