19202 Commits

Author SHA1 Message Date
Patrik Oldsberg 08b0a7f933 Add deprecation warnings for camelCase flag usage
Log a warning to stderr when users pass the camelCase form of flags
that now have kebab-case as the canonical spelling. The old forms
still work (type-flag handles both natively) but users should migrate.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-06 15:13:58 +01:00
Patrik Oldsberg c28e6a7b1c Remove unnecessary deprecation warnings for camelCase flags
type-flag natively supports both camelCase and kebab-case for all
flags, so no deprecation warnings or normalization are needed for
casing variants. Only the --alwaysYarnPack alias (a genuinely
different name) still requires normalization in buildWorkspace.

Also inlined flagDefs at each call site and updated the changeset
to reflect that both flag forms work transparently.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-06 14:52:11 +01:00
Johan Persson 12d8afe82d feat(ui): add analytics event tracking to BUI navigation components (#33150)
* feat(ui): add analytics types

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): add useAnalytics hook with dev-mode swap guard

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): add AnalyticsProvider, getNodeText, and analytics barrel exports

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): integrate analytics into defineComponent and useDefinition

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): add analytics tracking to Link component

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): add analytics tracking to ButtonLink component

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): add analytics tracking to Tab component

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): add analytics tracking to MenuItem component

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): add analytics tracking to Tag component

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): add analytics tracking to Table Row component

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): widen getNodeText to accept render functions

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore(ui): update API reports

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore: add changeset for BUI analytics

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* fix(ui): chain MenuItem onAction with user-provided handler instead of overwriting

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore(ui): address review feedback — changeset wording and types docs

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(core-app-api): wire AnalyticsProvider from @backstage/ui into app shell

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(plugin-app): add AnalyticsProvider wrapper extension for BUI components

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore: update API reports

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore: update API reports for core-components and scaffolder

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* docs(ui): add analytics documentation and noTrack prop to component docs

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore: update yarn.lock

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(plugin-app): move AnalyticsProvider into AppRoot directly

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore: format installation docs

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* fix(ui): call user onPress before analytics in Tag component

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* refactor(ui): replace AnalyticsProvider with generic BUIProvider

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore: replace remaining AnalyticsProvider references with BUIProvider

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* fix(plugin-app): import useAnalytics from frontend-plugin-api

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* docs(ui): improve noTrack prop description

Signed-off-by: Johan Persson <johanopersson@gmail.com>

---------

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-06 14:45:57 +01:00
Patrik Oldsberg 9fb3b18393 Merge pull request #33159 from backstage/rugvip/cli-hidden-commands
cli: add support for experimental commands
2026-03-06 14:02:45 +01:00
Patrik Oldsberg 8da1817584 Inline deprecation warnings and fix package lint parameters
Remove the central warnDeprecatedFlags helper and replace with
module-specific deprecation checks at each call site. This avoids
cross-module dependencies and makes the deprecated flag mappings
explicit where they are consumed.

Also fix buildWorkspace.ts to emit the deprecation warning during
flag normalization (where the old flags are actually intercepted),
and add positional parameter declaration to package lint so that
directories show in help output.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-06 13:50:43 +01:00
Patrik Oldsberg a4e59024c0 Add support for experimental commands in the CLI module API
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-06 13:17:46 +01:00
Patrik Oldsberg edb872c49a Rename PageTab to PageLayoutTab in @backstage/frontend-plugin-api
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-06 11:21:32 +01:00
Johan Persson 430d5ed323 fix(ui): allow CardBody scrolling in interactive cards (#33151)
* refactor(ui): rename CardOverlay to CardTrigger

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* refactor(ui): replace Card overlay with visually-hidden trigger and focus ring

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): implement hybrid click delegation for interactive cards

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* docs(ui): add story for interactive scrollable card

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore: add changeset for interactive card scroll fix

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* fix(ui): fix bottom scroll shadow showing when CardBody has no overflow

The reversed scroll-driven animation used `both` fill mode, causing the
backwards fill to show opacity: 1 when no scroll timeline was active.
Replace with two stacked animations using `forwards` fill only.

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* docs(ui): update InteractiveScrollable story to use onPress

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* style: format Card.module.css

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* fix(ui): guard against Text node target in Card click handler

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* feat(ui): render Card as article element for better semantics

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* chore(ui): update API report

Signed-off-by: Johan Persson <johanopersson@gmail.com>

* fix(ui): prevent synthetic click from double-bubbling and exclude onClick from Card types

Signed-off-by: Johan Persson <johanopersson@gmail.com>

---------

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-05 14:57:00 +00:00
Patrik Oldsberg 4c32f367e4 Merge pull request #33149 from backstage/rugvip/deprecate-mock-api-exports
frontend-test-utils: deprecate standalone mock API exports
2026-03-05 15:22:47 +01:00
Patrik Oldsberg d9e999a631 Merge pull request #33152 from backstage/rugvip/use-api-holder-no-throw
frontend-plugin-api: change `useApiHolder` to not throw outside API context
2026-03-05 14:10:02 +01:00
Patrik Oldsberg 3b0c46e272 deprecate MockFetchApi class, keep MockFetchApiOptions
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 13:56:51 +01:00
Patrik Oldsberg a462d9ae8b Merge pull request #33148 from backstage/rugvip/move-extensionFactoryMiddleware-to-frontend-app-api
Move `ExtensionFactoryMiddleware` from frontend-plugin-api to frontend-app-api
2026-03-05 13:56:01 +01:00
Patrik Oldsberg 0f61db8bfe Merge pull request #33147 from backstage/rugvip/simplify-extension-attach-to
Simplify the `ExtensionAttachTo` type
2026-03-05 13:52:02 +01:00
Patrik Oldsberg 9581cdfbc5 Merge pull request #33144 from backstage/rugvip/remove-any-extension-data-ref
Remove deprecated `AnyExtensionDataRef` type
2026-03-05 13:51:54 +01:00
Patrik Oldsberg be07392d48 Merge pull request #33143 from backstage/rugvip/remove-allowUnknownExtensionConfig
Remove `allowUnknownExtensionConfig` option from frontend app APIs
2026-03-05 13:51:46 +01:00
Patrik Oldsberg ec9665666a fix api report generation to use standard pipeline flags
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 13:51:32 +01:00
Patrik Oldsberg f41cd2478e Merge pull request #33142 from backstage/rugvip/deprecate-nav-item-blueprint
Deprecate NavItemBlueprint in @backstage/frontend-plugin-api
2026-03-05 13:51:00 +01:00
Patrik Oldsberg 1408dfc6ca Merge pull request #33141 from backstage/rugvip/deprecate-withApis-frontend-plugin-api
Deprecate `withApis` in `@backstage/frontend-plugin-api`
2026-03-05 13:50:53 +01:00
Patrik Oldsberg 9989e9f98d Merge pull request #33139 from backstage/rugvip/move-analytics-blueprint-to-app-react
Move AnalyticsImplementationBlueprint to @backstage/plugin-app-react
2026-03-05 13:50:43 +01:00
Patrik Oldsberg 9b8d43069d Merge pull request #33138 from backstage/rugvip/fix-dialog-api-jsx-type-inconsistency
Fix JSX type reference inconsistency in DialogApiDialog
2026-03-05 13:50:34 +01:00
Patrik Oldsberg 369079ef50 Merge pull request #33137 from backstage/rugvip/remove-page-blueprint-defaultpath
Remove deprecated `defaultPath` migration helper from `PageBlueprint`
2026-03-05 13:50:25 +01:00
Patrik Oldsberg cae80d6d91 Freeze the empty ApiHolder singleton
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-05 13:50:19 +01:00
Patrik Oldsberg d7311c8bac Address review feedback from PR #33140
- Keep explicit error when API context provider exists but v1 is not
  available, only return empty holder when there is no provider at all
- Update tests in core-app-api to expect the new error message when
  rendering outside a provider
- Add @backstage/core-plugin-api to changeset since it re-exports
  useApiHolder

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-05 13:32:15 +01:00
Patrik Oldsberg b56f573815 frontend-test-utils: deprecate standalone mock API exports
Deprecate all standalone mock API exports in favor of the `mockApis`
namespace. This includes the mock classes, their option types, and
the `ErrorWithContext` type. Inline option types into the `mockApis`
function signatures to avoid dependence on the deprecated types.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 13:14:55 +01:00
Johan Persson 7960d54215 feat(ui): support native HTML attributes on Grid components
Extend GridProps and GridItemProps to accept standard HTML div
attributes by inheriting from React.HTMLAttributes<HTMLDivElement>.
The rest props are spread onto the underlying div elements.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-05 12:43:03 +01:00
Johan Persson a733fd1a68 feat(ui): support native HTML attributes on Flex component
Extend FlexProps to accept standard HTML div attributes (e.g. onClick,
id, aria-*) by inheriting from React.HTMLAttributes<HTMLDivElement>.
The rest props are spread onto the underlying div element.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2026-03-05 12:43:03 +01:00
Patrik Oldsberg 749ccb432d Use plain text instead of @link in deprecation tags
The {@link} tags resolve to the local deprecated symbols rather than
the new ones in @backstage/plugin-app-react, and TSDoc doesn't support
cross-package links.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 12:34:33 +01:00
Patrik Oldsberg fa0277093e Address review feedback
- Remove {@link} from @deprecated tag (freben feedback)
- Use Object.hasOwn instead of hasOwnProperty
- Use NotImplementedError instead of plain Error
- Add @backstage/errors dependency
- Add tests for withApis in core-compat-api

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 12:30:47 +01:00
Patrik Oldsberg 01929491d7 Keep internal array attachTo support, only simplify public types
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 11:51:10 +01:00
Patrik Oldsberg a447ea8162 Update API reports
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 11:46:42 +01:00
Patrik Oldsberg a1de46c7f2 Update API reports
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 11:46:17 +01:00
Patrik Oldsberg dab6c46168 Move ExtensionFactoryMiddleware from frontend-plugin-api to frontend-app-api
The `ExtensionFactoryMiddleware` type is only used by the app-level wiring
and has been moved to `@backstage/frontend-app-api` as its canonical location.

The type is preserved in `@backstage/frontend-plugin-api` with a `@deprecated`
tag pointing to the new location. All internal usages have been updated to
import from the new location.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 10:37:51 +01:00
Patrik Oldsberg a9440f0622 Simplify the ExtensionAttachTo type
Simplified the `ExtensionAttachTo` type to only support a single
attachment target, removing the array form for attaching to multiple
extension points. Also removed the deprecated `ExtensionAttachToSpec`
type alias.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 10:37:05 +01:00
Patrik Oldsberg 33de79d5dd Remove deprecated createPublicSignInApp from @backstage/frontend-defaults
The function was deprecated in favor of using `createApp` with the
`appModulePublicSignIn` module from `@backstage/plugin-app/alpha`.
This removes the function, its tests, and updates the documentation
to use the recommended approach.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-03-05 10:33:45 +01:00
Patrik Oldsberg 6573901551 Remove deprecated AnyExtensionDataRef type
The `AnyExtensionDataRef` type alias was deprecated in favor of using
`ExtensionDataRef` without type parameters, which is equivalent since
all type parameters have defaults. This removes the deprecated type,
its export, and updates `ExtensionDataRefToValue` to use
`ExtensionDataRef` directly.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 10:33:38 +01:00
Patrik Oldsberg 92af1ae9c0 Remove allowUnknownExtensionConfig option from frontend app APIs
The `allowUnknownExtensionConfig` option was unused in practice — unknown
extension config was always reported via the error collector regardless of
the flag. For `createSpecializedApp`, unknown extension config is now always
included in the returned errors. For `createApp`, it is handled as a
console warning via `maybeCreateErrorPage`.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 10:32:08 +01:00
Patrik Oldsberg 8a3a906fb7 Deprecate NavItemBlueprint in @backstage/frontend-plugin-api
Nav items are now automatically inferred from PageBlueprint extensions
based on their title and icon params, making NavItemBlueprint redundant.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 10:30:38 +01:00
Patrik Oldsberg b15a685e52 Deprecate withApis in @backstage/frontend-plugin-api
Moved withApis to @backstage/core-compat-api and deprecated the export
in @backstage/frontend-plugin-api, pointing users to the new location.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 10:19:10 +01:00
Patrik Oldsberg fe848e09e6 Change useApiHolder to not throw when outside API context
Instead of throwing a NotImplementedError, useApiHolder now returns an
empty ApiHolder when no API context is available in the React tree.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 10:18:26 +01:00
Patrik Oldsberg 2c383b535b Move AnalyticsImplementationBlueprint to @backstage/plugin-app-react
Migrated the AnalyticsImplementationBlueprint and
AnalyticsImplementationFactory from @backstage/frontend-plugin-api to
@backstage/plugin-app-react. The original exports are deprecated with
pointers to the new location.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 10:01:46 +01:00
Patrik Oldsberg 1bec049493 Fix JSX type reference inconsistency in DialogApiDialog
The `update` method used `React.JSX.Element` for the first union member
and plain `JSX.Element` for the second. These resolve to the same type
but the inconsistency within a single method signature is confusing.
Aligned both to use `JSX.Element` to match the rest of the file.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 09:55:33 +01:00
Patrik Oldsberg d0206c499a Remove deprecated defaultPath migration helper from PageBlueprint
The `defaultPath` param was a compile-time migration artifact typed to
produce an error, guiding users to use `path` instead. The migration
period is over, so this removes it from the public API surface.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
2026-03-05 09:53:22 +01:00
root f1043f5514 Merge branch 'master' into range-slider-component 2026-03-05 14:09:58 +05:30
AmbrishRamachandiran a5c4e902ed Fix review comments
Signed-off-by: AmbrishRamachandiran <ambrish.r@infosys.com>
2026-03-05 12:09:10 +05:30
Vivek Hipparkar 58b9f3f88c chore: add changeset for scaffolder markdown list behavior fix
Signed-off-by: Vivek Hipparkar <vivekhipparkar@gmail.com>
2026-03-05 02:50:38 +05:30
Charles de Dreuille c7fb3299ee Merge pull request #33116 from backstage/interactive-cards
feat(ui): add interactive overlay to Card component
2026-03-04 20:40:07 +00:00
Charles de Dreuille 16d424276a Improve types
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-04 20:24:12 +00:00
Charles de Dreuille 0c772a3223 Card styles updates
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-04 19:40:25 +00:00
Charles de Dreuille 90b1cfc8a0 Fix for scrollable body section
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
2026-03-04 16:59:25 +00:00
Fredrik Adelöw 918b697cbd Add test verifying runCheck does not leak stdio
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
2026-03-04 17:41:08 +01:00