diff --git a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow-integration-tests/src/main/resources/vaadin-featureflags.properties b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow-integration-tests/src/main/resources/vaadin-featureflags.properties deleted file mode 100644 index 0e385957a6d..00000000000 --- a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow-integration-tests/src/main/resources/vaadin-featureflags.properties +++ /dev/null @@ -1 +0,0 @@ -com.vaadin.experimental.breadcrumbsComponent=true diff --git a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/Breadcrumbs.java b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/Breadcrumbs.java index 6eca427ea7c..ae7a151fdab 100644 --- a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/Breadcrumbs.java +++ b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/Breadcrumbs.java @@ -24,7 +24,6 @@ import org.jspecify.annotations.Nullable; import com.fasterxml.jackson.annotation.JsonInclude; -import com.vaadin.experimental.FeatureFlags; import com.vaadin.flow.component.AttachEvent; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.ComponentUtil; @@ -55,9 +54,6 @@ /** * Breadcrumbs is a component for displaying a navigation trail that shows the * user's location within a hierarchy of pages. - *

- * This component is experimental and needs to be enabled with the - * {@code com.vaadin.experimental.breadcrumbsComponent} feature flag. * * @author Vaadin Ltd * @since 25.2 @@ -267,8 +263,6 @@ private boolean hasChildrenBinding() { @Override protected void onAttach(AttachEvent attachEvent) { super.onAttach(attachEvent); - checkFeatureFlag(attachEvent.getUI()); - if (mode == Mode.ROUTER) { registerNavigationListener(attachEvent.getUI()); } @@ -434,15 +428,6 @@ private String resolveTitle(RouteReference reference, .orElse(""); } - private void checkFeatureFlag(UI ui) { - FeatureFlags featureFlags = FeatureFlags - .get(ui.getSession().getService().getContext()); - if (!featureFlags.isEnabled( - BreadcrumbsFeatureFlagProvider.BREADCRUMBS_COMPONENT)) { - throw new ExperimentalFeatureException(); - } - } - /** * Gets the internationalization object previously set for this component. *

diff --git a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/BreadcrumbsFeatureFlagProvider.java b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/BreadcrumbsFeatureFlagProvider.java deleted file mode 100644 index 0b3ac73b4aa..00000000000 --- a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/BreadcrumbsFeatureFlagProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2000-2026 Vaadin Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.vaadin.flow.component.breadcrumbs; - -import java.util.List; - -import com.vaadin.experimental.Feature; -import com.vaadin.experimental.FeatureFlagProvider; - -/** - * Provides the Breadcrumbs component feature flag, gating the experimental - * {@link Breadcrumbs} component. - * - * @author Vaadin Ltd - * @since 25.2 - */ -public class BreadcrumbsFeatureFlagProvider implements FeatureFlagProvider { - - /** - * The Breadcrumbs component feature flag. When enabled, allows use of the - * experimental {@link Breadcrumbs} component. - */ - public static final Feature BREADCRUMBS_COMPONENT = new Feature( - "Breadcrumbs component", // title - "breadcrumbsComponent", // id - "https://vaadin.com/docs/latest/components/breadcrumbs", // moreInfoLink - true, // requiresServerRestart - "com.vaadin.flow.component.breadcrumbs.Breadcrumbs"); // componentClassName - - @Override - public List getFeatures() { - return List.of(BREADCRUMBS_COMPONENT); - } -} diff --git a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/ExperimentalFeatureException.java b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/ExperimentalFeatureException.java deleted file mode 100644 index e135dba05e1..00000000000 --- a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/java/com/vaadin/flow/component/breadcrumbs/ExperimentalFeatureException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2000-2026 Vaadin Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.vaadin.flow.component.breadcrumbs; - -/** - * An exception which is thrown when somebody attempts to use the - * {@link Breadcrumbs} component without activating the associated feature flag - * first. - * - * @author Vaadin Ltd - * @since 25.2 - */ -public class ExperimentalFeatureException extends RuntimeException { - /** - * Creates a new exception with a default message. - */ - public ExperimentalFeatureException() { - super(""" - The Breadcrumbs component is currently an experimental feature \ - and needs to be explicitly enabled. The component can be \ - enabled using Copilot, in the experimental features tab, \ - or by adding a \ - `src/main/resources/vaadin-featureflags.properties` file \ - with the following content: \ - `com.vaadin.experimental.breadcrumbsComponent=true`"""); - } -} diff --git a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/resources/META-INF/services/com.vaadin.experimental.FeatureFlagProvider b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/resources/META-INF/services/com.vaadin.experimental.FeatureFlagProvider deleted file mode 100644 index f2c3a925e96..00000000000 --- a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/main/resources/META-INF/services/com.vaadin.experimental.FeatureFlagProvider +++ /dev/null @@ -1 +0,0 @@ -com.vaadin.flow.component.breadcrumbs.BreadcrumbsFeatureFlagProvider diff --git a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/test/java/com/vaadin/flow/component/breadcrumbs/tests/BreadcrumbsModeTest.java b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/test/java/com/vaadin/flow/component/breadcrumbs/tests/BreadcrumbsModeTest.java index cc4c2623277..14edc96859b 100644 --- a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/test/java/com/vaadin/flow/component/breadcrumbs/tests/BreadcrumbsModeTest.java +++ b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/test/java/com/vaadin/flow/component/breadcrumbs/tests/BreadcrumbsModeTest.java @@ -28,7 +28,6 @@ import com.vaadin.flow.component.UI; import com.vaadin.flow.component.breadcrumbs.Breadcrumbs; import com.vaadin.flow.component.breadcrumbs.Breadcrumbs.Mode; -import com.vaadin.flow.component.breadcrumbs.BreadcrumbsFeatureFlagProvider; import com.vaadin.flow.component.breadcrumbs.BreadcrumbsItem; import com.vaadin.flow.component.html.Div; import com.vaadin.flow.router.AfterNavigationEvent; @@ -51,7 +50,6 @@ import com.vaadin.flow.server.VaadinService; import com.vaadin.flow.server.startup.ApplicationRouteRegistry; import com.vaadin.flow.signals.local.ValueSignal; -import com.vaadin.tests.EnableFeatureFlagExtension; import com.vaadin.tests.MockUIExtension; class BreadcrumbsModeTest { @@ -59,10 +57,6 @@ class BreadcrumbsModeTest { @RegisterExtension MockUIExtension ui = new MockUIExtension(); - @RegisterExtension - EnableFeatureFlagExtension featureFlagExtension = new EnableFeatureFlagExtension( - BreadcrumbsFeatureFlagProvider.BREADCRUMBS_COMPONENT); - @AfterEach void clearCurrentService() { // installRouter sets the current service for title resolution; clear it diff --git a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/test/java/com/vaadin/flow/component/breadcrumbs/tests/FeatureFlagTest.java b/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/test/java/com/vaadin/flow/component/breadcrumbs/tests/FeatureFlagTest.java deleted file mode 100644 index f1d4793dfde..00000000000 --- a/vaadin-breadcrumbs-flow-parent/vaadin-breadcrumbs-flow/src/test/java/com/vaadin/flow/component/breadcrumbs/tests/FeatureFlagTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2000-2026 Vaadin Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.vaadin.flow.component.breadcrumbs.tests; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; - -import com.vaadin.flow.component.breadcrumbs.Breadcrumbs; -import com.vaadin.flow.component.breadcrumbs.BreadcrumbsFeatureFlagProvider; -import com.vaadin.flow.component.breadcrumbs.ExperimentalFeatureException; -import com.vaadin.tests.EnableFeatureFlagExtension; -import com.vaadin.tests.MockUIExtension; - -class FeatureFlagTest { - - @RegisterExtension - MockUIExtension ui = new MockUIExtension(); - - @RegisterExtension - EnableFeatureFlagExtension featureFlagExtension = new EnableFeatureFlagExtension( - BreadcrumbsFeatureFlagProvider.BREADCRUMBS_COMPONENT); - - @Test - void featureEnabled_attach_doesNotThrow() { - var breadcrumbs = new Breadcrumbs(); - Assertions.assertDoesNotThrow(() -> ui.add(breadcrumbs)); - } - - @Test - void featureDisabled_attach_throws() { - featureFlagExtension.disableFeature(); - - var breadcrumbs = new Breadcrumbs(); - Assertions.assertThrows(ExperimentalFeatureException.class, - () -> ui.add(breadcrumbs)); - } -}