diff --git a/scripts/translations/.translation_state.json b/scripts/translations/.translation_state.json index 9e528430ed..30ab7590ea 100644 --- a/scripts/translations/.translation_state.json +++ b/scripts/translations/.translation_state.json @@ -252,6 +252,22 @@ "feature_traces": "998741a58ed2b411", "feature_vrl_functions": "4484dd94e9355480", "feature_workload_management": "8004f04c30d8bddc", + "features": "5697d03daef4de9c", + "features_all_unlocked": "0791a3840eb6061a", + "features_filter_all": "a52ace420f2175d0", + "features_filter_free": "f411a1fb62758b4c", + "features_filter_new": "18fdd549b2ed367a", + "features_free_heading": "5892004a2a606ee5", + "features_group_heading": "98bb11ae86a0c557", + "features_missing": "694943b3db420a2e", + "features_new": "d9fe8aa562864fe0", + "features_no_match": "c7655586749bb9b3", + "features_none": "6b474f2c0cba33e7", + "features_paid_ratio": "3257b4364ee32149", + "features_request_access": "22d6edf4b21d5e25", + "features_search": "55e327604647ce88", + "features_summary": "5d2957d8f8c9d8e7", + "features_unlocked": "531c7b28abf27600", "foreverNoLimits": "c4e4f35814b1022b", "fullyManaged": "49964f86a467ca7b", "gbPerDay": "dd9d1b63afeb0945", @@ -13059,6 +13075,19 @@ "tabLabel": "cb702378f31507ef", "title": "2a932f90172e99ea" }, + "featureLock": { + "bannerMessage": "2ad54d7dcf939937", + "bannerMessageGeneric": "9e4736ff1b60331d", + "contactSales": "604abea32b499a4c", + "description": "052f7504abd2c39a", + "headerLocked": "ce0f1697c8a3a6d5", + "routeTitle": "694943b3db420a2e", + "thisFeature": "2598604c06f0d223", + "title": "84027eb92891f1fd", + "toastMessage": "b17241a153486b9c", + "toastMessageGeneric": "4cf1f345d3caeb96", + "toastTitle": "feff10da75dad3ed" + }, "fleet": { "addCollector": "6d30a69cb01ed55a", "audit": { @@ -20331,8 +20360,14 @@ "allClear": "22d352f617758292", "allClearDesc": "bfe3044f55b21533", "allClearDescScoped": "7c66a0cc083a98ba", + "allClearPartial": "f5a637211cc64316", + "allClearPartialDesc": "e5ed97f9af61f860", "anomalyDetectedDescription": "67a554a9305c968d", "anomalyDetectedTitle": "42b3e5f78e8b2967", + "areaAlerts": "f62e9267d196c761", + "areaAnomalies": "a0a660cc9daa76b9", + "areaIncidents": "bfe868931580fb3b", + "areaServices": "604dce445e326d95", "colErrorRate": "33a224722fc7b1e4", "colLatency": "e0e7d293043c8cf6", "colReqs": "61985debc6417c53", diff --git a/web/src/components/Header.spec.ts b/web/src/components/Header.spec.ts index 94e9f4b65c..cb89ab87be 100644 --- a/web/src/components/Header.spec.ts +++ b/web/src/components/Header.spec.ts @@ -17,6 +17,7 @@ import { afterEach, describe, expect, it, beforeEach, vi } from "vitest"; import { mount, shallowMount } from "@vue/test-utils"; import { computed, nextTick } from "vue"; import i18n from "@/locales"; +import OLockBadge from "@/lib/core/Badge/OLockBadge.vue"; import Header from "@/components/Header.vue"; import * as cookies from "@/utils/cookies"; import { chartColor } from "@/utils/chartTheme"; @@ -521,6 +522,25 @@ describe("Header Component", () => { aiWrapper.unmount(); }); + it("keeps the AI logo with a lock badge and under a locked license", async () => { + const aiWrapper = createWrapper({ + mountType: "mount", + storeOverrides: { + state: { zoConfig: { ai_enabled: true, features: { ai_assistant: "locked" } } }, + }, + configOverrides: { isEnterprise: "true" }, + stubsOverrides: {}, + }); + await aiWrapper.vm.$nextTick(); + + const aiButton = aiWrapper.find('[data-test="menu-link-ai-locked"]'); + expect(aiButton.exists()).toBe(true); + expect(aiButton.find("img").exists()).toBe(true); + expect(aiButton.findComponent(OLockBadge).exists()).toBe(true); + expect(aiButton.attributes("aria-label")).toContain("Locked: needs"); + aiWrapper.unmount(); + }); + it("should not display AI button if ai_enabled is false", async () => { const aiWrapper = createWrapper({ mountType: "mount", diff --git a/web/src/components/Header.vue b/web/src/components/Header.vue index 1b5cd4ef08..6d28880ae5 100644 --- a/web/src/components/Header.vue +++ b/web/src/components/Header.vue @@ -230,15 +230,21 @@ along with this program. If not, see . Leads the utility-icon cluster, set off by a separator from the org selector so it reads as the primary action in this group. Shown locked (not hidden) in builds that don't unlock it. --> -