Skip to content

Conversation

@codegen-sh
Copy link
Contributor

@codegen-sh codegen-sh bot commented Aug 6, 2025

🎯 Overview

This PR integrates the @lambdacurry/forms library into the React Router 7 starter project, providing a comprehensive example of modern, type-safe form handling with progressive enhancement.

✨ What's New

📦 Dependencies Added

  • @lambdacurry/forms - Main forms library with React Router integration
  • @hookform/resolvers - Zod resolver for React Hook Form
  • react-hook-form - Form state management
  • remix-hook-form - React Router 7 integration
  • zod - Schema validation library

📋 Cursor Rules

  • Added .cursorrules/lambda-curry-forms.mdc with comprehensive guidelines
  • Includes patterns, best practices, and component usage examples
  • Covers validation, error handling, and accessibility requirements

🔄 Components Updated

AddTodo Component

Before: Basic React state with manual validation
After: Lambda Curry forms with Zod schema validation

  • Type-safe form handling
  • Automatic validation and error display
  • Clean reset functionality

TodoItem Component

Enhanced editing with:

  • TextField component integration
  • Zod validation for edit operations
  • FormError component for error display
  • Maintained keyboard shortcuts (Enter/Escape)

🆕 New Advanced Form Route (/create-todo)

A comprehensive demonstration featuring:

Form Components:

  • TextField - Single-line and multiline inputs
  • RadioGroup - Priority selection (low/medium/high)
  • DatePicker - Optional due date selection
  • Checkbox - Boolean urgent flag
  • FormError - Server-side error handling

Features Demonstrated:

  • 🔒 Type Safety - Full TypeScript integration with Zod inference
  • 🛡️ Validation - Client and server-side validation
  • Accessibility - WCAG 2.1 AA compliance built-in
  • 🚀 Progressive Enhancement - Works without JavaScript
  • 🎨 Styling - Seamless Tailwind CSS integration
  • 📱 Responsive - Mobile-first design approach

🧪 Testing the Integration

Basic Forms

  1. Navigate to home page
  2. Use the enhanced "Add Todo" form
  3. Try validation by submitting empty text

Advanced Form

  1. Click "Advanced Todo Form" button
  2. Test comprehensive form with all components
  3. Try validation scenarios:
    • Submit without required fields
    • Enter "error" in title to trigger server error
    • Test all form components

Todo Editing

  1. Create a todo and click edit
  2. Try clearing text and saving for validation
  3. Use keyboard shortcuts (Enter/Escape)

📚 Key Benefits

Type Safety

type CreateTodoFormData = z.infer<typeof createTodoSchema>;
// Automatic TypeScript types from Zod schema

Server Integration

export const action = async ({ request }: ActionFunctionArgs) => {
  const { data, errors } = await getValidatedFormData<CreateTodoFormData>(
    request, 
    zodResolver(createTodoSchema)
  );
  
  if (errors) return { errors };
  // Process validated data...
};

Error Handling

<FormError /> // Form-level errors
<TextField name="title" /> // Field-level errors (automatic)

📖 Documentation

  • FORMS_INTEGRATION.md - Comprehensive integration guide
  • Cursor Rules - Development guidelines and patterns
  • Code Examples - Real-world usage patterns

🔗 Resources


Ready for Review! This integration provides a solid foundation for building modern, accessible forms in React Router 7 applications. 🎉

Requested by: Jake Ruesink


💻 View my workAbout Codegen
⛔ Remove Codegen from PR🚫 Ban action checks

Summary by CodeRabbit

  • New Features

    • Introduced advanced form handling using @lambdacurry/forms, remix-hook-form, and Zod validation for type-safe, accessible, and customizable forms.
    • Added a comprehensive "Create Todo" page with multi-field form, client- and server-side validation, error handling, and progressive enhancement.
    • Enhanced the home page with a button linking to the new advanced todo form.
  • Improvements

    • Refactored existing todo components to use schema-driven form validation and error display, replacing manual state management.
    • Improved form accessibility, error feedback, and integration with UI libraries.
  • Documentation

    • Added detailed guides and best practices for integrating and using the new forms system, including examples and workflow instructions.
  • Chores

    • Updated dependencies to include required form and validation libraries.

- Add @lambdacurry/forms and related dependencies to package.json files
- Add lambda-curry-forms.mdc cursor rule with comprehensive guidelines
- Update AddTodo component to use forms library with Zod validation
- Update TodoItem component with forms-powered editing functionality
- Create advanced create-todo route demonstrating all form components:
  - TextField (single-line and multiline)
  - RadioGroup for priority selection
  - DatePicker for due dates
  - Checkbox for urgent flag
  - FormError for server-side error handling
- Add navigation link to advanced form from home page
- Include comprehensive documentation in FORMS_INTEGRATION.md
- Demonstrate type-safe forms with progressive enhancement
- Show server-side validation with getValidatedFormData
- Maintain accessibility compliance (WCAG 2.1 AA)

This integration provides a complete example of modern form handling
in React Router 7 applications using Lambda Curry's forms library.
@coderabbitai
Copy link

coderabbitai bot commented Aug 6, 2025

Walkthrough

This change introduces a comprehensive integration of the @lambdacurry/forms library into a React Router 7/Remix application, using Zod for schema validation and remix-hook-form for form state management. It adds new documentation, updates components to use schema-driven forms, includes a new advanced form route, and adds related dependencies.

Changes

Cohort / File(s) Change Summary
Documentation & Guidelines
.cursorrules/lambda-curry-forms.mdc, FORMS_INTEGRATION.md
Added detailed guidelines for integrating @lambdacurry/forms with Remix Hook Form and Zod, including architecture, setup, usage patterns, best practices, advanced usage, error handling, testing, and accessibility. Provided a new integration document with step-by-step migration instructions, usage examples, workflow, and styling details for React Router 7 projects.
Component Refactors
apps/todo-app/app/components/add-todo.tsx, apps/todo-app/app/components/todo-item.tsx
Refactored AddTodo and TodoItem components to use remix-hook-form and Zod for schema-driven validation and form state management, replacing manual state and event handling. Added declarative form logic, error display components, and integrated form context. Enhanced TodoItem with keyboard shortcuts, error handling, and controlled editing flow.
New Advanced Form Route
apps/todo-app/app/routes/create-todo.tsx, apps/todo-app/app/routes.ts, apps/todo-app/app/routes/home.tsx
Added a new create-todo route with a comprehensive, accessible form using Zod validation and remix-hook-form. Updated routing to include this route and enhanced the home page with a button linking to the advanced form. The new form demonstrates server/client validation, error handling, progressive enhancement, and accessibility.
Dependency Additions
apps/todo-app/package.json, package.json
Added dependencies: @lambdacurry/forms, react-hook-form, remix-hook-form, @hookform/resolvers, and zod to both the app and root package manifests for form handling and validation. No changes to exports or scripts.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant FormComponent
    participant RemixFormProvider
    participant ZodSchema
    participant ServerAction

    User->>FormComponent: Fill fields, submit form
    FormComponent->>RemixFormProvider: handleSubmit()
    RemixFormProvider->>ZodSchema: Validate data
    alt Validation passes
        RemixFormProvider->>ServerAction: Submit validated data
        ServerAction->>ZodSchema: Server-side validation
        alt Server validation passes
            ServerAction-->>RemixFormProvider: Success response
            RemixFormProvider-->>FormComponent: Show success, reset form
        else Server validation fails
            ServerAction-->>RemixFormProvider: Error response
            RemixFormProvider-->>FormComponent: Show error(s)
        end
    else Validation fails
        RemixFormProvider-->>FormComponent: Show client-side error(s)
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Possibly related PRs

  • lambda-curry/360training#187: Adds the same or similar documentation for integrating @lambdacurry/forms with Remix Hook Form and Zod, providing guidelines and usage patterns.
  • Add comprehensive LLM documentation for forms library forms#107: Introduces an extensive implementation guide for @lambdacurry/forms, covering setup, components, validation, and advanced usage, closely matching this PR’s documentation.
  • lambda-curry/hisd#19: Trims and refines the .cursorrules/lambda-curry-forms.mdc document, indicating related modifications to the same guideline file.

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d89bfe8 and dce96c1.

📒 Files selected for processing (1)
  • .cursorrules/lambda-curry-forms.mdc (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .cursorrules/lambda-curry-forms.mdc
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codegen-bot/integrate-lambda-curry-forms-1754514167

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@@ -0,0 +1,273 @@
---
description: Guidelines for using @lambdacurry/forms library with Remix Hook Form and Zod validation
globs: app/**/*.tsx, app/**/*.ts, components/**/*.tsx, components/**/*.ts
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@codegen-sh let's make sure these globs apply for this repo structure

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll check if these globs match the repo structure! 🔎

💻 View my work🛑 Stop

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Fixed the globs! I've updated the cursor rules to match the monorepo structure:

Before: app/**/*.tsx, app/**/*.ts, components/**/*.tsx, components/**/*.ts
After: apps/**/app/**/*.tsx, apps/**/app/**/*.ts, packages/**/*.tsx, packages/**/*.ts

This now correctly targets:

  • apps/todo-app/app/ - Where the main application code lives
  • packages/ - Where shared UI and utility packages are located

The cursor rules will now properly apply to all TypeScript/TSX files in the correct locations! 🎯

🔄 View Updated PR #3 on Github 🔄

💻 View my work🛑 Stop • React 👍 or 👎

- Change globs from app/**/*.tsx to apps/**/app/**/*.tsx
- Add packages/**/*.tsx to include shared packages
- Ensures cursor rules apply to correct file paths in monorepo
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (4)
package.json (1)

28-28: Consider using a semver range for remix-hook-form

The remix-hook-form dependency is pinned to exact version 7.1.0 while other dependencies use caret ranges. Consider using ^7.1.0 for consistency and to receive patch updates automatically.

-    "remix-hook-form": "7.1.0",
+    "remix-hook-form": "^7.1.0",
apps/todo-app/package.json (1)

48-48: Maintain version consistency with root package.json

Similar to the root package.json, consider using a semver range ^7.1.0 for remix-hook-form to maintain consistency across the monorepo and receive patch updates.

-    "remix-hook-form": "7.1.0",
+    "remix-hook-form": "^7.1.0",
apps/todo-app/app/components/todo-item.tsx (1)

60-77: Consider moving FormError inside the form element

The FormError component is currently outside the form element but inside the RemixFormProvider. For better error association and accessibility, consider moving it inside the form element or using field-specific error display with the TextField component.

 <RemixFormProvider {...methods}>
   <form onSubmit={methods.handleSubmit} className="flex-1 flex items-center gap-2">
     <div className="flex-1">
       <TextField
         name="text"
         className="w-full"
         autoFocus
       />
+      <FormError name="text" />
     </div>
     <Button size="icon" variant="ghost" type="submit">
       <Check className="h-4 w-4" />
     </Button>
     <Button size="icon" variant="ghost" type="button" onClick={handleCancel}>
       <X className="h-4 w-4" />
     </Button>
   </form>
-  <FormError />
 </RemixFormProvider>
FORMS_INTEGRATION.md (1)

1-215: Comprehensive and well-structured documentation

Excellent documentation that thoroughly covers the forms integration with clear examples, testing instructions, and development workflow. The before/after comparisons effectively demonstrate the improvements.

Consider adding a troubleshooting section for common issues developers might encounter during integration, such as:

  • Form not submitting without JavaScript
  • Validation errors not displaying
  • TypeScript type inference issues
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ab94507 and d89bfe8.

📒 Files selected for processing (9)
  • .cursorrules/lambda-curry-forms.mdc (1 hunks)
  • FORMS_INTEGRATION.md (1 hunks)
  • apps/todo-app/app/components/add-todo.tsx (1 hunks)
  • apps/todo-app/app/components/todo-item.tsx (4 hunks)
  • apps/todo-app/app/routes.ts (1 hunks)
  • apps/todo-app/app/routes/create-todo.tsx (1 hunks)
  • apps/todo-app/app/routes/home.tsx (2 hunks)
  • apps/todo-app/package.json (2 hunks)
  • package.json (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
PR: lambda-curry/email-proxy#0
File: .cursor/rules/forms2.mdc:0-0
Timestamp: 2025-06-23T13:03:29.454Z
Learning: In React Router 7 applications using lambdacurry/forms and remix-hook-form, always use Zod schemas for validation to ensure type safety and consistent error messages.
Learnt from: CR
PR: lambda-curry/medusa-forms#0
File: .cursor/rules/form-component-patterns.mdc:0-0
Timestamp: 2025-06-24T13:49:04.245Z
Learning: In the lambda-curry/forms monorepo, all form-aware components in packages/components must integrate with Remix Hook Form and use Zod schemas for validation, ensuring TypeScript inference.
🧬 Code Graph Analysis (1)
apps/todo-app/app/routes/create-todo.tsx (4)
apps/todo-app/app/routes/home.tsx (1)
  • meta (11-16)
packages/ui/src/components/ui/button.tsx (1)
  • Button (46-46)
packages/ui/src/components/ui/card.tsx (5)
  • Card (44-44)
  • CardHeader (44-44)
  • CardTitle (44-44)
  • CardDescription (44-44)
  • CardContent (44-44)
packages/ui/src/components/ui/checkbox.tsx (1)
  • Checkbox (25-25)
🔇 Additional comments (7)
apps/todo-app/app/routes.ts (1)

2-6: LGTM!

The route configuration correctly adds the new create-todo route using React Router 7's routing conventions.

apps/todo-app/app/routes/home.tsx (1)

2-52: LGTM!

The UI updates correctly integrate the navigation to the advanced form route. The use of the asChild prop pattern with the Button component for Link composition is appropriate.

apps/todo-app/app/components/todo-item.tsx (1)

12-39: Well-structured form integration with proper validation

The refactoring to use remix-hook-form with Zod schema validation is well implemented. The schema correctly enforces non-empty trimmed text, and the form only triggers updates when the text actually changes.

apps/todo-app/app/components/add-todo.tsx (1)

19-28: Well-implemented form state management

Excellent use of useRemixForm with proper validation, submission handling, and form reset. This follows the recommended patterns for React Router 7 applications.

apps/todo-app/app/routes/create-todo.tsx (2)

32-71: Robust server-side validation and error handling

Excellent implementation of the action function with proper validation using getValidatedFormData, structured error responses, and comprehensive error handling at both field and form levels.


232-249: Excellent feature documentation within the UI

Great addition of the features card that clearly demonstrates all implemented form capabilities. This provides excellent educational value and serves as inline documentation.

.cursorrules/lambda-curry-forms.mdc (1)

255-271: Excellent testing patterns coverage

Great inclusion of both unit and E2E testing patterns, especially the progressive enhancement test that validates form functionality without JavaScript. This ensures robust form behavior across different scenarios.

Comment on lines +108 to +118
## Advanced Patterns

### Conditional Fields
```typescript
const watchAccountType = methods.watch('accountType');

{watchAccountType === 'business' && (
<TextField name="companyName" label="Company Name" />
)}
```

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove duplicate "Advanced Patterns" section

The "Advanced Patterns" section appears twice in the document (lines 108-118 and 169-196). The content should be consolidated into a single section to avoid confusion.

Remove the first occurrence (lines 108-118) and keep the more comprehensive second section (lines 169-196) which includes additional patterns like custom submit handlers and component customization.

Also applies to: 169-196

🤖 Prompt for AI Agents
In .cursorrules/lambda-curry-forms.mdc between lines 108 and 118, remove the
entire first "Advanced Patterns" section to eliminate duplication. Retain the
second, more comprehensive "Advanced Patterns" section found between lines 169
and 196, which includes additional patterns. This consolidation avoids confusion
by having only one complete "Advanced Patterns" section in the document.

Comment on lines 30 to +46
return (
<form onSubmit={handleSubmit} className="flex gap-2">
<Input
value={text}
onChange={e => setText(e.target.value)}
placeholder="Add a new todo..."
className="flex-1"
/>
<Button type="submit" disabled={!text.trim()}>
<Plus className="h-4 w-4 mr-2" />
Add
</Button>
</form>
<RemixFormProvider {...methods}>
<form onSubmit={methods.handleSubmit} className="flex gap-2">
<div className="flex-1">
<TextField
name="text"
placeholder="Add a new todo..."
className="w-full"
/>
</div>
<Button type="submit">
<Plus className="h-4 w-4 mr-2" />
Add
</Button>
</form>
<FormError />
</RemixFormProvider>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Move FormError inside the form element

The FormError component should be placed inside the form element before the submit button for proper error display and layout consistency. This aligns with the best practices documented in the lambda-curry-forms guidelines.

     <RemixFormProvider {...methods}>
       <form onSubmit={methods.handleSubmit} className="flex gap-2">
         <div className="flex-1">
           <TextField
             name="text"
             placeholder="Add a new todo..."
             className="w-full"
           />
         </div>
+        <FormError />
         <Button type="submit">
           <Plus className="h-4 w-4 mr-2" />
           Add
         </Button>
       </form>
-      <FormError />
     </RemixFormProvider>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
return (
<form onSubmit={handleSubmit} className="flex gap-2">
<Input
value={text}
onChange={e => setText(e.target.value)}
placeholder="Add a new todo..."
className="flex-1"
/>
<Button type="submit" disabled={!text.trim()}>
<Plus className="h-4 w-4 mr-2" />
Add
</Button>
</form>
<RemixFormProvider {...methods}>
<form onSubmit={methods.handleSubmit} className="flex gap-2">
<div className="flex-1">
<TextField
name="text"
placeholder="Add a new todo..."
className="w-full"
/>
</div>
<Button type="submit">
<Plus className="h-4 w-4 mr-2" />
Add
</Button>
</form>
<FormError />
</RemixFormProvider>
return (
<RemixFormProvider {...methods}>
<form onSubmit={methods.handleSubmit} className="flex gap-2">
<div className="flex-1">
<TextField
name="text"
placeholder="Add a new todo..."
className="w-full"
/>
</div>
<FormError />
<Button type="submit">
<Plus className="h-4 w-4 mr-2" />
Add
</Button>
</form>
</RemixFormProvider>
🤖 Prompt for AI Agents
In apps/todo-app/app/components/add-todo.tsx between lines 30 and 46, move the
FormError component inside the form element and place it before the submit
Button component. This adjustment ensures proper error display and maintains
layout consistency according to lambda-curry-forms best practices.

Comment on lines +100 to +104
if (fetcher.data?.success) {
setTimeout(() => {
navigate('/');
}, 2000);
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Use useEffect with cleanup for redirect to prevent memory leaks

The current implementation using setTimeout directly could cause issues if the component unmounts before the timeout completes. Use useEffect with proper cleanup to handle the redirect safely.

+  const [shouldRedirect, setShouldRedirect] = React.useState(false);
+
   // Handle successful submission
-  if (fetcher.data?.success) {
-    setTimeout(() => {
-      navigate('/');
-    }, 2000);
-  }
+  React.useEffect(() => {
+    if (fetcher.data?.success) {
+      setShouldRedirect(true);
+      const timer = setTimeout(() => {
+        navigate('/');
+      }, 2000);
+      return () => clearTimeout(timer);
+    }
+  }, [fetcher.data?.success, navigate]);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (fetcher.data?.success) {
setTimeout(() => {
navigate('/');
}, 2000);
}
const [shouldRedirect, setShouldRedirect] = React.useState(false);
// Handle successful submission
React.useEffect(() => {
if (fetcher.data?.success) {
setShouldRedirect(true);
const timer = setTimeout(() => {
navigate('/');
}, 2000);
return () => clearTimeout(timer);
}
}, [fetcher.data?.success, navigate]);
🤖 Prompt for AI Agents
In apps/todo-app/app/routes/create-todo.tsx around lines 100 to 104, replace the
direct use of setTimeout for navigation with a useEffect hook that triggers on
fetcher.data?.success changes. Inside the useEffect, set the timeout for
navigation and return a cleanup function that clears the timeout to prevent
memory leaks if the component unmounts before the timeout completes.

@jaruesink jaruesink merged commit 303ac5e into main Aug 6, 2025
1 check passed
@jaruesink jaruesink deleted the codegen-bot/integrate-lambda-curry-forms-1754514167 branch August 6, 2025 21:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants