From 6e6564584f32604a9826fd7380e881cb7f40eb0e Mon Sep 17 00:00:00 2001 From: Rastislav Hepner <15527036+raswonders@users.noreply.github.com> Date: Tue, 12 May 2026 14:26:26 +0200 Subject: [PATCH 01/15] feat(BulkSelect): extend onSelect with second parameter source (#913) * feat(BulkSelect): extend onSelect API with source param * test(BulkSelect): add unit tests for source Assisted-by: Cursor * refactor: define BulkSelectSource as a value Co-authored-by: Karel Hala * refactor: use BulkSelectSource.dropdown instead of literal Co-authored-by: Karel Hala * refactor: use BulkSelectSource.checkbox instead of literal Co-authored-by: Karel Hala * refactor: add BulkSelectSource type * test: update BulkSelect unit tests --------- Co-authored-by: Karel Hala --- .../module/src/BulkSelect/BulkSelect.test.tsx | 82 ++++++++++++++++--- packages/module/src/BulkSelect/BulkSelect.tsx | 17 ++-- 2 files changed, 82 insertions(+), 17 deletions(-) diff --git a/packages/module/src/BulkSelect/BulkSelect.test.tsx b/packages/module/src/BulkSelect/BulkSelect.test.tsx index b7963fa8..9e2d65e2 100644 --- a/packages/module/src/BulkSelect/BulkSelect.test.tsx +++ b/packages/module/src/BulkSelect/BulkSelect.test.tsx @@ -1,19 +1,22 @@ import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import BulkSelect from './BulkSelect'; +import BulkSelect, { BulkSelectSource, BulkSelectValue } from './BulkSelect'; describe('BulkSelect component', () => { test('should render', () => { - expect(render( - null} - />)).toMatchSnapshot(); + expect( + render( + null} + /> + ) + ).toMatchSnapshot(); }); test('should render with dropdownListProps', async () => { @@ -121,6 +124,7 @@ describe('BulkSelect component', () => { test('should enable Select none when at least one row is selected', async () => { const user = userEvent.setup(); + render( { await user.click(screen.getByLabelText('Bulk select toggle')); expect(screen.getByRole('menuitem', { name: 'Select none (0)' })).not.toBeDisabled(); }); -}); \ No newline at end of file + + test(`should call onSelect with source ${BulkSelectSource.dropdown} when choosing menu items`, async () => { + const user = userEvent.setup(); + const onSelect = jest.fn(); + + render( + + ); + + const openMenu = async () => { + await user.click(screen.getByLabelText('Bulk select toggle')); + }; + + await openMenu(); + await user.click(screen.getByRole('menuitem', { name: 'Select none (0)' })); + expect(onSelect).toHaveBeenLastCalledWith(BulkSelectValue.none, BulkSelectSource.dropdown); + + onSelect.mockClear(); + await openMenu(); + await user.click(screen.getByRole('menuitem', { name: 'Select page (5)' })); + expect(onSelect).toHaveBeenLastCalledWith(BulkSelectValue.page, BulkSelectSource.dropdown); + + onSelect.mockClear(); + await openMenu(); + await user.click(screen.getByRole('menuitem', { name: 'Select all (10)' })); + expect(onSelect).toHaveBeenLastCalledWith(BulkSelectValue.all, BulkSelectSource.dropdown); + }); + + test(`should call onSelect with source ${BulkSelectSource.checkbox} when using split checkbox`, async () => { + const user = userEvent.setup(); + const onSelect = jest.fn(); + render( + + ); + + await user.click(screen.getByRole('checkbox', { name: 'Select page' })); + expect(onSelect).toHaveBeenCalledWith(BulkSelectValue.page, BulkSelectSource.checkbox); + }); +}); diff --git a/packages/module/src/BulkSelect/BulkSelect.tsx b/packages/module/src/BulkSelect/BulkSelect.tsx index fd702886..5cfdcf2f 100644 --- a/packages/module/src/BulkSelect/BulkSelect.tsx +++ b/packages/module/src/BulkSelect/BulkSelect.tsx @@ -22,6 +22,13 @@ export const BulkSelectValue = { export type BulkSelectValue = (typeof BulkSelectValue)[keyof typeof BulkSelectValue]; +export const BulkSelectSource = { + dropdown: 'dropdown', + checkbox: 'checkbox' +} as const; + +export type BulkSelectSource = (typeof BulkSelectSource)[keyof typeof BulkSelectSource]; + const defaultSelectPageLabel = (pageCount?: number) => `Select page${pageCount ? ` (${pageCount})` : ''}`; const defaultSelectAllLabel = (totalCount?: number) => `Select all${totalCount ? ` (${totalCount})` : ''}`; const defaultSelectedLabel = (selectedCount: number) => `${selectedCount} selected`; @@ -45,7 +52,7 @@ export interface BulkSelectProps extends Omit void; + onSelect: (value: BulkSelectValue, source?: BulkSelectSource) => void; /** Custom OUIA ID */ ouiaId?: string; /** Additional props for MenuToggleCheckbox */ @@ -119,12 +126,12 @@ export const BulkSelect: FC = ({ const onToggleClick = () => setOpen(!isOpen); return ( - ( { setOpen(!isOpen); - onSelect?.(value as BulkSelectValue); + onSelect?.(value as BulkSelectValue, BulkSelectSource.dropdown); }} isOpen={isOpen} onOpenChange={(isOpen: boolean) => setOpen(isOpen)} @@ -147,7 +154,7 @@ export const BulkSelect: FC = ({ ? null : pageSelected || (selectedCount === totalCount && totalCount > 0) } - onChange={(checked) => onSelect?.(!checked || checked === null ? noneOption : allOption)} + onChange={(checked) => onSelect?.(!checked || checked === null ? noneOption : allOption, BulkSelectSource.checkbox)} {...menuToggleCheckboxProps} > {selectedCount > 0 ? ( @@ -163,7 +170,7 @@ export const BulkSelect: FC = ({ {...props} > {splitButtonDropdownItems} - ) + ); }; From ecc90d7cbaa1bd98cac636d3af804078e850faf7 Mon Sep 17 00:00:00 2001 From: Nicole Thoen Date: Tue, 12 May 2026 08:31:51 -0400 Subject: [PATCH 02/15] chore: update gh actions (#915) * chore: update gh actions * ci(workflows): pin patternfly/.github reusable workflows to SHA Replace @main with commit fdb52a63a2220ec8a3b6c2d43f312cda708ffa06 for reproducible, auditable runs. Made-with: Cursor --- .github/workflows/label-pf-team-issue.yml | 9 +++++++++ .github/workflows/pr-preview.yml | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/label-pf-team-issue.yml diff --git a/.github/workflows/label-pf-team-issue.yml b/.github/workflows/label-pf-team-issue.yml new file mode 100644 index 00000000..8ead60e2 --- /dev/null +++ b/.github/workflows/label-pf-team-issue.yml @@ -0,0 +1,9 @@ +name: Label PF Team issues +on: + issues: + types: + - opened +jobs: + label: + uses: patternfly/.github/.github/workflows/add-pf-team-label-workflow.yml@fdb52a63a2220ec8a3b6c2d43f312cda708ffa06 + secrets: inherit diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml index 430eb172..f70fd77e 100644 --- a/.github/workflows/pr-preview.yml +++ b/.github/workflows/pr-preview.yml @@ -1,14 +1,23 @@ ### WARNING -- this file was generated by generate-workflows name: pr-preview -on: pull_request_target +on: + pull_request_target: + issue_comment: + types: [created] jobs: + check-permissions: + uses: patternfly/.github/.github/workflows/check-team-membership.yml@fdb52a63a2220ec8a3b6c2d43f312cda708ffa06 + secrets: inherit + build-upload: runs-on: ubuntu-latest + needs: check-permissions + if: needs.check-permissions.outputs.allowed == 'true' env: SURGE_LOGIN: ${{ secrets.SURGE_LOGIN }} SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }} GH_PR_TOKEN: ${{ secrets.GH_PR_TOKEN }} - GH_PR_NUM: ${{ github.event.number }} + GH_PR_NUM: ${{ needs.check-permissions.outputs.pr-number }} steps: - uses: actions/checkout@v4 # Yes, we really want to checkout the PR From ec7d792342493b52390bad88335e98b5dfacbff7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:32:28 +0200 Subject: [PATCH 03/15] chore(deps-dev): bump brace-expansion from 1.1.12 to 1.1.14 (#917) Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.14. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.14) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.14 dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index e0e6c0d8..89486b29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5118,9 +5118,9 @@ } }, "node_modules/@patternfly/documentation-framework/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -8623,9 +8623,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -14589,9 +14589,9 @@ "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { From b4beab4d7dfd905eddda3b9b37e7858484ff90cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:43:48 +0200 Subject: [PATCH 04/15] chore(deps-dev): bump @types/d3-array from 3.2.1 to 3.2.2 (#918) Bumps [@types/d3-array](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/d3-array) from 3.2.1 to 3.2.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/d3-array) --- updated-dependencies: - dependency-name: "@types/d3-array" dependency-version: 3.2.2 dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 89486b29..b44a7901 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6177,7 +6177,9 @@ } }, "node_modules/@types/d3-array": { - "version": "3.2.1", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", "dev": true, "license": "MIT", "peer": true From ce29fbcfc3bb5b9a5b921350ce616b62982f0eb5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:44:05 +0200 Subject: [PATCH 05/15] chore(deps-dev): bump nanoid from 3.3.11 to 3.3.12 (#919) Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.11 to 3.3.12. - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/3.3.11...3.3.12) --- updated-dependencies: - dependency-name: nanoid dependency-version: 3.3.12 dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b44a7901..be331e09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20764,9 +20764,9 @@ "license": "ISC" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "dev": true, "funding": [ { From a34a551b4ef33fc4f5e01a7b20c80f517e063f78 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:44:22 +0200 Subject: [PATCH 06/15] chore(deps-dev): bump thingies from 2.5.0 to 2.6.0 (#920) Bumps [thingies](https://github.com/streamich/thingies) from 2.5.0 to 2.6.0. - [Release notes](https://github.com/streamich/thingies/releases) - [Changelog](https://github.com/streamich/thingies/blob/main/CHANGELOG.md) - [Commits](https://github.com/streamich/thingies/compare/v2.5.0...v2.6.0) --- updated-dependencies: - dependency-name: thingies dependency-version: 2.6.0 dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index be331e09..b7788b38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26165,9 +26165,9 @@ } }, "node_modules/thingies": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", - "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", "dev": true, "license": "MIT", "engines": { From a2aa473390a5a6d4297df59d0590873c311f62b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:44:37 +0200 Subject: [PATCH 07/15] chore(deps-dev): bump safe-array-concat from 1.1.3 to 1.1.4 (#921) Bumps [safe-array-concat](https://github.com/ljharb/safe-array-concat) from 1.1.3 to 1.1.4. - [Changelog](https://github.com/ljharb/safe-array-concat/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/safe-array-concat/compare/v1.1.3...v1.1.4) --- updated-dependencies: - dependency-name: safe-array-concat dependency-version: 1.1.4 dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index b7788b38..2fb5ca6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8900,14 +8900,15 @@ } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -23803,14 +23804,15 @@ "license": "0BSD" }, "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, From 3c6eacbdc37600b5a6588ce169cfe56cd1c4007d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:44:52 +0200 Subject: [PATCH 08/15] chore(deps-dev): bump terser-webpack-plugin from 5.3.17 to 5.5.0 (#922) Bumps [terser-webpack-plugin](https://github.com/webpack/terser-webpack-plugin) from 5.3.17 to 5.5.0. - [Release notes](https://github.com/webpack/terser-webpack-plugin/releases) - [Changelog](https://github.com/webpack/terser-webpack-plugin/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/terser-webpack-plugin/compare/v5.3.17...v5.5.0) --- updated-dependencies: - dependency-name: terser-webpack-plugin dependency-version: 5.5.0 dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2fb5ca6b..8f10bf16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25992,9 +25992,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.17", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.17.tgz", - "integrity": "sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==", "dev": true, "license": "MIT", "dependencies": { From a66f677eef09212f37760e6c443394cad0e8a5b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:45:07 +0200 Subject: [PATCH 09/15] chore(deps-dev): bump @babel/plugin-transform-unicode-property-regex (#923) Bumps [@babel/plugin-transform-unicode-property-regex](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-unicode-property-regex) from 7.27.1 to 7.28.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.6/packages/babel-plugin-transform-unicode-property-regex) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-unicode-property-regex" dependency-version: 7.28.6 dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 56 +++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8f10bf16..70db71a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -231,14 +231,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -1772,14 +1772,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -19138,7 +19138,9 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -23009,7 +23011,9 @@ "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, "license": "MIT", "dependencies": { @@ -23058,18 +23062,18 @@ } }, "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -23107,13 +23111,13 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" @@ -26797,7 +26801,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, "license": "MIT", "engines": { @@ -26805,7 +26811,9 @@ } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, "license": "MIT", "engines": { From 61d236316fc58f1adbe3f3f128dd7c2c519204d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:45:20 +0200 Subject: [PATCH 10/15] chore(deps-dev): bump @babel/plugin-transform-async-to-generator (#924) Bumps [@babel/plugin-transform-async-to-generator](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-async-to-generator) from 7.27.1 to 7.28.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.6/packages/babel-plugin-transform-async-to-generator) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-async-to-generator" dependency-version: 7.28.6 dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 70db71a5..1058da8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -290,14 +290,14 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -900,14 +900,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { From f0a34f5e5f7c5abc9616cdd1fc30da0583d20022 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:45:39 +0200 Subject: [PATCH 11/15] chore(deps-dev): bump @polka/url from 1.0.0-next.25 to 1.0.0-next.29 (#925) Bumps [@polka/url](https://github.com/lukeed/polka) from 1.0.0-next.25 to 1.0.0-next.29. - [Release notes](https://github.com/lukeed/polka/releases) - [Commits](https://github.com/lukeed/polka/compare/v1.0.0-next.25...v1.0.0-next.29) --- updated-dependencies: - dependency-name: "@polka/url" dependency-version: 1.0.0-next.29 dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 1058da8b..afd8fb91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5546,7 +5546,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.25", + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "dev": true, "license": "MIT" }, From 7d8884cb82e16ed60754dcea289249e3dcda1755 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:46:04 +0200 Subject: [PATCH 12/15] chore(deps): bump ip-address and socks (#926) Bumps [ip-address](https://github.com/beaugunderson/ip-address) and [socks](https://github.com/JoshGlazebrook/socks). These dependencies needed to be updated together. Updates `ip-address` from 9.0.5 to 10.2.0 - [Commits](https://github.com/beaugunderson/ip-address/commits) Updates `socks` from 2.8.3 to 2.8.8 - [Release notes](https://github.com/JoshGlazebrook/socks/releases) - [Commits](https://github.com/JoshGlazebrook/socks/compare/2.8.3...2.8.8) --- updated-dependencies: - dependency-name: ip-address dependency-version: 10.2.0 dependency-type: indirect - dependency-name: socks dependency-version: 2.8.8 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 40 +++++++++++----------------------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index afd8fb91..34893723 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15575,33 +15575,15 @@ "license": "MIT" }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { "node": ">= 12" } }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -21527,13 +21509,13 @@ } }, "node_modules/pac-proxy-agent/node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", + "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -22458,13 +22440,13 @@ } }, "node_modules/proxy-agent/node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", + "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { From 959c421f5820fd3f39fcb5e00a55611045d96475 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:46:26 +0200 Subject: [PATCH 13/15] chore(deps-dev): bump fast-uri from 3.1.0 to 3.1.2 (#930) Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.0 to 3.1.2. - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.2) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 34893723..1ab28f54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13690,9 +13690,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { From c42df1fc187ba0c62d1e62ef2f149051082f9553 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 14:46:42 +0200 Subject: [PATCH 14/15] chore(deps): bump @babel/plugin-transform-modules-systemjs (#931) Bumps [@babel/plugin-transform-modules-systemjs](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-modules-systemjs) from 7.27.1 to 7.29.4. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.29.4/packages/babel-plugin-transform-modules-systemjs) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-modules-systemjs" dependency-version: 7.29.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ab28f54..72358f3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -304,15 +304,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1304,16 +1304,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz", + "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" From eb32c46e2d985c0117e6887f05bf2a4d077aa5a7 Mon Sep 17 00:00:00 2001 From: Robb Hamilton Date: Tue, 12 May 2026 10:45:32 -0400 Subject: [PATCH 15/15] fix(ResponsiveActions): Disable kebab when all actions are disabled (#928) * fix(ResponsiveActions): Disable kebab when all actions are disabled Fixes #927 - Uses OverflowMenuContext to access isBelowBreakpoint state - Kebab disabled state is now responsive to viewport width: - Above breakpoint: disabled if all regular items are disabled - Below breakpoint: disabled if all items (pinned + regular) are disabled - Created ResponsiveActionsDropdown component to access context - Tracks disabled state separately for pinned vs regular items - Added comprehensive test coverage for all scenarios - Fully backward compatible (no breaking changes) * refactor: remove unnecessary comments from ResponsiveActions Address PR review feedback by removing unnecessary comments that don't add value beyond what the code already expresses. Co-Authored-By: Claude Sonnet 4.5 * test(ResponsiveActions): use RTL conventions and remove unnecessary snapshots Address PR review feedback: - Replace container.querySelector with screen.getByRole('button') queries - Remove snapshot tests from disabled state tests (structure is tested by other tests) - Remove container destructuring where no longer needed - Use toBeDisabled()/toBeEnabled() instead of toHaveAttribute('disabled') Co-Authored-By: Claude Sonnet 4.5 --------- Co-authored-by: Claude Sonnet 4.5 --- .../ResponsiveActions.test.tsx | 68 ++++++++++++++- .../ResponsiveActions/ResponsiveActions.tsx | 87 ++++++++++++++----- 2 files changed, 130 insertions(+), 25 deletions(-) diff --git a/packages/module/src/ResponsiveActions/ResponsiveActions.test.tsx b/packages/module/src/ResponsiveActions/ResponsiveActions.test.tsx index f3c29fec..a573e99b 100644 --- a/packages/module/src/ResponsiveActions/ResponsiveActions.test.tsx +++ b/packages/module/src/ResponsiveActions/ResponsiveActions.test.tsx @@ -1,4 +1,4 @@ -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import ResponsiveActions from './ResponsiveActions'; import ResponsiveAction from '../ResponsiveAction'; @@ -56,5 +56,71 @@ describe('ResponsiveActions component', () => { expect(buttons).toHaveLength(2); expect(container).toMatchSnapshot(); }); + + test('ResponsiveActions with all dropdown items disabled should disable kebab', () => { + render( + + Disabled action 1 + Disabled action 2 + ); + + const kebabToggle = screen.getByRole('button', { name: /actions overflow menu/i }); + expect(kebabToggle).toBeDisabled(); + }); + + test('ResponsiveActions with some enabled dropdown items should not disable kebab', () => { + render( + + Disabled action + Enabled action + ); + + const kebabToggle = screen.getByRole('button', { name: /actions overflow menu/i }); + expect(kebabToggle).toBeEnabled(); + }); + + test('ResponsiveActions with enabled pinned item and disabled regular item should disable kebab above breakpoint', () => { + render( + + Enabled pinned action + Disabled regular action + ); + + const kebabToggle = screen.getByRole('button', { name: /actions overflow menu/i }); + expect(kebabToggle).toBeDisabled(); + }); + + test('ResponsiveActions with enabled pinned item and enabled regular item should not disable kebab', () => { + render( + + Enabled pinned action + Enabled regular action + ); + + const kebabToggle = screen.getByRole('button', { name: /actions overflow menu/i }); + expect(kebabToggle).toBeEnabled(); + }); + + test('ResponsiveActions with all dropdown items disabled including pinned should disable kebab', () => { + render( + + Disabled pinned action + Disabled action + ); + + const kebabToggle = screen.getByRole('button', { name: /actions overflow menu/i }); + expect(kebabToggle).toBeDisabled(); + }); + + test('ResponsiveActions with only persistent items should not render kebab', () => { + const { container } = render( + + Persistent action + ); + + // Should not have kebab when only persistent items exist + const kebabToggle = container.querySelector('[data-ouia-component-id="ResponsiveActions-menu-dropdown-toggle"]'); + expect(kebabToggle).toBeNull(); + }); }); }); \ No newline at end of file diff --git a/packages/module/src/ResponsiveActions/ResponsiveActions.tsx b/packages/module/src/ResponsiveActions/ResponsiveActions.tsx index a7e1c5f7..54714c6e 100644 --- a/packages/module/src/ResponsiveActions/ResponsiveActions.tsx +++ b/packages/module/src/ResponsiveActions/ResponsiveActions.tsx @@ -1,8 +1,9 @@ import type { ReactNode, FunctionComponent } from 'react'; -import { Children, isValidElement, useState } from 'react'; +import { Children, isValidElement, useState, useContext } from 'react'; import { Button, Dropdown, DropdownList, MenuToggle, OverflowMenu, OverflowMenuContent, OverflowMenuControl, OverflowMenuDropdownItem, OverflowMenuGroup, OverflowMenuItem, OverflowMenuProps } from '@patternfly/react-core'; import { EllipsisVIcon } from '@patternfly/react-icons'; import { ResponsiveActionProps } from '../ResponsiveAction'; +import { OverflowMenuContext } from '@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuContext'; /** extends OverflowMenuProps */ export interface ResponsiveActionsProps extends Omit { @@ -14,13 +15,62 @@ export interface ResponsiveActionsProps extends Omit = ({ ouiaId = 'ResponsiveActions', breakpoint = 'lg', children, ...props }: ResponsiveActionsProps) => { +const ResponsiveActionsDropdown: FunctionComponent<{ + ouiaId: string; + dropdownItems: ReactNode[]; + pinnedItemsDisabled: boolean[]; + regularItemsDisabled: boolean[]; +}> = ({ ouiaId, dropdownItems, pinnedItemsDisabled, regularItemsDisabled }) => { const [ isOpen, setIsOpen ] = useState(false); + const { isBelowBreakpoint } = useContext(OverflowMenuContext); + + const isKebabDisabled = (() => { + const allPinnedDisabled = pinnedItemsDisabled.length > 0 && pinnedItemsDisabled.every(disabled => disabled); + const allRegularDisabled = regularItemsDisabled.length > 0 && regularItemsDisabled.every(disabled => disabled); + + if (isBelowBreakpoint) { + return (pinnedItemsDisabled.length > 0 || regularItemsDisabled.length > 0) && + (pinnedItemsDisabled.length === 0 || allPinnedDisabled) && + (regularItemsDisabled.length === 0 || allRegularDisabled); + } else { + return allRegularDisabled; + } + })(); + + return ( + setIsOpen(false)} + toggle={(toggleRef) => ( + } + onClick={() => setIsOpen(!isOpen)} + isExpanded={isOpen} + isDisabled={isKebabDisabled} + /> + )} + isOpen={isOpen} + onOpenChange={setIsOpen} + > + + {dropdownItems} + + + ); +}; + +export const ResponsiveActions: FunctionComponent = ({ ouiaId = 'ResponsiveActions', breakpoint = 'lg', children, ...props }: ResponsiveActionsProps) => { // separate persistent, pinned and collapsed actions const persistentActions: ReactNode[] = []; const pinnedActions: ReactNode[] = []; const dropdownItems: ReactNode[] = []; + const pinnedItemsDisabled: boolean[] = []; + const regularItemsDisabled: boolean[] = []; let hasRegularActions = false; Children.forEach(children, (child, index) => { @@ -37,7 +87,6 @@ export const ResponsiveActions: FunctionComponent = ({ o ); } else { - // Track if there are any regular (non-persistent, non-pinned) actions hasRegularActions = true; } @@ -47,6 +96,11 @@ export const ResponsiveActions: FunctionComponent = ({ o {children} ); + if (isPinned) { + pinnedItemsDisabled.push(!!actionProps.isDisabled); + } else { + regularItemsDisabled.push(!!actionProps.isDisabled); + } } } }); @@ -74,27 +128,12 @@ export const ResponsiveActions: FunctionComponent = ({ o ) : null} {dropdownItems.length > 0 && ( - setIsOpen(false)} - toggle={(toggleRef) => ( - } - onClick={() => setIsOpen(!isOpen)} - isExpanded={isOpen} - /> - )} - isOpen={isOpen} - onOpenChange={setIsOpen} - > - - {dropdownItems} - - + )}