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,53 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { UNSET_ARG } from "../../messages.js";
|
|
3
|
+
import { resolvedShape } from "../../shapeValues.js";
|
|
4
|
+
import { canSetShape } from "../../valueShape.js";
|
|
5
|
+
import { LazyView, lazyModule } from "../lazyModule.js";
|
|
6
|
+
import { EDITOR_STRINGS } from "./editorStrings.js";
|
|
7
|
+
import { FileEditor } from "./FileEditor.js";
|
|
8
|
+
import { SearchSelect } from "./SearchSelect.js";
|
|
9
|
+
import { TokenEditor } from "./TokenEditor.js";
|
|
10
|
+
import { ValueField } from "./ValueField.js";
|
|
11
|
+
import "./valueEditors.css";
|
|
12
|
+
/** The host of the custom controls, which a catalogue with none never loads. */
|
|
13
|
+
const CUSTOM_CONTROL = lazyModule(() => import("../CustomControl.js").then((module) => module.CustomControl));
|
|
14
|
+
/** No custom control registered. */
|
|
15
|
+
const NO_ARG_CONTROLS = {};
|
|
16
|
+
/** A custom control's field: its host loads with the first, so an editor of any other kind pays nothing for it. */
|
|
17
|
+
const CustomField = ({ prop, name, value, argControls, onValueChange }) => (_jsx(LazyView, { module: CUSTOM_CONTROL, props: { prop, name, value, loaders: argControls ?? NO_ARG_CONTROLS, onValueChange }, loading: null, failed: (message) => (_jsx("p", { className: "forgebook-prop__description forgebook-prop__problem", role: "alert", children: message })) }));
|
|
18
|
+
/** A prop's fields, or why it has none: a required part only named values can fill, and the source names none. */
|
|
19
|
+
const ShapedField = (props) => canSetShape(props.shape, props.namedValues) ? (_jsx(ValueField, { ...props })) : (_jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.cannotSet }));
|
|
20
|
+
/**
|
|
21
|
+
* One prop's editor.
|
|
22
|
+
*
|
|
23
|
+
* @param props - the prop, its value, and what it may draw from.
|
|
24
|
+
*/
|
|
25
|
+
export const PropEditor = ({ prop, value, descriptionId, namedValues, loadTokens, argControls, onValueChange }) => {
|
|
26
|
+
const label = prop.label ?? prop.name;
|
|
27
|
+
const change = (next) => onValueChange(prop.name, next ?? UNSET_ARG);
|
|
28
|
+
if (prop.customControl !== undefined) {
|
|
29
|
+
return (_jsx(CustomField, { prop: prop, name: prop.customControl, value: value, argControls: argControls, onValueChange: onValueChange }));
|
|
30
|
+
}
|
|
31
|
+
if (prop.control === "file") {
|
|
32
|
+
return (_jsx(FileEditor, { label: label, describedBy: descriptionId, accept: prop.accept, value: value, onChange: change }));
|
|
33
|
+
}
|
|
34
|
+
if (prop.control === "token" && prop.tokens !== undefined) {
|
|
35
|
+
return (_jsx(TokenEditor, { label: label, describedBy: descriptionId, tokens: prop.tokens, value: typeof value === "string" ? value : undefined, loadTokens: loadTokens, onChange: change }));
|
|
36
|
+
}
|
|
37
|
+
if (Object.hasOwn(namedValues, prop.type) && prop.control === undefined && prop.kind === "other") {
|
|
38
|
+
return (_jsx(ValueField, { shape: {
|
|
39
|
+
kind: "named",
|
|
40
|
+
type: prop.type,
|
|
41
|
+
...(prop.canTakeText === true ? { canTakeText: true } : {})
|
|
42
|
+
}, value: value, label: label, describedBy: descriptionId, namedValues: namedValues, depth: 0, onChange: change }));
|
|
43
|
+
}
|
|
44
|
+
if (prop.shape !== undefined) {
|
|
45
|
+
return (_jsx(ShapedField, { shape: resolvedShape(prop.shape), value: value, label: label, describedBy: descriptionId, namedValues: namedValues, depth: 0, onChange: change }));
|
|
46
|
+
}
|
|
47
|
+
// many options, searched
|
|
48
|
+
const choices = prop.choices ?? [];
|
|
49
|
+
return (_jsx(SearchSelect, { label: label, describedBy: descriptionId, options: choices.map((choice) => ({
|
|
50
|
+
value: String(choice),
|
|
51
|
+
label: prop.labels?.[String(choice)] ?? String(choice)
|
|
52
|
+
})), value: typeof value === "string" || typeof value === "number" ? String(value) : undefined, onChange: (text) => change(choices.find((choice) => String(choice) === text)) }));
|
|
53
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Any names, each holding a value of one shape (`Record<string, number>`): each entry's name and value, added and
|
|
3
|
+
* removed. A name that cannot be kept stays in its field with the reason beside it, and the value is untouched.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { type ReactNode } from "react";
|
|
8
|
+
import type { ValueShape } from "../../valueShape.ts";
|
|
9
|
+
import type { DrawField, FieldProps } from "./fieldTypes.ts";
|
|
10
|
+
/**
|
|
11
|
+
* A record's editor.
|
|
12
|
+
*
|
|
13
|
+
* @param props - the field's props, and how to draw a value.
|
|
14
|
+
*/
|
|
15
|
+
export declare const RecordEditor: ({ shape, value, label, namedValues, depth, onChange, drawField }: FieldProps & {
|
|
16
|
+
readonly shape: {
|
|
17
|
+
readonly of: ValueShape;
|
|
18
|
+
};
|
|
19
|
+
readonly drawField: DrawField;
|
|
20
|
+
}) => ReactNode;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Any names, each holding a value of one shape (`Record<string, number>`): each entry's name and value, added and
|
|
4
|
+
* removed. A name that cannot be kept stays in its field with the reason beside it, and the value is untouched.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { useId, useState } from "react";
|
|
9
|
+
import { isArgObject } from "../../messages.js";
|
|
10
|
+
import { isUnsafeFreeName, startValueOf } from "../../shapeValues.js";
|
|
11
|
+
import { Icon } from "../icons.js";
|
|
12
|
+
import { EDITOR_STRINGS } from "./editorStrings.js";
|
|
13
|
+
/** Names no object holds: a component that merges it would write on every object of the page. */
|
|
14
|
+
const PROTOTYPE_NAMES = ["__proto__", "constructor", "prototype"];
|
|
15
|
+
/** Why a name cannot be kept, or none when it can. */
|
|
16
|
+
const nameProblem = (name, others) => {
|
|
17
|
+
if (name === "")
|
|
18
|
+
return EDITOR_STRINGS.nameEmpty;
|
|
19
|
+
if (others.includes(name))
|
|
20
|
+
return EDITOR_STRINGS.nameTaken;
|
|
21
|
+
return PROTOTYPE_NAMES.includes(name) || isUnsafeFreeName(name) ? EDITOR_STRINGS.nameRefused : undefined;
|
|
22
|
+
};
|
|
23
|
+
/** An entry's name: what is typed stays here until it can be kept. */
|
|
24
|
+
const EntryName = ({ name, others, label, onRename }) => {
|
|
25
|
+
const problemId = useId();
|
|
26
|
+
const [draft, setDraft] = useState(name);
|
|
27
|
+
// the row may come to hold another entry (one above it removed, a reset): what was typed was for the last
|
|
28
|
+
const [shownName, setShownName] = useState(name);
|
|
29
|
+
if (shownName !== name) {
|
|
30
|
+
setShownName(name);
|
|
31
|
+
setDraft(name);
|
|
32
|
+
}
|
|
33
|
+
const problem = nameProblem(draft, others);
|
|
34
|
+
return (_jsxs("div", { className: "forgebook-value-record__name", children: [_jsx("input", { type: "text", "aria-label": EDITOR_STRINGS.fieldName(label), "aria-invalid": problem !== undefined, "aria-describedby": problem === undefined ? undefined : problemId, value: draft, onChange: (event) => {
|
|
35
|
+
const next = event.target.value;
|
|
36
|
+
setDraft(next);
|
|
37
|
+
if (nameProblem(next, others) === undefined)
|
|
38
|
+
onRename(next);
|
|
39
|
+
}, onBlur: () => {
|
|
40
|
+
if (problem !== undefined)
|
|
41
|
+
setDraft(name);
|
|
42
|
+
} }), problem === undefined ? null : (_jsx("p", { id: problemId, className: "forgebook-value-note", "data-tone": "problem", role: "alert", children: problem }))] }));
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* A record's editor.
|
|
46
|
+
*
|
|
47
|
+
* @param props - the field's props, and how to draw a value.
|
|
48
|
+
*/
|
|
49
|
+
export const RecordEditor = ({ shape, value, label, namedValues, depth, onChange, drawField }) => {
|
|
50
|
+
const current = value !== undefined && isArgObject(value) ? value : {};
|
|
51
|
+
const entries = Object.entries(current);
|
|
52
|
+
const names = entries.map(([name]) => name);
|
|
53
|
+
const start = startValueOf(shape.of, namedValues);
|
|
54
|
+
const newName = () => {
|
|
55
|
+
const base = EDITOR_STRINGS.newField;
|
|
56
|
+
let count = names.length + 1;
|
|
57
|
+
while (names.includes(`${base}${count}`))
|
|
58
|
+
count += 1;
|
|
59
|
+
return `${base}${count}`;
|
|
60
|
+
};
|
|
61
|
+
// renamed in place, so the entries keep their order and the field keeps its focus
|
|
62
|
+
const rename = (from, to) => onChange(Object.fromEntries(entries.map(([name, each]) => [name === from ? to : name, each])));
|
|
63
|
+
const change = (name, next) => {
|
|
64
|
+
if (next !== undefined)
|
|
65
|
+
onChange({ ...current, [name]: next });
|
|
66
|
+
};
|
|
67
|
+
return (_jsxs("div", { className: "forgebook-value-list", children: [entries.length === 0 ? _jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.emptyList }) : null, entries.map(([name, each], index) => {
|
|
68
|
+
const entryLabel = EDITOR_STRINGS.itemName(label, index + 1);
|
|
69
|
+
return (_jsxs("div", { className: "forgebook-value-list__item", children: [_jsxs("div", { className: "forgebook-value-record__entry", children: [_jsx(EntryName, { name: name, others: names.filter((other) => other !== name), label: entryLabel, onRename: (to) => rename(name, to) }), _jsx("div", { className: "forgebook-value-list__field", children: drawField({
|
|
70
|
+
shape: shape.of,
|
|
71
|
+
value: each,
|
|
72
|
+
label: EDITOR_STRINGS.fieldValue(entryLabel, name),
|
|
73
|
+
namedValues,
|
|
74
|
+
depth: depth + 1,
|
|
75
|
+
onChange: (next) => change(name, next)
|
|
76
|
+
}) })] }), _jsx("div", { className: "forgebook-value-list__buttons", children: _jsx("button", { type: "button", className: "forgebook-prop__action", "aria-label": EDITOR_STRINGS.removeItem(entryLabel), title: EDITOR_STRINGS.removeItem(entryLabel), onClick: () => {
|
|
77
|
+
const { [name]: _removed, ...rest } = current;
|
|
78
|
+
onChange(rest);
|
|
79
|
+
}, children: _jsx(Icon, { name: "close", size: 12 }) }) })] }, index));
|
|
80
|
+
}), _jsxs("button", { type: "button", className: "forgebook-text-button forgebook-value-add", disabled: start === undefined, onClick: () => {
|
|
81
|
+
if (start !== undefined)
|
|
82
|
+
onChange({ ...current, [newName()]: start });
|
|
83
|
+
}, children: [_jsx(Icon, { name: "plus", size: 12 }), EDITOR_STRINGS.addItem(label)] })] }));
|
|
84
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A list to search: a text field that narrows its options, walked with the arrow keys, as a combobox for screen readers.
|
|
3
|
+
* For many options, and for the source's named values and the catalogue's tokens, where a name is what a reader knows.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The list opens in the flow rather than over the panel: the panel scrolls, and would cut an overlay at its edge.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { type ReactNode } from "react";
|
|
11
|
+
/** One option of the list. */
|
|
12
|
+
export type SearchOption = {
|
|
13
|
+
/** What choosing it gives. */
|
|
14
|
+
readonly value: string;
|
|
15
|
+
/** What it is called. */
|
|
16
|
+
readonly label: string;
|
|
17
|
+
/** What it holds, beside its name; none by default. */
|
|
18
|
+
readonly hint?: string;
|
|
19
|
+
/** A colour to show beside its name; none by default. */
|
|
20
|
+
readonly swatch?: string;
|
|
21
|
+
};
|
|
22
|
+
/** The list's props. */
|
|
23
|
+
export type SearchSelectProps = {
|
|
24
|
+
/** The field's name. */
|
|
25
|
+
readonly label: string;
|
|
26
|
+
/** The element that describes it. */
|
|
27
|
+
readonly describedBy?: string | undefined;
|
|
28
|
+
/** The options. */
|
|
29
|
+
readonly options: readonly SearchOption[];
|
|
30
|
+
/** The chosen value; none when nothing is. */
|
|
31
|
+
readonly value: string | undefined;
|
|
32
|
+
/** Whether the list offers "no value"; `true` by default. */
|
|
33
|
+
readonly canClear?: boolean;
|
|
34
|
+
/** Called with the chosen value; none for "no value". */
|
|
35
|
+
readonly onChange: (value: string | undefined) => void;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A list to search.
|
|
39
|
+
*
|
|
40
|
+
* @param props - the options and the chosen value.
|
|
41
|
+
*/
|
|
42
|
+
export declare const SearchSelect: ({ label, describedBy, options, value, canClear, onChange }: SearchSelectProps) => ReactNode;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* A list to search: a text field that narrows its options, walked with the arrow keys, as a combobox for screen readers.
|
|
4
|
+
* For many options, and for the source's named values and the catalogue's tokens, where a name is what a reader knows.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* The list opens in the flow rather than over the panel: the panel scrolls, and would cut an overlay at its edge.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { useId, useMemo, useState } from "react";
|
|
12
|
+
import { EDITOR_STRINGS } from "./editorStrings.js";
|
|
13
|
+
/** The row that takes the value away: a value no option holds, since an option's comes from a name. */
|
|
14
|
+
const CLEAR_ROW = "\0clear";
|
|
15
|
+
/** The most options drawn at once: the rest are a search away. */
|
|
16
|
+
const MOST_SHOWN = 100;
|
|
17
|
+
/** The options a search keeps: every word in the name or in what it holds. */
|
|
18
|
+
const matching = (options, search) => {
|
|
19
|
+
const words = search.toLowerCase().split(/\s+/).filter(Boolean);
|
|
20
|
+
return options.filter((option) => {
|
|
21
|
+
const text = `${option.label} ${option.hint ?? ""}`.toLowerCase();
|
|
22
|
+
return words.every((word) => text.includes(word));
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* A list to search.
|
|
27
|
+
*
|
|
28
|
+
* @param props - the options and the chosen value.
|
|
29
|
+
*/
|
|
30
|
+
export const SearchSelect = ({ label, describedBy, options, value, canClear = true, onChange }) => {
|
|
31
|
+
const listId = useId();
|
|
32
|
+
const [search, setSearch] = useState(undefined);
|
|
33
|
+
const [active, setActive] = useState(0);
|
|
34
|
+
const isOpen = search !== undefined;
|
|
35
|
+
const found = useMemo(() => matching(options, search ?? ""), [options, search]);
|
|
36
|
+
const shown = found.slice(0, MOST_SHOWN);
|
|
37
|
+
const chosenLabel = options.find((option) => option.value === value)?.label ?? value ?? "";
|
|
38
|
+
// the first row takes the value away, where it may go: a reader always has a way back
|
|
39
|
+
const rows = canClear
|
|
40
|
+
? [{ value: CLEAR_ROW, label: EDITOR_STRINGS.searchClear }, ...shown]
|
|
41
|
+
: shown;
|
|
42
|
+
const close = () => {
|
|
43
|
+
setSearch(undefined);
|
|
44
|
+
setActive(0);
|
|
45
|
+
};
|
|
46
|
+
const choose = (row) => {
|
|
47
|
+
if (row !== undefined)
|
|
48
|
+
onChange(row.value === CLEAR_ROW ? undefined : row.value);
|
|
49
|
+
close();
|
|
50
|
+
};
|
|
51
|
+
const onKeyDown = (event) => {
|
|
52
|
+
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
const count = Math.max(1, rows.length);
|
|
55
|
+
if (!isOpen)
|
|
56
|
+
setSearch("");
|
|
57
|
+
else
|
|
58
|
+
setActive((current) => (current + (event.key === "ArrowDown" ? 1 : count - 1)) % count);
|
|
59
|
+
}
|
|
60
|
+
else if (event.key === "Escape" && isOpen) {
|
|
61
|
+
event.stopPropagation();
|
|
62
|
+
close();
|
|
63
|
+
}
|
|
64
|
+
else if (event.key === "Enter" && isOpen) {
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
choose(rows[active]);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const optionId = (index) => `${listId}-${index}`;
|
|
70
|
+
return (_jsxs("div", { className: "forgebook-value-search", children: [_jsx("input", { type: "text", role: "combobox", "aria-label": label, "aria-describedby": describedBy, "aria-expanded": isOpen, "aria-controls": listId, "aria-autocomplete": "list", "aria-activedescendant": isOpen && rows[active] !== undefined ? optionId(active) : undefined, autoComplete: "off", value: search ?? chosenLabel, placeholder: EDITOR_STRINGS.searchClear, onFocus: () => setSearch(""), onBlur: close, onKeyDown: onKeyDown, onChange: (event) => {
|
|
71
|
+
setSearch(event.target.value);
|
|
72
|
+
// what is typed names an option, so the first that matches is what Enter takes
|
|
73
|
+
setActive(event.target.value !== "" && canClear ? 1 : 0);
|
|
74
|
+
} }), isOpen ? (_jsxs("div", { className: "forgebook-value-search__list", id: listId, role: "listbox", "aria-label": EDITOR_STRINGS.searchOptions(label), children: [rows.map((option, index) => (_jsxs("div", { id: optionId(index), role: "option", tabIndex: -1, className: "forgebook-value-search__option", "aria-selected": option.value === CLEAR_ROW ? value === undefined : option.value === value, "data-active": active === index || undefined,
|
|
75
|
+
// chosen on the press: the field's blur that follows would close the list before a click
|
|
76
|
+
onMouseDown: (event) => {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
choose(option);
|
|
79
|
+
}, children: [option.swatch === undefined ? null : (_jsx("span", { className: "forgebook-value-search__swatch", style: { background: option.swatch } })), _jsx("span", { className: "forgebook-value-search__name", children: option.label }), option.hint === undefined ? null : (_jsx("span", { className: "forgebook-value-search__hint", children: option.hint }))] }, option.label))), found.length === 0 ? _jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.searchEmpty }) : null, found.length > MOST_SHOWN ? (_jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.searchMore(found.length - MOST_SHOWN) })) : null] })) : null] }));
|
|
80
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A prop chosen among the catalogue's design tokens (`control: { type: "token", of: "color" }`, or `@token color` in its
|
|
3
|
+
* TSDoc): a search over the tokens it asks for, each with its value and, for a colour, its swatch.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The story receives a plain text, so a link holds it and a reader without the tokens still sees it. What it writes is
|
|
7
|
+
* the token's value unless the control gives a `format` (`var(--{name})`), which keeps a catalogue's themes working.
|
|
8
|
+
* Without tokens to offer it stays a text field: a prop never loses its control to a missing file.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { type ReactNode } from "react";
|
|
13
|
+
import type { TokenRequest } from "../../argTypes.ts";
|
|
14
|
+
import { type ShellToken } from "../audiencePage.ts";
|
|
15
|
+
/**
|
|
16
|
+
* The tokens a request offers: of that type, or with that part in their name.
|
|
17
|
+
*
|
|
18
|
+
* @param tokens - the catalogue's tokens.
|
|
19
|
+
* @param of - the type or the part of a name.
|
|
20
|
+
*/
|
|
21
|
+
export declare const tokensOf: (tokens: readonly ShellToken[], of: string) => readonly ShellToken[];
|
|
22
|
+
/**
|
|
23
|
+
* What a token gives the story.
|
|
24
|
+
*
|
|
25
|
+
* @param token - the token.
|
|
26
|
+
* @param format - the control's `format`; the token's value by default.
|
|
27
|
+
*/
|
|
28
|
+
export declare const tokenText: (token: ShellToken, format: string | undefined) => string;
|
|
29
|
+
/** The token editor's props. */
|
|
30
|
+
export type TokenEditorProps = {
|
|
31
|
+
/** The field's name. */
|
|
32
|
+
readonly label: string;
|
|
33
|
+
/** The element that describes it. */
|
|
34
|
+
readonly describedBy: string;
|
|
35
|
+
/** Which tokens it offers. */
|
|
36
|
+
readonly tokens: TokenRequest;
|
|
37
|
+
/** The chosen text. */
|
|
38
|
+
readonly value: string | undefined;
|
|
39
|
+
/** Loads the catalogue's tokens; none when it has none. */
|
|
40
|
+
readonly loadTokens: (() => Promise<unknown>) | undefined;
|
|
41
|
+
/** Called with the chosen text; none for no value. */
|
|
42
|
+
readonly onChange: (value: string | undefined) => void;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* The token editor.
|
|
46
|
+
*
|
|
47
|
+
* @param props - the field's name, the tokens it offers, and its value.
|
|
48
|
+
*/
|
|
49
|
+
export declare const TokenEditor: ({ label, describedBy, tokens, value, loadTokens, onChange }: TokenEditorProps) => ReactNode;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* A prop chosen among the catalogue's design tokens (`control: { type: "token", of: "color" }`, or `@token color` in its
|
|
4
|
+
* TSDoc): a search over the tokens it asks for, each with its value and, for a colour, its swatch.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* The story receives a plain text, so a link holds it and a reader without the tokens still sees it. What it writes is
|
|
8
|
+
* the token's value unless the control gives a `format` (`var(--{name})`), which keeps a catalogue's themes working.
|
|
9
|
+
* Without tokens to offer it stays a text field: a prop never loses its control to a missing file.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { useEffect, useState } from "react";
|
|
14
|
+
import { isShellTokens } from "../audiencePage.js";
|
|
15
|
+
import { EDITOR_STRINGS } from "./editorStrings.js";
|
|
16
|
+
import { SearchSelect } from "./SearchSelect.js";
|
|
17
|
+
/**
|
|
18
|
+
* The tokens a request offers: of that type, or with that part in their name.
|
|
19
|
+
*
|
|
20
|
+
* @param tokens - the catalogue's tokens.
|
|
21
|
+
* @param of - the type or the part of a name.
|
|
22
|
+
*/
|
|
23
|
+
export const tokensOf = (tokens, of) => tokens.filter((token) => token.deprecated === undefined && (token.type === of || token.name.split(".").includes(of)));
|
|
24
|
+
/**
|
|
25
|
+
* What a token gives the story.
|
|
26
|
+
*
|
|
27
|
+
* @param token - the token.
|
|
28
|
+
* @param format - the control's `format`; the token's value by default.
|
|
29
|
+
*/
|
|
30
|
+
export const tokenText = (token, format) => (format ?? "{value}")
|
|
31
|
+
.replaceAll("{name}", token.name.replaceAll(".", "-"))
|
|
32
|
+
.replaceAll("{value}", token.value);
|
|
33
|
+
/**
|
|
34
|
+
* The token editor.
|
|
35
|
+
*
|
|
36
|
+
* @param props - the field's name, the tokens it offers, and its value.
|
|
37
|
+
*/
|
|
38
|
+
export const TokenEditor = ({ label, describedBy, tokens, value, loadTokens, onChange }) => {
|
|
39
|
+
const [loaded, setLoaded] = useState(loadTokens === undefined ? { status: "ready", value: [] } : { status: "loading" });
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (loadTokens === undefined)
|
|
42
|
+
return;
|
|
43
|
+
let isCurrent = true;
|
|
44
|
+
loadTokens().then((answer) => {
|
|
45
|
+
if (!isCurrent)
|
|
46
|
+
return;
|
|
47
|
+
setLoaded(isShellTokens(answer)
|
|
48
|
+
? { status: "ready", value: answer.tokens }
|
|
49
|
+
: { status: "error", message: "The tokens have an unexpected shape" });
|
|
50
|
+
}, (error) => {
|
|
51
|
+
if (isCurrent) {
|
|
52
|
+
setLoaded({ status: "error", message: error instanceof Error ? error.message : String(error) });
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return () => {
|
|
56
|
+
isCurrent = false;
|
|
57
|
+
};
|
|
58
|
+
}, [loadTokens]);
|
|
59
|
+
if (loaded.status === "loading")
|
|
60
|
+
return _jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.tokensLoading });
|
|
61
|
+
const offered = loaded.status === "ready" ? tokensOf(loaded.value, tokens.of) : [];
|
|
62
|
+
if (offered.length === 0) {
|
|
63
|
+
return (_jsxs(_Fragment, { children: [_jsx("p", { className: "forgebook-value-note", children: loaded.status === "error"
|
|
64
|
+
? EDITOR_STRINGS.tokensFailed(loaded.message)
|
|
65
|
+
: EDITOR_STRINGS.tokensNone(tokens.of) }), _jsx("input", { type: "text", "aria-label": label, "aria-describedby": describedBy, value: value ?? "", onChange: (event) => onChange(event.target.value) })] }));
|
|
66
|
+
}
|
|
67
|
+
const options = offered.map((token) => ({
|
|
68
|
+
value: tokenText(token, tokens.format),
|
|
69
|
+
label: token.name,
|
|
70
|
+
hint: token.value,
|
|
71
|
+
...(token.type === "color" ? { swatch: token.value } : {})
|
|
72
|
+
}));
|
|
73
|
+
return (_jsx(SearchSelect, { label: label, describedBy: describedBy, options: options, value: value, onChange: onChange }));
|
|
74
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A mixed union (`"sm" | number`): choose the type, then the value. Choosing a type starts from that type's first value,
|
|
3
|
+
* so the story at once receives what was chosen, and a value already set says which type it is.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { type ReactNode } from "react";
|
|
8
|
+
import { type ValueShape } from "../../valueShape.ts";
|
|
9
|
+
import type { DrawField, FieldProps } from "./fieldTypes.ts";
|
|
10
|
+
/**
|
|
11
|
+
* A union's editor.
|
|
12
|
+
*
|
|
13
|
+
* @param props - the field's props, and how to draw a member.
|
|
14
|
+
*/
|
|
15
|
+
export declare const UnionEditor: ({ shape, value, label, describedBy, namedValues, depth, onChange, drawField }: FieldProps & {
|
|
16
|
+
readonly shape: {
|
|
17
|
+
readonly of: readonly ValueShape[];
|
|
18
|
+
};
|
|
19
|
+
readonly drawField: DrawField;
|
|
20
|
+
}) => ReactNode;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* A mixed union (`"sm" | number`): choose the type, then the value. Choosing a type starts from that type's first value,
|
|
4
|
+
* so the story at once receives what was chosen, and a value already set says which type it is.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { useState } from "react";
|
|
9
|
+
import { isValueOfShape, startValueOf } from "../../shapeValues.js";
|
|
10
|
+
import { canSetShape } from "../../valueShape.js";
|
|
11
|
+
import { Segmented } from "../Segmented.js";
|
|
12
|
+
import { EDITOR_STRINGS } from "./editorStrings.js";
|
|
13
|
+
import { JsonEditor } from "./JsonEditor.js";
|
|
14
|
+
/** No member chosen: the value is none, or fits none. */
|
|
15
|
+
const NO_MEMBER = -1;
|
|
16
|
+
/** A member's name among the others: its kind, numbered when two share one. */
|
|
17
|
+
const memberLabel = (member, members) => {
|
|
18
|
+
const label = EDITOR_STRINGS.memberKinds[member.kind];
|
|
19
|
+
const same = members.filter((each) => EDITOR_STRINGS.memberKinds[each.kind] === label);
|
|
20
|
+
return same.length === 1 ? label : `${label} ${same.indexOf(member) + 1}`;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* A union's editor.
|
|
24
|
+
*
|
|
25
|
+
* @param props - the field's props, and how to draw a member.
|
|
26
|
+
*/
|
|
27
|
+
export const UnionEditor = ({ shape, value, label, describedBy, namedValues, depth, onChange, drawField }) => {
|
|
28
|
+
const members = shape.of.filter((member) => canSetShape(member, namedValues));
|
|
29
|
+
const [chosen, setChosen] = useState(NO_MEMBER);
|
|
30
|
+
const fits = (index) => {
|
|
31
|
+
const member = members[index];
|
|
32
|
+
return member !== undefined && value !== undefined && isValueOfShape(member, value, namedValues);
|
|
33
|
+
};
|
|
34
|
+
// the member the reader chose while the value still fits it: `"sm"` typed as a text stays a text
|
|
35
|
+
const shown = fits(chosen) ? chosen : members.findIndex((_, index) => fits(index));
|
|
36
|
+
const member = members[shown];
|
|
37
|
+
// what fits no member cannot be drawn by one: its JSON keeps it in sight, and in reach
|
|
38
|
+
if (value !== undefined && member === undefined) {
|
|
39
|
+
return (_jsxs(_Fragment, { children: [_jsx("p", { className: "forgebook-value-note", children: EDITOR_STRINGS.misfitNote }), _jsx(JsonEditor, { shape, value, label, describedBy, namedValues, depth, onChange })] }));
|
|
40
|
+
}
|
|
41
|
+
return (_jsxs("div", { className: "forgebook-value-union", children: [_jsx(Segmented, { label: EDITOR_STRINGS.memberKind(label), options: members.map((each, index) => ({ value: index, label: memberLabel(each, members) })), value: shown, onValueChange: (index) => {
|
|
42
|
+
const next = members[index];
|
|
43
|
+
if (next === undefined)
|
|
44
|
+
return;
|
|
45
|
+
setChosen(index);
|
|
46
|
+
const start = startValueOf(next, namedValues);
|
|
47
|
+
if (start !== undefined)
|
|
48
|
+
onChange(start);
|
|
49
|
+
} }), member === undefined
|
|
50
|
+
? null
|
|
51
|
+
: drawField({
|
|
52
|
+
shape: member,
|
|
53
|
+
value,
|
|
54
|
+
label,
|
|
55
|
+
describedBy,
|
|
56
|
+
namedValues,
|
|
57
|
+
depth: depth + 1,
|
|
58
|
+
// the member typed in stays the member, whatever other one the value comes to fit on the way
|
|
59
|
+
onChange: (next) => {
|
|
60
|
+
setChosen(shown);
|
|
61
|
+
onChange(next);
|
|
62
|
+
}
|
|
63
|
+
})] }));
|
|
64
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One value's field, by what it looks like: a text, a number, a toggle, a choice, a named value, or the editor of a list,
|
|
3
|
+
* an object, a union or JSON. A value that does not fit its shape, or is too much to draw, falls back to JSON with a note,
|
|
4
|
+
* so what the panel sends always fits and nothing a story holds is hidden.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { type ReactNode } from "react";
|
|
9
|
+
import type { FieldProps } from "./fieldTypes.ts";
|
|
10
|
+
/**
|
|
11
|
+
* One value's field.
|
|
12
|
+
*
|
|
13
|
+
* @param props - the field's props.
|
|
14
|
+
*/
|
|
15
|
+
export declare const ValueField: (props: FieldProps) => ReactNode;
|