Skip to content

feat(forms): bring forms library into monorepo and migrate to Carbon - #4260

Open
PVinaches wants to merge 1 commit into
KaotoIO:mainfrom
PVinaches:feat/bring-forms-copy-2
Open

PVinaches wants to merge 1 commit into
KaotoIO:mainfrom
PVinaches:feat/bring-forms-copy-2

Conversation

@PVinaches

@PVinaches PVinaches commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

Description

Moves the @kaoto/forms library (previously in KaotoIO/forms) into the monorepo as packages/forms. It also migrates its UI from PatternFly to Carbon. The library renders JSON-schema forms for Apache Camel component schemas (KaotoForm, field components, Typeahead, KeyValue, validation, and utils).

Part of #3939

What changed

  • Added packages/forms with its sources, tests, snapshots, stubs and testing helpers (@kaoto/forms/testing, @kaoto/forms/testing/page-object).
  • Added the package tooling: package.json, tsconfig*.json, vite.config.mjs, vitest.config.mts, vitest-setup.ts, index.html and a README.
  • Migrated the UI components to Carbon (@carbon/react, @carbon/ibm-products, @carbon/icons-react, @carbon/styles). They are declared as peer dependencies, and no @patternfly imports remain in packages/forms/src.
  • Root package.json: workspaces are now ["packages/*", "!packages/forms"].

Notes for reviewers

  • packages/forms is excluded from the root Yarn workspaces for now, so the package isn't linked or built with the rest of the monorepo. Wiring it into @kaoto/kaoto is left for a follow-up PR (WIP).

Type of Change

  • Bug fix
  • New feature
  • Improvement
  • Documentation update
  • Other: repository restructuring (library migrated into the monorepo)

How Has This Been Tested?

  • Unit tests that came with the library, now under packages/forms/src/**/*.test.tsx, run with Vitest: yarn workspace @kaoto/forms test.
  • Typecheck and lib build: yarn workspace @kaoto/forms typecheck and yarn workspace @kaoto/forms build.
  • Lint: yarn workspace @kaoto/forms lint.
  • In connexion with kaoto (PR will follow in few days)

Checklist

  • I have read the Contributing Guidelines.
  • I have followed the coding style and conventions of the project.
  • I have tested my changes and ensured that they work as expected.
  • I have updated any relevant documentation.
  • I have added tests that prove my fix or feature works.

@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 174 files, which is 74 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 78962a03-e5b1-4d39-a9b2-2f1f6c741d0a
📥 Commits

Reviewing files that changed from the base of the PR and between 0a0a0df and 755896e.

⛔ Files ignored due to path filters: 14
  • packages/forms/public/favicon.ico is excluded by !**/*.ico
  • packages/forms/src/KeyValue/__snapshots__/KeyValueField.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/Typeahead/__snapshots__/Typeahead.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/__snapshots__/KaotoForm.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/ObjectField/__snapshots__/AllOfField.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/ObjectField/__snapshots__/AnyOfField.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/ObjectField/__snapshots__/ObjectFieldInner.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/OneOfField/__snapshots__/OneOfField.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/OneOfField/__snapshots__/SchemaList.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/__snapshots__/AutoField.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/__snapshots__/DisabledField.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/__snapshots__/PasswordField.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/__snapshots__/StringField.test.tsx.snap is excluded by !**/*.snap
  • packages/forms/src/fields/__snapshots__/TextAreaField.test.tsx.snap is excluded by !**/*.snap
📒 Files selected for processing: 174
  • package.json
  • packages/forms/README.md
  • packages/forms/index.html
  • packages/forms/package.json
  • packages/forms/public/.gitkeep
  • packages/forms/src/Form/NoFieldFound.scss
  • packages/forms/src/Form/NoFieldFound.test.tsx
  • packages/forms/src/Form/NoFieldFound.tsx
  • packages/forms/src/Form/customField/CustomExpandableSection.tsx
  • packages/forms/src/KaotoForm.scss
  • packages/forms/src/KaotoForm.test.tsx
  • packages/forms/src/KaotoForm.tsx
  • packages/forms/src/KeyValue/IndexedValue.test.tsx
  • packages/forms/src/KeyValue/IndexedValue.tsx
  • packages/forms/src/KeyValue/KeyValue.scss
  • packages/forms/src/KeyValue/KeyValue.test.tsx
  • packages/forms/src/KeyValue/KeyValue.tsx
  • packages/forms/src/KeyValue/KeyValueField.test.tsx
  • packages/forms/src/KeyValue/KeyValueField.tsx
  • packages/forms/src/KeyValue/index.ts
  • packages/forms/src/Typeahead/SimpleSelector.test.tsx
  • packages/forms/src/Typeahead/SimpleSelector.tsx
  • packages/forms/src/Typeahead/Typeahead.scss
  • packages/forms/src/Typeahead/Typeahead.test.tsx
  • packages/forms/src/Typeahead/Typeahead.tsx
  • packages/forms/src/Typeahead/Typeahead.types.tsx
  • packages/forms/src/Typeahead/index.ts
  • packages/forms/src/__mocks__/styleMock.ts
  • packages/forms/src/assets/.gitkeep
  • packages/forms/src/fields/ArrayBadgesField.scss
  • packages/forms/src/fields/ArrayBadgesField.test.tsx
  • packages/forms/src/fields/ArrayBadgesField.tsx
  • packages/forms/src/fields/ArrayField/ArrayField.test.tsx
  • packages/forms/src/fields/ArrayField/ArrayField.tsx
  • packages/forms/src/fields/ArrayField/ArrayFieldWrapper.scss
  • packages/forms/src/fields/ArrayField/ArrayFieldWrapper.test.tsx
  • packages/forms/src/fields/ArrayField/ArrayFieldWrapper.tsx
  • packages/forms/src/fields/ArrayField/index.ts
  • packages/forms/src/fields/AutoField.test.tsx
  • packages/forms/src/fields/AutoField.tsx
  • packages/forms/src/fields/BooleanField.scss
  • packages/forms/src/fields/BooleanField.test.tsx
  • packages/forms/src/fields/BooleanField.tsx
  • packages/forms/src/fields/DisabledField.test.tsx
  • packages/forms/src/fields/DisabledField.tsx
  • packages/forms/src/fields/EditInPlaceField.scss
  • packages/forms/src/fields/EditInPlaceField.test.tsx
  • packages/forms/src/fields/EditInPlaceField.tsx
  • packages/forms/src/fields/EnumField.test.tsx
  • packages/forms/src/fields/EnumField.tsx
  • packages/forms/src/fields/FieldActions.test.tsx
  • packages/forms/src/fields/FieldActions.tsx
  • packages/forms/src/fields/FieldWrapper.scss
  • packages/forms/src/fields/FieldWrapper.test.tsx
  • packages/forms/src/fields/FieldWrapper.tsx
  • packages/forms/src/fields/IndexedValuesField/IndexedValuesField.scss
  • packages/forms/src/fields/IndexedValuesField/IndexedValuesField.tsx
  • packages/forms/src/fields/IndexedValuesField/index.ts
  • packages/forms/src/fields/ObjectField/AllOfField.test.tsx
  • packages/forms/src/fields/ObjectField/AllOfField.tsx
  • packages/forms/src/fields/ObjectField/AnyOfField.test.tsx
  • packages/forms/src/fields/ObjectField/AnyOfField.tsx
  • packages/forms/src/fields/ObjectField/GroupFields.scss
  • packages/forms/src/fields/ObjectField/GroupFields.tsx
  • packages/forms/src/fields/ObjectField/ObjectField.tsx
  • packages/forms/src/fields/ObjectField/ObjectFieldGrouping.test.tsx
  • packages/forms/src/fields/ObjectField/ObjectFieldGrouping.tsx
  • packages/forms/src/fields/ObjectField/ObjectFieldInner.test.tsx
  • packages/forms/src/fields/ObjectField/ObjectFieldInner.tsx
  • packages/forms/src/fields/ObjectField/index.ts
  • packages/forms/src/fields/OneOfField/OneOfField.test.tsx
  • packages/forms/src/fields/OneOfField/OneOfField.tsx
  • packages/forms/src/fields/OneOfField/SchemaList.test.tsx
  • packages/forms/src/fields/OneOfField/SchemaList.tsx
  • packages/forms/src/fields/OneOfField/index.ts
  • packages/forms/src/fields/PasswordField.scss
  • packages/forms/src/fields/PasswordField.test.tsx
  • packages/forms/src/fields/PasswordField.tsx
  • packages/forms/src/fields/PropertiesField/PropertiesField.test.tsx
  • packages/forms/src/fields/PropertiesField/PropertiesField.tsx
  • packages/forms/src/fields/PropertiesField/index.ts
  • packages/forms/src/fields/StringField.scss
  • packages/forms/src/fields/StringField.test.tsx
  • packages/forms/src/fields/StringField.tsx
  • packages/forms/src/fields/TextAreaField.scss
  • packages/forms/src/fields/TextAreaField.test.tsx
  • packages/forms/src/fields/TextAreaField.tsx
  • packages/forms/src/fields/index.ts
  • packages/forms/src/global.d.ts
  • packages/forms/src/hooks/field-value.test.tsx
  • packages/forms/src/hooks/field-value.ts
  • packages/forms/src/hooks/index.ts
  • packages/forms/src/hooks/one-of-field.test.tsx
  • packages/forms/src/hooks/one-of-field.ts
  • packages/forms/src/hooks/suggestions.test.tsx
  • packages/forms/src/hooks/suggestions.tsx
  • packages/forms/src/index.ts
  • packages/forms/src/models/index.ts
  • packages/forms/src/models/react-component.ts
  • packages/forms/src/models/suggestions/index.ts
  • packages/forms/src/models/suggestions/types.ts
  • packages/forms/src/models/typings.ts
  • packages/forms/src/providers/FormComponentFactoryProvider.test.tsx
  • packages/forms/src/providers/FormComponentFactoryProvider.tsx
  • packages/forms/src/providers/ModelProvider.test.tsx
  • packages/forms/src/providers/ModelProvider.tsx
  • packages/forms/src/providers/SchemaDefinitionsProvider.test.tsx
  • packages/forms/src/providers/SchemaDefinitionsProvider.tsx
  • packages/forms/src/providers/SchemaProvider.test.tsx
  • packages/forms/src/providers/SchemaProvider.tsx
  • packages/forms/src/providers/SuggestionRegistryProvider.test.tsx
  • packages/forms/src/providers/SuggestionRegistryProvider.tsx
  • packages/forms/src/providers/canvas-form-tabs.provider.test.tsx
  • packages/forms/src/providers/canvas-form-tabs.provider.tsx
  • packages/forms/src/providers/context/form-component-factory-context.ts
  • packages/forms/src/providers/filtered-field.provider.test.tsx
  • packages/forms/src/providers/filtered-field.provider.tsx
  • packages/forms/src/providers/index.ts
  • packages/forms/src/stubs/error-handler.ts
  • packages/forms/src/stubs/rest-schema-properties.ts
  • packages/forms/src/stubs/timer.component.schema.ts
  • packages/forms/src/stubs/user-schema.json
  • packages/forms/src/testing.ts
  • packages/forms/src/testing/FieldTestProvider.tsx
  • packages/forms/src/testing/FormWrapper.tsx
  • packages/forms/src/testing/KaotoFormPageObject.ts
  • packages/forms/src/utils/SchemaPropertyFilter.test.ts
  • packages/forms/src/utils/SchemaPropertyFilter.ts
  • packages/forms/src/utils/apply-suggestion.test.ts
  • packages/forms/src/utils/apply-suggestion.ts
  • packages/forms/src/utils/camel-case-to-space.test.ts
  • packages/forms/src/utils/camel-case-to-space.ts
  • packages/forms/src/utils/camel-random-id.test.ts
  • packages/forms/src/utils/camel-random-id.ts
  • packages/forms/src/utils/capitalize-string.test.ts
  • packages/forms/src/utils/capitalize-string.ts
  • packages/forms/src/utils/get-applied-schema-index.ts
  • packages/forms/src/utils/get-cursor-word.test.ts
  • packages/forms/src/utils/get-cursor-word.ts
  • packages/forms/src/utils/get-field-groups.test.ts
  • packages/forms/src/utils/get-field-groups.ts
  • packages/forms/src/utils/get-item-from-schema.test.ts
  • packages/forms/src/utils/get-item-from-schema.ts
  • packages/forms/src/utils/get-oneof-schema-list.test.ts
  • packages/forms/src/utils/get-oneof-schema-list.ts
  • packages/forms/src/utils/get-tagged-field-from-string.test.ts
  • packages/forms/src/utils/get-tagged-field-from-string.ts
  • packages/forms/src/utils/get-value.test.ts
  • packages/forms/src/utils/get-value.ts
  • packages/forms/src/utils/index.ts
  • packages/forms/src/utils/is-defined.test.ts
  • packages/forms/src/utils/is-defined.ts
  • packages/forms/src/utils/is-field-tab-visible.test.ts
  • packages/forms/src/utils/is-field-tab-visible.ts
  • packages/forms/src/utils/is-field-value-defined.test.ts
  • packages/forms/src/utils/is-field-value-defined.ts
  • packages/forms/src/utils/is-raw-string.test.ts
  • packages/forms/src/utils/is-raw-string.ts
  • packages/forms/src/utils/resolve-schema-with-ref.test.ts
  • packages/forms/src/utils/resolve-schema-with-ref.ts
  • packages/forms/src/utils/set-value.test.ts
  • packages/forms/src/utils/set-value.ts
  • packages/forms/src/utils/weight-schemas-against-model.ts
  • packages/forms/src/validation/errors-mapper.test.ts
  • packages/forms/src/validation/errors-mapper.ts
  • packages/forms/src/validation/get-validator.test.ts
  • packages/forms/src/validation/get-validator.ts
  • packages/forms/tsconfig.json
  • packages/forms/tsconfig.lib.json
  • packages/forms/tsconfig.node.json
  • packages/forms/vite-env.d.ts
  • packages/forms/vite.config.mjs
  • packages/forms/vitest-setup.ts
  • packages/forms/vitest.config.mts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

❤️ Share

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

@PVinaches PVinaches closed this Oct 23, 2026
@PVinaches PVinaches reopened this Oct 23, 2026
@PVinaches
PVinaches force-pushed the feat/bring-forms-copy-2 branch from 2e29281 to fff6fd2 Compare October 23, 2026 14:47
@PVinaches
PVinaches force-pushed the feat/bring-forms-copy-2 branch from fff6fd2 to 755896e Compare October 23, 2026 15:16
@PVinaches
PVinaches marked this pull request as ready for review October 23, 2026 15:17
@sonarqubecloud

Copy link
Copy Markdown

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant