Drop the nested form now twui guards a missing one

twui 0.1.5 makes Form's change handler tolerate a field with no form
ancestor, so the modal's own form is no longer needed to keep a change in
it from throwing.
This commit is contained in:
2026-10-22 05:04:40 +01:00
parent 89101d0e05
commit 2d108b05bf
3 changed files with 5 additions and 11 deletions
+2 -2
View File
@@ -9,7 +9,7 @@
"@modelcontextprotocol/sdk": "^1.32.1", "@modelcontextprotocol/sdk": "^1.32.1",
"@moduletrace/bun-sqlite": "^1.3.0", "@moduletrace/bun-sqlite": "^1.3.0",
"@moduletrace/bunext": "^1.3.3", "@moduletrace/bunext": "^1.3.3",
"@moduletrace/twui": "^0.1.4", "@moduletrace/twui": "^0.1.5",
"@tiptap/extension-bubble-menu": "3.32.0", "@tiptap/extension-bubble-menu": "3.32.0",
"@tiptap/extension-mention": "3.32.0", "@tiptap/extension-mention": "3.32.0",
"@tiptap/extension-placeholder": "3.32.0", "@tiptap/extension-placeholder": "3.32.0",
@@ -255,7 +255,7 @@
"@moduletrace/bunext": ["@moduletrace/[email protected]", "https://git.tben.me/api/packages/Moduletrace/npm/%40moduletrace%2Fbunext/-/1.3.3/bunext-1.3.3.tgz", { "dependencies": { "@tailwindcss/postcss": "^4.3.3", "@types/bun": "1.3.14", "@types/node": "^24.10.0", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "bun-plugin-tailwind": "^0.1.2", "chalk": "^5.6.2", "chokidar": "^5.0.0", "commander": "^14.0.2", "esbuild": "^0.28.2", "lightningcss-wasm": "^1.32.0", "lodash": "^4.18.1", "ora": "^9.0.0", "postcss": "^8.5.30", "react": "^19.3.0", "react-dom": "^19.3.0", "tailwindcss": "^4.3.3", "typescript": "^5.0.0", "uuid": "^14.0.2" }, "bin": { "bunext": "dist/commands/index.js" } }, "sha512-bbUtQaigsDPUQf6vtDOSCo8GYR7Gnw2ny1Fi3JtUnKsYsYQEcEadzmqntAgf7rLcKc12dadDUgFLxru+jiA92g=="], "@moduletrace/bunext": ["@moduletrace/[email protected]", "https://git.tben.me/api/packages/Moduletrace/npm/%40moduletrace%2Fbunext/-/1.3.3/bunext-1.3.3.tgz", { "dependencies": { "@tailwindcss/postcss": "^4.3.3", "@types/bun": "1.3.14", "@types/node": "^24.10.0", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "bun-plugin-tailwind": "^0.1.2", "chalk": "^5.6.2", "chokidar": "^5.0.0", "commander": "^14.0.2", "esbuild": "^0.28.2", "lightningcss-wasm": "^1.32.0", "lodash": "^4.18.1", "ora": "^9.0.0", "postcss": "^8.5.30", "react": "^19.3.0", "react-dom": "^19.3.0", "tailwindcss": "^4.3.3", "typescript": "^5.0.0", "uuid": "^14.0.2" }, "bin": { "bunext": "dist/commands/index.js" } }, "sha512-bbUtQaigsDPUQf6vtDOSCo8GYR7Gnw2ny1Fi3JtUnKsYsYQEcEadzmqntAgf7rLcKc12dadDUgFLxru+jiA92g=="],
"@moduletrace/twui": ["@moduletrace/[email protected].4", "https://git.tben.me/api/packages/Moduletrace/npm/%40moduletrace%2Ftwui/-/0.1.4/twui-0.1.4.tgz", { "dependencies": { "lodash": "^4.18.1", "tailwind-merge": "^3.7.0" }, "peerDependencies": { "ace-builds": "^1.40.0", "lucide-react": ">=0.577.0", "next-mdx-remote": "^6.0.0", "openai": ">=6.0.0", "react": ">=18", "react-dom": ">=18", "react-markdown": ">=9.0.0", "rehype-prism-plus": "^2.0.0", "remark-gfm": "^4.0.0", "tailwindcss": "^4" }, "optionalPeers": ["ace-builds", "next-mdx-remote", "openai", "react-markdown", "rehype-prism-plus", "remark-gfm"] }, "sha512-yPcr86nGd7CYYcEZYcm0IxMSkcP8U2vYFwqQyBr9UAHiG5JVxJauPDfxidCu740Abwbj2Oq+njjKoEP98SoM7A=="], "@moduletrace/twui": ["@moduletrace/[email protected].5", "https://git.tben.me/api/packages/Moduletrace/npm/%40moduletrace%2Ftwui/-/0.1.5/twui-0.1.5.tgz", { "dependencies": { "lodash": "^4.18.1", "tailwind-merge": "^3.7.0" }, "peerDependencies": { "ace-builds": "^1.40.0", "lucide-react": ">=0.577.0", "next-mdx-remote": "^6.0.0", "openai": ">=6.0.0", "react": ">=18", "react-dom": ">=18", "react-markdown": ">=9.0.0", "rehype-prism-plus": "^2.0.0", "remark-gfm": "^4.0.0", "tailwindcss": "^4" }, "optionalPeers": ["ace-builds", "next-mdx-remote", "openai", "react-markdown", "rehype-prism-plus", "remark-gfm"] }, "sha512-XwY5r6+a7G8lIaf6MqYxTXz3He6iKQbScCAWsDbX3QtPdWw1VcSpbTvqNk/hi9krobdA1DAjOzu1pg4AaOy9Rw=="],
"@next/mdx": ["@next/[email protected]", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-Vpfuf928ACvx4AOdDXWx/cj13Ak6xlvMn3QCkjvfQMmLnQWCesQTeY01CPDbIyZvjY+NOwP7bvbvJ2ghkj/3GA=="], "@next/mdx": ["@next/[email protected]", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-Vpfuf928ACvx4AOdDXWx/cj13Ak6xlvMn3QCkjvfQMmLnQWCesQTeY01CPDbIyZvjY+NOwP7bvbvJ2ghkj/3GA=="],
+1 -1
View File
@@ -40,7 +40,7 @@
"@modelcontextprotocol/sdk": "^1.32.1", "@modelcontextprotocol/sdk": "^1.32.1",
"@moduletrace/bun-sqlite": "^1.3.0", "@moduletrace/bun-sqlite": "^1.3.0",
"@moduletrace/bunext": "^1.3.3", "@moduletrace/bunext": "^1.3.3",
"@moduletrace/twui": "^0.1.4", "@moduletrace/twui": "^0.1.5",
"@tiptap/extension-bubble-menu": "3.32.0", "@tiptap/extension-bubble-menu": "3.32.0",
"@tiptap/extension-mention": "3.32.0", "@tiptap/extension-mention": "3.32.0",
"@tiptap/extension-placeholder": "3.32.0", "@tiptap/extension-placeholder": "3.32.0",
@@ -1,6 +1,5 @@
import { useState } from "react"; import { useState } from "react";
import Modal from "@moduletrace/twui/elements/Modal"; import Modal from "@moduletrace/twui/elements/Modal";
import Form from "@moduletrace/twui/form/Form";
import H2 from "@moduletrace/twui/layout/H2"; import H2 from "@moduletrace/twui/layout/H2";
import Span from "@moduletrace/twui/layout/Span"; import Span from "@moduletrace/twui/layout/Span";
import Stack from "@moduletrace/twui/layout/Stack"; import Stack from "@moduletrace/twui/layout/Stack";
@@ -102,12 +101,7 @@ export default function HarnessParameterModal({
and repeatable. and repeatable.
</Span> </Span>
</Stack> </Stack>
{/* <Stack className="w-full gap-4! items-stretch">
A form of its own: twui's Form reads the closest form on change,
so inside the page's form (this renders in a portal) a change
here would blow up reading the modal's wrapper.
*/}
<Form className="w-full gap-4! items-stretch" onSubmit={(e) => e.preventDefault()}>
<HarnessParameterFields <HarnessParameterFields
id={id} id={id}
harness={harness} harness={harness}
@@ -115,7 +109,7 @@ export default function HarnessParameterModal({
params={params} params={params}
onChange={onChange} onChange={onChange}
/> />
</Form> </Stack>
</Modal> </Modal>
); );
} }