Skip to content

Feature/add couchbase support (#14518)#15147

Merged
gsmithun4 merged 6 commits intolts-3.16from
feat/couchbase-dev
Feb 18, 2026
Merged

Feature/add couchbase support (#14518)#15147
gsmithun4 merged 6 commits intolts-3.16from
feat/couchbase-dev

Conversation

@gsmithun4
Copy link
Copy Markdown
Collaborator

  • Add support for couchbase

  • Update readme

  • Update query operation


* Add support for couchbase

* Update readme

* Update query operation

---------

Co-authored-by: Midhun G S <gsmithun4@gmail.com>
Copilot AI review requested due to automatic review settings February 3, 2026 03:28
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds support for Couchbase, a NoSQL database, to ToolJet's marketplace plugins. The implementation provides integration with Couchbase's Data API, enabling document operations (CRUD), SQL++ queries, and Full-Text Search (FTS) capabilities.

Changes:

  • Added Couchbase plugin entry to the marketplace plugins registry
  • Implemented complete plugin infrastructure including TypeScript types, operations, and manifest files
  • Added six operations: Get Document, Create Document, Update Document, Delete Document, Query (SQL++), and FTS Search
  • Provided comprehensive documentation with examples for all operations

Reviewed changes

Copilot reviewed 12 out of 20 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
server/src/assets/marketplace/plugins.json Registers the Couchbase plugin in the marketplace
marketplace/plugins/couchbase/package.json Defines package metadata and dependencies
marketplace/plugins/couchbase/tsconfig.json TypeScript configuration for the plugin
marketplace/plugins/couchbase/lib/types.ts Type definitions for operations and options
marketplace/plugins/couchbase/lib/query_operations.ts Implementation of all six Couchbase operations
marketplace/plugins/couchbase/lib/index.ts Main service class implementing QueryService interface
marketplace/plugins/couchbase/lib/manifest.json Plugin manifest with connection configuration
marketplace/plugins/couchbase/lib/operations.json UI schema for operation parameters
marketplace/plugins/couchbase/lib/icon.svg Couchbase logo SVG
marketplace/plugins/couchbase/tests/index.js Placeholder test file
marketplace/plugins/couchbase/README.md Brief README with documentation link
marketplace/plugins/couchbase/.gitignore Git ignore rules for build artifacts
docs/static/img/marketplace/plugins/couchbase/* Screenshots for documentation
docs/docs/marketplace/plugins/couchbase.md Complete plugin documentation with examples

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +46 to +49
if (!response.ok) {
throw new Error(`Failed to create document: ${response.statusText}`);
}
await response.json().catch(() => (response.status === 201 ? { message: 'Created successfully' } : {}));
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

Line 49 has an awkward error handling pattern. The code attempts to parse JSON from the response and catches errors, but the catch block doesn't use the error or rethrow it. If the response is not 201, the operation still returns "Created successfully" even though the creation might have failed. This should be improved to properly handle the response or throw an error for non-201 status codes.

Suggested change
if (!response.ok) {
throw new Error(`Failed to create document: ${response.statusText}`);
}
await response.json().catch(() => (response.status === 201 ? { message: 'Created successfully' } : {}));
if (response.status !== 201) {
let errorBody: string | undefined;
try {
errorBody = await response.text();
} catch {
// Ignore errors while reading the error body
}
const message = `Failed to create document: ${response.status} ${response.statusText}${
errorBody ? ` - ${errorBody}` : ''
}`;
throw new Error(message);
}
try {
await response.json();
} catch {
// Ignore errors while parsing a successful creation response
}

Copilot uses AI. Check for mistakes.
Comment on lines +77 to +82
await response.json().catch((error) => {
if (!response.ok) {
throw error;
}
});
return 'Updated successfully';
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

The error handling in the catch block is inconsistent. On line 77-81, the code catches an error but only throws it if !response.ok. However, at this point we're in a catch block that was triggered by response.json() failing, which means the response was already OK (passed the check on line 74). This logic doesn't make sense - if we're in the catch block, we should either ignore the error (if an empty response is expected) or handle it differently. The same issue exists in the deleteDocument function (lines 101-105).

Copilot uses AI. Check for mistakes.
Comment on lines +155 to +164
if (!bucket || !index_name || !search_query) {
throw new Error('Missing required parameters: bucket, index_name, and query are required');
}

let parsedSearchQuery;
if (search_query) {
parsedSearchQuery = typeof search_query === 'string' ? JSON.parse(search_query) : search_query;
}

const dapi_url = `${data_api_url}/_p/fts/api/bucket/${bucket}/scope/${scope}/index/${index_name}/query`;
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

The scope parameter is not validated as required, but it's used in the URL construction on line 164. The error message on line 156 indicates that scope is required ("bucket, index_name, and query are required"), but the validation check on line 155 doesn't include scope. This inconsistency could lead to runtime errors when the URL is malformed due to an undefined scope value.

Copilot uses AI. Check for mistakes.
Comment on lines +336 to +337
"name": "couchbase",
"description": "database plugin from couchbase",
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

The description "database plugin from couchbase" is inconsistent with other plugin descriptions in the file and uses lowercase "couchbase". It should be capitalized and more descriptive, similar to other database plugins. For example, HarperDB uses "Plugin to store and query data from HarperDB".

Suggested change
"name": "couchbase",
"description": "database plugin from couchbase",
"name": "Couchbase",
"description": "Plugin to store and query data from Couchbase",

Copilot uses AI. Check for mistakes.
Comment on lines +32 to +44
let parsedDocument;
if (document) {
parsedDocument = typeof document === 'string' ? JSON.parse(document) : document;
}

const dapi_url = `${data_api_url}/v1/buckets/${bucket}/scopes/${scope}/collections/${collection}/documents/${document_id}`;
const response = await fetch(dapi_url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`,
},
body: JSON.stringify(parsedDocument),
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

The parsedDocument variable may be undefined if the document parameter is not provided. The code should validate that parsedDocument exists before using it in JSON.stringify() on line 44. This could cause the API to send "undefined" as the request body, which would likely fail.

Copilot uses AI. Check for mistakes.
Comment on lines +101 to +105
await response.json().catch((error) => {
if (!response.ok) {
throw error;
}
});
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

The error handling in the catch block is inconsistent. The code catches an error but only throws it if !response.ok. However, at this point we're in a catch block that was triggered by response.json() failing, which means the response was already OK (passed the check on line 98). This logic doesn't make sense - if we're in the catch block, we should either ignore the error (if an empty response is expected) or handle it differently. This is the same issue as in the updateDocument function.

Suggested change
await response.json().catch((error) => {
if (!response.ok) {
throw error;
}
});
// Some DELETE endpoints may return no JSON body; ignore JSON parsing errors.
try {
await response.json();
} catch {
// Intentionally ignore errors when parsing an optional response body.
}

Copilot uses AI. Check for mistakes.

**Query Options**: `{ "readonly": true, "query_context": "travel-sample.inventory" }`

Refer to the [request paramters](https://docs.couchbase.com/server/current/n1ql-rest-query/index.html#Request) for supported query options.
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

There's a typo in "request paramters" - it should be "request parameters".

Suggested change
Refer to the [request paramters](https://docs.couchbase.com/server/current/n1ql-rest-query/index.html#Request) for supported query options.
Refer to the [request parameters](https://docs.couchbase.com/server/current/n1ql-rest-query/index.html#Request) for supported query options.

Copilot uses AI. Check for mistakes.
"author": "Tooljet",
"timestamp": "Fri, 20 Jun 2025 06:46:04 GMT",
"tags": [
"AI"
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

The tag "AI" is incorrect for a database plugin. Couchbase is a NoSQL database, so this should be tagged with "Database" instead. This inconsistency could confuse users searching for database or AI-related plugins in the marketplace.

Suggested change
"AI"
"Database"

Copilot uses AI. Check for mistakes.
Comment on lines +3 to +4
const couchbase = require('../lib');

Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

Unused variable couchbase.

Suggested change
const couchbase = require('../lib');

Copilot uses AI. Check for mistakes.
Comment on lines +159 to +162
let parsedSearchQuery;
if (search_query) {
parsedSearchQuery = typeof search_query === 'string' ? JSON.parse(search_query) : search_query;
}
Copy link

Copilot AI Feb 3, 2026

Choose a reason for hiding this comment

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

This use of variable 'search_query' always evaluates to true.

Suggested change
let parsedSearchQuery;
if (search_query) {
parsedSearchQuery = typeof search_query === 'string' ? JSON.parse(search_query) : search_query;
}
let parsedSearchQuery = typeof search_query === 'string' ? JSON.parse(search_query) : search_query;

Copilot uses AI. Check for mistakes.
@Srimanitejas123 Srimanitejas123 added create-ee-lts-review-app uses ./docker/LTS/ee/ee-preview.Dockerfile and removed create-ee-review-app labels Feb 4, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 4, 2026

🚀 EE LTS Review App Deployed!

Resource Link
App URL https://tooljet-ee-lts-pr-15147.onrender.com
Render Dashboard https://dashboard.render.com/web/srv-d61d0gpr0fns73fricig
Docker Image tooljet/tooljet-render:ee-lts-pr-15147

Deployed using DockerHub-based pipeline - LTS Edition

@github-actions github-actions Bot added active-ee-lts-review-app For lts (github action build and deploy on render)) and removed create-ee-lts-review-app uses ./docker/LTS/ee/ee-preview.Dockerfile labels Feb 4, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 4, 2026

Marketplace Plugin added to stage bucket

🔍 View Deployment Logs & Summary

━━━━━━━━━━━━━━━ UPLOAD SUMMARY ━━━━━━━━━━━━━━━━━
[6:06:44 AM] 🎉 All files uploaded successfully
[6:06:44 AM] ✅ Successfully uploaded: 3701/3701 files
[6:06:44 AM] ❌ Failed uploads: 0/3701 files
[6:06:44 AM] ℹ Total time: 8.5s

@socket-security
Copy link
Copy Markdown

socket-security Bot commented Feb 17, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​docusaurus/​preset-classic@​2.0.0-alpha.73991006197100
Added@​docusaurus/​plugin-google-gtag@​2.0.0-alpha.731001006497100
Added@​docusaurus/​core@​2.0.0-alpha.73971007297100
Addedclsx@​1.1.11001009580100
Added@​mdx-js/​react@​1.6.221001009485100

View full report

@socket-security
Copy link
Copy Markdown

socket-security Bot commented Feb 17, 2026

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn Critical
Critical CVE: Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code in npm @babel/traverse

CVE: GHSA-67hx-6x53-jw92 Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code (CRITICAL)

Affected versions: < 7.23.2; >= 8.0.0-alpha.0 < 8.0.0-alpha.4

Patched version: 7.23.2

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/@docusaurus/core@2.0.0-alpha.73npm/@docusaurus/preset-classic@2.0.0-alpha.73npm/@babel/traverse@7.15.4

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@babel/traverse@7.15.4. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: Prototype Pollution in npm algoliasearch-helper

CVE: GHSA-vpf5-82c8-9v36 Prototype Pollution in algoliasearch-helper (CRITICAL)

Affected versions: < 3.6.2

Patched version: 3.6.2

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/@docusaurus/preset-classic@2.0.0-alpha.73npm/algoliasearch-helper@3.6.0

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/algoliasearch-helper@3.6.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: npm cipher-base is missing type checks, leading to hash rewind and passing on crafted data

CVE: GHSA-cpq7-6gpm-g9rc cipher-base is missing type checks, leading to hash rewind and passing on crafted data (CRITICAL)

Affected versions: < 1.0.5

Patched version: 1.0.5

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/cipher-base@1.0.4

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/cipher-base@1.0.4. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: Elliptic's private key extraction in ECDSA upon signing a malformed input (e.g. a string)

CVE: GHSA-vjh7-7g9h-fjfh Elliptic's private key extraction in ECDSA upon signing a malformed input (e.g. a string) (CRITICAL)

Affected versions: < 6.6.1

Patched version: 6.6.1

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/elliptic@6.5.4

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/elliptic@6.5.4. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: Exposure of Sensitive Information in npm eventsource

CVE: GHSA-6h5x-7c5m-7cr7 Exposure of Sensitive Information in eventsource (CRITICAL)

Affected versions: < 1.1.1; >= 2.0.0 < 2.0.2

Patched version: 1.1.1

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/eventsource@1.1.0

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/eventsource@1.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: Prototype Pollution in npm immer

CVE: GHSA-33f9-j839-rf8h Prototype Pollution in immer (CRITICAL)

Affected versions: >= 7.0.0 < 9.0.6

Patched version: 9.0.6

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/immer@8.0.1

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/immer@8.0.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: Prototype pollution in webpack npm loader-utils

CVE: GHSA-76p3-8jx3-jpfq Prototype pollution in webpack loader-utils (CRITICAL)

Affected versions: >= 2.0.0 < 2.0.3; < 1.4.1

Patched version: 1.4.1

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/@docusaurus/preset-classic@2.0.0-alpha.73npm/loader-utils@1.4.0

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/loader-utils@1.4.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: Prototype pollution in webpack npm loader-utils

CVE: GHSA-76p3-8jx3-jpfq Prototype pollution in webpack loader-utils (CRITICAL)

Affected versions: >= 2.0.0 < 2.0.3; < 1.4.1

Patched version: 2.0.3

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/@docusaurus/core@2.0.0-alpha.73npm/@docusaurus/preset-classic@2.0.0-alpha.73npm/loader-utils@2.0.0

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/loader-utils@2.0.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn Critical
Critical CVE: Prototype Pollution in npm minimist

CVE: GHSA-xvch-5gv4-984h Prototype Pollution in minimist (CRITICAL)

Affected versions: >= 1.0.0 < 1.2.6; < 0.2.4

Patched version: 1.2.6

From: docs/versioned_docs/version-2.22.0/widgets/package-lock.jsonnpm/@docusaurus/core@2.0.0-alpha.73npm/@docusaurus/preset-classic@2.0.0-alpha.73npm/minimist@1.2.5

ℹ Read more on: This package | This alert | What is a critical CVE?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Remove or replace dependencies that include known critical CVEs. Consumers can use dependency overrides or npm audit fix --force to remove vulnerable dependencies.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/minimist@1.2.5. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@github-actions
Copy link
Copy Markdown
Contributor

🔄 EE LTS Review App Rebuilding

New commit bc0e249 pushed. Image updated and deployment triggered.

Using cached layers for faster build

* Fix: couchbase ui fixes

* Feature/add couchbase support (#14518)

* Add support for couchbase

* Update readme

* Update query operation

---------

Co-authored-by: Midhun G S <gsmithun4@gmail.com>

* Fix: couchbase ui fixes

* ui-fix: removed AI tag from couchbase

---------

Co-authored-by: Rudhra Deep Biswas <rudra21ultra@gmail.com>
Co-authored-by: Prajwal Pai <108796209+prajwal-pai77@users.noreply.github.com>
Co-authored-by: Midhun G S <gsmithun4@gmail.com>
@github-actions
Copy link
Copy Markdown
Contributor

🔄 EE LTS Review App Rebuilding

New commit bc5cf4f pushed. Image updated and deployment triggered.

Using cached layers for faster build

@github-actions
Copy link
Copy Markdown
Contributor

🔄 EE LTS Review App Rebuilding

New commit 16ee721 pushed. Image updated and deployment triggered.

Using cached layers for faster build

@github-actions
Copy link
Copy Markdown
Contributor

🔄 EE LTS Review App Rebuilding

New commit 9f2abe0 pushed. Image updated and deployment triggered.

Using cached layers for faster build

@github-actions
Copy link
Copy Markdown
Contributor

🔄 EE LTS Review App Rebuilding

New commit 09dcdb5 pushed. Image updated and deployment triggered.

Using cached layers for faster build

@gsmithun4 gsmithun4 merged commit 5f13755 into lts-3.16 Feb 18, 2026
29 checks passed
@gsmithun4 gsmithun4 deleted the feat/couchbase-dev branch February 18, 2026 15:51
@github-actions github-actions Bot removed the active-ee-lts-review-app For lts (github action build and deploy on render)) label Feb 18, 2026
akshaysasidrn added a commit that referenced this pull request Apr 22, 2026
…load-to-s3 (#16047)

aws-actions/configure-aws-credentials@v4 exports AWS_SECRET_ACCESS_KEY (with
the AWS_ prefix), but the S3 uploader was reading SECRET_ACCESS_KEY, leaving
credentials.secretAccessKey undefined. aws-sdk v2 silently fell back to the
default credential provider chain so this typo went unnoticed for years; the
aws-sdk v3 migration in #15147 made an explicit credentials object
authoritative, so every upload since has failed with "Resolved credential
object is not valid" (0/567 files on recent runs).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
vavinash992 pushed a commit that referenced this pull request Apr 24, 2026
…load-to-s3 (#16047)

aws-actions/configure-aws-credentials@v4 exports AWS_SECRET_ACCESS_KEY (with
the AWS_ prefix), but the S3 uploader was reading SECRET_ACCESS_KEY, leaving
credentials.secretAccessKey undefined. aws-sdk v2 silently fell back to the
default credential provider chain so this typo went unnoticed for years; the
aws-sdk v3 migration in #15147 made an explicit credentials object
authoritative, so every upload since has failed with "Resolved credential
object is not valid" (0/567 files on recent runs).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
johnsoncherian added a commit that referenced this pull request Apr 27, 2026
* feat: add auto-sort feature to AI queries and update related components

* feat: add Generate Query button and update selected query handling in data query slice

* chore: update subproject commits for frontend and server

* chore: update subproject commits for frontend and server

* chore: update subproject commits for frontend and server

* Feat: Expandable rows in Table component (#15827)

* Add event and toggle for expandable rows

* Add column to expand in table

* Setup store

* Implement expandable rows in table

* expose rowData for children components and make all containers other than first row not editable

* Added support for dynamic height for each expandable row

* Update submodule reference

* Fix: Virtualizer not getting updated in a few cases when row is expanded or collapsed and nested table wasn't getting expanded as expected

* Update submodule references

* Fix: Remove 'children' and 'data' exposed variables from Table

* Fix: Clear exposed values when expandable rows is toggled

* Fix: Remove dynamic height for expanded row for phase 1

* Fix: Move 'Enable expnadable rows' toggle to 'Row selection' section instead of 'Additional Actions'

* Update submodule references

* Implement lazy resolution for expandable rows in Table component

- Introduced `updateCustomResolvablesLazy` and `resolveExpandedRows` to handle row data without immediate resolution, improving performance for expandable rows.
- Added `clearLazyRowIndices` to manage row indices when rows are expanded or collapsed.
- Updated the store to include `lazyResolvableParents` and `lazyRowIndices` for better state management of lazy-loaded components.
- Created a new `tableComponentSlice` to encapsulate logic related to table components, enhancing modularity and maintainability.

* Fix: Use similar approach for finding indices to be resolved using separate utility function

* Fix: Implement proper store cleanup incase table is deleted or expandable rows is disabled

* Refactor: Rename `clearLazyRowIndices` to `cleanupLazyResolvables` for clarity

- Updated the Table component to use `cleanupLazyResolvables` instead of `clearLazyRowIndices` for better readability and understanding of its purpose.
- Adjusted the logic in the `resolveExpandedRows` function to populate custom resolvables only for expanded rows, improving performance and state management.
- Enhanced cleanup logic in the component's effect hooks to ensure proper resource management when the component unmounts or when expandable rows are toggled.

* Update submodule reference

* Fix: Grid outline not getting highlighted when component is being dragged inside it

* Fix: Default height of expanded container

* Fix: Row expand trigger style

* Fix: Expanded container background color and padding

* Fix: Container component crashes when components is dropped from Table row's expanded container

* Update submodule references

* updat esubmodule references

* Update submodule references

* Refactor TableData component to use constants for row heights, improving readability and maintainability.

* Refactor TableContainer and useTable hooks to integrate expandedRows state, enhancing row expansion functionality.

* Add 'Table' to restricted widgets configuration

* Enhance appCanvasConstants with row-scoped widget types and resolvable key mappings; refactor Container and codeHinterSlice to utilize new constants for improved readability and maintainability.

* Add nesting level limits for widgets in appCanvasConstants; refactor Grid and dragEnd logic to enforce nesting restrictions based on new limits, enhancing widget organization and preventing excessive nesting.

* Update sbumodule reference

* feat: add refresh button functionality to table components (#15912)

* feat: add refresh button functionality to table components

* fix: update refresh button icon from IconRefresh to IconReload

* Made the showRefershButton to false by default

* supported support for data queries as well other than raw json

* Used dependency graph to check the query reference

* Added migration for show refresh button to support backward compatibility

* fix: update loading state handling to include refresh status in Table and Header components

* enhanceed migration to backfill showRefreshButton property for Table components

* [enhancement] : Added caption in the options  for  dropdown and multi-select components (#15935)

* Feature: Add caption support to DropdownV2 options

* Feature: Enhance DropdownV2 and MultiselectV2 with caption support

* Chore: Add migration to backfill Table component properties (#15982)

* feat: add migration to backfill refresh button and expandable rows properties for Table components

* Implemented a new migration to set default values for showRefreshButton, enableExpandableRows, and expansionHeight in Table components.
* Added logging for migration progress and success.
* Included functionality to delete app history for structural migrations if updates occur.

* chore: remove obsolete migration for backfilling showRefreshButton property in Table components

* Deleted the migration file that backfilled the showRefreshButton property, as it is no longer needed.
* This cleanup helps maintain the codebase by removing unused files.

* fixed selector issue (#15988)

* fix: gate JS library loading on license fetch to fix public/released apps (#15994)

JS libraries were silently skipped on public and released apps because
featureAccess?.appJsLibraries was still undefined when isComponentLayoutReady
fired. Introduces isLicenseFetched flag and handles fetch errors so the
gate is never blocked indefinitely for unauthenticated users.

* Fix: Listview children not getting rendered inside Table expanded row (#16000)

* Refactor componentsSlice to generalize ancestor type checks for row-scoped widgets. Removed obsolete check for Listview and Kanban, replacing it with a more flexible ROW_SCOPED_WIDGET_TYPES array. Updated comments for clarity on parent index handling.

* Updated comments to reflect changes in handling parent indices and replaced references to Listview with a more general row-scoped ancestor terminology.

* Unable to clone/import app with multiple versions (#16001)

* feat: add workflow, module, workspace, and custom group counts to telemetry (#15932)

* feat: add workflow, module, workspace, and user group counts to telemetry

Add 4 new metrics to the telemetry payload sent to hub.tooljet.io:
- total_workflows: count of apps with type 'workflow'
- total_modules: count of apps with type 'module'
- total_workspaces: count of all organizations
- total_user_groups: count of all permission groups

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: filter telemetry user group count to custom groups only

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fixed case (#16003)

* Fixed the Ui for supabase for where and sort fields (#15965)

* Fixed the Ui for supabase for where and sort fields

* Bump version to 3.20.148-lts across all components

---------

Co-authored-by: gsmithun4 <gsmithun4@gmail.com>

* fix: handle null check in PreviewCodeBlock (#15597)

* Fix: read AWS secret key from AWS_SECRET_ACCESS_KEY in marketplace upload-to-s3 (#16047)

aws-actions/configure-aws-credentials@v4 exports AWS_SECRET_ACCESS_KEY (with
the AWS_ prefix), but the S3 uploader was reading SECRET_ACCESS_KEY, leaving
credentials.secretAccessKey undefined. aws-sdk v2 silently fell back to the
default credential provider chain so this typo went unnoticed for years; the
aws-sdk v3 migration in #15147 made an explicit credentials object
authoritative, so every upload since has failed with "Resolved credential
object is not valid" (0/567 files on recent runs).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(file-button): update default icon and fix section categorization (#15734)

* fix(file-button): update default icon and fix section categorization

- Change default icon of FileButton component from IconHome2 to IconFileUpload for better UX
- Set iconVisibility to true by default for FileButton
- Add FileButton to Miscellaneous section in component library
- Replace ButtonGroup with ButtonGroupV2 in Buttons section in component library

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(file-button): align icon validation defaultValue with new default (IconFileUpload)

Agent-Logs-Url: https://github.com/ToolJet/ToolJet/sessions/d37904fa-086e-42be-afd6-7a2918bce6e2

Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>

* feat(sectionConfig): add FileButton to Buttons section and remove from Miscellaneous

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* Dynamic height  (#15993)

* Dynamic height revamp

* Redundant code cleanup

* Minor fix

* Add collapse on hide toggle to button component

* Fixed table collapse on hidden toggle missing

* Fixed listview min height issue

* Listview footer not at the bottom when dynamic height enabled fix

* Extra padding removed from textarea

* Fixed CollapseOnHide missing for KeyValuePair, CodeEditor, Richtextarea

* Fixed container height not getting properly calculated when a component with alignment set to top is present

* Accordian causing overlap fix

* Fix for container based components not recomputing height when invisible by default

* Toggling dynamic height toggle using fx fix

* Backfill CollapseOnHidden

* Minor listview fix

* Feat : MSSQL gui mode (#15826)

* GUI mode abstraction and GUI mode for postgresql

* CSS Issue and Query response fixes

* mssql changes for GUI mode

* mssql upsert operation

* mssql bug fix for errors faced in pgsql

* bug fix for MSSQL operations

* ui changes (#15964)

* dev testing bug fixes

* Bulk update backward compatibility fix

* chore: update version to 3.20.149-lts

---------

Co-authored-by: abhijeet760 <abhijeet@tooljet.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>

---------

Co-authored-by: Devanshu Rastogi <devanshu.rastogi05@gmail.com>
Co-authored-by: Manish Kushare <37823141+manishkushare@users.noreply.github.com>
Co-authored-by: YuktiGoyal02 <100783212+YuktiGoyal02@users.noreply.github.com>
Co-authored-by: Kavin Venkatachalam <50441969+kavinvenkatachalam@users.noreply.github.com>
Co-authored-by: Shaurya Sharma <79473274+shaurya-sharma064@users.noreply.github.com>
Co-authored-by: Akshay <akshaysasidrn@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Siddharth Pundir <145639697+Siddharthpl@users.noreply.github.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>
Co-authored-by: Johnson Cherian <johnsonc.dev@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Ganesh Kumar <40178541+ganesh8056@users.noreply.github.com>
Co-authored-by: abhijeet760 <abhijeet@tooljet.com>
gsmithun4 added a commit that referenced this pull request Apr 28, 2026
* fix: handle null check in PreviewCodeBlock (#15597)

* replace appsmith and retool from ai generated messages if they show up (#16039)

* 🚀 chore: update submodules to latest lts-3.16 after auto-merge (#16040)

Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>

* Fix: read AWS secret key from AWS_SECRET_ACCESS_KEY in marketplace upload-to-s3 (#16047)

aws-actions/configure-aws-credentials@v4 exports AWS_SECRET_ACCESS_KEY (with
the AWS_ prefix), but the S3 uploader was reading SECRET_ACCESS_KEY, leaving
credentials.secretAccessKey undefined. aws-sdk v2 silently fell back to the
default credential provider chain so this typo went unnoticed for years; the
aws-sdk v3 migration in #15147 made an explicit credentials object
authoritative, so every upload since has failed with "Resolved credential
object is not valid" (0/567 files on recent runs).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(file-button): update default icon and fix section categorization (#15734)

* fix(file-button): update default icon and fix section categorization

- Change default icon of FileButton component from IconHome2 to IconFileUpload for better UX
- Set iconVisibility to true by default for FileButton
- Add FileButton to Miscellaneous section in component library
- Replace ButtonGroup with ButtonGroupV2 in Buttons section in component library

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(file-button): align icon validation defaultValue with new default (IconFileUpload)

Agent-Logs-Url: https://github.com/ToolJet/ToolJet/sessions/d37904fa-086e-42be-afd6-7a2918bce6e2

Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>

* feat(sectionConfig): add FileButton to Buttons section and remove from Miscellaneous

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* Dynamic height  (#15993)

* Dynamic height revamp

* Redundant code cleanup

* Minor fix

* Add collapse on hide toggle to button component

* Fixed table collapse on hidden toggle missing

* Fixed listview min height issue

* Listview footer not at the bottom when dynamic height enabled fix

* Extra padding removed from textarea

* Fixed CollapseOnHide missing for KeyValuePair, CodeEditor, Richtextarea

* Fixed container height not getting properly calculated when a component with alignment set to top is present

* Accordian causing overlap fix

* Fix for container based components not recomputing height when invisible by default

* Toggling dynamic height toggle using fx fix

* Backfill CollapseOnHidden

* Minor listview fix

* Removed old render preview file

* Feat : MSSQL gui mode (#15826)

* GUI mode abstraction and GUI mode for postgresql

* CSS Issue and Query response fixes

* mssql changes for GUI mode

* mssql upsert operation

* mssql bug fix for errors faced in pgsql

* bug fix for MSSQL operations

* ui changes (#15964)

* dev testing bug fixes

* Bulk update backward compatibility fix

* chore: update version to 3.20.149-lts

---------

Co-authored-by: abhijeet760 <abhijeet@tooljet.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>

* Update Storybook deploy workflow for Netlify

* fixed reset password cases (#16074)

* [feat] : Introduce new column called Tags (#16023)

* Add TagsV2 support in Table component

* Enhance TagsV2 support in Table component by adding 'Allow multiple selection' option and updating related properties. Adjust styles and refactor TagsRenderer for improved functionality and maintainability.

* Add default select options for select/multiselect/tagsV2 columns in Table component. Refactor OptionsList and useColumnManager to utilize these defaults, enhancing consistency and maintainability.

* Refactor TagsRenderer to improve multi-value handling and integrate new icon for value removal. Update generateColumnsData to set 'allowMultipleSelection' default to false, enhancing configuration clarity.

* Enhance TagsV2 support in useColumnManager and TagsRenderer. Added default properties for 'tagsV2' column type, including sortTags, allowMultipleSelection, and autoAssignColors. Improved multi-value handling in TagsRenderer and updated styles for better UI consistency.

* Update TagsRenderer styles: replace boxShadow with border for improved UI consistency.

* fix

* fix

* Enhance TagsRenderer: Introduce auto-assigned chip color functionality and streamline background color handling for tag chips, improving visual consistency and customization options.

* [Feat] : Add column pinning to Table (#15889)

* feat: add column pinning functionality to table component

- Introduced a new PinColumnControl component for managing column pinning.
- Updated PropertiesTabElements to include the pinning control.
- Enhanced useColumnManager hook to handle pinPosition state.
- Added utility functions for calculating pinned column offsets and styles.
- Updated Table and TableHeader components to support pinned columns visually.
- Added CSS styles for pinned columns and their boundaries.
- Ensured default pinPosition is set to 'unpinned' for new columns.

* feat: enhance column pinning logic in table component

- Added support for dynamic column pinning based on the `useDynamicColumn` state.
- Updated `pinPosition` logic to handle dynamic freezing of columns, allowing for 'left' or 'right' pinning based on resolved values.
- Ensured compatibility with existing column properties and visibility checks.

* Enhance table pinning functionality by ensuring the selection column is pinned to the left when other columns are pinned. Update styles to maintain consistent background colors for pinned columns during selection and hover states.

* Feat/upgrade coding assistant (#16075)

* feat: add auto-sort feature to AI queries and update related components

* feat: add Generate Query button and update selected query handling in data query slice

* chore: update subproject commits for frontend and server

* chore: update subproject commits for frontend and server

* chore: update subproject commits for frontend and server

* Feat: Expandable rows in Table component (#15827)

* Add event and toggle for expandable rows

* Add column to expand in table

* Setup store

* Implement expandable rows in table

* expose rowData for children components and make all containers other than first row not editable

* Added support for dynamic height for each expandable row

* Update submodule reference

* Fix: Virtualizer not getting updated in a few cases when row is expanded or collapsed and nested table wasn't getting expanded as expected

* Update submodule references

* Fix: Remove 'children' and 'data' exposed variables from Table

* Fix: Clear exposed values when expandable rows is toggled

* Fix: Remove dynamic height for expanded row for phase 1

* Fix: Move 'Enable expnadable rows' toggle to 'Row selection' section instead of 'Additional Actions'

* Update submodule references

* Implement lazy resolution for expandable rows in Table component

- Introduced `updateCustomResolvablesLazy` and `resolveExpandedRows` to handle row data without immediate resolution, improving performance for expandable rows.
- Added `clearLazyRowIndices` to manage row indices when rows are expanded or collapsed.
- Updated the store to include `lazyResolvableParents` and `lazyRowIndices` for better state management of lazy-loaded components.
- Created a new `tableComponentSlice` to encapsulate logic related to table components, enhancing modularity and maintainability.

* Fix: Use similar approach for finding indices to be resolved using separate utility function

* Fix: Implement proper store cleanup incase table is deleted or expandable rows is disabled

* Refactor: Rename `clearLazyRowIndices` to `cleanupLazyResolvables` for clarity

- Updated the Table component to use `cleanupLazyResolvables` instead of `clearLazyRowIndices` for better readability and understanding of its purpose.
- Adjusted the logic in the `resolveExpandedRows` function to populate custom resolvables only for expanded rows, improving performance and state management.
- Enhanced cleanup logic in the component's effect hooks to ensure proper resource management when the component unmounts or when expandable rows are toggled.

* Update submodule reference

* Fix: Grid outline not getting highlighted when component is being dragged inside it

* Fix: Default height of expanded container

* Fix: Row expand trigger style

* Fix: Expanded container background color and padding

* Fix: Container component crashes when components is dropped from Table row's expanded container

* Update submodule references

* updat esubmodule references

* Update submodule references

* Refactor TableData component to use constants for row heights, improving readability and maintainability.

* Refactor TableContainer and useTable hooks to integrate expandedRows state, enhancing row expansion functionality.

* Add 'Table' to restricted widgets configuration

* Enhance appCanvasConstants with row-scoped widget types and resolvable key mappings; refactor Container and codeHinterSlice to utilize new constants for improved readability and maintainability.

* Add nesting level limits for widgets in appCanvasConstants; refactor Grid and dragEnd logic to enforce nesting restrictions based on new limits, enhancing widget organization and preventing excessive nesting.

* Update sbumodule reference

* feat: add refresh button functionality to table components (#15912)

* feat: add refresh button functionality to table components

* fix: update refresh button icon from IconRefresh to IconReload

* Made the showRefershButton to false by default

* supported support for data queries as well other than raw json

* Used dependency graph to check the query reference

* Added migration for show refresh button to support backward compatibility

* fix: update loading state handling to include refresh status in Table and Header components

* enhanceed migration to backfill showRefreshButton property for Table components

* [enhancement] : Added caption in the options  for  dropdown and multi-select components (#15935)

* Feature: Add caption support to DropdownV2 options

* Feature: Enhance DropdownV2 and MultiselectV2 with caption support

* Chore: Add migration to backfill Table component properties (#15982)

* feat: add migration to backfill refresh button and expandable rows properties for Table components

* Implemented a new migration to set default values for showRefreshButton, enableExpandableRows, and expansionHeight in Table components.
* Added logging for migration progress and success.
* Included functionality to delete app history for structural migrations if updates occur.

* chore: remove obsolete migration for backfilling showRefreshButton property in Table components

* Deleted the migration file that backfilled the showRefreshButton property, as it is no longer needed.
* This cleanup helps maintain the codebase by removing unused files.

* fixed selector issue (#15988)

* fix: gate JS library loading on license fetch to fix public/released apps (#15994)

JS libraries were silently skipped on public and released apps because
featureAccess?.appJsLibraries was still undefined when isComponentLayoutReady
fired. Introduces isLicenseFetched flag and handles fetch errors so the
gate is never blocked indefinitely for unauthenticated users.

* Fix: Listview children not getting rendered inside Table expanded row (#16000)

* Refactor componentsSlice to generalize ancestor type checks for row-scoped widgets. Removed obsolete check for Listview and Kanban, replacing it with a more flexible ROW_SCOPED_WIDGET_TYPES array. Updated comments for clarity on parent index handling.

* Updated comments to reflect changes in handling parent indices and replaced references to Listview with a more general row-scoped ancestor terminology.

* Unable to clone/import app with multiple versions (#16001)

* feat: add workflow, module, workspace, and custom group counts to telemetry (#15932)

* feat: add workflow, module, workspace, and user group counts to telemetry

Add 4 new metrics to the telemetry payload sent to hub.tooljet.io:
- total_workflows: count of apps with type 'workflow'
- total_modules: count of apps with type 'module'
- total_workspaces: count of all organizations
- total_user_groups: count of all permission groups

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: filter telemetry user group count to custom groups only

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fixed case (#16003)

* Fixed the Ui for supabase for where and sort fields (#15965)

* Fixed the Ui for supabase for where and sort fields

* Bump version to 3.20.148-lts across all components

---------

Co-authored-by: gsmithun4 <gsmithun4@gmail.com>

* fix: handle null check in PreviewCodeBlock (#15597)

* Fix: read AWS secret key from AWS_SECRET_ACCESS_KEY in marketplace upload-to-s3 (#16047)

aws-actions/configure-aws-credentials@v4 exports AWS_SECRET_ACCESS_KEY (with
the AWS_ prefix), but the S3 uploader was reading SECRET_ACCESS_KEY, leaving
credentials.secretAccessKey undefined. aws-sdk v2 silently fell back to the
default credential provider chain so this typo went unnoticed for years; the
aws-sdk v3 migration in #15147 made an explicit credentials object
authoritative, so every upload since has failed with "Resolved credential
object is not valid" (0/567 files on recent runs).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(file-button): update default icon and fix section categorization (#15734)

* fix(file-button): update default icon and fix section categorization

- Change default icon of FileButton component from IconHome2 to IconFileUpload for better UX
- Set iconVisibility to true by default for FileButton
- Add FileButton to Miscellaneous section in component library
- Replace ButtonGroup with ButtonGroupV2 in Buttons section in component library

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(file-button): align icon validation defaultValue with new default (IconFileUpload)

Agent-Logs-Url: https://github.com/ToolJet/ToolJet/sessions/d37904fa-086e-42be-afd6-7a2918bce6e2

Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>

* feat(sectionConfig): add FileButton to Buttons section and remove from Miscellaneous

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* Dynamic height  (#15993)

* Dynamic height revamp

* Redundant code cleanup

* Minor fix

* Add collapse on hide toggle to button component

* Fixed table collapse on hidden toggle missing

* Fixed listview min height issue

* Listview footer not at the bottom when dynamic height enabled fix

* Extra padding removed from textarea

* Fixed CollapseOnHide missing for KeyValuePair, CodeEditor, Richtextarea

* Fixed container height not getting properly calculated when a component with alignment set to top is present

* Accordian causing overlap fix

* Fix for container based components not recomputing height when invisible by default

* Toggling dynamic height toggle using fx fix

* Backfill CollapseOnHidden

* Minor listview fix

* Feat : MSSQL gui mode (#15826)

* GUI mode abstraction and GUI mode for postgresql

* CSS Issue and Query response fixes

* mssql changes for GUI mode

* mssql upsert operation

* mssql bug fix for errors faced in pgsql

* bug fix for MSSQL operations

* ui changes (#15964)

* dev testing bug fixes

* Bulk update backward compatibility fix

* chore: update version to 3.20.149-lts

---------

Co-authored-by: abhijeet760 <abhijeet@tooljet.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>

---------

Co-authored-by: Devanshu Rastogi <devanshu.rastogi05@gmail.com>
Co-authored-by: Manish Kushare <37823141+manishkushare@users.noreply.github.com>
Co-authored-by: YuktiGoyal02 <100783212+YuktiGoyal02@users.noreply.github.com>
Co-authored-by: Kavin Venkatachalam <50441969+kavinvenkatachalam@users.noreply.github.com>
Co-authored-by: Shaurya Sharma <79473274+shaurya-sharma064@users.noreply.github.com>
Co-authored-by: Akshay <akshaysasidrn@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Siddharth Pundir <145639697+Siddharthpl@users.noreply.github.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>
Co-authored-by: Johnson Cherian <johnsonc.dev@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Ganesh Kumar <40178541+ganesh8056@users.noreply.github.com>
Co-authored-by: abhijeet760 <abhijeet@tooljet.com>

* 🚀 chore: update submodules to latest lts-3.16 after auto-merge (#16153)

Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>

* Mysql batching and operations wrapped in transaction (#16094)

* restapi save issue (#16095)

* restapi save issue

* Fixed restapi confirm box

---------

Co-authored-by: Srimanitejas123 <mani@tooljet.com>

* fix(Rocket/Switch): tighten track and thumb dimensions (#16017)

Track 36×20 → 28×16, thumb 16×16 → 12×12, travel normalized to
±5px so on/off positions sit flush inside the track padding.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(rocket): add Popover component (#16009)

Adds shadcn Popover primitive and Rocket HOC wrapping it with
ToolJet design tokens, plus Storybook stories and spec.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: bump version to 3.20.150-lts across all components (#16195)

* Refactor normalizeQueryTransformationOptions to simplify key normalization and remove redundant code (#16103)

* Refactor normalizeQueryTransformationOptions to simplify key normalization and remove redundant code

* fix: whitelist options to normalise

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: Copilot <copilot@github.com>

* Feature: TruncatingText primitive and Rocket overflow polish (#16096)

* feat(Rocket): add TruncatingText primitive and overflow polish

- New TruncatingText primitive: ellipsis-clipped span that sets the
  native `title` attribute when the text overflows. Detects via
  ResizeObserver + MutationObserver so context-driven content (Radix
  SelectValue, Base UI ComboboxValue) re-measures on selection change.

- New useInputOverflowTitle hook for inputs, wired into ComboboxInput
  always-on. Adds `[&_input]:tw-truncate` so blurred values show the
  ellipsis, and resets scrollLeft on blur for reliable redraw.

- Select.spec.md and Combobox.spec.md document an opt-in TruncatingText
  composition pattern. Long-overflow stories added for TruncatingText,
  Select, and Combobox.

- Select trigger drops `tw-shadow-elevation-000` for a flat surface.

- Button gains `disabled:[&_svg]:tw-grayscale` /
  `disabled:[&_img]:tw-grayscale` so colored visuals desaturate when
  disabled. Lucide icons unaffected (already monochrome).

- Rocket barrel exports TruncatingText.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(Rocket): add BoundedInHost stories for Combobox and Select

Stories demonstrate the consumer-side pattern for popovers in narrow,
right-aligned-trigger hosts (e.g. an inspector panel) without changing
any Rocket primitives.

Combobox uses align="end" + `!tw-w-max !tw-max-w-[<inner>px]` to grow
leftward up to the host's inner width.

Select uses the same recipe plus a scoped `:has()` CSS rule (inline in
the story; in apps it goes in a component scss) that overrides Radix
popper-wrapper `min-width: max-content`.

Comments document why each piece is needed and how to translate it to a
real consumer (subtract host padding for the cap, place the global rule
once in the relevant scss file).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(Rocket): bound dropdown in Select LongSelectedValue story

Adds the data-tj-fit-host marker, the !tw-w-max + !tw-max-w-[208px]
classes, and the global :has() override so the Select dropdown stays
within the 240px host (16px padding → 208px inner). Without these,
Radix popper's wrapper enforces min-width: max-content and the dropdown
expands to fit the longest option, leaving TruncatingText with no work
to do — rows never clip.

Combobox's LongOptionNames story did not need this fix: Base UI's
shadcn Popup defaults to w-[var(--anchor-width)] so the dropdown
already matches trigger width and TruncatingText clips rows.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(Rocket): allow SelectItem flex child to shrink for truncation

Adds `[&>span:nth-child(2)]:tw-min-w-0` to the Rocket SelectItem CVA.
Radix renders SelectItem children inside <SelectPrimitive.ItemText>
(an inline span) which becomes a flex child of the Item. Default
flex-item min-width: auto prevents it from shrinking below its
intrinsic content width, which blocks any truncation primitive
(e.g. TruncatingText, plain tw-truncate) inside from clipping.

Setting min-width: 0 on that flex child is the standard "let me
shrink" idiom and is inert when content fits naturally — no regression
for any existing case. Lifting it once means consumers wrapping option
labels in a clipping primitive don't need to repeat the selector at
every callsite.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(Switch): adjust thumb translation values for better alignment

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: component overlapping when visibility set to false by default (#16089)

* fix: input clicks route to wrong listview row (#16064)

* fix: enhance descendant collection in prepareRowScope for ListView to support slot-based children (#16205)

---------

Co-authored-by: Manish Kushare <37823141+manishkushare@users.noreply.github.com>
Co-authored-by: Kartik Gupta <gupta.kartik18kg@gmail.com>
Co-authored-by: Adish M <44204658+adishM98@users.noreply.github.com>
Co-authored-by: Akshay <akshaysasidrn@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Shaurya Sharma <79473274+shaurya-sharma064@users.noreply.github.com>
Co-authored-by: Souvik <psouvik260@gmail.com>
Co-authored-by: Ganesh Kumar <40178541+ganesh8056@users.noreply.github.com>
Co-authored-by: abhijeet760 <abhijeet@tooljet.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>
Co-authored-by: YuktiGoyal02 <100783212+YuktiGoyal02@users.noreply.github.com>
Co-authored-by: Nakul Nagargade <133095394+nakulnagargade@users.noreply.github.com>
Co-authored-by: Avinash <70191708+vavinash992@users.noreply.github.com>
Co-authored-by: Devanshu Rastogi <devanshu.rastogi05@gmail.com>
Co-authored-by: Kavin Venkatachalam <50441969+kavinvenkatachalam@users.noreply.github.com>
Co-authored-by: Siddharth Pundir <145639697+Siddharthpl@users.noreply.github.com>
Co-authored-by: Srimanitejas123 <mani@tooljet.com>
Co-authored-by: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants