Skip to content

Conversation

@visz11
Copy link

@visz11 visz11 commented Nov 10, 2025

CodeAnt-AI Description

Add Chat button with chat, phone, and email options

What Changed

  • Adds a Chat button that opens a menu with three contact options: "Chat with us", "Talk to us", and "Email us"
  • "Chat with us" opens the site's chat widget when available; "Talk to us" invokes the provided sales action; "Email us" opens the user's email composer
  • The button displays a chat icon and a "Talk to us" tooltip for discoverability

Impact

✅ Easier access to real-time chat
✅ One-click start for sales conversations
✅ Direct email composer opens for support messages

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Summary by CodeRabbit

Release Notes

  • New Features
    • Added a chat widget with a collapsible menu offering multiple contact options: live chat support, sales inquiry, and email contact for streamlined user engagement.

@codeant-ai
Copy link

codeant-ai bot commented Nov 10, 2025

CodeAnt AI is reviewing your PR.


Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

@coderabbitai
Copy link

coderabbitai bot commented Nov 10, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

A new React component ChatButton is introduced that renders a contact widget with a toggleable menu offering three user actions: direct chat via Intercom, email contact, and a custom sales button handler. The component uses Chakra UI for styling and manages menu visibility state locally.

Changes

Cohort / File(s) Summary
New ChatButton Component
index.tsx
Introduces ChatButton React component with ChatButtonProps interface accepting salesButtonAction callback. Component manages showOptions state, provides handlers for opening chat (Intercom), sending email (mailto), and executing custom action. Exports component with bordered container UI featuring icon button and dropdown menu with three options.

Sequence Diagram

sequenceDiagram
    actor User
    participant CB as ChatButton<br/>Component
    participant Menu as Menu UI
    participant Actions as Handlers

    User->>CB: Click icon button
    CB->>CB: Toggle showOptions state
    CB->>Menu: Render menu (show/hide)
    
    alt "Chat with us" clicked
        User->>Menu: Select option
        Menu->>Actions: openChat()
        Actions->>Actions: Trigger Intercom
    else "Talk to us" clicked
        User->>Menu: Select option
        Menu->>Actions: salesButtonAction()
        Actions->>Actions: Execute custom handler
    else "Email us" clicked
        User->>Menu: Select option
        Menu->>Actions: openEmail()
        Actions->>Actions: Open mailto link
    end
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Verify Intercom integration and mailto implementation are correctly configured
  • Validate TypeScript types and prop interface completeness
  • Confirm Chakra UI Menu component usage and accessibility patterns

Poem

🐰 A button with whiskers and a curious grin,
Opens a menu of ways to reach in—
Chat, email, or a custom deed,
Three paths to help, when users need!

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: introducing a new ChatButton component with chat options menu functionality.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch Add-ChatButton-component-with-chat-options

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@visz11
Copy link
Author

visz11 commented Nov 10, 2025

/refacto-visz

@gemini-code-assist
Copy link

Summary of Changes

Hello @visz11, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a new ChatButton component, designed to streamline user access to various support and communication channels. By integrating options for live chat, direct sales contact, and email support into a single, intuitive interface, the change aims to enhance user experience and improve the accessibility of assistance within the application.

Highlights

  • New ChatButton Component: A new ChatButton component has been added, providing a centralized interface for user communication.
  • Multiple Communication Channels: The component offers users three distinct ways to get in touch: live chat (integrated with Intercom), direct contact for sales inquiries, and email support.
  • Technology Stack: The ChatButton is built using Chakra UI for its styling and layout, and react-icons for the visual icons representing each communication option.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@refacto-visz
Copy link

refacto-visz bot commented Nov 10, 2025

Add ChatButton component with chat options

TL;DR: Adds a new ChatButton component with dropdown menu for multiple communication options (chat, phone, email).


Refacto PR Summary

Introduces a reusable ChatButton component using Chakra UI with integrated communication options menu.
Creates a floating action button that provides users with three contact methods: Intercom chat integration, phone callback scheduling, and direct email support. The component uses Chakra UI's Menu system with proper accessibility features including tooltips and ARIA labels. This PR adds a customer support widget that enhances user engagement by providing multiple communication channels through a single, accessible interface.

Change Highlights

Click to expand
  • index.tsx: New ChatButton component with Menu dropdown for communication options
  • index.tsx: Intercom integration for live chat functionality
  • index.tsx: Email integration with mailto link to [email protected]
  • index.tsx: Phone callback action handler via props interface
  • index.tsx: Accessibility features with tooltips and ARIA labels
  • index.tsx: Custom styling with border and hover effects

Sequence Diagram

sequenceDiagram
    participant U as User
    participant CB as ChatButton
    participant M as Menu
    participant I as Intercom
    participant E as Email Client
    participant P as Phone System
    
    U->>CB: Click chat button
    CB->>M: Show menu options
    M-->>U: Display chat/phone/email
    
    alt Chat Option
        U->>M: Select "Chat with us"
        M->>I: window.Intercom('show')
        I-->>U: Open chat widget
    else Phone Option
        U->>M: Select "Talk to us"
        M->>P: salesButtonAction()
        P-->>U: Initiate callback flow
    else Email Option
        U->>M: Select "Email us"
        M->>E: Open mailto:[email protected]
        E-->>U: Launch email client
    end
Loading

Testing Guide

Click to expand
  1. Component rendering: Verify ChatButton displays with chat icon and proper styling
  2. Menu functionality: Click button to open dropdown, confirm three options appear with correct icons
  3. Intercom integration: Select "Chat with us", verify Intercom widget opens (requires Intercom script loaded)
  4. Email integration: Click "Email us", confirm mailto link opens default email client with correct recipient
  5. Phone callback: Test "Talk to us" option triggers salesButtonAction prop correctly

@refacto-visz
Copy link

refacto-visz bot commented Nov 10, 2025

Refacto is reviewing this PR. Please wait for the review comments to be posted.

@codeant-ai codeant-ai bot added the size:M This PR changes 30-99 lines, ignoring generated files label Nov 10, 2025
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a new ChatButton component. The implementation is straightforward, but there are several areas for improvement regarding maintainability and React best practices. I've left comments on removing unused state, extracting hardcoded values to constants or theme variables, improving type safety for global objects, and cleaning up accessibility props. Addressing these points will make the component more robust and easier to maintain.

}

export const ChatButton = ({ salesButtonAction }: ChatButtonProps) => {
const [showOptions, setShowOptions] = useState(false);

Choose a reason for hiding this comment

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

medium

The showOptions state is unused and can be removed. The Chakra UI Menu component handles its own open/close state, so you don't need to manage it manually. Consequently, the onClick handler on the IconButton at line 57, which only updates this state, should also be removed.

Comment on lines +27 to +29
if (window?.Intercom) {
window?.Intercom('show');
}

Choose a reason for hiding this comment

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

medium

Accessing window.Intercom directly is not type-safe. To improve type safety and developer experience (e.g., autocompletion), you should extend the global Window interface. You can do this by creating a type declaration file (e.g., global.d.ts or intercom.d.ts) in your project with content like:

declare global {
  interface Window {
    Intercom?: (command: 'show' | 'hide' | 'shutdown', ...args: any[]) => void;
  }
}

// This is needed to make the file a module.
export {};

This will make TypeScript aware of the Intercom function on the window object.

};

const openEmail = () => {
window.open('mailto:[email protected]');

Choose a reason for hiding this comment

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

medium

This hardcoded email address should be extracted to a constant, preferably in a shared constants file. This improves maintainability, as the email address is defined in a single place and can be easily updated if it changes.

Comment on lines +39 to +41
border={'1px solid #4d4dff'}
_hover={{ backgroundColor: 'transparent' }}
height={'95%'}

Choose a reason for hiding this comment

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

medium

These style properties use hardcoded values ('1px solid #4d4dff', '95%'). It's a best practice to use theme tokens from your design system for colors, spacing, and sizing to ensure consistency and make future theme updates easier. This also applies to mr={'20px'} on line 62 and the icon size={20} on lines 63, 68, and 72.

>
<Menu>
<Tooltip
aria-label="Talk to us"

Choose a reason for hiding this comment

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

medium

The aria-label prop on the Tooltip is redundant. The label prop already provides the visual text, and the interactive element inside (IconButton on line 52) has its own aria-label for screen readers. You can safely remove this prop to simplify the code.

bg="transparent"
color="text.primary"
_hover={{ bg: 'transparent' }}
onClick={() => setShowOptions(!showOptions)}

Choose a reason for hiding this comment

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

medium

This onClick handler is redundant because the Menu component handles its own open/close state. This handler updates the showOptions state (defined on line 24), which is unused. This line and the corresponding useState on line 24 can be removed.

@refacto-visz
Copy link

refacto-visz bot commented Nov 10, 2025

Code Review: Component State and Global Object Access

👍 Well Done
Clean Interface Design

Well-defined props interface with clear callback pattern promotes reusability and maintainability

Efficient State Management

Simple boolean state prevents unnecessary re-renders and complexity

📁 Selected files for review (1)
  • index.tsx
🎯 Custom Instructions
✅ Applied Instructions
Organization Guidelines
  • Keep pull requests small and focused (prefer < 400 lines of code).
  • All CI/CD checks, linting, and unit tests must pass before merge.
  • Use feature flags for new functionality and include a clear rollback plan.
  • Follow the company security checklist:
    • No hard-coded secrets or credentials.
    • Validate all external inputs.
    • Use parameterized queries for DB access.

Scope: All files

📝 Additional Comments
index.tsx (3)
Redundant onClick Handler

onClick handler updates showOptions state but this state is never consumed by the component. Since Menu component handles its own open/close state, this handler appears redundant and should be removed.

Standards:

  • Clean-Code-Functions
  • SOLID-SRP
Hardcoded Email Address

Email address is hardcoded in component making it difficult to change across environments or for different deployments. Consider extracting to configuration or props for better flexibility and maintainability.

Standards:

  • Clean-Code-Functions
  • Maintainability-Quality-Configurability
Window Object Access

Double window object access with optional chaining creates redundant property lookups. Caching window.Intercom reference would eliminate duplicate property resolution overhead for micro-optimization.

Standards:

  • ISO-IEC-25010-Performance-Efficiency-Time-Behaviour
  • JavaScript-Optimization-Patterns

}

export const ChatButton = ({ salesButtonAction }: ChatButtonProps) => {
const [showOptions, setShowOptions] = useState(false);
Copy link

Choose a reason for hiding this comment

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

Unused State Variable

State variable 'showOptions' is declared and updated but never actually used in component logic. The Menu component manages its own internal state, making this redundant state management that could cause confusion and unnecessary re-renders.

Standards
  • Algorithm-Correctness-State-Management
  • Logic-Verification-Component-State

};

const openEmail = () => {
window.open('mailto:[email protected]');
Copy link

Choose a reason for hiding this comment

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

Unsafe Window Operation

Direct window.open call without null safety check creates runtime failure risk. Server-side rendering or restricted browser environments cause TypeError exceptions that crash component functionality.

Standards
  • ISO-IEC-25010-Reliability-Fault-Tolerance
  • ISO-IEC-25010-Functional-Correctness-Appropriateness

Comment on lines +27 to +29
if (window?.Intercom) {
window?.Intercom('show');
}
Copy link

Choose a reason for hiding this comment

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

DOM-based XSS Risk

Direct access to global window object and execution of Intercom method without validation creates DOM-based XSS vulnerability. Malicious scripts could override window.Intercom to execute arbitrary code when openChat is triggered.

    if (window?.Intercom && typeof window.Intercom === 'function') {
      try {
        window.Intercom('show');
      } catch (error) {
        console.error('Intercom error:', error);
      }
    }
Commitable Suggestion
Suggested change
if (window?.Intercom) {
window?.Intercom('show');
}
if (window?.Intercom && typeof window.Intercom === 'function') {
try {
window.Intercom('show');
} catch (error) {
console.error('Intercom error:', error);
}
}
Standards
  • CWE-79
  • OWASP-A03
  • NIST-SSDF-PW.1

color="text.primary"
_hover={{ bg: 'transparent' }}
onClick={() => setShowOptions(!showOptions)}
icon={<Image src={ChatWithUsIcon} />}
Copy link

Choose a reason for hiding this comment

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

Suggestion: Add an alt attribute to the Image used in the IconButton's icon prop for accessibility. [best practice]

Severity Level: Minor ⚠️

Suggested change
icon={<Image src={ChatWithUsIcon} />}
icon={<Image src={ChatWithUsIcon} alt="Chat with us" />}
Why it matters? ⭐

Adding an alt prop (e.g. alt="Chat with us") to the Image used as the IconButton's icon is an accessibility improvement — it gives assistive tech meaningful text. This is a small, safe change that directly improves UX and is actionable. The actual PR line matches the snippet above, so the improved code should be:

icon={Chat with us}

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** index.tsx
**Line:** 58:58
**Comment:**
	*Best Practice: Add an `alt` attribute to the `Image` used in the IconButton's `icon` prop for accessibility.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.

@codeant-ai
Copy link

codeant-ai bot commented Nov 10, 2025

CodeAnt AI finished reviewing your PR.

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: 2

🧹 Nitpick comments (5)
index.tsx (5)

32-34: Consider making the email address configurable.

The email address is hardcoded. Consider making it a prop or configuration value for better reusability.


36-42: Remove redundant hover style.

The _hover={{ backgroundColor: 'transparent' }} is redundant since no background color is set initially.

Apply this diff:

   <Box
     alignSelf={'center'}
     borderRadius={'4px'}
     border={'1px solid #4d4dff'}
-    _hover={{ backgroundColor: 'transparent' }}
     height={'95%'}
   >

44-49: Remove non-standard aria-label prop.

Chakra UI's Tooltip component doesn't use an aria-label prop. The label prop already handles accessibility correctly.

Apply this diff:

   <Tooltip
-    aria-label="Talk to us"
     label="Talk to us"
     hasArrow
     placement="bottom"
   >

51-59: Remove redundant onClick handler.

The onClick handler toggles the unused showOptions state and may conflict with the Chakra UI Menu component's internal state management. The Menu component already handles open/close behavior automatically.

Apply this diff:

   <IconButton
     aria-label="Talk to us"
     variant="ghost"
     bg="transparent"
     color="text.primary"
     _hover={{ bg: 'transparent' }}
-    onClick={() => setShowOptions(!showOptions)}
     icon={<Image src={ChatWithUsIcon} />}
   />

62-62: Reconsider the margin-right on MenuList.

The mr={'20px'} on MenuList is unusual for a dropdown menu and may cause unexpected positioning or layout issues. Menu dropdowns typically position themselves automatically without manual margins.

If this margin is necessary for your layout, consider documenting why it's needed. Otherwise, remove it:

-  <MenuList mr={'20px'}>
+  <MenuList>
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e184110 and 7005da7.

📒 Files selected for processing (1)
  • index.tsx (1 hunks)
🔇 Additional comments (1)
index.tsx (1)

26-30: The suggested diff is incorrect and introduces a safety regression.

The original review's diff removes the optional chaining from line 26, changing if (window?.Intercom) to if (window.Intercom). This is unsafe—if window is undefined, line 26 will throw an error. The current code correctly checks for window's existence first.

While line 28 does have redundant optional chaining (since the if condition already guards against it), the fix should only address that line:

  const openChat = () => {
    if (window?.Intercom) {
-      window?.Intercom('show');
+      window.Intercom('show');
    }
  };

Regarding TypeScript types: no type declarations for window.Intercom exist in this codebase, and no TypeScript configuration files were found. If this is a JavaScript file, no typing is needed. If TypeScript is enabled elsewhere, this would need separate investigation.

Likely an incorrect or invalid review comment.

AiOutlineMessage,
AiOutlinePhone,
} from 'react-icons/ai';
import ChatWithUsIcon from '../shared/assets/img/chat-with-us-icon.svg';
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify the asset path exists.

Ensure the SVG asset path ../shared/assets/img/chat-with-us-icon.svg is correct and the file exists.


🏁 Script executed:

#!/bin/bash
# Verify the SVG asset exists
fd -t f "chat-with-us-icon.svg"

Length of output: 0


🏁 Script executed:

#!/bin/bash
# Check if the shared/assets/img directory exists and list its contents
echo "=== Checking shared/assets/img directory ==="
find . -type d -name "shared" 2>/dev/null | head -5

echo ""
echo "=== Searching for any SVG files in assets directories ==="
find . -type f -name "*.svg" 2>/dev/null | grep -i "asset\|icon" | head -10

echo ""
echo "=== Checking for any chat-related SVG files ==="
find . -type f -name "*chat*.svg" 2>/dev/null

Length of output: 152


🏁 Script executed:

#!/bin/bash
# List repository root to understand structure
echo "=== Repository root structure ==="
ls -la | head -20

echo ""
echo "=== Search for ANY SVG files ==="
find . -type f -name "*.svg" 2>/dev/null

echo ""
echo "=== Find index.tsx location ==="
find . -type f -name "index.tsx" 2>/dev/null

echo ""
echo "=== Check if this is actually a React/Node project ==="
ls -la | grep -E "package.json|tsconfig|webpack|vite"

Length of output: 984


🏁 Script executed:

#!/bin/bash
# Explore app directory structure
echo "=== App directory structure ==="
find ./app -type f -name "*.tsx" -o -name "*.ts" -o -name "*.svg" | sort

echo ""
echo "=== Look for shared directory anywhere ==="
find ./app -type d -name "shared" 2>/dev/null

echo ""
echo "=== Full app directory tree (limited depth) ==="
ls -la ./app/
find ./app -type d | head -15

Length of output: 502


Asset import path is invalid and will cause a module resolution error.

The import path ../shared/assets/img/chat-with-us-icon.svg is broken:

  • No shared/ directory exists in the repository
  • No SVG assets exist in the codebase
  • The ../ prefix from the repository root exits the repository entirely

Verify the correct path to the asset file and update the import, or add the missing asset to the repository.

🤖 Prompt for AI Agents
In index.tsx around line 17, the import path
"../shared/assets/img/chat-with-us-icon.svg" is invalid (no shared dir or SVGs
and the ../ escapes the repo); update the import to the correct relative path
inside the project (for example point to the existing assets directory under src
or public) or add the missing SVG at the specified location, and ensure the path
uses the correct casing and extension so the module resolver can find it.

}

export const ChatButton = ({ salesButtonAction }: ChatButtonProps) => {
const [showOptions, setShowOptions] = useState(false);
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major

Remove unused state.

The showOptions state is never actually used. The Chakra UI Menu component manages its own open/close state internally, making this local state redundant.

Apply this diff to remove the unused state:

-  const [showOptions, setShowOptions] = useState(false);

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In index.tsx around line 24, remove the unused React state declaration "const
[showOptions, setShowOptions] = useState(false);" because the Chakra UI Menu
handles its own open/close state; delete the import/use of this state and any
references to setShowOptions so the component no longer contains redundant
state.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M This PR changes 30-99 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants