forgebook 0.3.3 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +994 -72
- package/dist/bin/forgebook/agentClient.d.ts +2 -1
- package/dist/bin/forgebook/agentClient.js +13 -6
- package/dist/bin/forgebook/agentGuide.d.ts +59 -0
- package/dist/bin/forgebook/agentGuide.js +203 -0
- package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
- package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
- package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
- package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
- package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
- package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
- package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
- package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
- package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
- package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
- package/dist/bin/forgebook/agentText.d.ts +23 -3
- package/dist/bin/forgebook/agentText.js +182 -28
- package/dist/bin/forgebook/agents.md +20 -191
- package/dist/bin/forgebook/agentsText.js +2 -1
- package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
- package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
- package/dist/bin/forgebook/auditCommand.d.mts +8 -0
- package/dist/bin/forgebook/auditCommand.mjs +75 -0
- package/dist/bin/forgebook/auditRun.d.ts +95 -0
- package/dist/bin/forgebook/auditRun.js +270 -0
- package/dist/bin/forgebook/browserRun.d.ts +21 -0
- package/dist/bin/forgebook/browserRun.js +57 -0
- package/dist/bin/forgebook/buildFailure.d.ts +7 -0
- package/dist/bin/forgebook/buildFailure.js +47 -0
- package/dist/bin/forgebook/buildWatch.d.ts +52 -0
- package/dist/bin/forgebook/buildWatch.js +137 -0
- package/dist/bin/forgebook/builtCatalogue.js +9 -5
- package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
- package/dist/bin/forgebook/catalogueCommands.js +23 -0
- package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
- package/dist/bin/forgebook/catalogueVite.js +14 -6
- package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
- package/dist/bin/forgebook/commandCacheClaim.js +170 -0
- package/dist/bin/forgebook/commandServer.d.ts +8 -0
- package/dist/bin/forgebook/commandServer.js +61 -13
- package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
- package/dist/bin/forgebook/graphCommand.d.mts +8 -0
- package/dist/bin/forgebook/graphCommand.mjs +84 -0
- package/dist/bin/forgebook/guide/commands.md +62 -0
- package/dist/bin/forgebook/guide/devices.md +17 -0
- package/dist/bin/forgebook/guide/docs-pages.md +13 -0
- package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
- package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
- package/dist/bin/forgebook/guide/links.md +29 -0
- package/dist/bin/forgebook/guide/setup.md +23 -0
- package/dist/bin/forgebook/guide/stories.md +95 -0
- package/dist/bin/forgebook/guide/switches.md +43 -0
- package/dist/bin/forgebook/guideCommand.d.mts +13 -0
- package/dist/bin/forgebook/guideCommand.mjs +37 -0
- package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
- package/dist/bin/forgebook/importers/storybook.js +11 -5
- package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
- package/dist/bin/forgebook/initCommands.d.mts +11 -0
- package/dist/bin/forgebook/initCommands.mjs +51 -78
- package/dist/bin/forgebook/initConfig.d.ts +5 -3
- package/dist/bin/forgebook/initConfig.js +6 -3
- package/dist/bin/forgebook/initInstall.d.ts +15 -0
- package/dist/bin/forgebook/initInstall.js +77 -0
- package/dist/bin/forgebook/initPrint.d.ts +9 -0
- package/dist/bin/forgebook/initPrint.js +60 -0
- package/dist/bin/forgebook/initRefusals.d.ts +45 -0
- package/dist/bin/forgebook/initRefusals.js +91 -0
- package/dist/bin/forgebook/initRun.d.ts +28 -0
- package/dist/bin/forgebook/initRun.js +311 -0
- package/dist/bin/forgebook/mcpCommand.mjs +38 -4
- package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
- package/dist/bin/forgebook/mcpGraph.js +24 -0
- package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
- package/dist/bin/forgebook/mcpTokens.js +58 -0
- package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
- package/dist/bin/forgebook/mcpToolParts.js +10 -0
- package/dist/bin/forgebook/mcpTools.d.ts +13 -6
- package/dist/bin/forgebook/mcpTools.js +57 -90
- package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
- package/dist/bin/forgebook/mcpVerify.js +36 -0
- package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
- package/dist/bin/forgebook/migrate/codemods.js +61 -0
- package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
- package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
- package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
- package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
- package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
- package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
- package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
- package/dist/bin/forgebook/migrate/migrateText.js +30 -0
- package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
- package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
- package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
- package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
- package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
- package/dist/bin/forgebook/newProject/newProject.js +180 -0
- package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
- package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
- package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
- package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
- package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
- package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
- package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
- package/dist/bin/forgebook/newProject/projectLook.js +293 -0
- package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
- package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
- package/dist/bin/forgebook/newRepair.d.ts +45 -0
- package/dist/bin/forgebook/newRepair.js +157 -0
- package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
- package/dist/bin/forgebook/newRepairRun.js +148 -0
- package/dist/bin/forgebook/newStories.d.ts +23 -1
- package/dist/bin/forgebook/newStories.js +101 -11
- package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
- package/dist/bin/forgebook/newStoriesFile.js +43 -4
- package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
- package/dist/bin/forgebook/prebundleRun.js +28 -8
- package/dist/bin/forgebook/proofCommand.d.mts +15 -0
- package/dist/bin/forgebook/proofCommand.mjs +212 -0
- package/dist/bin/forgebook/proofRun.d.ts +63 -0
- package/dist/bin/forgebook/proofRun.js +412 -0
- package/dist/bin/forgebook/proofText.d.ts +36 -0
- package/dist/bin/forgebook/proofText.js +131 -0
- package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
- package/dist/bin/forgebook/proofWorkflow.js +205 -0
- package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
- package/dist/bin/forgebook/setArgsTool.js +70 -0
- package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
- package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
- package/dist/bin/forgebook/storyCheckRun.js +83 -9
- package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
- package/dist/bin/forgebook/storyFileIds.js +14 -0
- package/dist/bin/forgebook/stressCases.d.ts +31 -0
- package/dist/bin/forgebook/stressCases.js +79 -0
- package/dist/bin/forgebook/stressRun.d.ts +12 -0
- package/dist/bin/forgebook/stressRun.js +61 -0
- package/dist/bin/forgebook/stressText.d.ts +27 -0
- package/dist/bin/forgebook/stressText.js +46 -0
- package/dist/bin/forgebook/verifyBase.d.ts +45 -0
- package/dist/bin/forgebook/verifyBase.js +204 -0
- package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
- package/dist/bin/forgebook/verifyCommand.mjs +125 -0
- package/dist/bin/forgebook/verifyRun.d.ts +63 -0
- package/dist/bin/forgebook/verifyRun.js +108 -0
- package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
- package/dist/bin/forgebook/verifyVerdict.js +323 -0
- package/dist/bin/forgebook/workflowActions.d.ts +23 -0
- package/dist/bin/forgebook/workflowActions.js +23 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
- package/dist/src/addressArgs.d.ts +29 -5
- package/dist/src/addressArgs.js +58 -16
- package/dist/src/addressArgsParam.d.ts +54 -0
- package/dist/src/addressArgsParam.js +51 -0
- package/dist/src/addressTexts.d.ts +14 -0
- package/dist/src/addressTexts.js +28 -21
- package/dist/src/agentIndexFile.d.ts +11 -0
- package/dist/src/agentIndexFile.js +11 -0
- package/dist/src/argConditions.d.ts +52 -0
- package/dist/src/argConditions.js +80 -0
- package/dist/src/argControl.d.ts +148 -0
- package/dist/src/argControl.js +0 -0
- package/dist/src/argExpression.d.ts +21 -0
- package/dist/src/argExpression.js +30 -0
- package/dist/src/argTypes.d.ts +40 -51
- package/dist/src/argTypes.js +69 -185
- package/dist/src/argsProps.d.ts +3 -3
- package/dist/src/argsProps.js +11 -5
- package/dist/src/bundlerErrors.d.ts +29 -0
- package/dist/src/bundlerErrors.js +49 -0
- package/dist/src/catalogue.d.ts +31 -0
- package/dist/src/catalogue.js +13 -2
- package/dist/src/catalogueRefs.d.ts +75 -0
- package/dist/src/catalogueRefs.js +122 -0
- package/dist/src/componentDocs.d.ts +83 -0
- package/dist/src/componentDocs.js +20 -3
- package/dist/src/controlCode.d.ts +27 -0
- package/dist/src/controlCode.js +41 -0
- package/dist/src/frame/callValues.d.ts +19 -0
- package/dist/src/frame/callValues.js +58 -0
- package/dist/src/frame/canvasScheme.d.ts +33 -0
- package/dist/src/frame/canvasScheme.js +67 -0
- package/dist/src/frame/controlValues.d.ts +39 -0
- package/dist/src/frame/controlValues.js +143 -0
- package/dist/src/frame/frame.css +36 -3
- package/dist/src/frame/frameStatus.d.ts +16 -1
- package/dist/src/frame/frameStatus.js +16 -1
- package/dist/src/frame/frameView.js +4 -3
- package/dist/src/frame/mountFrame.d.ts +10 -1
- package/dist/src/frame/mountFrame.js +160 -55
- package/dist/src/frame/panelControls.d.ts +67 -0
- package/dist/src/frame/panelControls.js +110 -0
- package/dist/src/frame/panelValues.d.ts +35 -0
- package/dist/src/frame/panelValues.js +127 -0
- package/dist/src/frame/playActions.d.ts +39 -0
- package/dist/src/frame/playActions.js +98 -0
- package/dist/src/frame/playStepper.d.ts +28 -0
- package/dist/src/frame/playStepper.js +38 -0
- package/dist/src/frame/playStory.d.ts +9 -1
- package/dist/src/frame/playStory.js +49 -3
- package/dist/src/frame/renderer.d.ts +34 -1
- package/dist/src/frame/renderer.js +24 -0
- package/dist/src/frame/shellChannel.d.ts +1 -1
- package/dist/src/frame/shellChannel.js +1 -1
- package/dist/src/frame/shellCheck.d.ts +17 -0
- package/dist/src/frame/shellCheck.js +25 -0
- package/dist/src/frame/shellMessageCheck.d.ts +7 -0
- package/dist/src/frame/shellMessageCheck.js +53 -0
- package/dist/src/frame/storyContent.d.ts +50 -0
- package/dist/src/frame/storyContent.js +73 -0
- package/dist/src/frame/storyModule.d.ts +9 -0
- package/dist/src/frame/storyModule.js +20 -2
- package/dist/src/frame/storyRun.d.ts +15 -7
- package/dist/src/frame/storyRun.js +64 -15
- package/dist/src/frame/valueSheets.d.ts +35 -0
- package/dist/src/frame/valueSheets.js +99 -0
- package/dist/src/hotModules.d.ts +20 -0
- package/dist/src/hotModules.js +23 -0
- package/dist/src/jsxCode.d.ts +1 -14
- package/dist/src/jsxCode.js +46 -10
- package/dist/src/liveErrors.d.ts +30 -4
- package/dist/src/liveErrors.js +18 -3
- package/dist/src/messages.d.ts +77 -27
- package/dist/src/messages.js +58 -100
- package/dist/src/namedValues.d.ts +2 -26
- package/dist/src/namedValues.js +0 -47
- package/dist/src/pageConfig.d.ts +2 -0
- package/dist/src/playTrace.d.ts +19 -2
- package/dist/src/playTrace.js +10 -5
- package/dist/src/plugin.d.ts +10 -3
- package/dist/src/previewRelay.js +9 -1
- package/dist/src/printable.d.ts +12 -0
- package/dist/src/printable.js +22 -0
- package/dist/src/propsSignature.d.ts +37 -0
- package/dist/src/propsSignature.js +40 -0
- package/dist/src/search.d.ts +41 -5
- package/dist/src/search.js +93 -23
- package/dist/src/searchMatch.d.ts +4 -1
- package/dist/src/searchMatch.js +26 -5
- package/dist/src/searchTypos.d.ts +88 -0
- package/dist/src/searchTypos.js +178 -0
- package/dist/src/shapeValues.d.ts +86 -0
- package/dist/src/shapeValues.js +295 -0
- package/dist/src/shell/ApiReference.js +6 -3
- package/dist/src/shell/ApiTableBox.d.ts +15 -0
- package/dist/src/shell/ApiTableBox.js +11 -0
- package/dist/src/shell/AppearanceMenu.d.ts +4 -1
- package/dist/src/shell/AppearanceMenu.js +9 -6
- package/dist/src/shell/AuthoredHome.js +3 -1
- package/dist/src/shell/CodeTab.d.ts +12 -6
- package/dist/src/shell/CodeTab.js +47 -3
- package/dist/src/shell/CodeText.d.ts +1 -1
- package/dist/src/shell/CodeText.js +2 -3
- package/dist/src/shell/CompareGrid.js +1 -1
- package/dist/src/shell/ComponentPage.d.ts +6 -6
- package/dist/src/shell/ComponentPage.js +8 -2
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +125 -0
- package/dist/src/shell/DocContainers.js +1 -1
- package/dist/src/shell/DocPage.js +2 -2
- package/dist/src/shell/DroppedArgsList.d.ts +2 -2
- package/dist/src/shell/DroppedArgsList.js +1 -1
- package/dist/src/shell/EmbedPage.js +30 -12
- package/dist/src/shell/Example.d.ts +5 -1
- package/dist/src/shell/Example.js +16 -8
- package/dist/src/shell/FrameView.d.ts +6 -3
- package/dist/src/shell/FrameView.js +2 -2
- package/dist/src/shell/HomePage.d.ts +3 -1
- package/dist/src/shell/HomePage.js +18 -6
- package/dist/src/shell/InfoTip.js +2 -2
- package/dist/src/shell/InteractionsTab.d.ts +11 -4
- package/dist/src/shell/InteractionsTab.js +18 -2
- package/dist/src/shell/LazyPage.js +1 -1
- package/dist/src/shell/PackageHtml.js +3 -1
- package/dist/src/shell/PageWidth.d.ts +29 -0
- package/dist/src/shell/PageWidth.js +18 -0
- package/dist/src/shell/PinnedControl.js +14 -62
- package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
- package/dist/src/shell/PinnedControlMenu.js +72 -0
- package/dist/src/shell/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +22 -11
- package/dist/src/shell/PropRows.js +62 -24
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -22
- package/dist/src/shell/RefStoryPage.d.ts +33 -0
- package/dist/src/shell/RefStoryPage.js +123 -0
- package/dist/src/shell/SearchPanel.js +51 -24
- package/dist/src/shell/Shell.d.ts +18 -0
- package/dist/src/shell/Shell.js +141 -23
- package/dist/src/shell/ShortcutHelp.d.ts +22 -0
- package/dist/src/shell/ShortcutHelp.js +66 -0
- package/dist/src/shell/Sidebar.d.ts +17 -4
- package/dist/src/shell/Sidebar.js +92 -41
- package/dist/src/shell/SidebarDocs.js +2 -2
- package/dist/src/shell/SidebarEntries.js +5 -3
- package/dist/src/shell/SidebarHandle.d.ts +3 -5
- package/dist/src/shell/SidebarHandle.js +4 -4
- package/dist/src/shell/SidebarRefs.d.ts +39 -0
- package/dist/src/shell/SidebarRefs.js +99 -0
- package/dist/src/shell/SidebarSearch.js +37 -9
- package/dist/src/shell/SignatureReference.js +3 -1
- package/dist/src/shell/Stage.d.ts +10 -2
- package/dist/src/shell/Stage.js +29 -49
- package/dist/src/shell/StatusBadges.d.ts +54 -0
- package/dist/src/shell/StatusBadges.js +77 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
- package/dist/src/shell/StoryCodeBlock.js +7 -6
- package/dist/src/shell/StoryPicker.d.ts +4 -2
- package/dist/src/shell/StoryPicker.js +3 -3
- package/dist/src/shell/Switch.d.ts +29 -0
- package/dist/src/shell/Switch.js +11 -0
- package/dist/src/shell/SwitchGallery.d.ts +36 -0
- package/dist/src/shell/SwitchGallery.js +17 -0
- package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
- package/dist/src/shell/SwitchGalleryPanel.js +99 -0
- package/dist/src/shell/TagFilter.d.ts +24 -0
- package/dist/src/shell/TagFilter.js +45 -0
- package/dist/src/shell/TagViews.d.ts +39 -0
- package/dist/src/shell/TagViews.js +20 -0
- package/dist/src/shell/Toolbar.d.ts +4 -1
- package/dist/src/shell/Toolbar.js +17 -7
- package/dist/src/shell/ToolbarControl.d.ts +3 -0
- package/dist/src/shell/ToolbarControl.js +23 -6
- package/dist/src/shell/ViewMenuPanel.js +6 -1
- package/dist/src/shell/argChecks.d.ts +22 -0
- package/dist/src/shell/argChecks.js +20 -0
- package/dist/src/shell/asideStory.js +7 -2
- package/dist/src/shell/audienceSections.css +9 -9
- package/dist/src/shell/catalogueContext.d.ts +1 -1
- package/dist/src/shell/catalogueContext.js +6 -1
- package/dist/src/shell/codeSpans.d.ts +27 -0
- package/dist/src/shell/codeSpans.js +76 -0
- package/dist/src/shell/compareVariants.d.ts +4 -2
- package/dist/src/shell/compareVariants.js +16 -8
- package/dist/src/shell/composition.d.ts +23 -0
- package/dist/src/shell/composition.js +26 -0
- package/dist/src/shell/controlCycle.d.ts +1 -1
- package/dist/src/shell/controlCycle.js +3 -2
- package/dist/src/shell/customControls.d.ts +62 -0
- package/dist/src/shell/customControls.js +81 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +29 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/frameOrder.d.ts +35 -0
- package/dist/src/shell/frameOrder.js +45 -0
- package/dist/src/shell/framesOrigin.d.ts +7 -0
- package/dist/src/shell/framesOrigin.js +1 -1
- package/dist/src/shell/galleryPlace.d.ts +20 -0
- package/dist/src/shell/galleryPlace.js +26 -0
- package/dist/src/shell/icons.d.ts +1 -0
- package/dist/src/shell/icons.js +1 -0
- package/dist/src/shell/keyboard.d.ts +14 -12
- package/dist/src/shell/keyboard.js +21 -6
- package/dist/src/shell/laterStrings.d.ts +30 -0
- package/dist/src/shell/laterStrings.js +43 -3
- package/dist/src/shell/mountShell.js +3 -0
- package/dist/src/shell/pageStrings.d.ts +4 -0
- package/dist/src/shell/pageStrings.js +4 -0
- package/dist/src/shell/pageTagView.d.ts +18 -0
- package/dist/src/shell/pageTagView.js +10 -0
- package/dist/src/shell/playMemory.d.ts +14 -0
- package/dist/src/shell/playMemory.js +8 -0
- package/dist/src/shell/propNotes.d.ts +23 -0
- package/dist/src/shell/propNotes.js +37 -0
- package/dist/src/shell/refIndexLoad.d.ts +17 -0
- package/dist/src/shell/refIndexLoad.js +38 -0
- package/dist/src/shell/refParts.d.ts +34 -0
- package/dist/src/shell/refParts.js +9 -0
- package/dist/src/shell/refStory.css +21 -0
- package/dist/src/shell/refStrings.d.ts +13 -0
- package/dist/src/shell/refStrings.js +21 -0
- package/dist/src/shell/search.css +11 -11
- package/dist/src/shell/shell.css +376 -169
- package/dist/src/shell/shellScheme.js +2 -2
- package/dist/src/shell/shortcutHelp.css +64 -0
- package/dist/src/shell/stageArgs.d.ts +53 -0
- package/dist/src/shell/stageArgs.js +64 -0
- package/dist/src/shell/statusBadges.css +51 -0
- package/dist/src/shell/strings.d.ts +7 -16
- package/dist/src/shell/strings.js +12 -17
- package/dist/src/shell/switchGallery.css +104 -0
- package/dist/src/shell/tagFilter.css +46 -0
- package/dist/src/shell/tagView.d.ts +20 -0
- package/dist/src/shell/tagView.js +10 -0
- package/dist/src/shell/useAddressArgs.d.ts +9 -0
- package/dist/src/shell/useAddressArgs.js +56 -11
- package/dist/src/shell/useControlKeys.js +2 -2
- package/dist/src/shell/useEditedProblems.d.ts +6 -0
- package/dist/src/shell/useEditedProblems.js +40 -0
- package/dist/src/shell/useFrameMessages.js +3 -0
- package/dist/src/shell/useFrameQueue.d.ts +8 -3
- package/dist/src/shell/useFrameQueue.js +42 -12
- package/dist/src/shell/useListedTree.d.ts +13 -0
- package/dist/src/shell/useListedTree.js +32 -0
- package/dist/src/shell/usePageFrames.js +2 -2
- package/dist/src/shell/usePopover.d.ts +5 -0
- package/dist/src/shell/usePopover.js +7 -1
- package/dist/src/shell/useRefIndex.d.ts +22 -0
- package/dist/src/shell/useRefIndex.js +36 -0
- package/dist/src/shell/useScrollSettled.d.ts +18 -0
- package/dist/src/shell/useScrollSettled.js +56 -0
- package/dist/src/shell/useScrollStops.d.ts +20 -0
- package/dist/src/shell/useScrollStops.js +41 -0
- package/dist/src/shell/useShortcutHelp.d.ts +18 -0
- package/dist/src/shell/useShortcutHelp.js +32 -0
- package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
- package/dist/src/shell/useSidebarOverlay.js +12 -4
- package/dist/src/shell/useStoryCode.d.ts +2 -1
- package/dist/src/shell/useStoryCode.js +12 -7
- package/dist/src/shell/useToolbarLayout.d.ts +5 -1
- package/dist/src/shell/useToolbarLayout.js +2 -2
- package/dist/src/shell/useWorstCase.d.ts +8 -2
- package/dist/src/shell/useWorstCase.js +2 -2
- package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
- package/dist/src/shell/valueEditors/FileEditor.js +66 -0
- package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
- package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
- package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
- package/dist/src/shell/valueEditors/ListEditor.js +82 -0
- package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
- package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
- package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
- package/dist/src/shell/valueEditors/PropEditor.js +53 -0
- package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
- package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
- package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
- package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
- package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
- package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
- package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
- package/dist/src/shell/valueEditors/ValueField.js +148 -0
- package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
- package/dist/src/shell/valueEditors/editorStrings.js +66 -0
- package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
- package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
- package/dist/src/shell/valueEditors/valueEditors.css +153 -0
- package/dist/src/shell/worstArgs.d.ts +8 -5
- package/dist/src/shell/worstArgs.js +14 -7
- package/dist/src/shellTheme.d.ts +1 -1
- package/dist/src/shellTheme.js +15 -1
- package/dist/src/shellTheme.types.d.ts +4 -0
- package/dist/src/shellWord.d.ts +12 -0
- package/dist/src/shellWord.js +15 -0
- package/dist/src/sourceFiles.js +2 -1
- package/dist/src/storyArgTypes.d.ts +57 -0
- package/dist/src/storyArgTypes.js +195 -0
- package/dist/src/storyBackground.js +14 -3
- package/dist/src/storyCheck.d.ts +99 -3
- package/dist/src/storyCheck.js +39 -1
- package/dist/src/storyCodeText.d.ts +52 -0
- package/dist/src/storyCodeText.js +30 -0
- package/dist/src/storyControls.d.ts +103 -0
- package/dist/src/storyControls.js +100 -0
- package/dist/src/storyStatuses.d.ts +55 -0
- package/dist/src/storyStatuses.js +104 -0
- package/dist/src/storyTagNames.d.ts +25 -0
- package/dist/src/storyTagNames.js +25 -0
- package/dist/src/storyTags.d.ts +29 -0
- package/dist/src/storyTags.js +85 -0
- package/dist/src/storyTree.d.ts +13 -0
- package/dist/src/storyTree.js +24 -4
- package/dist/src/storybookArgs.d.ts +24 -0
- package/dist/src/storybookArgs.js +185 -0
- package/dist/src/switches.d.ts +66 -3
- package/dist/src/switches.js +42 -1
- package/dist/src/valueSchema.d.ts +28 -0
- package/dist/src/valueSchema.js +196 -0
- package/dist/src/valueShape.d.ts +94 -0
- package/dist/src/valueShape.js +25 -0
- package/dist/src/viewState.d.ts +8 -3
- package/dist/src/viewState.js +27 -10
- package/dist/src/vite/adapter.d.ts +40 -2
- package/dist/src/vite/adapter.js +1 -0
- package/dist/src/vite/agent.types.d.ts +354 -7
- package/dist/src/vite/agentApi.d.ts +23 -0
- package/dist/src/vite/agentApi.js +90 -17
- package/dist/src/vite/agentIndex.d.ts +0 -2
- package/dist/src/vite/agentIndex.js +5 -6
- package/dist/src/vite/agentRoutes.d.ts +20 -1
- package/dist/src/vite/agentRoutes.js +135 -66
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +51 -0
- package/dist/src/vite/agentStoryCode.js +44 -0
- package/dist/src/vite/agentVisibility.d.ts +47 -0
- package/dist/src/vite/agentVisibility.js +174 -0
- package/dist/src/vite/appAudit.d.ts +134 -0
- package/dist/src/vite/appAudit.js +333 -0
- package/dist/src/vite/appBuildOption.d.ts +53 -0
- package/dist/src/vite/appBuildOption.js +55 -0
- package/dist/src/vite/appTokenFiles.d.ts +92 -0
- package/dist/src/vite/appTokenFiles.js +433 -0
- package/dist/src/vite/appTokens.d.ts +23 -0
- package/dist/src/vite/appTokens.js +275 -0
- package/dist/src/vite/argControlsConfig.d.ts +30 -0
- package/dist/src/vite/argControlsConfig.js +176 -0
- package/dist/src/vite/builtTexts.d.ts +10 -0
- package/dist/src/vite/builtTexts.js +59 -22
- package/dist/src/vite/catalogueConfig.d.ts +3 -1
- package/dist/src/vite/catalogueConfig.js +21 -4
- package/dist/src/vite/changeCoverage.d.ts +74 -0
- package/dist/src/vite/changeCoverage.js +120 -0
- package/dist/src/vite/changedRoute.d.ts +30 -0
- package/dist/src/vite/changedRoute.js +197 -0
- package/dist/src/vite/checkCode.d.ts +105 -3
- package/dist/src/vite/checkCode.js +323 -36
- package/dist/src/vite/checkoutWatch.d.ts +97 -0
- package/dist/src/vite/checkoutWatch.js +287 -0
- package/dist/src/vite/closeWatch.d.ts +8 -0
- package/dist/src/vite/closeWatch.js +1 -1
- package/dist/src/vite/componentCache.d.ts +8 -0
- package/dist/src/vite/componentCache.js +66 -0
- package/dist/src/vite/componentGraph.d.ts +71 -0
- package/dist/src/vite/componentGraph.js +133 -0
- package/dist/src/vite/componentRules.d.ts +33 -0
- package/dist/src/vite/componentRules.js +105 -0
- package/dist/src/vite/componentScan.d.ts +69 -0
- package/dist/src/vite/componentScan.js +418 -0
- package/dist/src/vite/compositionCheck.d.ts +15 -0
- package/dist/src/vite/compositionCheck.js +243 -0
- package/dist/src/vite/config.d.ts +67 -1
- package/dist/src/vite/configFile.d.ts +15 -2
- package/dist/src/vite/configFile.js +109 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +172 -0
- package/dist/src/vite/configLoadError.d.ts +23 -0
- package/dist/src/vite/configLoadError.js +71 -0
- package/dist/src/vite/cssDeclarations.d.ts +71 -0
- package/dist/src/vite/cssDeclarations.js +290 -0
- package/dist/src/vite/cssImports.d.ts +14 -0
- package/dist/src/vite/cssImports.js +48 -0
- package/dist/src/vite/cssReferences.d.ts +54 -0
- package/dist/src/vite/cssReferences.js +157 -0
- package/dist/src/vite/cssTokenValues.d.ts +50 -0
- package/dist/src/vite/cssTokenValues.js +233 -0
- package/dist/src/vite/designTokens.d.ts +24 -0
- package/dist/src/vite/designTokens.js +5 -1
- package/dist/src/vite/docsExtractor.d.ts +9 -3
- package/dist/src/vite/docsExtractor.js +11 -3
- package/dist/src/vite/docsProgram.d.ts +17 -4
- package/dist/src/vite/docsProgram.js +52 -11
- package/dist/src/vite/docsWorker.js +7 -2
- package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
- package/dist/src/vite/emptyStoryGlobs.js +52 -0
- package/dist/src/vite/fileImports.d.ts +17 -0
- package/dist/src/vite/fileImports.js +57 -0
- package/dist/src/vite/findComponent.d.ts +10 -2
- package/dist/src/vite/findComponent.js +27 -22
- package/dist/src/vite/findRoute.js +3 -2
- package/dist/src/vite/forcedStates.d.ts +9 -2
- package/dist/src/vite/forcedStates.js +12 -3
- package/dist/src/vite/forgebookPlugin.d.ts +2 -0
- package/dist/src/vite/forgebookPlugin.js +55 -73
- package/dist/src/vite/frameErrors.d.ts +19 -0
- package/dist/src/vite/frameErrors.js +70 -0
- package/dist/src/vite/framesServer.d.ts +12 -0
- package/dist/src/vite/framesServer.js +21 -4
- package/dist/src/vite/functionComponentDocs.js +81 -12
- package/dist/src/vite/generatedModules.js +4 -2
- package/dist/src/vite/gitChange.d.ts +38 -5
- package/dist/src/vite/gitChange.js +71 -11
- package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
- package/dist/src/vite/hiddenStoryFiles.js +107 -0
- package/dist/src/vite/hotSnippets.d.ts +38 -14
- package/dist/src/vite/hotSnippets.js +137 -39
- package/dist/src/vite/importedNames.d.ts +37 -0
- package/dist/src/vite/importedNames.js +138 -0
- package/dist/src/vite/indexFields.d.ts +6 -0
- package/dist/src/vite/indexFields.js +21 -0
- package/dist/src/vite/indexStoryFile.d.ts +8 -1
- package/dist/src/vite/indexStoryFile.js +22 -157
- package/dist/src/vite/jsxCallSites.d.ts +33 -0
- package/dist/src/vite/jsxCallSites.js +200 -0
- package/dist/src/vite/jsxInScripts.d.ts +67 -0
- package/dist/src/vite/jsxInScripts.js +138 -0
- package/dist/src/vite/jsxTree.d.ts +20 -0
- package/dist/src/vite/jsxTree.js +163 -0
- package/dist/src/vite/lineAndColumn.d.ts +13 -0
- package/dist/src/vite/lineAndColumn.js +18 -0
- package/dist/src/vite/lookAlikes.d.ts +65 -0
- package/dist/src/vite/lookAlikes.js +228 -0
- package/dist/src/vite/nearestToken.d.ts +17 -0
- package/dist/src/vite/nearestToken.js +9 -2
- package/dist/src/vite/packageEntries.d.ts +42 -0
- package/dist/src/vite/packageEntries.js +127 -0
- package/dist/src/vite/pages.d.ts +9 -1
- package/dist/src/vite/pages.js +119 -4
- package/dist/src/vite/pluginConfig.js +4 -0
- package/dist/src/vite/pluginIds.d.ts +2 -0
- package/dist/src/vite/pluginIds.js +5 -1
- package/dist/src/vite/pluginModules.d.ts +81 -11
- package/dist/src/vite/pluginModules.js +109 -21
- package/dist/src/vite/prebundled.d.ts +57 -15
- package/dist/src/vite/prebundled.js +80 -0
- package/dist/src/vite/previewTags.d.ts +25 -0
- package/dist/src/vite/previewTags.js +56 -0
- package/dist/src/vite/projectFiles.d.ts +54 -0
- package/dist/src/vite/projectFiles.js +116 -0
- package/dist/src/vite/projectPostcss.d.ts +70 -0
- package/dist/src/vite/projectPostcss.js +250 -0
- package/dist/src/vite/propDocs.d.ts +12 -0
- package/dist/src/vite/propDocs.js +187 -60
- package/dist/src/vite/propKind.d.ts +40 -0
- package/dist/src/vite/propKind.js +71 -0
- package/dist/src/vite/propTypeNotes.d.ts +22 -0
- package/dist/src/vite/propTypeNotes.js +51 -0
- package/dist/src/vite/publishedExports.d.ts +27 -0
- package/dist/src/vite/publishedExports.js +298 -0
- package/dist/src/vite/realFolder.d.ts +6 -0
- package/dist/src/vite/realFolder.js +25 -0
- package/dist/src/vite/refsConfig.d.ts +39 -0
- package/dist/src/vite/refsConfig.js +54 -0
- package/dist/src/vite/reuseCheck.d.ts +45 -0
- package/dist/src/vite/reuseCheck.js +260 -0
- package/dist/src/vite/runningVersions.d.ts +33 -0
- package/dist/src/vite/runningVersions.js +25 -0
- package/dist/src/vite/scriptProblems.d.ts +60 -0
- package/dist/src/vite/scriptProblems.js +155 -0
- package/dist/src/vite/searchModule.js +3 -2
- package/dist/src/vite/searchRoute.js +4 -2
- package/dist/src/vite/shapeDocs.d.ts +36 -0
- package/dist/src/vite/shapeDocs.js +177 -0
- package/dist/src/vite/singleFileComponent.d.ts +17 -0
- package/dist/src/vite/singleFileComponent.js +83 -0
- package/dist/src/vite/sourceText.d.ts +34 -0
- package/dist/src/vite/sourceText.js +72 -0
- package/dist/src/vite/sourceTokens.d.ts +7 -0
- package/dist/src/vite/sourceTokens.js +7 -2
- package/dist/src/vite/stackLines.d.ts +49 -0
- package/dist/src/vite/stackLines.js +96 -0
- package/dist/src/vite/storyCode.d.ts +22 -7
- package/dist/src/vite/storyCode.js +263 -37
- package/dist/src/vite/storyCoverage.d.ts +48 -0
- package/dist/src/vite/storyCoverage.js +179 -0
- package/dist/src/vite/storyFilesModule.d.ts +48 -3
- package/dist/src/vite/storyFilesModule.js +105 -15
- package/dist/src/vite/storyPatterns.d.ts +31 -0
- package/dist/src/vite/storyPatterns.js +140 -5
- package/dist/src/vite/storyReach.d.ts +10 -2
- package/dist/src/vite/storyReach.js +15 -11
- package/dist/src/vite/storyTopLevel.d.ts +51 -0
- package/dist/src/vite/storyTopLevel.js +146 -0
- package/dist/src/vite/storylessRoutes.d.ts +4 -3
- package/dist/src/vite/storylessRoutes.js +210 -19
- package/dist/src/vite/switchValuesCheck.d.ts +19 -0
- package/dist/src/vite/switchValuesCheck.js +164 -0
- package/dist/src/vite/switchesDocument.d.ts +15 -0
- package/dist/src/vite/switchesDocument.js +47 -0
- package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
- package/dist/src/vite/tailwindConfigTokens.js +306 -0
- package/dist/src/vite/textImports.d.ts +15 -0
- package/dist/src/vite/textImports.js +58 -0
- package/dist/src/vite/textModules.d.ts +6 -5
- package/dist/src/vite/textModules.js +13 -8
- package/dist/src/vite/tokenAnswers.d.ts +6 -2
- package/dist/src/vite/tokenAnswers.js +11 -7
- package/dist/src/vite/typeParameters.d.ts +83 -0
- package/dist/src/vite/typeParameters.js +270 -0
- package/dist/src/vite/typedControls.d.ts +31 -0
- package/dist/src/vite/typedControls.js +66 -0
- package/dist/src/vite/unionProps.d.ts +37 -0
- package/dist/src/vite/unionProps.js +121 -0
- package/dist/src/vite/unresolvedTokens.d.ts +20 -0
- package/dist/src/vite/unresolvedTokens.js +193 -0
- package/dist/src/vite/usageGraph.js +10 -52
- package/dist/src/vite/usageGuidance.d.ts +9 -2
- package/dist/src/vite/usageGuidance.js +36 -8
- package/dist/src/vite/usageImports.d.ts +35 -0
- package/dist/src/vite/usageImports.js +280 -0
- package/dist/src/vite/visibilityRoute.d.ts +16 -0
- package/dist/src/vite/visibilityRoute.js +320 -0
- package/dist/src/worstCase.d.ts +2 -0
- package/dist/src/worstCase.js +2 -0
- package/package.json +28 -8
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Another catalogue, already built and deployed, shown in this one's sidebar (`refs` in the configuration): where its
|
|
3
|
+
* index and its stories are, and how its index reads.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* A composed catalogue stays on its own origin. Its stories are shown through its own embed page (`?embed`), which
|
|
7
|
+
* frames them on its own frames' origin and tells the page around it nothing but a height, so this catalogue never runs
|
|
8
|
+
* its code and gives it nothing it could act on: the view's switches cross in the embed's address, read there as any
|
|
9
|
+
* address is, and the panel's values never do. Its list comes from the index `forgebook build --agent-index` writes,
|
|
10
|
+
* fetched only when its section is first opened. Pure, so the shell's lazy parts and the plugin share it.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { AGENT_INDEX_FILE } from "./agentIndexFile.js";
|
|
15
|
+
import { EMBED_PARAMETER } from "./embed.js";
|
|
16
|
+
/** A composed catalogue's id: lower-case words and digits, joined by dashes. */
|
|
17
|
+
const REF_ID = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
18
|
+
/** Whether a value is a plain object. */
|
|
19
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
20
|
+
/** A field of an object that is a list, or an empty one. */
|
|
21
|
+
const listAt = (value, name) => {
|
|
22
|
+
const list = value[name];
|
|
23
|
+
return Array.isArray(list) ? list : [];
|
|
24
|
+
};
|
|
25
|
+
/** A story of the index, when it is one the sidebar lists. */
|
|
26
|
+
const listedStory = (value) => {
|
|
27
|
+
if (!isRecord(value) || value["isUnlisted"] === true)
|
|
28
|
+
return [];
|
|
29
|
+
const { id, name } = value;
|
|
30
|
+
return typeof id === "string" && typeof name === "string" ? [{ id, name }] : [];
|
|
31
|
+
};
|
|
32
|
+
/** A component of the index, with its listed stories; nothing when it has none. */
|
|
33
|
+
const listedComponent = (value) => {
|
|
34
|
+
if (!isRecord(value))
|
|
35
|
+
return [];
|
|
36
|
+
const { id, title } = value;
|
|
37
|
+
const stories = listAt(value, "stories").flatMap(listedStory);
|
|
38
|
+
return typeof id === "string" && typeof title === "string" && stories.length > 0
|
|
39
|
+
? [{ id, title, stories }]
|
|
40
|
+
: [];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* What the sidebar shows of a composed catalogue's index, read from the parsed file.
|
|
44
|
+
*
|
|
45
|
+
* @param value - the parsed `forgebook-agent.json`.
|
|
46
|
+
* @returns the index; none when the value is no index of a version this one reads.
|
|
47
|
+
*/
|
|
48
|
+
export const refIndexOf = (value) => {
|
|
49
|
+
if (!isRecord(value) || value["schema"] !== 1 || !isRecord(value["stories"]))
|
|
50
|
+
return undefined;
|
|
51
|
+
return { components: listAt(value["stories"], "components").flatMap(listedComponent) };
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* The address of a composed catalogue's index.
|
|
55
|
+
*
|
|
56
|
+
* @param ref - the composed catalogue.
|
|
57
|
+
*/
|
|
58
|
+
export const refIndexAddress = (ref) => new URL(AGENT_INDEX_FILE, ref.url).href;
|
|
59
|
+
/**
|
|
60
|
+
* The address of a story in a composed catalogue's own page, to open it there.
|
|
61
|
+
*
|
|
62
|
+
* @param ref - the composed catalogue.
|
|
63
|
+
* @param storyId - the story's id in it.
|
|
64
|
+
*/
|
|
65
|
+
export const refStoryAddress = (ref, storyId) => {
|
|
66
|
+
const address = new URL(ref.url);
|
|
67
|
+
address.searchParams.set("story", storyId);
|
|
68
|
+
return address.href;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* The address of a story alone in a composed catalogue's embed page, with this catalogue's switches.
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* Every switch is written, defaults included: the composed catalogue's default may be another value, and the story
|
|
75
|
+
* shows what this catalogue's toolbar says. It keeps those it declares, with values it knows, and drops the others.
|
|
76
|
+
*
|
|
77
|
+
* @param ref - the composed catalogue.
|
|
78
|
+
* @param storyId - the story's id in it.
|
|
79
|
+
* @param switches - this catalogue's switches, by id, with the values the view gives them.
|
|
80
|
+
*/
|
|
81
|
+
export const refEmbedAddress = (ref, storyId, switches) => {
|
|
82
|
+
const address = new URL(ref.url);
|
|
83
|
+
address.searchParams.set(EMBED_PARAMETER, "");
|
|
84
|
+
address.searchParams.set("story", storyId);
|
|
85
|
+
for (const [id, value] of Object.entries(switches)) {
|
|
86
|
+
// the story's own parameters stay the story's: a switch cannot take their place
|
|
87
|
+
if (id !== EMBED_PARAMETER && id !== "story")
|
|
88
|
+
address.searchParams.set(id, value);
|
|
89
|
+
}
|
|
90
|
+
return address.href;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* What is wrong with one composed catalogue of the configuration; nothing when it can be shown.
|
|
94
|
+
*
|
|
95
|
+
* @param id - its key.
|
|
96
|
+
* @param value - what the configuration gives it.
|
|
97
|
+
*/
|
|
98
|
+
export const refProblem = (id, value) => {
|
|
99
|
+
if (!REF_ID.test(id))
|
|
100
|
+
return `refs: "${id}" is not an id: write lower-case words and digits joined by dashes (design-system)`;
|
|
101
|
+
if (!isRecord(value))
|
|
102
|
+
return `refs.${id} must be an object with a title and a url`;
|
|
103
|
+
const { title, url } = value;
|
|
104
|
+
if (typeof title !== "string" || title.trim() === "")
|
|
105
|
+
return `refs.${id}.title is missing`;
|
|
106
|
+
if (typeof url !== "string" || !URL.canParse(url))
|
|
107
|
+
return `refs.${id}.url must be an absolute address (https://design.example.com/)`;
|
|
108
|
+
const address = new URL(url);
|
|
109
|
+
if (address.protocol !== "https:" && address.protocol !== "http:")
|
|
110
|
+
return `refs.${id}.url must be an http or https address`;
|
|
111
|
+
if (address.username !== "" || address.password !== "")
|
|
112
|
+
return `refs.${id}.url must not hold credentials: the address is written into the page`;
|
|
113
|
+
if (address.search !== "" || address.hash !== "")
|
|
114
|
+
return `refs.${id}.url must be the catalogue's folder, with no query or fragment`;
|
|
115
|
+
return undefined;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* A composed catalogue's address as the shell uses it: its folder, ending in `/`.
|
|
119
|
+
*
|
|
120
|
+
* @param url - the address the configuration gives, checked by `refProblem`.
|
|
121
|
+
*/
|
|
122
|
+
export const refFolder = (url) => (url.endsWith("/") ? url : `${url}/`);
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
|
13
|
+
import type { ValueShape } from "./valueShape.ts";
|
|
13
14
|
/** How a prop is set from the panel, and the group it is listed in. */
|
|
14
15
|
export type PropKind = "choice" | "text" | "number" | "toggle" | "event" | "other";
|
|
15
16
|
/** One parameter of an event's signature. */
|
|
@@ -66,6 +67,56 @@ export type MemberDocs = {
|
|
|
66
67
|
/** Whether the member must be given. */
|
|
67
68
|
readonly isRequired: boolean;
|
|
68
69
|
};
|
|
70
|
+
/**
|
|
71
|
+
* Why a prop's type is not the one its source writes, or says nothing: a generic's type parameter and what it is shown
|
|
72
|
+
* as, a name the checker cannot find, an `any`.
|
|
73
|
+
*/
|
|
74
|
+
export type PropTypeNote = {
|
|
75
|
+
/** A type parameter of the props type, replaced in the prop's type. */
|
|
76
|
+
readonly reason: "generic";
|
|
77
|
+
/** Its name (`TItem`). */
|
|
78
|
+
readonly parameter: string;
|
|
79
|
+
/** What it is shown as: its constraint, its default when it has no constraint, `unknown` when it has neither. */
|
|
80
|
+
readonly shownAs: "constraint" | "default" | "unknown";
|
|
81
|
+
/** That type, as the source writes it. */
|
|
82
|
+
readonly type: string;
|
|
83
|
+
} | {
|
|
84
|
+
/** A name in the prop's type that the checker cannot find (a missing import), so the type means `any`. */
|
|
85
|
+
readonly reason: "unresolved";
|
|
86
|
+
/** The name, as written. */
|
|
87
|
+
readonly name: string;
|
|
88
|
+
} | {
|
|
89
|
+
/** The prop's type is `any`: nothing can be said of its values. */
|
|
90
|
+
readonly reason: "any";
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* When a prop can be passed: the values of the discriminant that select the variants of the props that declare it
|
|
94
|
+
* (`href` only when `kind` is `"link"`).
|
|
95
|
+
*/
|
|
96
|
+
export type PropCondition = {
|
|
97
|
+
/** The discriminant: a prop every variant declares with a literal type. */
|
|
98
|
+
readonly prop: string;
|
|
99
|
+
/** Its values in the variants that declare the prop, in the order the variants come. */
|
|
100
|
+
readonly values: readonly (string | number | boolean)[];
|
|
101
|
+
/**
|
|
102
|
+
* Whether the prop also applies with the discriminant left out, since a variant that declares it takes it so
|
|
103
|
+
* (`mode?: "single"`). Left out when `false`.
|
|
104
|
+
*/
|
|
105
|
+
readonly orOmitted?: boolean;
|
|
106
|
+
};
|
|
107
|
+
/** Why a component lists no props although it takes some. */
|
|
108
|
+
export type PropsNote = {
|
|
109
|
+
/** Its props are typed `any` (or not typed): there is nothing to read. */
|
|
110
|
+
readonly reason: "untyped";
|
|
111
|
+
} | {
|
|
112
|
+
/** Its type cannot be called or constructed with props, so it gives none to read. */
|
|
113
|
+
readonly reason: "no-signature";
|
|
114
|
+
} | {
|
|
115
|
+
/** Every prop it takes is declared outside its package (an element's attributes), which the docs leave out. */
|
|
116
|
+
readonly reason: "outside-package";
|
|
117
|
+
/** How many props were left out. */
|
|
118
|
+
readonly count: number;
|
|
119
|
+
};
|
|
69
120
|
/** One prop of a component. */
|
|
70
121
|
export type PropDocs = {
|
|
71
122
|
/** The prop's name. */
|
|
@@ -78,12 +129,24 @@ export type PropDocs = {
|
|
|
78
129
|
* union by the types it happened to meet first, so it changed between reads of a program kept in memory.
|
|
79
130
|
*/
|
|
80
131
|
readonly type: string;
|
|
132
|
+
/**
|
|
133
|
+
* The names its type goes by, when they are more than `type`: the name written, the name it was declared with when an
|
|
134
|
+
* import renamed it, and each alias it is declared through (`ButtonIcon`, `IconComponent` for
|
|
135
|
+
* `type ButtonIcon = IconComponent`), without `undefined` and `null`; for a union, the names every member goes by. Left
|
|
136
|
+
* out when `type` says them all.
|
|
137
|
+
*/
|
|
138
|
+
readonly typeNames?: readonly string[];
|
|
81
139
|
/** The first paragraph of its TSDoc; empty when it has none. */
|
|
82
140
|
readonly description: string;
|
|
83
141
|
/** Its `@defaultValue`, when the TSDoc gives one. */
|
|
84
142
|
readonly defaultValue?: string;
|
|
85
143
|
/** Whether the prop must be passed. */
|
|
86
144
|
readonly isRequired: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* The custom control the catalogue gives it by its type or its name (a control's `matches`), when one does: the
|
|
147
|
+
* plugin adds it as it serves the docs, so the panel draws it in every story that names no control for the prop.
|
|
148
|
+
*/
|
|
149
|
+
readonly customControl?: string;
|
|
87
150
|
/** For a choice, its values in the order of the type. */
|
|
88
151
|
readonly choices?: readonly (string | number)[];
|
|
89
152
|
/** For an event, its signature. */
|
|
@@ -103,6 +166,24 @@ export type PropDocs = {
|
|
|
103
166
|
* in the order the source declares them: the API reference lists them under the prop, folded. Left out otherwise.
|
|
104
167
|
*/
|
|
105
168
|
readonly members?: readonly MemberDocs[];
|
|
169
|
+
/**
|
|
170
|
+
* For a prop of kind `other`, what its value looks like when plain JSON can hold it (`readonly string[]`, `{ a; b? }`,
|
|
171
|
+
* `"sm" | number`): the panel draws fields from it and a link's value is checked against it. Left out otherwise.
|
|
172
|
+
*/
|
|
173
|
+
readonly shape?: ValueShape;
|
|
174
|
+
/**
|
|
175
|
+
* The design tokens its TSDoc asks for (`@token color`): a token's type or a part of its name. Left out when it asks
|
|
176
|
+
* for none.
|
|
177
|
+
*/
|
|
178
|
+
readonly token?: string;
|
|
179
|
+
/**
|
|
180
|
+
* For a prop only some variants of a union of props declare, when it can be passed: the discriminant's values that
|
|
181
|
+
* select them. Such a prop is never required. Left out for a prop every variant declares, and when the union has no
|
|
182
|
+
* discriminant.
|
|
183
|
+
*/
|
|
184
|
+
readonly onlyWhen?: PropCondition;
|
|
185
|
+
/** Why its type is not the one its source writes, or says nothing, in source order. Left out when there is none. */
|
|
186
|
+
readonly notes?: readonly PropTypeNote[];
|
|
106
187
|
};
|
|
107
188
|
/** A part the component is used with, named in the meta's `subcomponents`: listed under it on its page. */
|
|
108
189
|
export type SubcomponentDocs = {
|
|
@@ -162,6 +243,8 @@ export type ComponentDocs = {
|
|
|
162
243
|
* markup from it. Left out when the component is written by its name.
|
|
163
244
|
*/
|
|
164
245
|
readonly selector?: string;
|
|
246
|
+
/** Why it lists no props although it takes some; left out when its props are read, or it takes none. */
|
|
247
|
+
readonly propsNote?: PropsNote;
|
|
165
248
|
};
|
|
166
249
|
/**
|
|
167
250
|
* The name a story's code writes the component with: its selector when its framework matches components by one, its
|
|
@@ -30,7 +30,13 @@ const isMemberDocs = (value) => isRecord(value) &&
|
|
|
30
30
|
typeof value["description"] === "string" &&
|
|
31
31
|
typeof value["isRequired"] === "boolean" &&
|
|
32
32
|
(value["defaultValue"] === undefined || typeof value["defaultValue"] === "string");
|
|
33
|
-
/** Whether a value is
|
|
33
|
+
/** Whether a value is a note with a reason: what the reference reads first. */
|
|
34
|
+
const isNote = (value) => isRecord(value) && typeof value["reason"] === "string";
|
|
35
|
+
/**
|
|
36
|
+
* Whether a value is one prop's docs. Some fields are left to what reads them, as a choice's values and a signature are:
|
|
37
|
+
* a custom control's name is only looked up among the catalogue's own controls, so a wrong one finds none and says so
|
|
38
|
+
* beside the field; the shell reads no type's names.
|
|
39
|
+
*/
|
|
34
40
|
const isPropDocs = (value) => isRecord(value) &&
|
|
35
41
|
typeof value["name"] === "string" &&
|
|
36
42
|
PROP_KINDS.some((kind) => kind === value["kind"]) &&
|
|
@@ -39,8 +45,18 @@ const isPropDocs = (value) => isRecord(value) &&
|
|
|
39
45
|
typeof value["isRequired"] === "boolean" &&
|
|
40
46
|
(value["canTakeText"] === undefined || typeof value["canTakeText"] === "boolean") &&
|
|
41
47
|
(value["group"] === undefined || typeof value["group"] === "string") &&
|
|
48
|
+
(value["token"] === undefined || typeof value["token"] === "string") &&
|
|
49
|
+
// the plugin's own answer: looked at closer by what reads it, which loads with the first prop that has one
|
|
50
|
+
(value["shape"] === undefined ||
|
|
51
|
+
(isRecord(value["shape"]) && typeof value["shape"]["kind"] === "string")) &&
|
|
42
52
|
(value["members"] === undefined ||
|
|
43
|
-
(Array.isArray(value["members"]) && value["members"].every(isMemberDocs)))
|
|
53
|
+
(Array.isArray(value["members"]) && value["members"].every(isMemberDocs))) &&
|
|
54
|
+
// the plugin's own answers, read by the reference, which loads later and draws only the reasons it knows
|
|
55
|
+
(value["onlyWhen"] === undefined ||
|
|
56
|
+
(isRecord(value["onlyWhen"]) &&
|
|
57
|
+
typeof value["onlyWhen"]["prop"] === "string" &&
|
|
58
|
+
Array.isArray(value["onlyWhen"]["values"]))) &&
|
|
59
|
+
(value["notes"] === undefined || (Array.isArray(value["notes"]) && value["notes"].every(isNote)));
|
|
44
60
|
/** Whether a value is a subcomponent's docs. */
|
|
45
61
|
const isSubcomponentDocs = (value) => isRecord(value) &&
|
|
46
62
|
typeof value["name"] === "string" &&
|
|
@@ -74,4 +90,5 @@ export const isComponentDocs = (value) => isRecord(value) &&
|
|
|
74
90
|
Array.isArray(value["subcomponents"]) &&
|
|
75
91
|
value["subcomponents"].every(isSubcomponentDocs) &&
|
|
76
92
|
(value["signature"] === undefined || isFunctionSignatureDocs(value["signature"])) &&
|
|
77
|
-
(value["selector"] === undefined || typeof value["selector"] === "string")
|
|
93
|
+
(value["selector"] === undefined || typeof value["selector"] === "string") &&
|
|
94
|
+
(value["propsNote"] === undefined || isNote(value["propsNote"]));
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a custom control is told of its arg, and the code its values are written as in a story's code: the expression a
|
|
3
|
+
* control's `toCode` gives (`IconStar` for the name `"IconStar"`), for the Code tab and `forgebook story`. Pure.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import type { ArgControlModule, ControlArgType } from "./argControl.ts";
|
|
8
|
+
import type { PanelProp } from "./argTypes.ts";
|
|
9
|
+
import { type PanelArgs } from "./messages.ts";
|
|
10
|
+
/**
|
|
11
|
+
* What a control is told of its arg.
|
|
12
|
+
*
|
|
13
|
+
* @param prop - the prop, with the story's `argTypes` laid over it.
|
|
14
|
+
*/
|
|
15
|
+
export declare const controlArgTypeOf: (prop: PanelProp) => ControlArgType;
|
|
16
|
+
/** A control's `toCode`, by control: what writes its values as code. */
|
|
17
|
+
export type ControlCoders = Readonly<Record<string, ArgControlModule["toCode"]>>;
|
|
18
|
+
/**
|
|
19
|
+
* The code each arg of a custom control is written as, by arg: the expression its control's `toCode` gives for its
|
|
20
|
+
* value. An arg without a value, with the panel's "no value", whose control writes no code, or whose `toCode` throws
|
|
21
|
+
* or gives nothing, is written from its value as before.
|
|
22
|
+
*
|
|
23
|
+
* @param props - the props the panel sets, with the story's `argTypes` laid over them.
|
|
24
|
+
* @param args - the values the code is written from.
|
|
25
|
+
* @param coders - each control's `toCode`, by control.
|
|
26
|
+
*/
|
|
27
|
+
export declare const controlCodeOf: (props: readonly PanelProp[], args: PanelArgs, coders: ControlCoders) => Readonly<Record<string, string>>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { isArgValue, isUnsetArg } from "./messages.js";
|
|
2
|
+
/**
|
|
3
|
+
* What a control is told of its arg.
|
|
4
|
+
*
|
|
5
|
+
* @param prop - the prop, with the story's `argTypes` laid over it.
|
|
6
|
+
*/
|
|
7
|
+
export const controlArgTypeOf = (prop) => ({
|
|
8
|
+
name: prop.name,
|
|
9
|
+
label: prop.label ?? prop.name,
|
|
10
|
+
description: prop.description,
|
|
11
|
+
...(prop.choices === undefined ? {} : { options: prop.choices }),
|
|
12
|
+
...(prop.min === undefined ? {} : { min: prop.min }),
|
|
13
|
+
...(prop.max === undefined ? {} : { max: prop.max }),
|
|
14
|
+
...(prop.step === undefined ? {} : { step: prop.step }),
|
|
15
|
+
// the frame's word, read here since only a control needs it: what is no plain data never reaches a control
|
|
16
|
+
...(prop.settings === undefined || !isArgValue(prop.settings) ? {} : { settings: prop.settings })
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* The code each arg of a custom control is written as, by arg: the expression its control's `toCode` gives for its
|
|
20
|
+
* value. An arg without a value, with the panel's "no value", whose control writes no code, or whose `toCode` throws
|
|
21
|
+
* or gives nothing, is written from its value as before.
|
|
22
|
+
*
|
|
23
|
+
* @param props - the props the panel sets, with the story's `argTypes` laid over them.
|
|
24
|
+
* @param args - the values the code is written from.
|
|
25
|
+
* @param coders - each control's `toCode`, by control.
|
|
26
|
+
*/
|
|
27
|
+
export const controlCodeOf = (props, args, coders) => Object.fromEntries(props.flatMap((prop) => {
|
|
28
|
+
const control = prop.customControl;
|
|
29
|
+
const value = Object.hasOwn(args, prop.name) ? args[prop.name] : undefined;
|
|
30
|
+
const toCode = control !== undefined && Object.hasOwn(coders, control) ? coders[control] : undefined;
|
|
31
|
+
if (toCode === undefined || value === undefined || isUnsetArg(value))
|
|
32
|
+
return [];
|
|
33
|
+
try {
|
|
34
|
+
const code = toCode(value, controlArgTypeOf(prop));
|
|
35
|
+
return typeof code === "string" && code !== "" ? [[prop.name, code]] : [];
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// the control's code is its own: a failure writes the value as JSON, as a control without `toCode`
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A call's arguments as the Events tab shows them: each written short for the log, and an object's or a list's content to
|
|
3
|
+
* open in it. Read in the frame, where the values are; only the text crosses. Pure.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* An event's argument written short for the call log.
|
|
9
|
+
*
|
|
10
|
+
* @param value - anything a callback received.
|
|
11
|
+
*/
|
|
12
|
+
export declare const previewValue: (value: unknown) => string;
|
|
13
|
+
/**
|
|
14
|
+
* An argument's content for the log, when it is an object or a list: JSON, two spaces deep, a function as `ƒ`, an
|
|
15
|
+
* object met again as `[circular]`, cut past `DETAIL_LENGTH`; `null` for anything else (a text, a number, an event).
|
|
16
|
+
*
|
|
17
|
+
* @param value - anything a callback received.
|
|
18
|
+
*/
|
|
19
|
+
export declare const detailOf: (value: unknown) => string | null;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A call's arguments as the Events tab shows them: each written short for the log, and an object's or a list's content to
|
|
3
|
+
* open in it. Read in the frame, where the values are; only the text crosses. Pure.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
/** Whether a value is a plain object. */
|
|
8
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
9
|
+
/**
|
|
10
|
+
* An event's argument written short for the call log.
|
|
11
|
+
*
|
|
12
|
+
* @param value - anything a callback received.
|
|
13
|
+
*/
|
|
14
|
+
export const previewValue = (value) => {
|
|
15
|
+
if (typeof value === "string")
|
|
16
|
+
return JSON.stringify(value.length > 60 ? `${value.slice(0, 60)}…` : value);
|
|
17
|
+
if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint")
|
|
18
|
+
return String(value);
|
|
19
|
+
if (value === null || value === undefined)
|
|
20
|
+
return String(value);
|
|
21
|
+
if (typeof value === "function")
|
|
22
|
+
return "ƒ";
|
|
23
|
+
if (typeof Event !== "undefined" && value instanceof Event)
|
|
24
|
+
return value.constructor.name;
|
|
25
|
+
if (isRecord(value) && "nativeEvent" in value)
|
|
26
|
+
return "SyntheticEvent";
|
|
27
|
+
return Array.isArray(value) ? `[…${value.length}]` : "{…}";
|
|
28
|
+
};
|
|
29
|
+
/** The most characters an argument's content keeps in the log. */
|
|
30
|
+
const DETAIL_LENGTH = 2000;
|
|
31
|
+
/**
|
|
32
|
+
* An argument's content for the log, when it is an object or a list: JSON, two spaces deep, a function as `ƒ`, an
|
|
33
|
+
* object met again as `[circular]`, cut past `DETAIL_LENGTH`; `null` for anything else (a text, a number, an event).
|
|
34
|
+
*
|
|
35
|
+
* @param value - anything a callback received.
|
|
36
|
+
*/
|
|
37
|
+
export const detailOf = (value) => {
|
|
38
|
+
if (typeof value !== "object" || value === null)
|
|
39
|
+
return null;
|
|
40
|
+
if (typeof Event !== "undefined" && value instanceof Event)
|
|
41
|
+
return null;
|
|
42
|
+
if ("nativeEvent" in value)
|
|
43
|
+
return null;
|
|
44
|
+
const seen = new WeakSet();
|
|
45
|
+
const text = JSON.stringify(value, (_key, inner) => {
|
|
46
|
+
if (typeof inner === "function")
|
|
47
|
+
return "ƒ";
|
|
48
|
+
if (typeof inner === "bigint")
|
|
49
|
+
return `${inner}n`;
|
|
50
|
+
if (typeof inner === "object" && inner !== null) {
|
|
51
|
+
if (seen.has(inner))
|
|
52
|
+
return "[circular]";
|
|
53
|
+
seen.add(inner);
|
|
54
|
+
}
|
|
55
|
+
return inner;
|
|
56
|
+
}, 2);
|
|
57
|
+
return text.length > DETAIL_LENGTH ? `${text.slice(0, DETAIL_LENGTH)}…` : text;
|
|
58
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tells the shell the colour scheme a frame's document draws in, so the frame element can have the same one.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* A browser paints an opaque canvas behind an embedded document when its used colour scheme differs from its frame
|
|
6
|
+
* element's: white for a light document, near black for a dark one, over the page colour the shell draws behind the
|
|
7
|
+
* frame. Which scheme the document draws in is its own business (a theme's `color-scheme`, a `meta` tag, the system's
|
|
8
|
+
* preference), and only the document can read it; writing a scheme on the document instead would change how the story
|
|
9
|
+
* draws its controls.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import type { FrameMessage } from "../messages.ts";
|
|
14
|
+
/** A colour scheme a document draws in. */
|
|
15
|
+
export type CanvasScheme = "light" | "dark";
|
|
16
|
+
/**
|
|
17
|
+
* The scheme a canvas colour belongs to.
|
|
18
|
+
*
|
|
19
|
+
* @param colour - the computed colour of `Canvas`, as `rgb(18, 18, 18)`.
|
|
20
|
+
* @returns the scheme; light when the text is not a colour, as a document that declares no scheme draws.
|
|
21
|
+
*/
|
|
22
|
+
export declare const schemeOfCanvas: (colour: string) => CanvasScheme;
|
|
23
|
+
/**
|
|
24
|
+
* Follows the scheme a frame's document draws in: tells it now, and again when it changes with the root (a switch, a
|
|
25
|
+
* theme's class), a style sheet that finished loading, or the system's preference.
|
|
26
|
+
*
|
|
27
|
+
* @param document - the frame's document.
|
|
28
|
+
* @param window - its window.
|
|
29
|
+
* @param storyId - the story's id, for the shell.
|
|
30
|
+
* @param tellShell - tells the shell, once for each change.
|
|
31
|
+
* @returns what checks it again, for what no event says: styles a story's module brought with it.
|
|
32
|
+
*/
|
|
33
|
+
export declare const followCanvasScheme: (document: Document, window: Window, storyId: string, tellShell: (message: FrameMessage) => void) => (() => void);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tells the shell the colour scheme a frame's document draws in, so the frame element can have the same one.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* A browser paints an opaque canvas behind an embedded document when its used colour scheme differs from its frame
|
|
6
|
+
* element's: white for a light document, near black for a dark one, over the page colour the shell draws behind the
|
|
7
|
+
* frame. Which scheme the document draws in is its own business (a theme's `color-scheme`, a `meta` tag, the system's
|
|
8
|
+
* preference), and only the document can read it; writing a scheme on the document instead would change how the story
|
|
9
|
+
* draws its controls.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
/** Red, green and blue summed above this is a light canvas: browsers keep theirs near white or near black. */
|
|
14
|
+
const LIGHT_CANVAS_SUM = 382;
|
|
15
|
+
/**
|
|
16
|
+
* The scheme a canvas colour belongs to.
|
|
17
|
+
*
|
|
18
|
+
* @param colour - the computed colour of `Canvas`, as `rgb(18, 18, 18)`.
|
|
19
|
+
* @returns the scheme; light when the text is not a colour, as a document that declares no scheme draws.
|
|
20
|
+
*/
|
|
21
|
+
export const schemeOfCanvas = (colour) => {
|
|
22
|
+
const channels = colour.match(/\d+(?:\.\d+)?/g)?.slice(0, 3) ?? [];
|
|
23
|
+
const sum = channels.reduce((total, channel) => total + Number(channel), 0);
|
|
24
|
+
return channels.length === 3 && sum <= LIGHT_CANVAS_SUM ? "dark" : "light";
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The scheme a document draws in, read from what its `Canvas` system colour resolves to: this takes in `color-scheme`
|
|
28
|
+
* with several values, the system's preference and a `meta` tag, which the computed property alone does not say.
|
|
29
|
+
*
|
|
30
|
+
* @param document - the document.
|
|
31
|
+
* @param window - its window.
|
|
32
|
+
*/
|
|
33
|
+
const usedScheme = (document, window) => {
|
|
34
|
+
// in the `head`, where no story's observer of the page sees it come and go; it inherits the root's scheme
|
|
35
|
+
const probe = document.createElement("meta");
|
|
36
|
+
probe.style.color = "Canvas";
|
|
37
|
+
document.head.append(probe);
|
|
38
|
+
const colour = window.getComputedStyle(probe).color;
|
|
39
|
+
probe.remove();
|
|
40
|
+
return schemeOfCanvas(colour);
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Follows the scheme a frame's document draws in: tells it now, and again when it changes with the root (a switch, a
|
|
44
|
+
* theme's class), a style sheet that finished loading, or the system's preference.
|
|
45
|
+
*
|
|
46
|
+
* @param document - the frame's document.
|
|
47
|
+
* @param window - its window.
|
|
48
|
+
* @param storyId - the story's id, for the shell.
|
|
49
|
+
* @param tellShell - tells the shell, once for each change.
|
|
50
|
+
* @returns what checks it again, for what no event says: styles a story's module brought with it.
|
|
51
|
+
*/
|
|
52
|
+
export const followCanvasScheme = (document, window, storyId, tellShell) => {
|
|
53
|
+
let told;
|
|
54
|
+
const check = () => {
|
|
55
|
+
const scheme = usedScheme(document, window);
|
|
56
|
+
if (scheme === told)
|
|
57
|
+
return;
|
|
58
|
+
told = scheme;
|
|
59
|
+
tellShell({ type: "forgebook:scheme", storyId, scheme });
|
|
60
|
+
};
|
|
61
|
+
new MutationObserver(check).observe(document.documentElement, { attributes: true });
|
|
62
|
+
// a `load` does not bubble: seen on its way down, as a `link` of the `head` finishes
|
|
63
|
+
document.addEventListener("load", check, true);
|
|
64
|
+
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", check);
|
|
65
|
+
check();
|
|
66
|
+
return check;
|
|
67
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type PanelArgs } from "../messages.ts";
|
|
2
|
+
import { panelArgTypesOf } from "../storyArgTypes.ts";
|
|
3
|
+
import type { ControlFrameLoaders } from "./panelControls.ts";
|
|
4
|
+
/** What the frame modules made of the values. */
|
|
5
|
+
export type ControlValues = {
|
|
6
|
+
/** What the story receives, by arg, over what the panel's JSON gives it. */
|
|
7
|
+
readonly values: Readonly<Record<string, unknown>>;
|
|
8
|
+
/** The args whose value could not be made: the story keeps its own. */
|
|
9
|
+
readonly dropped: readonly string[];
|
|
10
|
+
/** The story's own values as the panel shows them, by arg, for those a frame module names. */
|
|
11
|
+
readonly own: PanelArgs;
|
|
12
|
+
/** What went wrong, one sentence per failure. */
|
|
13
|
+
readonly problems: readonly string[];
|
|
14
|
+
};
|
|
15
|
+
/** The story, as the frame modules read it. */
|
|
16
|
+
export type ControlStory = {
|
|
17
|
+
/** Its own args. */
|
|
18
|
+
readonly args: Readonly<Record<string, unknown>>;
|
|
19
|
+
/** Its `argTypes`: the controls they name, and a control's `settings`. */
|
|
20
|
+
readonly argTypes: Parameters<typeof panelArgTypesOf>[0];
|
|
21
|
+
/** Loads its component's docs, which name the controls the catalogue gives props by type; none without docs. */
|
|
22
|
+
readonly loadDocs?: (() => Promise<unknown>) | undefined;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The custom control of each arg, as the panel draws it: a control the story's `argTypes` name, else the one the
|
|
26
|
+
* catalogue gives the prop by type, unless the `argTypes` name another control for it.
|
|
27
|
+
*
|
|
28
|
+
* @param argTypes - the story's `argTypes`, as the panel reads them.
|
|
29
|
+
* @param docs - its component's docs, as the plugin served them.
|
|
30
|
+
*/
|
|
31
|
+
export declare const argControlsOf: (argTypes: ReturnType<typeof panelArgTypesOf>, docs: unknown) => Readonly<Record<string, string>>;
|
|
32
|
+
/**
|
|
33
|
+
* The values of the controls with a frame module, as the story and the panel take them.
|
|
34
|
+
*
|
|
35
|
+
* @param args - the panel's values, checked by the shell.
|
|
36
|
+
* @param loaders - the frame modules, by control.
|
|
37
|
+
* @param story - the story's own args, its `argTypes` and its docs.
|
|
38
|
+
*/
|
|
39
|
+
export declare const controlValuesOf: (args: PanelArgs, loaders: ControlFrameLoaders, story: ControlStory) => Promise<ControlValues>;
|