diff --git a/changelog/30425.txt b/changelog/30425.txt new file mode 100644 index 0000000000..79f6111e37 --- /dev/null +++ b/changelog/30425.txt @@ -0,0 +1,3 @@ +```release-note:feature +**UI Telemetry**: add Posthog for UI telemetry tracking on HVD managed clusters +``` \ No newline at end of file diff --git a/ui/app/components/sidebar/frame.hbs b/ui/app/components/sidebar/frame.hbs index 70ecda1383..c92d4d5368 100644 --- a/ui/app/components/sidebar/frame.hbs +++ b/ui/app/components/sidebar/frame.hbs @@ -25,6 +25,7 @@ @text="Console toggle" data-test-console-toggle {{on "click" (fn (mut this.console.isOpen) (not this.console.isOpen))}} + {{on "click" this.trackReplToggle}} /> diff --git a/ui/app/components/sidebar/frame.js b/ui/app/components/sidebar/frame.js index 038337f0f2..cad52d576b 100644 --- a/ui/app/components/sidebar/frame.js +++ b/ui/app/components/sidebar/frame.js @@ -7,8 +7,15 @@ import Component from '@glimmer/component'; import { service } from '@ember/service'; import { inject as controller } from '@ember/controller'; +import { TOGGLE_WEB_REPL } from 'vault/utils/analytic-events'; + export default class SidebarNavComponent extends Component { + @service analytics; @service currentCluster; @service console; @controller('vault.cluster') clusterController; + + trackReplToggle = () => { + this.analytics.trackEvent(TOGGLE_WEB_REPL); + }; } diff --git a/ui/app/routes/application.js b/ui/app/routes/application.js index 581edcc942..a3f84e88da 100644 --- a/ui/app/routes/application.js +++ b/ui/app/routes/application.js @@ -5,10 +5,14 @@ import { service } from '@ember/service'; import Route from '@ember/routing/route'; -import ControlGroupError from 'vault/lib/control-group-error'; import { action } from '@ember/object'; +import config from 'vault/config/environment'; + +import ControlGroupError from 'vault/lib/control-group-error'; + export default class ApplicationRoute extends Route { + @service analytics; @service controlGroup; @service('router') routing; @service('namespace') namespaceService; @@ -69,4 +73,18 @@ export default class ApplicationRoute extends Route { beforeModel() { return this.flagsService.fetchFeatureFlags(); } + + afterModel() { + const { environment, APP } = config; + const { ANALYTICS_CONFIG } = APP; + + // if the app is built for dev -> attempt to start the analytics service based on the config setting + // if the app is built for prod -> attempt to start the analytics service based on the config setting AND HVD ownership + // if the app is built for test -> don't start the analytics service + if (environment === 'development') { + this.analytics.start('posthog', ANALYTICS_CONFIG); + } else if (environment === 'production' && this.flagsService.isHvdManaged) { + this.analytics.start('posthog', ANALYTICS_CONFIG); + } + } } diff --git a/ui/app/routes/vault/cluster.js b/ui/app/routes/vault/cluster.js index 8b153953f0..2695365b0e 100644 --- a/ui/app/routes/vault/cluster.js +++ b/ui/app/routes/vault/cluster.js @@ -15,6 +15,8 @@ import ClusterRoute from 'vault/mixins/cluster-route'; import ModelBoundaryRoute from 'vault/mixins/model-boundary-route'; import { assert } from '@ember/debug'; +import { v4 as uuidv4 } from 'uuid'; + const POLL_INTERVAL_MS = 10000; export const getManagedNamespace = (nsParam, root) => { @@ -29,6 +31,8 @@ export const getManagedNamespace = (nsParam, root) => { export default Route.extend(ModelBoundaryRoute, ClusterRoute, { auth: service(), + api: service(), + analytics: service(), currentCluster: service(), customMessages: service(), flagsService: service('flags'), @@ -124,8 +128,9 @@ export default Route.extend(ModelBoundaryRoute, ClusterRoute, { .cancelOn('deactivate') .keepLatest(), - afterModel(model, transition) { + async afterModel(model, transition) { this._super(...arguments); + this.currentCluster.setCluster(model); if (model.needsInit && this.auth.currentToken) { // clear token to prevent infinite load state @@ -137,6 +142,37 @@ export default Route.extend(ModelBoundaryRoute, ClusterRoute, { if (this.namespaceService.path && !this.version.hasNamespaces) { return this.router.transitionTo(this.routeName, { queryParams: { namespace: '' } }); } + + // identify user for analytics service + if (this.analytics.activated) { + let licenseId = ''; + + try { + const licenseStatus = await this.api.sys.systemReadLicenseStatus(); + licenseId = licenseStatus?.data?.autoloaded?.licenseId; + } catch (e) { + // license is not retrievable + licenseId = ''; + } + + try { + const entity_id = this.auth.authData?.entity_id; + const entity = entity_id ? entity_id : `root_${uuidv4()}`; + + this.analytics.identifyUser(entity, { + licenseId: licenseId, + licenseState: model.license?.state || 'community', + version: model.version.version, + storageType: model.storageType, + replicationMode: model.replicationMode, + isEnterprise: Boolean(model.license), + }); + } catch (e) { + // eslint-disable-next-line no-console + console.log('unable to start analytics', e); + } + } + return this.transitionToTargetRoute(transition); }, diff --git a/ui/app/services/analytics.ts b/ui/app/services/analytics.ts new file mode 100644 index 0000000000..239a9694f6 --- /dev/null +++ b/ui/app/services/analytics.ts @@ -0,0 +1,87 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +import Service, { service } from '@ember/service'; +import { tracked } from '@glimmer/tracking'; + +import { DummyProvider, PROVIDER_NAME as DummyProviderName } from 'vault/utils/analytics-providers/dummy'; +import { + PostHogProvider, + PROVIDER_NAME as PostHogProviderName, +} from 'vault/utils/analytics-providers/posthog'; + +import type { AnalyticsConfig, AnalyticsProvider } from 'vault/vault/analytics'; +import type RouterService from '@ember/routing/router-service'; + +import config from 'vault/config/environment'; + +export default class AnalyticsService extends Service { + @service declare readonly router: RouterService; + + @tracked activated = false; + @tracked provider: AnalyticsProvider = new DummyProvider(); + + debug = config.environment === 'development'; + + private log(...args: unknown[]) { + if (this.debug) { + // eslint-disable-next-line no-console + console.log(`[Analytics - ${this.provider.name}]`, ...args); + } + } + + private setupRouteEventListener() { + // on successful route changes... + this.router.on('routeDidChange', () => { + const { currentRouteName } = this.router; + + this.trackPageView(currentRouteName || 'unknown-route'); + }); + } + + identifyUser = (identifer: string, traits: Record) => { + this.provider.identify(identifer, traits); + this.log('identifyUser', identifer, traits); + }; + + start = (provider: string, config: AnalyticsConfig) => { + // fail silently, analytics is nonessential + if (!provider) { + this.provider = new DummyProvider(); + this.debug = false; + return; + } + + // if analytics are not enabled, don't start the service + if (config.enabled) { + switch (provider) { + case DummyProviderName: + this.provider = new DummyProvider(); + break; + case PostHogProviderName: + this.provider = new PostHogProvider(); + } + + // only start things once we've confirmed we want to + this.provider.start(config); + this.activated = true; + this.setupRouteEventListener(); + + this.log('start'); + } + }; + + trackPageView = (routeName: string, metadata?: Record) => { + this.provider.trackPageView(routeName, metadata || {}); + + this.log('$pageview', routeName, metadata); + }; + + trackEvent = (eventName: string, metadata: Record) => { + this.provider.trackEvent(eventName, metadata); + + this.log('custom event', eventName, metadata); + }; +} diff --git a/ui/app/utils/analytic-events/index.ts b/ui/app/utils/analytic-events/index.ts new file mode 100644 index 0000000000..4d34ee863c --- /dev/null +++ b/ui/app/utils/analytic-events/index.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +export const PREFIX = 'vault_ui'; + +/* + buildEventName is a helper to build conformant analytics event names. + + While event names are not strictly controlled in the data warehouse, consistent + naming helps find things predictably. + + +*/ +const buildEventName = (category: string, resource: string, action: string) => + `${PREFIX}_${category}_${resource}_${action}`; + +export const TOGGLE_WEB_REPL = buildEventName('core', 'web-repl', 'toggle'); diff --git a/ui/app/utils/analytics-providers/dummy.ts b/ui/app/utils/analytics-providers/dummy.ts new file mode 100644 index 0000000000..976e7c07df --- /dev/null +++ b/ui/app/utils/analytics-providers/dummy.ts @@ -0,0 +1,33 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +/* + Normally, the default export of this file would _do something_. + In the dummy case, the methods for the provider are noops so we + have a safe fallback when analytics is disabled. +*/ +import type { AnalyticsProvider } from 'vault/vault/analytics'; + +export const PROVIDER_NAME = 'dummy'; + +export class DummyProvider implements AnalyticsProvider { + name = PROVIDER_NAME; + + start() { + /* intentionally blank */ + } + + identify() { + /* intentionally blank */ + } + + trackPageView() { + /* intentionally blank */ + } + + trackEvent() { + /* intentionally blank */ + } +} diff --git a/ui/app/utils/analytics-providers/posthog.ts b/ui/app/utils/analytics-providers/posthog.ts new file mode 100644 index 0000000000..e733cdcd3d --- /dev/null +++ b/ui/app/utils/analytics-providers/posthog.ts @@ -0,0 +1,170 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +import posthog from 'posthog-js/dist/module.no-external'; + +import type { AnalyticsProvider } from 'vault/vault/analytics'; +import type { CaptureResult } from 'posthog-js/dist/module.no-external'; + +interface PostHogConfig { + enabled: boolean; + project_id: string; + api_host: string; +} + +/* + formatEvent takes the default posthog capture event and trims it down to only the things we want to collect + PostHog collects a lot of stuff by default, this removes everything pretaining to urls and possible customer info in favor of generic information +*/ +const redactEvent = (cr: CaptureResult | null) => { + if (cr === null) return cr; + const { properties } = cr; + + // extract ONLY what we need + // this is definitely ridiculous, but it's the best way to be sure we're not accidentally including things that aren't wanted + const { + $browser, + $browser_language, + $browser_language_prefix, + $browser_version, + $device_id, + $device_type, + $groups, + $insert_id, + $is_identified, + $lib, + $lib_rate_limit_remaining_tokens, + $lib_version, + $os, + $os_version, + $pageview_id, + $process_person_profile, + $raw_user_agent, + $recording_status, + $screen_height, + $screen_width, + $sdk_debug_current_session_duration, + $sdk_debug_replay_internal_buffer_length, + $sdk_debug_replay_internal_buffer_size, + $sdk_debug_retry_queue_size, + $sdk_debug_session_start, + $session_id, + $time, + $user_id, + $viewport_height, + $viewport_width, + $window_id, + distinct_id, + routeName, + token, + } = properties; + + // replay into the sent object + return { + ...cr, + properties: { + $browser, + $browser_version, + $browser_language, + $browser_language_prefix, + $os, + $os_version, + $device_type, + $raw_user_agent, + $screen_height, + $screen_width, + $viewport_height, + $viewport_width, + $lib, + $lib_version, + $insert_id, + $time, + $device_id, + $user_id, + $groups, + $session_id, + $window_id, + $recording_status, + $sdk_debug_replay_internal_buffer_length, + $sdk_debug_replay_internal_buffer_size, + $sdk_debug_current_session_duration, + $sdk_debug_session_start, + $sdk_debug_retry_queue_size, + $pageview_id, + $is_identified, + $process_person_profile, + $lib_rate_limit_remaining_tokens, + distinct_id, + routeName, + token, + }, + }; +}; + +export const PROVIDER_NAME = 'posthog'; + +export class PostHogProvider implements AnalyticsProvider { + name = PROVIDER_NAME; + + client = posthog; + licenseId = ''; + + get anonymousId() { + return this.client.get_distinct_id(); + } + + start(config: unknown) { + const { enabled, project_id, api_host } = config as PostHogConfig; + + if (enabled) { + this.client.init(project_id, { + api_host, + person_profiles: 'identified_only', + persistence: 'memory', + autocapture: false, + disable_session_recording: true, + advanced_disable_decide: true, + capture_pageview: false, + before_send: redactEvent, + }); + } + } + + identify(identifier: string, traits: Record) { + this.licenseId = traits['licenseId'] || ''; + + this.client.identify(identifier, { + ...traits, + }); + } + + trackPageView(routeName: string /* metadata: Record */) { + // use licenseId as a grouping for this cluster + if (this.licenseId) { + this.client.capture('$pageview', { + routeName, + $groups: { + licenseId: this.licenseId, + }, + }); + } else { + this.client.capture('$pageview', { routeName }); + } + } + + trackEvent(eventName: string, metadata: Record = {}) { + // use licenseId as a grouping for this cluster + if (this.licenseId) { + this.client.capture(eventName, { + ...metadata, + $groups: { + licenseId: this.licenseId, + }, + }); + } else { + this.client.capture(eventName, metadata); + } + } +} diff --git a/ui/config/content-security-policy.js b/ui/config/content-security-policy.js index 3c5d8a3311..03e80771ca 100644 --- a/ui/config/content-security-policy.js +++ b/ui/config/content-security-policy.js @@ -4,20 +4,24 @@ */ module.exports = function (environment) { + const policy = { + 'default-src': ["'none'"], + 'script-src': ["'self'"], + 'font-src': ["'self'"], + 'connect-src': ["'self'"], + 'img-src': ["'self'", 'data:'], + 'style-src': ["'unsafe-inline'", "'self'"], + 'media-src': ["'self'"], + 'form-action': ["'none'"], + }; + + policy['connect-src'].push('https://eu.i.posthog.com'); + return { delivery: ['header', 'meta'], enabled: environment !== 'production', failTests: true, - policy: { - 'default-src': ["'none'"], - 'script-src': ["'self'"], - 'font-src': ["'self'"], - 'connect-src': ["'self'"], - 'img-src': ["'self'", 'data:'], - 'style-src': ["'unsafe-inline'", "'self'"], - 'media-src': ["'self'"], - 'form-action': ["'none'"], - }, + policy, reportOnly: false, }; }; diff --git a/ui/config/environment.js b/ui/config/environment.js index 6525336fb7..5995ef8e88 100644 --- a/ui/config/environment.js +++ b/ui/config/environment.js @@ -38,12 +38,15 @@ module.exports = function (environment) { ], // number of records to show on a single page by default - this is used by the client-side pagination DEFAULT_PAGE_SIZE: 100, + + ANALYTICS_CONFIG: { enabled: false }, }, flashMessageDefaults: { timeout: 7000, sticky: false, }, }; + if (environment === 'development') { // ENV.APP.LOG_RESOLVER = true; // ENV.APP.LOG_ACTIVE_GENERATION = true; @@ -56,6 +59,15 @@ module.exports = function (environment) { handler: process.env.MIRAGE_DEV_HANDLER, }; } + + if (process.env.ENABLE_POSTHOG) { + ENV.APP.ANALYTICS_CONFIG = { + provider: 'posthog', + enabled: true, + project_id: 'phc_zPQ9fPlFj4ZTYKJmThG1C8AE4J4RgPQx8dJJ7agg4SG', + api_host: 'https://eu.i.posthog.com', + }; + } } if (environment === 'test') { @@ -70,11 +82,22 @@ module.exports = function (environment) { ENV['ember-cli-mirage'] = { enabled: false, }; + ENV.APP.ANALYTICS_CONFIG = { enabled: false }; } + if (environment !== 'production') { ENV.APP.DEFAULT_PAGE_SIZE = 15; } + if (environment === 'production') { + ENV.APP.ANALYTICS_CONFIG = { + provider: 'posthog', + enabled: true, + project_id: 'phc_pIw6t5numW5jDram4dnJjSnwDOorf9IGd1MmlFp0dHh', + api_host: 'https://eu.i.posthog.com', + }; + } + ENV.welcomeMessage = process.env.UI_AUTH_WELCOME; return ENV; diff --git a/ui/package.json b/ui/package.json index 8649b68b2e..fbe62288a9 100644 --- a/ui/package.json +++ b/ui/package.json @@ -222,6 +222,7 @@ "handlebars": "4.7.8", "highlight.js": "10.7.3", "node-notifier": "8.0.2", + "posthog-js": "^1.202.2", "uuid": "9.0.1" }, "packageManager": "yarn@3.5.0" diff --git a/ui/tests/unit/services/analytics-test.js b/ui/tests/unit/services/analytics-test.js new file mode 100644 index 0000000000..04e71fb2f5 --- /dev/null +++ b/ui/tests/unit/services/analytics-test.js @@ -0,0 +1,80 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +import { module, test } from 'qunit'; + +import sinon from 'sinon'; + +import { setupTest } from 'vault/tests/helpers'; + +class ProviderStub { + name = 'testing'; + + start = sinon.stub(); + identify = sinon.stub(); + trackPageView = sinon.stub(); +} + +module('Unit | Service | analytics', function (hooks) { + setupTest(hooks); + + hooks.beforeEach(function () { + this.service = this.owner.lookup('service:analytics'); + }); + + hooks.afterEach(function () { + sinon.reset(); + }); + + test('#identifyUser passes data to the provider', function (assert) { + const providerStub = new ProviderStub(); + this.service.provider = providerStub; + + const identifier = 'carl'; + const traits = { apples: 'oranges' }; + + this.service.identifyUser(identifier, traits); + + assert.true(providerStub.identify.calledOnce, 'the service calls identify on the provider'); + assert.true( + providerStub.identify.calledWith(identifier, traits), + 'the provider recieves the expected id and traits' + ); + }); + + test('#trackPageView passes data to the provider', function (assert) { + const providerStub = new ProviderStub(); + this.service.provider = providerStub; + + this.service.trackPageView('test', { currentRouteName: 'ham' }); + + assert.true(providerStub.trackPageView.called, 'it calls the tracking method on the provider'); + assert.true( + providerStub.trackPageView.calledWith('test', { currentRouteName: 'ham' }), + 'it passes the correct args to the provider' + ); + }); + + module('#log', function (hooks) { + hooks.beforeEach(function () { + // eslint-disable-next-line no-console + console.log = sinon.stub(console, 'log'); + }); + + hooks.afterEach(function () { + // eslint-disable-next-line no-console + console.log.restore(); + }); + + test('logging is not shown when inactive', function (assert) { + this.service.debug = false; + // for the next few lines, console.log WILL NOT WORK AS EXPECTED + this.service.trackPageView('a', null); + + // eslint-disable-next-line no-console + assert.true(console.log.notCalled, 'console.log is called'); + }); + }); +}); diff --git a/ui/types/vault/analytics.ts b/ui/types/vault/analytics.ts new file mode 100644 index 0000000000..0808ebce3e --- /dev/null +++ b/ui/types/vault/analytics.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +export interface AnalyticsProvider { + name: string; + identify: (identifier: string, traits: Record) => void; + start: (config: Record) => void; + trackPageView: (routeName: string, metadata: Record) => void; + trackEvent: (eventName: string, metadata: Record) => void; +} + +export interface AnalyticsConfig extends Record { + enabled: boolean; +} diff --git a/ui/vault-reporting/declarations/components/vault-reporting/base/title-row.d.ts b/ui/vault-reporting/declarations/components/vault-reporting/base/title-row.d.ts index 324f5af05d..0a5a35a618 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/base/title-row.d.ts +++ b/ui/vault-reporting/declarations/components/vault-reporting/base/title-row.d.ts @@ -5,6 +5,7 @@ import Component from '@glimmer/component'; import { HdsLinkStandalone } from '@hashicorp/design-system-components/components'; import './title-row.scss'; +import type ReportingAnalyticsService from '../../../services/reporting-analytics'; import type { SafeString } from '@ember/template'; /** * TitleRow Component @@ -33,10 +34,12 @@ export interface TitleRowSignature { Element: HTMLElement; } export default class TitleRow extends Component { + readonly reportingAnalytics: ReportingAnalyticsService; get hasLink(): string | undefined; get linkText(): string; get linkUrl(): string; - get linkIcon(): "loading" | "loading-static" | "running" | "running-static" | "apple" | "apple-color" | "alibaba" | "alibaba-color" | "amazon-ecs" | "amazon-ecs-color" | "amazon-eks" | "amazon-eks-color" | "auth0" | "auth0-color" | "aws" | "aws-color" | "aws-cdk" | "aws-cdk-color" | "aws-cloudwatch" | "aws-cloudwatch-color" | "aws-ec2" | "aws-ec2-color" | "aws-lambda" | "aws-lambda-color" | "aws-s3" | "aws-s3-color" | "azure" | "azure-color" | "azure-aks" | "azure-aks-color" | "azure-blob-storage" | "azure-blob-storage-color" | "azure-devops" | "azure-devops-color" | "azure-vms" | "azure-vms-color" | "bitbucket" | "bitbucket-color" | "bridgecrew" | "bridgecrew-color" | "cisco" | "cisco-color" | "codepen" | "codepen-color" | "confluence" | "confluence-color" | "confluent" | "confluent-color" | "datadog" | "datadog-color" | "digital-ocean" | "digital-ocean-color" | "docker" | "docker-color" | "duo-color" | "duo" | "elastic-observability" | "elastic-observability-color" | "f5" | "f5-color" | "facebook" | "facebook-color" | "figma" | "figma-color" | "gcp" | "gcp-color" | "git" | "git-color" | "gitlab" | "gitlab-color" | "github" | "github-color" | "google" | "google-color" | "google-docs" | "google-docs-color" | "google-drive" | "google-drive-color" | "google-forms" | "google-forms-color" | "google-sheets" | "google-sheets-color" | "google-slides" | "google-slides-color" | "grafana" | "grafana-color" | "helm" | "helm-color" | "infracost" | "infracost-color" | "jfrog" | "jfrog-color" | "jira" | "jira-color" | "jwt" | "jwt-color" | "kubernetes" | "kubernetes-color" | "lightlytics" | "lightlytics-color" | "linkedin" | "linkedin-color" | "linode" | "linode-color" | "linux" | "linux-color" | "loom" | "loom-color" | "meetup" | "meetup-color" | "microsoft" | "microsoft-color" | "microsoft-teams" | "microsoft-teams-color" | "minio" | "minio-color" | "mongodb" | "mongodb-color" | "new-relic" | "new-relic-color" | "okta" | "okta-color" | "oracle" | "oracle-color" | "opa" | "opa-color" | "openid" | "openid-color" | "pack" | "pack-color" | "pager-duty" | "pager-duty-color" | "ping-identity " | "ping-identity-color" | "postgres" | "postgres-color" | "rabbitmq" | "rabbitmq-color" | "saml" | "saml-color" | "service-now" | "service-now-color" | "slack" | "slack-color" | "snyk" | "snyk-color" | "splunk" | "splunk-color" | "twilio" | "twilio-color" | "twitch" | "twitch-color" | "twitter" | "twitter-color" | "twitter-x" | "twitter-x-color" | "vantage" | "vantage-color" | "venafi" | "venafi-color" | "vercel" | "vercel-color" | "vmware" | "vmware-color" | "youtube" | "youtube-color" | "boundary" | "boundary-color" | "boundary-fill" | "boundary-fill-color" | "boundary-square" | "boundary-square-color" | "consul" | "consul-color" | "consul-fill" | "consul-fill-color" | "consul-square" | "consul-square-color" | "nomad" | "nomad-color" | "nomad-fill" | "nomad-fill-color" | "nomad-square" | "nomad-square-color" | "packer" | "packer-color" | "packer-fill" | "packer-fill-color" | "packer-square" | "packer-square-color" | "terraform" | "terraform-color" | "terraform-fill" | "terraform-fill-color" | "terraform-square" | "terraform-square-color" | "vagrant" | "vagrant-color" | "vagrant-fill" | "vagrant-fill-color" | "vagrant-square" | "vagrant-square-color" | "vault" | "vault-color" | "vault-fill" | "vault-fill-color" | "vault-square" | "vault-square-color" | "vault-radar" | "vault-radar-color" | "vault-radar-fill" | "vault-radar-fill-color" | "vault-radar-square" | "vault-radar-square-color" | "vault-secrets" | "vault-secrets-color" | "vault-secrets-fill" | "vault-secrets-fill-color" | "vault-secrets-square" | "vault-secrets-square-color" | "waypoint" | "waypoint-color" | "waypoint-fill" | "waypoint-fill-color" | "waypoint-square" | "waypoint-square-color" | "hashicorp" | "hashicorp-color" | "hashicorp-fill" | "hashicorp-fill-color" | "hashicorp-square" | "hashicorp-square-color" | "hcp" | "hcp-color" | "hcp-fill" | "hcp-fill-color" | "hcp-square" | "hcp-square-color" | "accessibility" | "folder-users" | "frown" | "identity-service" | "identity-user" | "meh" | "robot" | "smile" | "user" | "user-check" | "user-circle" | "user-circle-fill" | "user-minus" | "user-plus" | "user-x" | "users" | "ampersand" | "beaker" | "bucket" | "bulb" | "circle" | "circle-dot" | "circle-fill" | "circle-half" | "diamond" | "diamond-fill" | "disc" | "dot" | "dot-half" | "droplet" | "flag" | "gift" | "government" | "handshake" | "hash" | "hexagon" | "hexagon-fill" | "labyrinth" | "layers" | "moon" | "octagon" | "outline" | "random" | "rocket" | "sparkle" | "square" | "square-fill" | "sun" | "triangle" | "triangle-fill" | "truck" | "wand" | "zap" | "zap-off" | "docs" | "docs-download" | "docs-link" | "guide" | "guide-link" | "help" | "info" | "info-fill" | "learn" | "learn-link" | "support" | "alert-circle" | "alert-circle-fill" | "alert-diamond" | "alert-diamond-fill" | "alert-octagon" | "alert-octagon-fill" | "alert-triangle" | "alert-triangle-fill" | "check" | "check-circle" | "check-circle-fill" | "check-diamond" | "check-diamond-fill" | "check-hexagon" | "check-hexagon-fill" | "check-square" | "check-square-fill" | "skip" | "x" | "x-circle" | "x-circle-fill" | "x-diamond" | "x-diamond-fill" | "x-hexagon" | "x-hexagon-fill" | "x-square" | "x-square-fill" | "bug" | "certificate" | "eye" | "eye-off" | "fingerprint" | "key" | "keychain" | "lock" | "lock-fill" | "lock-off" | "shield" | "shield-alert" | "shield-check" | "shield-off" | "shield-x" | "token" | "unlock" | "verified" | "wall" | "minus" | "minus-circle" | "minus-circle-fill" | "minus-plus" | "minus-plus-circle" | "minus-plus-square" | "minus-square" | "minus-square-fill" | "plus" | "plus-circle" | "plus-circle-fill" | "plus-square" | "camera" | "camera-off" | "cast" | "closed-caption" | "fast-forward" | "film" | "headphones" | "image" | "music" | "pause" | "pause-circle" | "play" | "play-circle" | "radio" | "rewind" | "rss" | "skip-back" | "skip-forward" | "speaker" | "stop-circle" | "volume" | "volume-down" | "volume-2" | "volume-x" | "wifi" | "wifi-off" | "compass" | "crosshair" | "map" | "map-pin" | "navigation" | "navigation-alt" | "redirect" | "target" | "align-center" | "align-justify" | "align-left" | "align-right" | "battery" | "battery-charging" | "bookmark" | "bookmark-add" | "bookmark-add-fill" | "bookmark-fill" | "bookmark-remove" | "bookmark-remove-fill" | "bottom" | "command" | "crop" | "dashboard" | "delete" | "download" | "edit" | "entry-point" | "exit-point" | "external-link" | "filter" | "filter-circle" | "filter-fill" | "grid" | "grid-alt" | "home" | "jump-link" | "layout" | "link" | "list" | "maximize" | "maximize-alt" | "menu" | "minimize" | "minimize-alt" | "more-horizontal" | "more-vertical" | "mouse-pointer" | "paperclip" | "pen-tool" | "pencil-tool" | "pin" | "power" | "printer" | "reload" | "repeat" | "rotate-cw" | "rotate-ccw" | "search" | "share" | "sidebar" | "sidebar-hide" | "sidebar-show" | "sign-in" | "sign-out" | "slash" | "slash-square" | "sort-asc" | "sort-desc" | "switcher" | "sync" | "sync-alert" | "sync-reverse" | "tag" | "toggle-left" | "toggle-right" | "top" | "trash" | "type" | "unfold-close" | "unfold-open" | "upload" | "zoom-in" | "zoom-out" | "archive" | "clipboard" | "clipboard-checked" | "clipboard-copy" | "clipboard-x" | "file" | "file-change" | "file-check" | "file-diff" | "file-minus" | "file-plus" | "file-source" | "file-text" | "file-x" | "files" | "folder" | "folder-fill" | "folder-minus" | "folder-minus-fill" | "folder-plus" | "folder-plus-fill" | "folder-star" | "inbox" | "api" | "auto-apply" | "build" | "change" | "change-circle" | "change-square" | "channel" | "cloud" | "cloud-check" | "cloud-download" | "cloud-lightning" | "cloud-lock" | "cloud-off" | "cloud-upload" | "cloud-x" | "code" | "connection" | "connection-gateway" | "cpu" | "duplicate" | "gateway" | "git-branch" | "git-commit" | "git-merge" | "git-pull-request" | "git-repo" | "hammer" | "key-values" | "mainframe" | "mesh" | "module" | "monitor" | "network" | "network-alt" | "node" | "path" | "pipeline" | "plug" | "replication-direct" | "replication-perf" | "scissors" | "server" | "server-cluster" | "serverless" | "service" | "settings" | "sliders" | "smartphone" | "socket" | "step" | "tablet" | "terminal" | "terminal-screen" | "test" | "tools" | "transform-data" | "tv" | "webhook" | "wrench" | "calendar" | "clock" | "clock-filled" | "delay" | "event" | "history" | "hourglass" | "watch" | "bar-chart" | "bar-chart-alt" | "box" | "collections" | "database" | "hard-drive" | "line-chart" | "line-chart-up" | "logs" | "package" | "pie-chart" | "queue" | "save" | "trend-down" | "trend-up" | "activity" | "at-sign" | "award" | "bell" | "bell-active" | "bell-active-fill" | "bell-off" | "discussion-circle" | "discussion-square" | "heart" | "heart-fill" | "heart-off" | "mail" | "mail-open" | "message-circle" | "message-circle-fill" | "message-square" | "message-square-fill" | "mic" | "mic-off" | "newspaper" | "phone" | "phone-call" | "phone-off" | "send" | "star" | "star-circle" | "star-fill" | "star-off" | "thumbs-down" | "thumbs-up" | "video" | "video-off" | "bank-vault" | "briefcase" | "credit-card" | "dollar-sign" | "enterprise" | "globe" | "globe-private" | "org" | "provider" | "shopping-bag" | "shopping-cart" | "arrow-down" | "arrow-down-circle" | "arrow-down-left" | "arrow-down-right" | "arrow-left" | "arrow-left-circle" | "arrow-right" | "arrow-right-circle" | "arrow-up" | "arrow-up-circle" | "arrow-up-left" | "arrow-up-right" | "caret" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "chevrons-down" | "chevrons-left" | "chevrons-right" | "chevrons-up" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "load-balancer" | "migrate" | "move" | "shuffle" | "swap-horizontal" | "swap-vertical"; + get linkIcon(): "service" | "loading" | "loading-static" | "running" | "running-static" | "apple" | "apple-color" | "alibaba" | "alibaba-color" | "amazon-ecs" | "amazon-ecs-color" | "amazon-eks" | "amazon-eks-color" | "auth0" | "auth0-color" | "aws" | "aws-color" | "aws-cdk" | "aws-cdk-color" | "aws-cloudwatch" | "aws-cloudwatch-color" | "aws-ec2" | "aws-ec2-color" | "aws-lambda" | "aws-lambda-color" | "aws-s3" | "aws-s3-color" | "azure" | "azure-color" | "azure-aks" | "azure-aks-color" | "azure-blob-storage" | "azure-blob-storage-color" | "azure-devops" | "azure-devops-color" | "azure-vms" | "azure-vms-color" | "bitbucket" | "bitbucket-color" | "bridgecrew" | "bridgecrew-color" | "cisco" | "cisco-color" | "codepen" | "codepen-color" | "confluence" | "confluence-color" | "confluent" | "confluent-color" | "datadog" | "datadog-color" | "digital-ocean" | "digital-ocean-color" | "docker" | "docker-color" | "duo-color" | "duo" | "elastic-observability" | "elastic-observability-color" | "f5" | "f5-color" | "facebook" | "facebook-color" | "figma" | "figma-color" | "gcp" | "gcp-color" | "git" | "git-color" | "gitlab" | "gitlab-color" | "github" | "github-color" | "google" | "google-color" | "google-docs" | "google-docs-color" | "google-drive" | "google-drive-color" | "google-forms" | "google-forms-color" | "google-sheets" | "google-sheets-color" | "google-slides" | "google-slides-color" | "grafana" | "grafana-color" | "helm" | "helm-color" | "infracost" | "infracost-color" | "jfrog" | "jfrog-color" | "jira" | "jira-color" | "jwt" | "jwt-color" | "kubernetes" | "kubernetes-color" | "lightlytics" | "lightlytics-color" | "linkedin" | "linkedin-color" | "linode" | "linode-color" | "linux" | "linux-color" | "loom" | "loom-color" | "meetup" | "meetup-color" | "microsoft" | "microsoft-color" | "microsoft-teams" | "microsoft-teams-color" | "minio" | "minio-color" | "mongodb" | "mongodb-color" | "new-relic" | "new-relic-color" | "okta" | "okta-color" | "oracle" | "oracle-color" | "opa" | "opa-color" | "openid" | "openid-color" | "pack" | "pack-color" | "pager-duty" | "pager-duty-color" | "ping-identity " | "ping-identity-color" | "postgres" | "postgres-color" | "rabbitmq" | "rabbitmq-color" | "saml" | "saml-color" | "service-now" | "service-now-color" | "slack" | "slack-color" | "snyk" | "snyk-color" | "splunk" | "splunk-color" | "twilio" | "twilio-color" | "twitch" | "twitch-color" | "twitter" | "twitter-color" | "twitter-x" | "twitter-x-color" | "vantage" | "vantage-color" | "venafi" | "venafi-color" | "vercel" | "vercel-color" | "vmware" | "vmware-color" | "youtube" | "youtube-color" | "boundary" | "boundary-color" | "boundary-fill" | "boundary-fill-color" | "boundary-square" | "boundary-square-color" | "consul" | "consul-color" | "consul-fill" | "consul-fill-color" | "consul-square" | "consul-square-color" | "nomad" | "nomad-color" | "nomad-fill" | "nomad-fill-color" | "nomad-square" | "nomad-square-color" | "packer" | "packer-color" | "packer-fill" | "packer-fill-color" | "packer-square" | "packer-square-color" | "terraform" | "terraform-color" | "terraform-fill" | "terraform-fill-color" | "terraform-square" | "terraform-square-color" | "vagrant" | "vagrant-color" | "vagrant-fill" | "vagrant-fill-color" | "vagrant-square" | "vagrant-square-color" | "vault" | "vault-color" | "vault-fill" | "vault-fill-color" | "vault-square" | "vault-square-color" | "vault-radar" | "vault-radar-color" | "vault-radar-fill" | "vault-radar-fill-color" | "vault-radar-square" | "vault-radar-square-color" | "vault-secrets" | "vault-secrets-color" | "vault-secrets-fill" | "vault-secrets-fill-color" | "vault-secrets-square" | "vault-secrets-square-color" | "waypoint" | "waypoint-color" | "waypoint-fill" | "waypoint-fill-color" | "waypoint-square" | "waypoint-square-color" | "hashicorp" | "hashicorp-color" | "hashicorp-fill" | "hashicorp-fill-color" | "hashicorp-square" | "hashicorp-square-color" | "hcp" | "hcp-color" | "hcp-fill" | "hcp-fill-color" | "hcp-square" | "hcp-square-color" | "accessibility" | "folder-users" | "frown" | "identity-service" | "identity-user" | "meh" | "robot" | "smile" | "user" | "user-check" | "user-circle" | "user-circle-fill" | "user-minus" | "user-plus" | "user-x" | "users" | "ampersand" | "beaker" | "bucket" | "bulb" | "circle" | "circle-dot" | "circle-fill" | "circle-half" | "diamond" | "diamond-fill" | "disc" | "dot" | "dot-half" | "droplet" | "flag" | "gift" | "government" | "handshake" | "hash" | "hexagon" | "hexagon-fill" | "labyrinth" | "layers" | "moon" | "octagon" | "outline" | "random" | "rocket" | "sparkle" | "square" | "square-fill" | "sun" | "triangle" | "triangle-fill" | "truck" | "wand" | "zap" | "zap-off" | "docs" | "docs-download" | "docs-link" | "guide" | "guide-link" | "help" | "info" | "info-fill" | "learn" | "learn-link" | "support" | "alert-circle" | "alert-circle-fill" | "alert-diamond" | "alert-diamond-fill" | "alert-octagon" | "alert-octagon-fill" | "alert-triangle" | "alert-triangle-fill" | "check" | "check-circle" | "check-circle-fill" | "check-diamond" | "check-diamond-fill" | "check-hexagon" | "check-hexagon-fill" | "check-square" | "check-square-fill" | "skip" | "x" | "x-circle" | "x-circle-fill" | "x-diamond" | "x-diamond-fill" | "x-hexagon" | "x-hexagon-fill" | "x-square" | "x-square-fill" | "bug" | "certificate" | "eye" | "eye-off" | "fingerprint" | "key" | "keychain" | "lock" | "lock-fill" | "lock-off" | "shield" | "shield-alert" | "shield-check" | "shield-off" | "shield-x" | "token" | "unlock" | "verified" | "wall" | "minus" | "minus-circle" | "minus-circle-fill" | "minus-plus" | "minus-plus-circle" | "minus-plus-square" | "minus-square" | "minus-square-fill" | "plus" | "plus-circle" | "plus-circle-fill" | "plus-square" | "camera" | "camera-off" | "cast" | "closed-caption" | "fast-forward" | "film" | "headphones" | "image" | "music" | "pause" | "pause-circle" | "play" | "play-circle" | "radio" | "rewind" | "rss" | "skip-back" | "skip-forward" | "speaker" | "stop-circle" | "volume" | "volume-down" | "volume-2" | "volume-x" | "wifi" | "wifi-off" | "compass" | "crosshair" | "map" | "map-pin" | "navigation" | "navigation-alt" | "redirect" | "target" | "align-center" | "align-justify" | "align-left" | "align-right" | "battery" | "battery-charging" | "bookmark" | "bookmark-add" | "bookmark-add-fill" | "bookmark-fill" | "bookmark-remove" | "bookmark-remove-fill" | "bottom" | "command" | "crop" | "dashboard" | "delete" | "download" | "edit" | "entry-point" | "exit-point" | "external-link" | "filter" | "filter-circle" | "filter-fill" | "grid" | "grid-alt" | "home" | "jump-link" | "layout" | "link" | "list" | "maximize" | "maximize-alt" | "menu" | "minimize" | "minimize-alt" | "more-horizontal" | "more-vertical" | "mouse-pointer" | "paperclip" | "pen-tool" | "pencil-tool" | "pin" | "power" | "printer" | "reload" | "repeat" | "rotate-cw" | "rotate-ccw" | "search" | "share" | "sidebar" | "sidebar-hide" | "sidebar-show" | "sign-in" | "sign-out" | "slash" | "slash-square" | "sort-asc" | "sort-desc" | "switcher" | "sync" | "sync-alert" | "sync-reverse" | "tag" | "toggle-left" | "toggle-right" | "top" | "trash" | "type" | "unfold-close" | "unfold-open" | "upload" | "zoom-in" | "zoom-out" | "archive" | "clipboard" | "clipboard-checked" | "clipboard-copy" | "clipboard-x" | "file" | "file-change" | "file-check" | "file-diff" | "file-minus" | "file-plus" | "file-source" | "file-text" | "file-x" | "files" | "folder" | "folder-fill" | "folder-minus" | "folder-minus-fill" | "folder-plus" | "folder-plus-fill" | "folder-star" | "inbox" | "api" | "auto-apply" | "build" | "change" | "change-circle" | "change-square" | "channel" | "cloud" | "cloud-check" | "cloud-download" | "cloud-lightning" | "cloud-lock" | "cloud-off" | "cloud-upload" | "cloud-x" | "code" | "connection" | "connection-gateway" | "cpu" | "duplicate" | "gateway" | "git-branch" | "git-commit" | "git-merge" | "git-pull-request" | "git-repo" | "hammer" | "key-values" | "mainframe" | "mesh" | "module" | "monitor" | "network" | "network-alt" | "node" | "path" | "pipeline" | "plug" | "replication-direct" | "replication-perf" | "scissors" | "server" | "server-cluster" | "serverless" | "settings" | "sliders" | "smartphone" | "socket" | "step" | "tablet" | "terminal" | "terminal-screen" | "test" | "tools" | "transform-data" | "tv" | "webhook" | "wrench" | "calendar" | "clock" | "clock-filled" | "delay" | "event" | "history" | "hourglass" | "watch" | "bar-chart" | "bar-chart-alt" | "box" | "collections" | "database" | "hard-drive" | "line-chart" | "line-chart-up" | "logs" | "package" | "pie-chart" | "queue" | "save" | "trend-down" | "trend-up" | "activity" | "at-sign" | "award" | "bell" | "bell-active" | "bell-active-fill" | "bell-off" | "discussion-circle" | "discussion-square" | "heart" | "heart-fill" | "heart-off" | "mail" | "mail-open" | "message-circle" | "message-circle-fill" | "message-square" | "message-square-fill" | "mic" | "mic-off" | "newspaper" | "phone" | "phone-call" | "phone-off" | "send" | "star" | "star-circle" | "star-fill" | "star-off" | "thumbs-down" | "thumbs-up" | "video" | "video-off" | "bank-vault" | "briefcase" | "credit-card" | "dollar-sign" | "enterprise" | "globe" | "globe-private" | "org" | "provider" | "shopping-bag" | "shopping-cart" | "arrow-down" | "arrow-down-circle" | "arrow-down-left" | "arrow-down-right" | "arrow-left" | "arrow-left-circle" | "arrow-right" | "arrow-right-circle" | "arrow-up" | "arrow-up-circle" | "arrow-up-left" | "arrow-up-right" | "caret" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "chevrons-down" | "chevrons-left" | "chevrons-right" | "chevrons-up" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "load-balancer" | "migrate" | "move" | "shuffle" | "swap-horizontal" | "swap-vertical"; get linkTarget(): "_blank" | "_self"; + handleLinkClick: () => void; } //# sourceMappingURL=title-row.d.ts.map \ No newline at end of file diff --git a/ui/vault-reporting/declarations/components/vault-reporting/base/title-row.d.ts.map b/ui/vault-reporting/declarations/components/vault-reporting/base/title-row.d.ts.map index 39a06347d5..b3f86792f5 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/base/title-row.d.ts.map +++ b/ui/vault-reporting/declarations/components/vault-reporting/base/title-row.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"title-row.d.ts","sourceRoot":"","sources":["../../../../src/components/vault-reporting/base/title-row.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAGL,iBAAiB,EAClB,MAAM,gDAAgD,CAAC;AACxD,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,qCAAqC;QACrC,KAAK,EAAE,MAAM,CAAC;QACd,6DAA6D;QAC7D,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;QAClC,wDAAwD;QACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gEAAgE;QAChE,QAAQ,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,gEAAgE;QAChE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gDAAgD;QAChD,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;KACjC,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;IAEF,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAChE,IAAI,OAAO,uBAEV;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,OAAO,WAEV;IAED,IAAI,QAAQ,urTAEX;IAED,IAAI,UAAU,uBAEb;CAqDF"} \ No newline at end of file +{"version":3,"file":"title-row.d.ts","sourceRoot":"","sources":["../../../../src/components/vault-reporting/base/title-row.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAGL,iBAAiB,EAClB,MAAM,gDAAgD,CAAC;AACxD,OAAO,kBAAkB,CAAC;AAI1B,OAAO,KAAK,yBAAyB,MAAM,uCAAuC,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,qCAAqC;QACrC,KAAK,EAAE,MAAM,CAAC;QACd,6DAA6D;QAC7D,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;QAClC,wDAAwD;QACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gEAAgE;QAChE,QAAQ,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,gEAAgE;QAChE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gDAAgD;QAChD,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;KACjC,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;IAEF,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAChE,SAA0B,kBAAkB,EAAE,yBAAyB,CAAC;IAExE,IAAI,OAAO,uBAEV;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,OAAO,WAEV;IAED,IAAI,QAAQ,urTAEX;IAED,IAAI,UAAU,uBAEb;IAED,eAAe,aAMb;CAsDH"} \ No newline at end of file diff --git a/ui/vault-reporting/declarations/components/vault-reporting/cluster-replication.d.ts b/ui/vault-reporting/declarations/components/vault-reporting/cluster-replication.d.ts index d80814ca53..adbcaa0a17 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/cluster-replication.d.ts +++ b/ui/vault-reporting/declarations/components/vault-reporting/cluster-replication.d.ts @@ -20,7 +20,7 @@ export default class ClusterReplication extends Component "disabled" | REPLICATION_ENABLED_STATE; get isEmpty(): boolean; get description(): import("@ember/template").SafeString | "Status of disaster recovery and performance replication."; - getIcon: (state?: REPLICATION_ENABLED_STATE | "disabled") => "loading" | "loading-static" | "running" | "running-static" | "apple" | "apple-color" | "alibaba" | "alibaba-color" | "amazon-ecs" | "amazon-ecs-color" | "amazon-eks" | "amazon-eks-color" | "auth0" | "auth0-color" | "aws" | "aws-color" | "aws-cdk" | "aws-cdk-color" | "aws-cloudwatch" | "aws-cloudwatch-color" | "aws-ec2" | "aws-ec2-color" | "aws-lambda" | "aws-lambda-color" | "aws-s3" | "aws-s3-color" | "azure" | "azure-color" | "azure-aks" | "azure-aks-color" | "azure-blob-storage" | "azure-blob-storage-color" | "azure-devops" | "azure-devops-color" | "azure-vms" | "azure-vms-color" | "bitbucket" | "bitbucket-color" | "bridgecrew" | "bridgecrew-color" | "cisco" | "cisco-color" | "codepen" | "codepen-color" | "confluence" | "confluence-color" | "confluent" | "confluent-color" | "datadog" | "datadog-color" | "digital-ocean" | "digital-ocean-color" | "docker" | "docker-color" | "duo-color" | "duo" | "elastic-observability" | "elastic-observability-color" | "f5" | "f5-color" | "facebook" | "facebook-color" | "figma" | "figma-color" | "gcp" | "gcp-color" | "git" | "git-color" | "gitlab" | "gitlab-color" | "github" | "github-color" | "google" | "google-color" | "google-docs" | "google-docs-color" | "google-drive" | "google-drive-color" | "google-forms" | "google-forms-color" | "google-sheets" | "google-sheets-color" | "google-slides" | "google-slides-color" | "grafana" | "grafana-color" | "helm" | "helm-color" | "infracost" | "infracost-color" | "jfrog" | "jfrog-color" | "jira" | "jira-color" | "jwt" | "jwt-color" | "kubernetes" | "kubernetes-color" | "lightlytics" | "lightlytics-color" | "linkedin" | "linkedin-color" | "linode" | "linode-color" | "linux" | "linux-color" | "loom" | "loom-color" | "meetup" | "meetup-color" | "microsoft" | "microsoft-color" | "microsoft-teams" | "microsoft-teams-color" | "minio" | "minio-color" | "mongodb" | "mongodb-color" | "new-relic" | "new-relic-color" | "okta" | "okta-color" | "oracle" | "oracle-color" | "opa" | "opa-color" | "openid" | "openid-color" | "pack" | "pack-color" | "pager-duty" | "pager-duty-color" | "ping-identity " | "ping-identity-color" | "postgres" | "postgres-color" | "rabbitmq" | "rabbitmq-color" | "saml" | "saml-color" | "service-now" | "service-now-color" | "slack" | "slack-color" | "snyk" | "snyk-color" | "splunk" | "splunk-color" | "twilio" | "twilio-color" | "twitch" | "twitch-color" | "twitter" | "twitter-color" | "twitter-x" | "twitter-x-color" | "vantage" | "vantage-color" | "venafi" | "venafi-color" | "vercel" | "vercel-color" | "vmware" | "vmware-color" | "youtube" | "youtube-color" | "boundary" | "boundary-color" | "boundary-fill" | "boundary-fill-color" | "boundary-square" | "boundary-square-color" | "consul" | "consul-color" | "consul-fill" | "consul-fill-color" | "consul-square" | "consul-square-color" | "nomad" | "nomad-color" | "nomad-fill" | "nomad-fill-color" | "nomad-square" | "nomad-square-color" | "packer" | "packer-color" | "packer-fill" | "packer-fill-color" | "packer-square" | "packer-square-color" | "terraform" | "terraform-color" | "terraform-fill" | "terraform-fill-color" | "terraform-square" | "terraform-square-color" | "vagrant" | "vagrant-color" | "vagrant-fill" | "vagrant-fill-color" | "vagrant-square" | "vagrant-square-color" | "vault" | "vault-color" | "vault-fill" | "vault-fill-color" | "vault-square" | "vault-square-color" | "vault-radar" | "vault-radar-color" | "vault-radar-fill" | "vault-radar-fill-color" | "vault-radar-square" | "vault-radar-square-color" | "vault-secrets" | "vault-secrets-color" | "vault-secrets-fill" | "vault-secrets-fill-color" | "vault-secrets-square" | "vault-secrets-square-color" | "waypoint" | "waypoint-color" | "waypoint-fill" | "waypoint-fill-color" | "waypoint-square" | "waypoint-square-color" | "hashicorp" | "hashicorp-color" | "hashicorp-fill" | "hashicorp-fill-color" | "hashicorp-square" | "hashicorp-square-color" | "hcp" | "hcp-color" | "hcp-fill" | "hcp-fill-color" | "hcp-square" | "hcp-square-color" | "accessibility" | "folder-users" | "frown" | "identity-service" | "identity-user" | "meh" | "robot" | "smile" | "user" | "user-check" | "user-circle" | "user-circle-fill" | "user-minus" | "user-plus" | "user-x" | "users" | "ampersand" | "beaker" | "bucket" | "bulb" | "circle" | "circle-dot" | "circle-fill" | "circle-half" | "diamond" | "diamond-fill" | "disc" | "dot" | "dot-half" | "droplet" | "flag" | "gift" | "government" | "handshake" | "hash" | "hexagon" | "hexagon-fill" | "labyrinth" | "layers" | "moon" | "octagon" | "outline" | "random" | "rocket" | "sparkle" | "square" | "square-fill" | "sun" | "triangle" | "triangle-fill" | "truck" | "wand" | "zap" | "zap-off" | "docs" | "docs-download" | "docs-link" | "guide" | "guide-link" | "help" | "info" | "info-fill" | "learn" | "learn-link" | "support" | "alert-circle" | "alert-circle-fill" | "alert-diamond" | "alert-diamond-fill" | "alert-octagon" | "alert-octagon-fill" | "alert-triangle" | "alert-triangle-fill" | "check" | "check-circle" | "check-circle-fill" | "check-diamond" | "check-diamond-fill" | "check-hexagon" | "check-hexagon-fill" | "check-square" | "check-square-fill" | "skip" | "x" | "x-circle" | "x-circle-fill" | "x-diamond" | "x-diamond-fill" | "x-hexagon" | "x-hexagon-fill" | "x-square" | "x-square-fill" | "bug" | "certificate" | "eye" | "eye-off" | "fingerprint" | "key" | "keychain" | "lock" | "lock-fill" | "lock-off" | "shield" | "shield-alert" | "shield-check" | "shield-off" | "shield-x" | "token" | "unlock" | "verified" | "wall" | "minus" | "minus-circle" | "minus-circle-fill" | "minus-plus" | "minus-plus-circle" | "minus-plus-square" | "minus-square" | "minus-square-fill" | "plus" | "plus-circle" | "plus-circle-fill" | "plus-square" | "camera" | "camera-off" | "cast" | "closed-caption" | "fast-forward" | "film" | "headphones" | "image" | "music" | "pause" | "pause-circle" | "play" | "play-circle" | "radio" | "rewind" | "rss" | "skip-back" | "skip-forward" | "speaker" | "stop-circle" | "volume" | "volume-down" | "volume-2" | "volume-x" | "wifi" | "wifi-off" | "compass" | "crosshair" | "map" | "map-pin" | "navigation" | "navigation-alt" | "redirect" | "target" | "align-center" | "align-justify" | "align-left" | "align-right" | "battery" | "battery-charging" | "bookmark" | "bookmark-add" | "bookmark-add-fill" | "bookmark-fill" | "bookmark-remove" | "bookmark-remove-fill" | "bottom" | "command" | "crop" | "dashboard" | "delete" | "download" | "edit" | "entry-point" | "exit-point" | "external-link" | "filter" | "filter-circle" | "filter-fill" | "grid" | "grid-alt" | "home" | "jump-link" | "layout" | "link" | "list" | "maximize" | "maximize-alt" | "menu" | "minimize" | "minimize-alt" | "more-horizontal" | "more-vertical" | "mouse-pointer" | "paperclip" | "pen-tool" | "pencil-tool" | "pin" | "power" | "printer" | "reload" | "repeat" | "rotate-cw" | "rotate-ccw" | "search" | "share" | "sidebar" | "sidebar-hide" | "sidebar-show" | "sign-in" | "sign-out" | "slash" | "slash-square" | "sort-asc" | "sort-desc" | "switcher" | "sync" | "sync-alert" | "sync-reverse" | "tag" | "toggle-left" | "toggle-right" | "top" | "trash" | "type" | "unfold-close" | "unfold-open" | "upload" | "zoom-in" | "zoom-out" | "archive" | "clipboard" | "clipboard-checked" | "clipboard-copy" | "clipboard-x" | "file" | "file-change" | "file-check" | "file-diff" | "file-minus" | "file-plus" | "file-source" | "file-text" | "file-x" | "files" | "folder" | "folder-fill" | "folder-minus" | "folder-minus-fill" | "folder-plus" | "folder-plus-fill" | "folder-star" | "inbox" | "api" | "auto-apply" | "build" | "change" | "change-circle" | "change-square" | "channel" | "cloud" | "cloud-check" | "cloud-download" | "cloud-lightning" | "cloud-lock" | "cloud-off" | "cloud-upload" | "cloud-x" | "code" | "connection" | "connection-gateway" | "cpu" | "duplicate" | "gateway" | "git-branch" | "git-commit" | "git-merge" | "git-pull-request" | "git-repo" | "hammer" | "key-values" | "mainframe" | "mesh" | "module" | "monitor" | "network" | "network-alt" | "node" | "path" | "pipeline" | "plug" | "replication-direct" | "replication-perf" | "scissors" | "server" | "server-cluster" | "serverless" | "service" | "settings" | "sliders" | "smartphone" | "socket" | "step" | "tablet" | "terminal" | "terminal-screen" | "test" | "tools" | "transform-data" | "tv" | "webhook" | "wrench" | "calendar" | "clock" | "clock-filled" | "delay" | "event" | "history" | "hourglass" | "watch" | "bar-chart" | "bar-chart-alt" | "box" | "collections" | "database" | "hard-drive" | "line-chart" | "line-chart-up" | "logs" | "package" | "pie-chart" | "queue" | "save" | "trend-down" | "trend-up" | "activity" | "at-sign" | "award" | "bell" | "bell-active" | "bell-active-fill" | "bell-off" | "discussion-circle" | "discussion-square" | "heart" | "heart-fill" | "heart-off" | "mail" | "mail-open" | "message-circle" | "message-circle-fill" | "message-square" | "message-square-fill" | "mic" | "mic-off" | "newspaper" | "phone" | "phone-call" | "phone-off" | "send" | "star" | "star-circle" | "star-fill" | "star-off" | "thumbs-down" | "thumbs-up" | "video" | "video-off" | "bank-vault" | "briefcase" | "credit-card" | "dollar-sign" | "enterprise" | "globe" | "globe-private" | "org" | "provider" | "shopping-bag" | "shopping-cart" | "arrow-down" | "arrow-down-circle" | "arrow-down-left" | "arrow-down-right" | "arrow-left" | "arrow-left-circle" | "arrow-right" | "arrow-right-circle" | "arrow-up" | "arrow-up-circle" | "arrow-up-left" | "arrow-up-right" | "caret" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "chevrons-down" | "chevrons-left" | "chevrons-right" | "chevrons-up" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "load-balancer" | "migrate" | "move" | "shuffle" | "swap-horizontal" | "swap-vertical" | undefined; + getIcon: (state?: REPLICATION_ENABLED_STATE | "disabled") => "service" | "loading" | "loading-static" | "running" | "running-static" | "apple" | "apple-color" | "alibaba" | "alibaba-color" | "amazon-ecs" | "amazon-ecs-color" | "amazon-eks" | "amazon-eks-color" | "auth0" | "auth0-color" | "aws" | "aws-color" | "aws-cdk" | "aws-cdk-color" | "aws-cloudwatch" | "aws-cloudwatch-color" | "aws-ec2" | "aws-ec2-color" | "aws-lambda" | "aws-lambda-color" | "aws-s3" | "aws-s3-color" | "azure" | "azure-color" | "azure-aks" | "azure-aks-color" | "azure-blob-storage" | "azure-blob-storage-color" | "azure-devops" | "azure-devops-color" | "azure-vms" | "azure-vms-color" | "bitbucket" | "bitbucket-color" | "bridgecrew" | "bridgecrew-color" | "cisco" | "cisco-color" | "codepen" | "codepen-color" | "confluence" | "confluence-color" | "confluent" | "confluent-color" | "datadog" | "datadog-color" | "digital-ocean" | "digital-ocean-color" | "docker" | "docker-color" | "duo-color" | "duo" | "elastic-observability" | "elastic-observability-color" | "f5" | "f5-color" | "facebook" | "facebook-color" | "figma" | "figma-color" | "gcp" | "gcp-color" | "git" | "git-color" | "gitlab" | "gitlab-color" | "github" | "github-color" | "google" | "google-color" | "google-docs" | "google-docs-color" | "google-drive" | "google-drive-color" | "google-forms" | "google-forms-color" | "google-sheets" | "google-sheets-color" | "google-slides" | "google-slides-color" | "grafana" | "grafana-color" | "helm" | "helm-color" | "infracost" | "infracost-color" | "jfrog" | "jfrog-color" | "jira" | "jira-color" | "jwt" | "jwt-color" | "kubernetes" | "kubernetes-color" | "lightlytics" | "lightlytics-color" | "linkedin" | "linkedin-color" | "linode" | "linode-color" | "linux" | "linux-color" | "loom" | "loom-color" | "meetup" | "meetup-color" | "microsoft" | "microsoft-color" | "microsoft-teams" | "microsoft-teams-color" | "minio" | "minio-color" | "mongodb" | "mongodb-color" | "new-relic" | "new-relic-color" | "okta" | "okta-color" | "oracle" | "oracle-color" | "opa" | "opa-color" | "openid" | "openid-color" | "pack" | "pack-color" | "pager-duty" | "pager-duty-color" | "ping-identity " | "ping-identity-color" | "postgres" | "postgres-color" | "rabbitmq" | "rabbitmq-color" | "saml" | "saml-color" | "service-now" | "service-now-color" | "slack" | "slack-color" | "snyk" | "snyk-color" | "splunk" | "splunk-color" | "twilio" | "twilio-color" | "twitch" | "twitch-color" | "twitter" | "twitter-color" | "twitter-x" | "twitter-x-color" | "vantage" | "vantage-color" | "venafi" | "venafi-color" | "vercel" | "vercel-color" | "vmware" | "vmware-color" | "youtube" | "youtube-color" | "boundary" | "boundary-color" | "boundary-fill" | "boundary-fill-color" | "boundary-square" | "boundary-square-color" | "consul" | "consul-color" | "consul-fill" | "consul-fill-color" | "consul-square" | "consul-square-color" | "nomad" | "nomad-color" | "nomad-fill" | "nomad-fill-color" | "nomad-square" | "nomad-square-color" | "packer" | "packer-color" | "packer-fill" | "packer-fill-color" | "packer-square" | "packer-square-color" | "terraform" | "terraform-color" | "terraform-fill" | "terraform-fill-color" | "terraform-square" | "terraform-square-color" | "vagrant" | "vagrant-color" | "vagrant-fill" | "vagrant-fill-color" | "vagrant-square" | "vagrant-square-color" | "vault" | "vault-color" | "vault-fill" | "vault-fill-color" | "vault-square" | "vault-square-color" | "vault-radar" | "vault-radar-color" | "vault-radar-fill" | "vault-radar-fill-color" | "vault-radar-square" | "vault-radar-square-color" | "vault-secrets" | "vault-secrets-color" | "vault-secrets-fill" | "vault-secrets-fill-color" | "vault-secrets-square" | "vault-secrets-square-color" | "waypoint" | "waypoint-color" | "waypoint-fill" | "waypoint-fill-color" | "waypoint-square" | "waypoint-square-color" | "hashicorp" | "hashicorp-color" | "hashicorp-fill" | "hashicorp-fill-color" | "hashicorp-square" | "hashicorp-square-color" | "hcp" | "hcp-color" | "hcp-fill" | "hcp-fill-color" | "hcp-square" | "hcp-square-color" | "accessibility" | "folder-users" | "frown" | "identity-service" | "identity-user" | "meh" | "robot" | "smile" | "user" | "user-check" | "user-circle" | "user-circle-fill" | "user-minus" | "user-plus" | "user-x" | "users" | "ampersand" | "beaker" | "bucket" | "bulb" | "circle" | "circle-dot" | "circle-fill" | "circle-half" | "diamond" | "diamond-fill" | "disc" | "dot" | "dot-half" | "droplet" | "flag" | "gift" | "government" | "handshake" | "hash" | "hexagon" | "hexagon-fill" | "labyrinth" | "layers" | "moon" | "octagon" | "outline" | "random" | "rocket" | "sparkle" | "square" | "square-fill" | "sun" | "triangle" | "triangle-fill" | "truck" | "wand" | "zap" | "zap-off" | "docs" | "docs-download" | "docs-link" | "guide" | "guide-link" | "help" | "info" | "info-fill" | "learn" | "learn-link" | "support" | "alert-circle" | "alert-circle-fill" | "alert-diamond" | "alert-diamond-fill" | "alert-octagon" | "alert-octagon-fill" | "alert-triangle" | "alert-triangle-fill" | "check" | "check-circle" | "check-circle-fill" | "check-diamond" | "check-diamond-fill" | "check-hexagon" | "check-hexagon-fill" | "check-square" | "check-square-fill" | "skip" | "x" | "x-circle" | "x-circle-fill" | "x-diamond" | "x-diamond-fill" | "x-hexagon" | "x-hexagon-fill" | "x-square" | "x-square-fill" | "bug" | "certificate" | "eye" | "eye-off" | "fingerprint" | "key" | "keychain" | "lock" | "lock-fill" | "lock-off" | "shield" | "shield-alert" | "shield-check" | "shield-off" | "shield-x" | "token" | "unlock" | "verified" | "wall" | "minus" | "minus-circle" | "minus-circle-fill" | "minus-plus" | "minus-plus-circle" | "minus-plus-square" | "minus-square" | "minus-square-fill" | "plus" | "plus-circle" | "plus-circle-fill" | "plus-square" | "camera" | "camera-off" | "cast" | "closed-caption" | "fast-forward" | "film" | "headphones" | "image" | "music" | "pause" | "pause-circle" | "play" | "play-circle" | "radio" | "rewind" | "rss" | "skip-back" | "skip-forward" | "speaker" | "stop-circle" | "volume" | "volume-down" | "volume-2" | "volume-x" | "wifi" | "wifi-off" | "compass" | "crosshair" | "map" | "map-pin" | "navigation" | "navigation-alt" | "redirect" | "target" | "align-center" | "align-justify" | "align-left" | "align-right" | "battery" | "battery-charging" | "bookmark" | "bookmark-add" | "bookmark-add-fill" | "bookmark-fill" | "bookmark-remove" | "bookmark-remove-fill" | "bottom" | "command" | "crop" | "dashboard" | "delete" | "download" | "edit" | "entry-point" | "exit-point" | "external-link" | "filter" | "filter-circle" | "filter-fill" | "grid" | "grid-alt" | "home" | "jump-link" | "layout" | "link" | "list" | "maximize" | "maximize-alt" | "menu" | "minimize" | "minimize-alt" | "more-horizontal" | "more-vertical" | "mouse-pointer" | "paperclip" | "pen-tool" | "pencil-tool" | "pin" | "power" | "printer" | "reload" | "repeat" | "rotate-cw" | "rotate-ccw" | "search" | "share" | "sidebar" | "sidebar-hide" | "sidebar-show" | "sign-in" | "sign-out" | "slash" | "slash-square" | "sort-asc" | "sort-desc" | "switcher" | "sync" | "sync-alert" | "sync-reverse" | "tag" | "toggle-left" | "toggle-right" | "top" | "trash" | "type" | "unfold-close" | "unfold-open" | "upload" | "zoom-in" | "zoom-out" | "archive" | "clipboard" | "clipboard-checked" | "clipboard-copy" | "clipboard-x" | "file" | "file-change" | "file-check" | "file-diff" | "file-minus" | "file-plus" | "file-source" | "file-text" | "file-x" | "files" | "folder" | "folder-fill" | "folder-minus" | "folder-minus-fill" | "folder-plus" | "folder-plus-fill" | "folder-star" | "inbox" | "api" | "auto-apply" | "build" | "change" | "change-circle" | "change-square" | "channel" | "cloud" | "cloud-check" | "cloud-download" | "cloud-lightning" | "cloud-lock" | "cloud-off" | "cloud-upload" | "cloud-x" | "code" | "connection" | "connection-gateway" | "cpu" | "duplicate" | "gateway" | "git-branch" | "git-commit" | "git-merge" | "git-pull-request" | "git-repo" | "hammer" | "key-values" | "mainframe" | "mesh" | "module" | "monitor" | "network" | "network-alt" | "node" | "path" | "pipeline" | "plug" | "replication-direct" | "replication-perf" | "scissors" | "server" | "server-cluster" | "serverless" | "settings" | "sliders" | "smartphone" | "socket" | "step" | "tablet" | "terminal" | "terminal-screen" | "test" | "tools" | "transform-data" | "tv" | "webhook" | "wrench" | "calendar" | "clock" | "clock-filled" | "delay" | "event" | "history" | "hourglass" | "watch" | "bar-chart" | "bar-chart-alt" | "box" | "collections" | "database" | "hard-drive" | "line-chart" | "line-chart-up" | "logs" | "package" | "pie-chart" | "queue" | "save" | "trend-down" | "trend-up" | "activity" | "at-sign" | "award" | "bell" | "bell-active" | "bell-active-fill" | "bell-off" | "discussion-circle" | "discussion-square" | "heart" | "heart-fill" | "heart-off" | "mail" | "mail-open" | "message-circle" | "message-circle-fill" | "message-square" | "message-square-fill" | "mic" | "mic-off" | "newspaper" | "phone" | "phone-call" | "phone-off" | "send" | "star" | "star-circle" | "star-fill" | "star-off" | "thumbs-down" | "thumbs-up" | "video" | "video-off" | "bank-vault" | "briefcase" | "credit-card" | "dollar-sign" | "enterprise" | "globe" | "globe-private" | "org" | "provider" | "shopping-bag" | "shopping-cart" | "arrow-down" | "arrow-down-circle" | "arrow-down-left" | "arrow-down-right" | "arrow-left" | "arrow-left-circle" | "arrow-right" | "arrow-right-circle" | "arrow-up" | "arrow-up-circle" | "arrow-up-left" | "arrow-up-right" | "caret" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "chevrons-down" | "chevrons-left" | "chevrons-right" | "chevrons-up" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "load-balancer" | "migrate" | "move" | "shuffle" | "swap-horizontal" | "swap-vertical" | undefined; getColor: (state?: REPLICATION_ENABLED_STATE | "disabled") => "neutral" | "neutral-dark-mode" | "highlight" | "success" | "warning" | "critical" | undefined; get linkUrl(): "replication" | undefined; } diff --git a/ui/vault-reporting/declarations/components/vault-reporting/cluster-replication.d.ts.map b/ui/vault-reporting/declarations/components/vault-reporting/cluster-replication.d.ts.map index f67c42c871..a17d0f3a81 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/cluster-replication.d.ts.map +++ b/ui/vault-reporting/declarations/components/vault-reporting/cluster-replication.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"cluster-replication.d.ts","sourceRoot":"","sources":["../../../src/components/vault-reporting/cluster-replication.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAO3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,4BAA4B,CAAC;AAEpC,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE;QACJ,qBAAqB,EAAE,yBAAyB,GAAG,UAAU,CAAC;QAC9D,gBAAgB,EAAE,yBAAyB,GAAG,UAAU,CAAC;QACzD,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;IAEF,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS,CAAC,2BAA2B,CAAC;IACpF,QAAQ,GAAI,QAAO,yBAAyB,GAAG,UAAuB,4CAEpE;IAEF,IAAI,OAAO,YAKV;IAED,IAAI,WAAW,sGAQd;IAED,OAAO,GAAI,QAAO,yBAAyB,GAAG,UAAuB,osTAQnE;IAEF,QAAQ,GAAI,QAAO,yBAAyB,GAAG,UAAuB,oGAQpE;IAEF,IAAI,OAAO,8BAMV;CAuDF"} \ No newline at end of file +{"version":3,"file":"cluster-replication.d.ts","sourceRoot":"","sources":["../../../src/components/vault-reporting/cluster-replication.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAO3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,4BAA4B,CAAC;AAEpC,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE;QACJ,qBAAqB,EAAE,yBAAyB,GAAG,UAAU,CAAC;QAC9D,gBAAgB,EAAE,yBAAyB,GAAG,UAAU,CAAC;QACzD,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;IAEF,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS,CAAC,2BAA2B,CAAC;IACpF,QAAQ,WAAW,yBAAyB,GAAG,UAAU,4CAEvD;IAEF,IAAI,OAAO,YAKV;IAED,IAAI,WAAW,sGAQd;IAED,OAAO,WAAW,yBAAyB,GAAG,UAAU,osTAQtD;IAEF,QAAQ,WAAW,yBAAyB,GAAG,UAAU,oGAQvD;IAEF,IAAI,OAAO,8BAMV;CAuDF"} \ No newline at end of file diff --git a/ui/vault-reporting/declarations/components/vault-reporting/counter.d.ts b/ui/vault-reporting/declarations/components/vault-reporting/counter.d.ts index 8465f8137a..b92f8768f0 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/counter.d.ts +++ b/ui/vault-reporting/declarations/components/vault-reporting/counter.d.ts @@ -24,7 +24,7 @@ export interface SSUReportingCounterSignature { export default class SSUReportingCounter extends Component { get shouldShowEmptyState(): string | false | undefined; get count(): string | number | undefined; - get icon(): "loading" | "loading-static" | "running" | "running-static" | "apple" | "apple-color" | "alibaba" | "alibaba-color" | "amazon-ecs" | "amazon-ecs-color" | "amazon-eks" | "amazon-eks-color" | "auth0" | "auth0-color" | "aws" | "aws-color" | "aws-cdk" | "aws-cdk-color" | "aws-cloudwatch" | "aws-cloudwatch-color" | "aws-ec2" | "aws-ec2-color" | "aws-lambda" | "aws-lambda-color" | "aws-s3" | "aws-s3-color" | "azure" | "azure-color" | "azure-aks" | "azure-aks-color" | "azure-blob-storage" | "azure-blob-storage-color" | "azure-devops" | "azure-devops-color" | "azure-vms" | "azure-vms-color" | "bitbucket" | "bitbucket-color" | "bridgecrew" | "bridgecrew-color" | "cisco" | "cisco-color" | "codepen" | "codepen-color" | "confluence" | "confluence-color" | "confluent" | "confluent-color" | "datadog" | "datadog-color" | "digital-ocean" | "digital-ocean-color" | "docker" | "docker-color" | "duo-color" | "duo" | "elastic-observability" | "elastic-observability-color" | "f5" | "f5-color" | "facebook" | "facebook-color" | "figma" | "figma-color" | "gcp" | "gcp-color" | "git" | "git-color" | "gitlab" | "gitlab-color" | "github" | "github-color" | "google" | "google-color" | "google-docs" | "google-docs-color" | "google-drive" | "google-drive-color" | "google-forms" | "google-forms-color" | "google-sheets" | "google-sheets-color" | "google-slides" | "google-slides-color" | "grafana" | "grafana-color" | "helm" | "helm-color" | "infracost" | "infracost-color" | "jfrog" | "jfrog-color" | "jira" | "jira-color" | "jwt" | "jwt-color" | "kubernetes" | "kubernetes-color" | "lightlytics" | "lightlytics-color" | "linkedin" | "linkedin-color" | "linode" | "linode-color" | "linux" | "linux-color" | "loom" | "loom-color" | "meetup" | "meetup-color" | "microsoft" | "microsoft-color" | "microsoft-teams" | "microsoft-teams-color" | "minio" | "minio-color" | "mongodb" | "mongodb-color" | "new-relic" | "new-relic-color" | "okta" | "okta-color" | "oracle" | "oracle-color" | "opa" | "opa-color" | "openid" | "openid-color" | "pack" | "pack-color" | "pager-duty" | "pager-duty-color" | "ping-identity " | "ping-identity-color" | "postgres" | "postgres-color" | "rabbitmq" | "rabbitmq-color" | "saml" | "saml-color" | "service-now" | "service-now-color" | "slack" | "slack-color" | "snyk" | "snyk-color" | "splunk" | "splunk-color" | "twilio" | "twilio-color" | "twitch" | "twitch-color" | "twitter" | "twitter-color" | "twitter-x" | "twitter-x-color" | "vantage" | "vantage-color" | "venafi" | "venafi-color" | "vercel" | "vercel-color" | "vmware" | "vmware-color" | "youtube" | "youtube-color" | "boundary" | "boundary-color" | "boundary-fill" | "boundary-fill-color" | "boundary-square" | "boundary-square-color" | "consul" | "consul-color" | "consul-fill" | "consul-fill-color" | "consul-square" | "consul-square-color" | "nomad" | "nomad-color" | "nomad-fill" | "nomad-fill-color" | "nomad-square" | "nomad-square-color" | "packer" | "packer-color" | "packer-fill" | "packer-fill-color" | "packer-square" | "packer-square-color" | "terraform" | "terraform-color" | "terraform-fill" | "terraform-fill-color" | "terraform-square" | "terraform-square-color" | "vagrant" | "vagrant-color" | "vagrant-fill" | "vagrant-fill-color" | "vagrant-square" | "vagrant-square-color" | "vault" | "vault-color" | "vault-fill" | "vault-fill-color" | "vault-square" | "vault-square-color" | "vault-radar" | "vault-radar-color" | "vault-radar-fill" | "vault-radar-fill-color" | "vault-radar-square" | "vault-radar-square-color" | "vault-secrets" | "vault-secrets-color" | "vault-secrets-fill" | "vault-secrets-fill-color" | "vault-secrets-square" | "vault-secrets-square-color" | "waypoint" | "waypoint-color" | "waypoint-fill" | "waypoint-fill-color" | "waypoint-square" | "waypoint-square-color" | "hashicorp" | "hashicorp-color" | "hashicorp-fill" | "hashicorp-fill-color" | "hashicorp-square" | "hashicorp-square-color" | "hcp" | "hcp-color" | "hcp-fill" | "hcp-fill-color" | "hcp-square" | "hcp-square-color" | "accessibility" | "folder-users" | "frown" | "identity-service" | "identity-user" | "meh" | "robot" | "smile" | "user" | "user-check" | "user-circle" | "user-circle-fill" | "user-minus" | "user-plus" | "user-x" | "users" | "ampersand" | "beaker" | "bucket" | "bulb" | "circle" | "circle-dot" | "circle-fill" | "circle-half" | "diamond" | "diamond-fill" | "disc" | "dot" | "dot-half" | "droplet" | "flag" | "gift" | "government" | "handshake" | "hash" | "hexagon" | "hexagon-fill" | "labyrinth" | "layers" | "moon" | "octagon" | "outline" | "random" | "rocket" | "sparkle" | "square" | "square-fill" | "sun" | "triangle" | "triangle-fill" | "truck" | "wand" | "zap" | "zap-off" | "docs" | "docs-download" | "docs-link" | "guide" | "guide-link" | "help" | "info" | "info-fill" | "learn" | "learn-link" | "support" | "alert-circle" | "alert-circle-fill" | "alert-diamond" | "alert-diamond-fill" | "alert-octagon" | "alert-octagon-fill" | "alert-triangle" | "alert-triangle-fill" | "check" | "check-circle" | "check-circle-fill" | "check-diamond" | "check-diamond-fill" | "check-hexagon" | "check-hexagon-fill" | "check-square" | "check-square-fill" | "skip" | "x" | "x-circle" | "x-circle-fill" | "x-diamond" | "x-diamond-fill" | "x-hexagon" | "x-hexagon-fill" | "x-square" | "x-square-fill" | "bug" | "certificate" | "eye" | "eye-off" | "fingerprint" | "key" | "keychain" | "lock" | "lock-fill" | "lock-off" | "shield" | "shield-alert" | "shield-check" | "shield-off" | "shield-x" | "token" | "unlock" | "verified" | "wall" | "minus" | "minus-circle" | "minus-circle-fill" | "minus-plus" | "minus-plus-circle" | "minus-plus-square" | "minus-square" | "minus-square-fill" | "plus" | "plus-circle" | "plus-circle-fill" | "plus-square" | "camera" | "camera-off" | "cast" | "closed-caption" | "fast-forward" | "film" | "headphones" | "image" | "music" | "pause" | "pause-circle" | "play" | "play-circle" | "radio" | "rewind" | "rss" | "skip-back" | "skip-forward" | "speaker" | "stop-circle" | "volume" | "volume-down" | "volume-2" | "volume-x" | "wifi" | "wifi-off" | "compass" | "crosshair" | "map" | "map-pin" | "navigation" | "navigation-alt" | "redirect" | "target" | "align-center" | "align-justify" | "align-left" | "align-right" | "battery" | "battery-charging" | "bookmark" | "bookmark-add" | "bookmark-add-fill" | "bookmark-fill" | "bookmark-remove" | "bookmark-remove-fill" | "bottom" | "command" | "crop" | "dashboard" | "delete" | "download" | "edit" | "entry-point" | "exit-point" | "external-link" | "filter" | "filter-circle" | "filter-fill" | "grid" | "grid-alt" | "home" | "jump-link" | "layout" | "link" | "list" | "maximize" | "maximize-alt" | "menu" | "minimize" | "minimize-alt" | "more-horizontal" | "more-vertical" | "mouse-pointer" | "paperclip" | "pen-tool" | "pencil-tool" | "pin" | "power" | "printer" | "reload" | "repeat" | "rotate-cw" | "rotate-ccw" | "search" | "share" | "sidebar" | "sidebar-hide" | "sidebar-show" | "sign-in" | "sign-out" | "slash" | "slash-square" | "sort-asc" | "sort-desc" | "switcher" | "sync" | "sync-alert" | "sync-reverse" | "tag" | "toggle-left" | "toggle-right" | "top" | "trash" | "type" | "unfold-close" | "unfold-open" | "upload" | "zoom-in" | "zoom-out" | "archive" | "clipboard" | "clipboard-checked" | "clipboard-copy" | "clipboard-x" | "file" | "file-change" | "file-check" | "file-diff" | "file-minus" | "file-plus" | "file-source" | "file-text" | "file-x" | "files" | "folder" | "folder-fill" | "folder-minus" | "folder-minus-fill" | "folder-plus" | "folder-plus-fill" | "folder-star" | "inbox" | "api" | "auto-apply" | "build" | "change" | "change-circle" | "change-square" | "channel" | "cloud" | "cloud-check" | "cloud-download" | "cloud-lightning" | "cloud-lock" | "cloud-off" | "cloud-upload" | "cloud-x" | "code" | "connection" | "connection-gateway" | "cpu" | "duplicate" | "gateway" | "git-branch" | "git-commit" | "git-merge" | "git-pull-request" | "git-repo" | "hammer" | "key-values" | "mainframe" | "mesh" | "module" | "monitor" | "network" | "network-alt" | "node" | "path" | "pipeline" | "plug" | "replication-direct" | "replication-perf" | "scissors" | "server" | "server-cluster" | "serverless" | "service" | "settings" | "sliders" | "smartphone" | "socket" | "step" | "tablet" | "terminal" | "terminal-screen" | "test" | "tools" | "transform-data" | "tv" | "webhook" | "wrench" | "calendar" | "clock" | "clock-filled" | "delay" | "event" | "history" | "hourglass" | "watch" | "bar-chart" | "bar-chart-alt" | "box" | "collections" | "database" | "hard-drive" | "line-chart" | "line-chart-up" | "logs" | "package" | "pie-chart" | "queue" | "save" | "trend-down" | "trend-up" | "activity" | "at-sign" | "award" | "bell" | "bell-active" | "bell-active-fill" | "bell-off" | "discussion-circle" | "discussion-square" | "heart" | "heart-fill" | "heart-off" | "mail" | "mail-open" | "message-circle" | "message-circle-fill" | "message-square" | "message-square-fill" | "mic" | "mic-off" | "newspaper" | "phone" | "phone-call" | "phone-off" | "send" | "star" | "star-circle" | "star-fill" | "star-off" | "thumbs-down" | "thumbs-up" | "video" | "video-off" | "bank-vault" | "briefcase" | "credit-card" | "dollar-sign" | "enterprise" | "globe" | "globe-private" | "org" | "provider" | "shopping-bag" | "shopping-cart" | "arrow-down" | "arrow-down-circle" | "arrow-down-left" | "arrow-down-right" | "arrow-left" | "arrow-left-circle" | "arrow-right" | "arrow-right-circle" | "arrow-up" | "arrow-up-circle" | "arrow-up-left" | "arrow-up-right" | "caret" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "chevrons-down" | "chevrons-left" | "chevrons-right" | "chevrons-up" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "load-balancer" | "migrate" | "move" | "shuffle" | "swap-horizontal" | "swap-vertical"; + get icon(): "service" | "loading" | "loading-static" | "running" | "running-static" | "apple" | "apple-color" | "alibaba" | "alibaba-color" | "amazon-ecs" | "amazon-ecs-color" | "amazon-eks" | "amazon-eks-color" | "auth0" | "auth0-color" | "aws" | "aws-color" | "aws-cdk" | "aws-cdk-color" | "aws-cloudwatch" | "aws-cloudwatch-color" | "aws-ec2" | "aws-ec2-color" | "aws-lambda" | "aws-lambda-color" | "aws-s3" | "aws-s3-color" | "azure" | "azure-color" | "azure-aks" | "azure-aks-color" | "azure-blob-storage" | "azure-blob-storage-color" | "azure-devops" | "azure-devops-color" | "azure-vms" | "azure-vms-color" | "bitbucket" | "bitbucket-color" | "bridgecrew" | "bridgecrew-color" | "cisco" | "cisco-color" | "codepen" | "codepen-color" | "confluence" | "confluence-color" | "confluent" | "confluent-color" | "datadog" | "datadog-color" | "digital-ocean" | "digital-ocean-color" | "docker" | "docker-color" | "duo-color" | "duo" | "elastic-observability" | "elastic-observability-color" | "f5" | "f5-color" | "facebook" | "facebook-color" | "figma" | "figma-color" | "gcp" | "gcp-color" | "git" | "git-color" | "gitlab" | "gitlab-color" | "github" | "github-color" | "google" | "google-color" | "google-docs" | "google-docs-color" | "google-drive" | "google-drive-color" | "google-forms" | "google-forms-color" | "google-sheets" | "google-sheets-color" | "google-slides" | "google-slides-color" | "grafana" | "grafana-color" | "helm" | "helm-color" | "infracost" | "infracost-color" | "jfrog" | "jfrog-color" | "jira" | "jira-color" | "jwt" | "jwt-color" | "kubernetes" | "kubernetes-color" | "lightlytics" | "lightlytics-color" | "linkedin" | "linkedin-color" | "linode" | "linode-color" | "linux" | "linux-color" | "loom" | "loom-color" | "meetup" | "meetup-color" | "microsoft" | "microsoft-color" | "microsoft-teams" | "microsoft-teams-color" | "minio" | "minio-color" | "mongodb" | "mongodb-color" | "new-relic" | "new-relic-color" | "okta" | "okta-color" | "oracle" | "oracle-color" | "opa" | "opa-color" | "openid" | "openid-color" | "pack" | "pack-color" | "pager-duty" | "pager-duty-color" | "ping-identity " | "ping-identity-color" | "postgres" | "postgres-color" | "rabbitmq" | "rabbitmq-color" | "saml" | "saml-color" | "service-now" | "service-now-color" | "slack" | "slack-color" | "snyk" | "snyk-color" | "splunk" | "splunk-color" | "twilio" | "twilio-color" | "twitch" | "twitch-color" | "twitter" | "twitter-color" | "twitter-x" | "twitter-x-color" | "vantage" | "vantage-color" | "venafi" | "venafi-color" | "vercel" | "vercel-color" | "vmware" | "vmware-color" | "youtube" | "youtube-color" | "boundary" | "boundary-color" | "boundary-fill" | "boundary-fill-color" | "boundary-square" | "boundary-square-color" | "consul" | "consul-color" | "consul-fill" | "consul-fill-color" | "consul-square" | "consul-square-color" | "nomad" | "nomad-color" | "nomad-fill" | "nomad-fill-color" | "nomad-square" | "nomad-square-color" | "packer" | "packer-color" | "packer-fill" | "packer-fill-color" | "packer-square" | "packer-square-color" | "terraform" | "terraform-color" | "terraform-fill" | "terraform-fill-color" | "terraform-square" | "terraform-square-color" | "vagrant" | "vagrant-color" | "vagrant-fill" | "vagrant-fill-color" | "vagrant-square" | "vagrant-square-color" | "vault" | "vault-color" | "vault-fill" | "vault-fill-color" | "vault-square" | "vault-square-color" | "vault-radar" | "vault-radar-color" | "vault-radar-fill" | "vault-radar-fill-color" | "vault-radar-square" | "vault-radar-square-color" | "vault-secrets" | "vault-secrets-color" | "vault-secrets-fill" | "vault-secrets-fill-color" | "vault-secrets-square" | "vault-secrets-square-color" | "waypoint" | "waypoint-color" | "waypoint-fill" | "waypoint-fill-color" | "waypoint-square" | "waypoint-square-color" | "hashicorp" | "hashicorp-color" | "hashicorp-fill" | "hashicorp-fill-color" | "hashicorp-square" | "hashicorp-square-color" | "hcp" | "hcp-color" | "hcp-fill" | "hcp-fill-color" | "hcp-square" | "hcp-square-color" | "accessibility" | "folder-users" | "frown" | "identity-service" | "identity-user" | "meh" | "robot" | "smile" | "user" | "user-check" | "user-circle" | "user-circle-fill" | "user-minus" | "user-plus" | "user-x" | "users" | "ampersand" | "beaker" | "bucket" | "bulb" | "circle" | "circle-dot" | "circle-fill" | "circle-half" | "diamond" | "diamond-fill" | "disc" | "dot" | "dot-half" | "droplet" | "flag" | "gift" | "government" | "handshake" | "hash" | "hexagon" | "hexagon-fill" | "labyrinth" | "layers" | "moon" | "octagon" | "outline" | "random" | "rocket" | "sparkle" | "square" | "square-fill" | "sun" | "triangle" | "triangle-fill" | "truck" | "wand" | "zap" | "zap-off" | "docs" | "docs-download" | "docs-link" | "guide" | "guide-link" | "help" | "info" | "info-fill" | "learn" | "learn-link" | "support" | "alert-circle" | "alert-circle-fill" | "alert-diamond" | "alert-diamond-fill" | "alert-octagon" | "alert-octagon-fill" | "alert-triangle" | "alert-triangle-fill" | "check" | "check-circle" | "check-circle-fill" | "check-diamond" | "check-diamond-fill" | "check-hexagon" | "check-hexagon-fill" | "check-square" | "check-square-fill" | "skip" | "x" | "x-circle" | "x-circle-fill" | "x-diamond" | "x-diamond-fill" | "x-hexagon" | "x-hexagon-fill" | "x-square" | "x-square-fill" | "bug" | "certificate" | "eye" | "eye-off" | "fingerprint" | "key" | "keychain" | "lock" | "lock-fill" | "lock-off" | "shield" | "shield-alert" | "shield-check" | "shield-off" | "shield-x" | "token" | "unlock" | "verified" | "wall" | "minus" | "minus-circle" | "minus-circle-fill" | "minus-plus" | "minus-plus-circle" | "minus-plus-square" | "minus-square" | "minus-square-fill" | "plus" | "plus-circle" | "plus-circle-fill" | "plus-square" | "camera" | "camera-off" | "cast" | "closed-caption" | "fast-forward" | "film" | "headphones" | "image" | "music" | "pause" | "pause-circle" | "play" | "play-circle" | "radio" | "rewind" | "rss" | "skip-back" | "skip-forward" | "speaker" | "stop-circle" | "volume" | "volume-down" | "volume-2" | "volume-x" | "wifi" | "wifi-off" | "compass" | "crosshair" | "map" | "map-pin" | "navigation" | "navigation-alt" | "redirect" | "target" | "align-center" | "align-justify" | "align-left" | "align-right" | "battery" | "battery-charging" | "bookmark" | "bookmark-add" | "bookmark-add-fill" | "bookmark-fill" | "bookmark-remove" | "bookmark-remove-fill" | "bottom" | "command" | "crop" | "dashboard" | "delete" | "download" | "edit" | "entry-point" | "exit-point" | "external-link" | "filter" | "filter-circle" | "filter-fill" | "grid" | "grid-alt" | "home" | "jump-link" | "layout" | "link" | "list" | "maximize" | "maximize-alt" | "menu" | "minimize" | "minimize-alt" | "more-horizontal" | "more-vertical" | "mouse-pointer" | "paperclip" | "pen-tool" | "pencil-tool" | "pin" | "power" | "printer" | "reload" | "repeat" | "rotate-cw" | "rotate-ccw" | "search" | "share" | "sidebar" | "sidebar-hide" | "sidebar-show" | "sign-in" | "sign-out" | "slash" | "slash-square" | "sort-asc" | "sort-desc" | "switcher" | "sync" | "sync-alert" | "sync-reverse" | "tag" | "toggle-left" | "toggle-right" | "top" | "trash" | "type" | "unfold-close" | "unfold-open" | "upload" | "zoom-in" | "zoom-out" | "archive" | "clipboard" | "clipboard-checked" | "clipboard-copy" | "clipboard-x" | "file" | "file-change" | "file-check" | "file-diff" | "file-minus" | "file-plus" | "file-source" | "file-text" | "file-x" | "files" | "folder" | "folder-fill" | "folder-minus" | "folder-minus-fill" | "folder-plus" | "folder-plus-fill" | "folder-star" | "inbox" | "api" | "auto-apply" | "build" | "change" | "change-circle" | "change-square" | "channel" | "cloud" | "cloud-check" | "cloud-download" | "cloud-lightning" | "cloud-lock" | "cloud-off" | "cloud-upload" | "cloud-x" | "code" | "connection" | "connection-gateway" | "cpu" | "duplicate" | "gateway" | "git-branch" | "git-commit" | "git-merge" | "git-pull-request" | "git-repo" | "hammer" | "key-values" | "mainframe" | "mesh" | "module" | "monitor" | "network" | "network-alt" | "node" | "path" | "pipeline" | "plug" | "replication-direct" | "replication-perf" | "scissors" | "server" | "server-cluster" | "serverless" | "settings" | "sliders" | "smartphone" | "socket" | "step" | "tablet" | "terminal" | "terminal-screen" | "test" | "tools" | "transform-data" | "tv" | "webhook" | "wrench" | "calendar" | "clock" | "clock-filled" | "delay" | "event" | "history" | "hourglass" | "watch" | "bar-chart" | "bar-chart-alt" | "box" | "collections" | "database" | "hard-drive" | "line-chart" | "line-chart-up" | "logs" | "package" | "pie-chart" | "queue" | "save" | "trend-down" | "trend-up" | "activity" | "at-sign" | "award" | "bell" | "bell-active" | "bell-active-fill" | "bell-off" | "discussion-circle" | "discussion-square" | "heart" | "heart-fill" | "heart-off" | "mail" | "mail-open" | "message-circle" | "message-circle-fill" | "message-square" | "message-square-fill" | "mic" | "mic-off" | "newspaper" | "phone" | "phone-call" | "phone-off" | "send" | "star" | "star-circle" | "star-fill" | "star-off" | "thumbs-down" | "thumbs-up" | "video" | "video-off" | "bank-vault" | "briefcase" | "credit-card" | "dollar-sign" | "enterprise" | "globe" | "globe-private" | "org" | "provider" | "shopping-bag" | "shopping-cart" | "arrow-down" | "arrow-down-circle" | "arrow-down-left" | "arrow-down-right" | "arrow-left" | "arrow-left-circle" | "arrow-right" | "arrow-right-circle" | "arrow-up" | "arrow-up-circle" | "arrow-up-left" | "arrow-up-right" | "caret" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "chevrons-down" | "chevrons-left" | "chevrons-right" | "chevrons-up" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "load-balancer" | "migrate" | "move" | "shuffle" | "swap-horizontal" | "swap-vertical"; get link(): string | undefined; } //# sourceMappingURL=counter.d.ts.map \ No newline at end of file diff --git a/ui/vault-reporting/declarations/components/vault-reporting/dashboard/export.d.ts b/ui/vault-reporting/declarations/components/vault-reporting/dashboard/export.d.ts index 19607fa131..3d36e0ead8 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/dashboard/export.d.ts +++ b/ui/vault-reporting/declarations/components/vault-reporting/dashboard/export.d.ts @@ -4,6 +4,7 @@ */ import Component from '@glimmer/component'; import type { UsageDashboardData } from '../../../types'; +import type ReportingAnalyticsService from '../../../services/reporting-analytics'; export interface DashboardExportSignature { Args: { data?: UsageDashboardData; @@ -15,6 +16,9 @@ export interface DashboardExportSignature { } export default class DashboardExport extends Component { #private; + readonly reportingAnalytics: ReportingAnalyticsService; + handleTrackExportToggle: () => void; + handleTrackExportOption: (option: string) => void; get dataAsDownloadableJSONString(): string; get dataAsDownloadableCSVString(): string; } diff --git a/ui/vault-reporting/declarations/components/vault-reporting/dashboard/export.d.ts.map b/ui/vault-reporting/declarations/components/vault-reporting/dashboard/export.d.ts.map index 62def2a898..853aa77d1a 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/dashboard/export.d.ts.map +++ b/ui/vault-reporting/declarations/components/vault-reporting/dashboard/export.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../src/components/vault-reporting/dashboard/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAG3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,kBAAkB,CAAC;KAC3B,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;IACF,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAS,CAAC,wBAAwB,CAAC;;IAO9E,IAAI,4BAA4B,WAM/B;IAED,IAAI,2BAA2B,WA2D9B;CA2CF"} \ No newline at end of file +{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../src/components/vault-reporting/dashboard/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAK3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,yBAAyB,MAAM,uCAAuC,CAAC;AAGnF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,kBAAkB,CAAC;KAC3B,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;IACF,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAS,CAAC,wBAAwB,CAAC;;IAC9E,SAA0B,kBAAkB,EAAE,yBAAyB,CAAC;IAQxE,uBAAuB,aAErB;IAEF,uBAAuB,WAAY,MAAM,UAEvC;IAEF,IAAI,4BAA4B,WAM/B;IAED,IAAI,2BAA2B,WA2D9B;CA8CF"} \ No newline at end of file diff --git a/ui/vault-reporting/declarations/components/vault-reporting/horizontal-bar-chart.d.ts.map b/ui/vault-reporting/declarations/components/vault-reporting/horizontal-bar-chart.d.ts.map index f53420a69e..6807988d0b 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/horizontal-bar-chart.d.ts.map +++ b/ui/vault-reporting/declarations/components/vault-reporting/horizontal-bar-chart.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"horizontal-bar-chart.d.ts","sourceRoot":"","sources":["../../../src/components/vault-reporting/horizontal-bar-chart.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,6BAA6B,CAAC;AACrC,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAKL,iBAAiB,EAClB,MAAM,gDAAgD,CAAC;AAWxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4EAA4E,CAAC;AAE/H,MAAM,WAAW,uCAAuC;IACtD,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,wDAAwD;QACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gEAAgE;QAChE,QAAQ,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,gEAAgE;QAChE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gDAAgD;QAChD,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;KACjC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;QACZ;;;;;;;aAOK;QACL,KAAK,EAAE,4BAA4B,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;KAC1D,CAAC;IAEF,OAAO,EAAE,WAAW,CAAC;CACtB;AACD,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,SAAS,CAAC,uCAAuC,CAAC;IACnG,iBAAiB,SAAK;IAE/B,IAAI,OAAO,YAMV;IAED,IAAI,IAAI,kBAUP;IAED,IAAI,KAAK,WAIR;IAED,IAAI,SAAS,WAUZ;IAED,IAAI,OAAO,aAEV;IAED,IAAI,OAAO,aAEV;IAED,IAAI,WAAW,WAEd;IAED,IAAI,MAAM,aAET;IAED,IAAI,eAAe,WAElB;IAED,IAAI,qBAAqB,WAGxB;IAED,IAAI,kBAAkB,WAGrB;IAED,IAAI,WAAW,uBAId;IAED,IAAI,OAAO,uBAIV;IAED,SAAS,GAAI,OAAO,MAAM,cAExB;IAEF,gBAAgB,GAAI,aAAa,MAAM,UAErC;CAoKH"} \ No newline at end of file +{"version":3,"file":"horizontal-bar-chart.d.ts","sourceRoot":"","sources":["../../../src/components/vault-reporting/horizontal-bar-chart.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,6BAA6B,CAAC;AACrC,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAKL,iBAAiB,EAClB,MAAM,gDAAgD,CAAC;AAWxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4EAA4E,CAAC;AAE/H,MAAM,WAAW,uCAAuC;IACtD,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,wDAAwD;QACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gEAAgE;QAChE,QAAQ,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,gEAAgE;QAChE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gDAAgD;QAChD,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;KACjC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;QACZ;;;;;;;aAOK;QACL,KAAK,EAAE,4BAA4B,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;KAC1D,CAAC;IAEF,OAAO,EAAE,WAAW,CAAC;CACtB;AACD,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,SAAS,CAAC,uCAAuC,CAAC;IACnG,iBAAiB,SAAK;IAE/B,IAAI,OAAO,YAMV;IAED,IAAI,IAAI,kBAUP;IAED,IAAI,KAAK,WAIR;IAED,IAAI,SAAS,WAUZ;IAED,IAAI,OAAO,aAEV;IAED,IAAI,OAAO,aAEV;IAED,IAAI,WAAW,WAEd;IAED,IAAI,MAAM,aAET;IAED,IAAI,eAAe,WAElB;IAED,IAAI,qBAAqB,WAGxB;IAED,IAAI,kBAAkB,WAGrB;IAED,IAAI,WAAW,uBAId;IAED,IAAI,OAAO,uBAIV;IAED,SAAS,UAAW,MAAM,cAExB;IAEF,gBAAgB,gBAAiB,MAAM,UAErC;CAoKH"} \ No newline at end of file diff --git a/ui/vault-reporting/declarations/components/vault-reporting/views/dashboard.d.ts b/ui/vault-reporting/declarations/components/vault-reporting/views/dashboard.d.ts index d151731436..bf77f845d5 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/views/dashboard.d.ts +++ b/ui/vault-reporting/declarations/components/vault-reporting/views/dashboard.d.ts @@ -6,6 +6,7 @@ import Component from '@glimmer/component'; import './dashboard.scss'; import type { UsageDashboardData, SimpleDatum, getUsageDataFunction } from '../../../types'; import type { IconName } from '@hashicorp/flight-icons/svg'; +import type ReportingAnalyticsService from '../../../services/reporting-analytics'; interface CounterBlock { title: string; tooltipMessage: string; @@ -27,11 +28,15 @@ export interface SSUViewDashboardSignature { Element: HTMLElement; } export default class SSUViewDashboard extends Component { + readonly reportingAnalytics: ReportingAnalyticsService; data?: UsageDashboardData; lastUpdatedTime: string; error?: unknown; constructor(owner: unknown, args: SSUViewDashboardSignature['Args']); fetchAllData: () => void; + handleTrackAnalyticsEvent: (eventName: string, properties?: object, options?: object) => void; + handleTrackSurveyLink: () => void; + handleRefresh: () => void; getBarChartData: (map: Record, exclude?: string[]) => SimpleDatum[]; get isVaultDedicated(): boolean; get kvSecretsTooltipMessage(): string; diff --git a/ui/vault-reporting/declarations/components/vault-reporting/views/dashboard.d.ts.map b/ui/vault-reporting/declarations/components/vault-reporting/views/dashboard.d.ts.map index b3c3579af7..af73d35d67 100644 --- a/ui/vault-reporting/declarations/components/vault-reporting/views/dashboard.d.ts.map +++ b/ui/vault-reporting/declarations/components/vault-reporting/views/dashboard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/components/vault-reporting/views/dashboard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,kBAAkB,CAAC;AAO1B,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAU5D,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE;QACJ,gBAAgB,EAAE,oBAAoB,CAAC;QACvC,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;IAEF,OAAO,EAAE,WAAW,CAAC;CACtB;AACD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,SAAS,CAAC,yBAAyB,CAAC;IAEhF,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAG1B,eAAe,EAAE,MAAM,CAAM;IAG7B,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEJ,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC;IAKnE,YAAY,EAAE,MAAM,IAAI,CAUtB;IAEF,eAAe,EAAE,CACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,KACf,WAAW,EAAE,CAWhB;IAEF,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,uBAAuB,IAAI,MAAM,CAepC;IAED,IAAI,QAAQ,IAAI,YAAY,EAAE,CAgC7B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;CAkNF"} \ No newline at end of file +{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/components/vault-reporting/views/dashboard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,kBAAkB,CAAC;AAO1B,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAU5D,OAAO,KAAK,yBAAyB,MAAM,uCAAuC,CAAC;AAGnF,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE;QACJ,gBAAgB,EAAE,oBAAoB,CAAC;QACvC,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IAEF,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,CAAC;KACb,CAAC;IAEF,OAAO,EAAE,WAAW,CAAC;CACtB;AACD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,SAAS,CAAC,yBAAyB,CAAC;IAChF,SAA0B,kBAAkB,EAAE,yBAAyB,CAAC;IAGxE,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAG1B,eAAe,EAAE,MAAM,CAAM;IAG7B,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEJ,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC;IAKnE,YAAY,EAAE,MAAM,IAAI,CAUtB;IAEF,yBAAyB,cACZ,MAAM,eACJ,MAAM,YACT,MAAM,UAGhB;IAEF,qBAAqB,EAAE,MAAM,IAAI,CAE/B;IAEF,aAAa,EAAE,MAAM,IAAI,CAGvB;IAEF,eAAe,EAAE,CACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,KACf,WAAW,EAAE,CAWhB;IAEF,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,uBAAuB,IAAI,MAAM,CAepC;IAED,IAAI,QAAQ,IAAI,YAAY,EAAE,CAgC7B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;CAoNF"} \ No newline at end of file diff --git a/ui/vault-reporting/declarations/services/reporting-analytics.d.ts b/ui/vault-reporting/declarations/services/reporting-analytics.d.ts index 54ada3f42f..c92b28ee52 100644 --- a/ui/vault-reporting/declarations/services/reporting-analytics.d.ts +++ b/ui/vault-reporting/declarations/services/reporting-analytics.d.ts @@ -3,6 +3,10 @@ * SPDX-License-Identifier: BUSL-1.1 */ import Service from '@ember/service'; +/** + * This service is used to look up the `analytics` service in the host application and track events if it exists. If it doesn't exist + * or the implementation breaks it falls back gracefully to do nothing. + */ export default class ReportingAnalytics extends Service { get analytics(): { trackEvent: (event: string, properties?: object, options?: object) => void; diff --git a/ui/vault-reporting/declarations/services/reporting-analytics.d.ts.map b/ui/vault-reporting/declarations/services/reporting-analytics.d.ts.map index a1626386e4..897b491602 100644 --- a/ui/vault-reporting/declarations/services/reporting-analytics.d.ts.map +++ b/ui/vault-reporting/declarations/services/reporting-analytics.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"reporting-analytics.d.ts","sourceRoot":"","sources":["../../src/services/reporting-analytics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,OAAO;IAGrD,IAAI,SAAS,IAEP;QACE,UAAU,EAAE,CACV,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,CAAC;KACX,GACD,SAAS,CACd;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAUhE;AAGD,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,QAAQ;QAChB,kBAAkB,EAAE,kBAAkB,CAAC;KACxC;CACF"} \ No newline at end of file +{"version":3,"file":"reporting-analytics.d.ts","sourceRoot":"","sources":["../../src/services/reporting-analytics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,OAAO;IAGrD,IAAI,SAAS,IAEP;QACE,UAAU,EAAE,CACV,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,CAAC;KACX,GACD,SAAS,CACd;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAahE;AAGD,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,QAAQ;QAChB,kBAAkB,EAAE,kBAAkB,CAAC;KACxC;CACF"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/_app_/services/reporting-analytics.js b/ui/vault-reporting/dist/_app_/services/reporting-analytics.js new file mode 100644 index 0000000000..3c148535ae --- /dev/null +++ b/ui/vault-reporting/dist/_app_/services/reporting-analytics.js @@ -0,0 +1,5 @@ +/** + * Copyright (c) HashiCorp, Inc. + */ + +export { default } from "@hashicorp/vault-reporting/services/reporting-analytics"; diff --git a/ui/vault-reporting/dist/components/vault-reporting/base/title-row.js b/ui/vault-reporting/dist/components/vault-reporting/base/title-row.js index a723b115e3..efad32f621 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/base/title-row.js +++ b/ui/vault-reporting/dist/components/vault-reporting/base/title-row.js @@ -1,13 +1,20 @@ import Component from '@glimmer/component'; import { HdsTextBody, HdsLinkStandalone, HdsTextDisplay } from '@hashicorp/design-system-components/components'; +import { on } from '@ember/modifier'; +import { service } from '@ember/service'; import { precompileTemplate } from '@ember/template-compilation'; import { setComponentTemplate } from '@ember/component'; +import { g, i } from 'decorator-transforms/runtime'; /** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: BUSL-1.1 */ class TitleRow extends Component { + static { + g(this.prototype, "reportingAnalytics", [service]); + } + #reportingAnalytics = (i(this, "reportingAnalytics"), void 0); get hasLink() { return this.args.linkUrl; } @@ -23,12 +30,20 @@ class TitleRow extends Component { get linkTarget() { return this.args.linkTarget || '_self'; } + handleLinkClick = () => { + this.reportingAnalytics.trackEvent(`card_link`, { + card: this.args.title, + link: this.linkText, + target: this.linkTarget + }); + }; static { - setComponentTemplate(precompileTemplate("\n
\n
\n \n {{@title}}\n \n\n {{#if this.hasLink}}\n \n {{/if}}\n
\n\n {{#if @description}}\n \n {{@description}}\n \n {{/if}}\n
\n ", { + setComponentTemplate(precompileTemplate("\n
\n
\n \n {{@title}}\n \n\n {{#if this.hasLink}}\n \n {{/if}}\n
\n\n {{#if @description}}\n \n {{@description}}\n \n {{/if}}\n
\n ", { strictMode: true, scope: () => ({ HdsTextDisplay, HdsLinkStandalone, + on, HdsTextBody }) }), this); diff --git a/ui/vault-reporting/dist/components/vault-reporting/base/title-row.js.map b/ui/vault-reporting/dist/components/vault-reporting/base/title-row.js.map index d17d55b8c5..13db51b5be 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/base/title-row.js.map +++ b/ui/vault-reporting/dist/components/vault-reporting/base/title-row.js.map @@ -1 +1 @@ -{"version":3,"file":"title-row.js","sources":["../../../../src/components/vault-reporting/base/title-row.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport {\n HdsTextDisplay,\n HdsTextBody,\n HdsLinkStandalone,\n} from '@hashicorp/design-system-components/components';\nimport './title-row.scss';\nimport type { SafeString } from '@ember/template';\n\n/**\n * TitleRow Component\n *\n * A reusable component that displays a title with an optional description and link.\n * Used in dashboard cards to create consistent header styling.\n */\nexport interface TitleRowSignature {\n Args: {\n /** The main title text to display */\n title: string;\n /** Optional description text to display beneath the title */\n description?: string | SafeString;\n /** Custom text for the link (defaults to \"View all\") */\n linkText?: string;\n /** Icon to display with the link (defaults to \"arrow-right\") */\n linkIcon?: HdsLinkStandalone['icon'];\n /** URL for the link - if not provided, no link will be shown */\n linkUrl?: string;\n /** Target for the link - defaults to \"_self\" */\n linkTarget?: '_blank' | '_self';\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\n\nexport default class TitleRow extends Component {\n get hasLink() {\n return this.args.linkUrl;\n }\n\n get linkText() {\n return this.args.linkText || 'View all';\n }\n\n get linkUrl() {\n return this.args.linkUrl || '#';\n }\n\n get linkIcon() {\n return this.args.linkIcon || 'arrow-right';\n }\n\n get linkTarget() {\n return this.args.linkTarget || '_self';\n }\n\n \n}\n"],"names":["TitleRow","Component","hasLink","args","linkUrl","linkText","linkIcon","linkTarget","setComponentTemplate","precompileTemplate","strictMode","scope","HdsTextDisplay","HdsLinkStandalone","HdsTextBody"],"mappings":";;;;;AAAA;;;AAGC;AAwCc,MAAMA,iBAAiBC,SAAU,CAAA;EAC9C,IAAIC,OAAUA,GAAA;AACZ,IAAA,OAAO,IAAI,CAACC,IAAI,CAACC,OAAO;AAC1B;EAEA,IAAIC,QAAWA,GAAA;AACb,IAAA,OAAO,IAAI,CAACF,IAAI,CAACE,QAAQ,IAAI,UAAA;AAC/B;EAEA,IAAID,OAAUA,GAAA;AACZ,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,OAAO,IAAI,GAAA;AAC9B;EAEA,IAAIE,QAAWA,GAAA;AACb,IAAA,OAAO,IAAI,CAACH,IAAI,CAACG,QAAQ,IAAI,aAAA;AAC/B;EAEA,IAAIC,UAAaA,GAAA;AACf,IAAA,OAAO,IAAI,CAACJ,IAAI,CAACI,UAAU,IAAI,OAAA;AACjC;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CA6BA,4uBAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,cAAA;QAAAC,iBAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file +{"version":3,"file":"title-row.js","sources":["../../../../src/components/vault-reporting/base/title-row.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport {\n HdsTextDisplay,\n HdsTextBody,\n HdsLinkStandalone,\n} from '@hashicorp/design-system-components/components';\nimport './title-row.scss';\nimport { on } from '@ember/modifier';\n\nimport { service } from '@ember/service';\nimport type ReportingAnalyticsService from '../../../services/reporting-analytics';\nimport type { SafeString } from '@ember/template';\n\n/**\n * TitleRow Component\n *\n * A reusable component that displays a title with an optional description and link.\n * Used in dashboard cards to create consistent header styling.\n */\nexport interface TitleRowSignature {\n Args: {\n /** The main title text to display */\n title: string;\n /** Optional description text to display beneath the title */\n description?: string | SafeString;\n /** Custom text for the link (defaults to \"View all\") */\n linkText?: string;\n /** Icon to display with the link (defaults to \"arrow-right\") */\n linkIcon?: HdsLinkStandalone['icon'];\n /** URL for the link - if not provided, no link will be shown */\n linkUrl?: string;\n /** Target for the link - defaults to \"_self\" */\n linkTarget?: '_blank' | '_self';\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\n\nexport default class TitleRow extends Component {\n @service declare readonly reportingAnalytics: ReportingAnalyticsService;\n\n get hasLink() {\n return this.args.linkUrl;\n }\n\n get linkText() {\n return this.args.linkText || 'View all';\n }\n\n get linkUrl() {\n return this.args.linkUrl || '#';\n }\n\n get linkIcon() {\n return this.args.linkIcon || 'arrow-right';\n }\n\n get linkTarget() {\n return this.args.linkTarget || '_self';\n }\n\n handleLinkClick = () => {\n this.reportingAnalytics.trackEvent(`card_link`, {\n card: this.args.title,\n link: this.linkText,\n target: this.linkTarget,\n });\n };\n\n \n}\n"],"names":["TitleRow","Component","g","prototype","service","i","void 0","hasLink","args","linkUrl","linkText","linkIcon","linkTarget","handleLinkClick","reportingAnalytics","trackEvent","card","title","link","target","setComponentTemplate","precompileTemplate","strictMode","scope","HdsTextDisplay","HdsLinkStandalone","on","HdsTextBody"],"mappings":";;;;;;;;AAAA;;;AAGC;AA4Cc,MAAMA,iBAAiBC,SAAU,CAAA;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,oBAAA,EAAA,CAC7CC,OAAA,CAAA,CAAA;AAAA;AAAA,EAAA,mBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,oBAAA,CAAA,EAAAC,MAAA;EAED,IAAIC,OAAUA,GAAA;AACZ,IAAA,OAAO,IAAI,CAACC,IAAI,CAACC,OAAO;AAC1B;EAEA,IAAIC,QAAWA,GAAA;AACb,IAAA,OAAO,IAAI,CAACF,IAAI,CAACE,QAAQ,IAAI,UAAA;AAC/B;EAEA,IAAID,OAAUA,GAAA;AACZ,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,OAAO,IAAI,GAAA;AAC9B;EAEA,IAAIE,QAAWA,GAAA;AACb,IAAA,OAAO,IAAI,CAACH,IAAI,CAACG,QAAQ,IAAI,aAAA;AAC/B;EAEA,IAAIC,UAAaA,GAAA;AACf,IAAA,OAAO,IAAI,CAACJ,IAAI,CAACI,UAAU,IAAI,OAAA;AACjC;EAEAC,eAAkB,GAAAA,MAAA;AAChB,IAAA,IAAI,CAACC,kBAAkB,CAACC,UAAU,CAAC,WAAW,EAAE;AAC9CC,MAAAA,IAAA,EAAM,IAAI,CAACR,IAAI,CAACS,KAAK;MACrBC,IAAM,EAAA,IAAI,CAACR,QAAQ;MACnBS,MAAQ,EAAA,IAAI,CAACP;AACf,KAAA,CAAA;GACA;AAEF,EAAA;IAAAQ,oBAAA,CAAAC,kBAAA,CAoCA,k1BAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,cAAA;QAAAC,iBAAA;QAAAC,EAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/components/vault-reporting/cluster-replication.js b/ui/vault-reporting/dist/components/vault-reporting/cluster-replication.js index ef684b4154..20b4255bbf 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/cluster-replication.js +++ b/ui/vault-reporting/dist/components/vault-reporting/cluster-replication.js @@ -18,7 +18,7 @@ class ClusterReplication extends Component { } get description() { if (this.isEmpty) { - return htmlSafe('Enable replication to replicate data across clusters.'); + return htmlSafe('Enable replication to replicate data across clusters.'); } else { return 'Status of disaster recovery and performance replication.'; } @@ -51,7 +51,7 @@ class ClusterReplication extends Component { return 'replication'; } static { - setComponentTemplate(precompileTemplate("\n \n \n\n \n Disaster Recovery\n \n \n\n \n Performance\n \n \n\n \n ", { + setComponentTemplate(precompileTemplate("\n \n \n\n \n Disaster Recovery\n \n \n\n \n Performance\n \n \n\n \n ", { strictMode: true, scope: () => ({ HdsCardContainer, diff --git a/ui/vault-reporting/dist/components/vault-reporting/cluster-replication.js.map b/ui/vault-reporting/dist/components/vault-reporting/cluster-replication.js.map index e174ac3733..19304061e4 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/cluster-replication.js.map +++ b/ui/vault-reporting/dist/components/vault-reporting/cluster-replication.js.map @@ -1 +1 @@ -{"version":3,"file":"cluster-replication.js","sources":["../../../src/components/vault-reporting/cluster-replication.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport {\n HdsCardContainer,\n HdsTextBody,\n HdsBadge,\n} from '@hashicorp/design-system-components/components';\nimport TitleRow from './base/title-row.gts';\nimport { REPLICATION_ENABLED_STATE } from '../../types/index.ts';\nimport type { IconName } from '@hashicorp/flight-icons/svg';\nimport { htmlSafe } from '@ember/template';\n\nimport './cluster-replication.scss';\n\nexport interface ClusterReplicationSignature {\n Args: {\n disasterRecoveryState: REPLICATION_ENABLED_STATE | 'disabled';\n performanceState: REPLICATION_ENABLED_STATE | 'disabled';\n isVaultDedicated: boolean;\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\n\nexport default class ClusterReplication extends Component {\n getState = (state: REPLICATION_ENABLED_STATE | 'disabled' = 'disabled') => {\n return state;\n };\n\n get isEmpty() {\n return (\n this.getState(this.args.disasterRecoveryState) === 'disabled' &&\n this.getState(this.args.performanceState) === 'disabled'\n );\n }\n\n get description() {\n if (this.isEmpty) {\n return htmlSafe(\n 'Enable replication to replicate data across clusters.',\n );\n } else {\n return 'Status of disaster recovery and performance replication.';\n }\n }\n\n getIcon = (state: REPLICATION_ENABLED_STATE | 'disabled' = 'disabled') => {\n const iconMap: Record = {\n disabled: 'x',\n primary: 'check',\n secondary: 'check',\n bootstrapping: 'loading',\n };\n return iconMap[state] || iconMap['disabled'];\n };\n\n getColor = (state: REPLICATION_ENABLED_STATE | 'disabled' = 'disabled') => {\n const colorMap: Record = {\n disabled: 'neutral',\n primary: 'success',\n secondary: 'success',\n bootstrapping: 'neutral',\n };\n return colorMap[state] || colorMap['disabled'];\n };\n\n get linkUrl() {\n const { isVaultDedicated = false } = this.args;\n if (isVaultDedicated) {\n return;\n }\n return 'replication';\n }\n\n \n}\n"],"names":["ClusterReplication","Component","getState","state","isEmpty","args","disasterRecoveryState","performanceState","description","htmlSafe","getIcon","iconMap","disabled","primary","secondary","bootstrapping","getColor","colorMap","linkUrl","isVaultDedicated","setComponentTemplate","precompileTemplate","strictMode","scope","HdsCardContainer","TitleRow","HdsTextBody","HdsBadge"],"mappings":";;;;;;;AAAA;;;AAGC;AA6Bc,MAAMA,2BAA2BC,SAAU,CAAA;AACxDC,EAAAA,QAAA,GAAWA,CAACC,KAAmC,GAAa,UAAU,KAAA;AACpE,IAAA,OAAOA,KAAA;GACP;EAEF,IAAIC,OAAUA,GAAA;IACZ,OACE,IAAI,CAACF,QAAQ,CAAC,IAAI,CAACG,IAAI,CAACC,qBAAqB,CAAA,KAAM,cACnD,IAAI,CAACJ,QAAQ,CAAC,IAAI,CAACG,IAAI,CAACE,gBAAgB,CAAA,KAAM,UAChD;AACF;EAEA,IAAIC,WAAcA,GAAA;IAChB,IAAI,IAAI,CAACJ,OAAO,EAAE;MAChB,OAAOK,QACL,CAAA,8OAAA,CAAA;AAEJ,KAAO,MAAA;AACL,MAAA,OAAO,0DAAA;AACT;AACF;AAEAC,EAAAA,OAAA,GAAUA,CAACP,KAAmC,GAAa,UAAU,KAAA;AACnE,IAAA,MAAMQ,OAAoC,GAAA;AACxCC,MAAAA,QAAU,EAAA,GAAA;AACVC,MAAAA,OAAS,EAAA,OAAA;AACTC,MAAAA,SAAW,EAAA,OAAA;AACXC,MAAAA,aAAe,EAAA;KACjB;IACA,OAAOJ,OAAO,CAACR,KAAA,CAAM,IAAIQ,OAAO,CAAC,UAAW,CAAA;GAC5C;AAEFK,EAAAA,QAAA,GAAWA,CAACb,KAAmC,GAAa,UAAU,KAAA;AACpE,IAAA,MAAMc,QAA8C,GAAA;AAClDL,MAAAA,QAAU,EAAA,SAAA;AACVC,MAAAA,OAAS,EAAA,SAAA;AACTC,MAAAA,SAAW,EAAA,SAAA;AACXC,MAAAA,aAAe,EAAA;KACjB;IACA,OAAOE,QAAQ,CAACd,KAAA,CAAM,IAAIc,QAAQ,CAAC,UAAW,CAAA;GAC9C;EAEF,IAAIC,OAAUA,GAAA;IACZ,MAAM;AAAEC,MAAAA,gBAAmB,GAAA;KAAO,GAAG,IAAI,CAACd,IAAI;AAC9C,IAAA,IAAIc,gBAAkB,EAAA;AACpB,MAAA;AACF;AACA,IAAA,OAAO,aAAA;AACT;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAwCA,+iCAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,gBAAA;QAAAC,QAAA;QAAAC,WAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file +{"version":3,"file":"cluster-replication.js","sources":["../../../src/components/vault-reporting/cluster-replication.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport {\n HdsCardContainer,\n HdsTextBody,\n HdsBadge,\n} from '@hashicorp/design-system-components/components';\nimport TitleRow from './base/title-row.gts';\nimport { REPLICATION_ENABLED_STATE } from '../../types/index.ts';\nimport type { IconName } from '@hashicorp/flight-icons/svg';\nimport { htmlSafe } from '@ember/template';\n\nimport './cluster-replication.scss';\n\nexport interface ClusterReplicationSignature {\n Args: {\n disasterRecoveryState: REPLICATION_ENABLED_STATE | 'disabled';\n performanceState: REPLICATION_ENABLED_STATE | 'disabled';\n isVaultDedicated: boolean;\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\n\nexport default class ClusterReplication extends Component {\n getState = (state: REPLICATION_ENABLED_STATE | 'disabled' = 'disabled') => {\n return state;\n };\n\n get isEmpty() {\n return (\n this.getState(this.args.disasterRecoveryState) === 'disabled' &&\n this.getState(this.args.performanceState) === 'disabled'\n );\n }\n\n get description() {\n if (this.isEmpty) {\n return htmlSafe(\n 'Enable replication to replicate data across clusters.',\n );\n } else {\n return 'Status of disaster recovery and performance replication.';\n }\n }\n\n getIcon = (state: REPLICATION_ENABLED_STATE | 'disabled' = 'disabled') => {\n const iconMap: Record = {\n disabled: 'x',\n primary: 'check',\n secondary: 'check',\n bootstrapping: 'loading',\n };\n return iconMap[state] || iconMap['disabled'];\n };\n\n getColor = (state: REPLICATION_ENABLED_STATE | 'disabled' = 'disabled') => {\n const colorMap: Record = {\n disabled: 'neutral',\n primary: 'success',\n secondary: 'success',\n bootstrapping: 'neutral',\n };\n return colorMap[state] || colorMap['disabled'];\n };\n\n get linkUrl() {\n const { isVaultDedicated = false } = this.args;\n if (isVaultDedicated) {\n return;\n }\n return 'replication';\n }\n\n \n}\n"],"names":["ClusterReplication","Component","getState","state","isEmpty","args","disasterRecoveryState","performanceState","description","htmlSafe","getIcon","iconMap","disabled","primary","secondary","bootstrapping","getColor","colorMap","linkUrl","isVaultDedicated","setComponentTemplate","precompileTemplate","strictMode","scope","HdsCardContainer","TitleRow","HdsTextBody","HdsBadge"],"mappings":";;;;;;;AAAA;;;AAGC;AA6Bc,MAAMA,2BAA2BC,SAAU,CAAA;AACxDC,EAAAA,QAAA,GAAWA,CAACC,KAAmC,GAAa,UAAU,KAAA;AACpE,IAAA,OAAOA,KAAA;GACP;EAEF,IAAIC,OAAUA,GAAA;IACZ,OACE,IAAI,CAACF,QAAQ,CAAC,IAAI,CAACG,IAAI,CAACC,qBAAqB,CAAA,KAAM,cACnD,IAAI,CAACJ,QAAQ,CAAC,IAAI,CAACG,IAAI,CAACE,gBAAgB,CAAA,KAAM,UAChD;AACF;EAEA,IAAIC,WAAcA,GAAA;IAChB,IAAI,IAAI,CAACJ,OAAO,EAAE;MAChB,OAAOK,QACL,CAAA,8PAAA,CAAA;AAEJ,KAAO,MAAA;AACL,MAAA,OAAO,0DAAA;AACT;AACF;AAEAC,EAAAA,OAAA,GAAUA,CAACP,KAAmC,GAAa,UAAU,KAAA;AACnE,IAAA,MAAMQ,OAAoC,GAAA;AACxCC,MAAAA,QAAU,EAAA,GAAA;AACVC,MAAAA,OAAS,EAAA,OAAA;AACTC,MAAAA,SAAW,EAAA,OAAA;AACXC,MAAAA,aAAe,EAAA;KACjB;IACA,OAAOJ,OAAO,CAACR,KAAA,CAAM,IAAIQ,OAAO,CAAC,UAAW,CAAA;GAC5C;AAEFK,EAAAA,QAAA,GAAWA,CAACb,KAAmC,GAAa,UAAU,KAAA;AACpE,IAAA,MAAMc,QAA8C,GAAA;AAClDL,MAAAA,QAAU,EAAA,SAAA;AACVC,MAAAA,OAAS,EAAA,SAAA;AACTC,MAAAA,SAAW,EAAA,SAAA;AACXC,MAAAA,aAAe,EAAA;KACjB;IACA,OAAOE,QAAQ,CAACd,KAAA,CAAM,IAAIc,QAAQ,CAAC,UAAW,CAAA;GAC9C;EAEF,IAAIC,OAAUA,GAAA;IACZ,MAAM;AAAEC,MAAAA,gBAAmB,GAAA;KAAO,GAAG,IAAI,CAACd,IAAI;AAC9C,IAAA,IAAIc,gBAAkB,EAAA;AACpB,MAAA;AACF;AACA,IAAA,OAAO,aAAA;AACT;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CA8CA,+nCAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,gBAAA;QAAAC,QAAA;QAAAC,WAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/components/vault-reporting/counter.js b/ui/vault-reporting/dist/components/vault-reporting/counter.js index 0dbcdc54e8..e306ffebb7 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/counter.js +++ b/ui/vault-reporting/dist/components/vault-reporting/counter.js @@ -30,7 +30,7 @@ class SSUReportingCounter extends Component { return this.args.link; } static { - setComponentTemplate(precompileTemplate("\n
\n
\n {{@title}}\n {{#if @tooltipMessage}}\n \n \n \n {{/if}}\n \n
\n\n \n {{#if this.link}}\n {{this.count}}\n \n {{else}}\n {{this.count}}\n {{/if}}\n \n
\n ", { + setComponentTemplate(precompileTemplate("\n
\n
\n {{@title}}\n {{#if @tooltipMessage}}\n \n \n \n {{/if}}\n \n
\n\n \n {{#if this.link}}\n {{this.count}}\n \n {{else}}\n {{this.count}}\n {{/if}}\n \n
\n ", { strictMode: true, scope: () => ({ HdsTextBody, diff --git a/ui/vault-reporting/dist/components/vault-reporting/counter.js.map b/ui/vault-reporting/dist/components/vault-reporting/counter.js.map index 9e04bf90c0..24938f83ed 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/counter.js.map +++ b/ui/vault-reporting/dist/components/vault-reporting/counter.js.map @@ -1 +1 @@ -{"version":3,"file":"counter.js","sources":["../../../src/components/vault-reporting/counter.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport {\n HdsTextBody,\n HdsIcon,\n HdsTooltipButton,\n HdsLinkInline,\n} from '@hashicorp/design-system-components/components';\nimport type { IconName } from '@hashicorp/flight-icons/svg';\n\nimport './counter.scss';\n\nexport interface SSUReportingCounterSignature {\n Args: {\n count: number;\n title: string;\n tooltipMessage?: string;\n icon?: IconName;\n suffix?: string;\n link?: string;\n emptyText?: string;\n emptyLink?: string;\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\nexport default class SSUReportingCounter extends Component {\n get shouldShowEmptyState() {\n return this.args.count === 0 && this.args.emptyText;\n }\n\n get count() {\n if (this.shouldShowEmptyState) {\n return this.args.emptyText;\n }\n\n if (this.args.suffix) {\n return `${this.args.count} ${this.args.suffix}`;\n }\n\n return this.args.count;\n }\n\n get icon() {\n return this.args.icon || 'info';\n }\n\n get link() {\n if (this.shouldShowEmptyState && this.args.emptyLink) {\n return this.args.emptyLink;\n }\n return this.args.link;\n }\n\n \n}\n"],"names":["SSUReportingCounter","Component","shouldShowEmptyState","args","count","emptyText","suffix","icon","link","emptyLink","setComponentTemplate","precompileTemplate","strictMode","scope","HdsTextBody","HdsTooltipButton","HdsIcon","HdsLinkInline"],"mappings":";;;;;AAAA;;;AAGC;AA+Bc,MAAMA,4BAA4BC,SAAU,CAAA;EACzD,IAAIC,oBAAuBA,GAAA;AACzB,IAAA,OAAO,IAAI,CAACC,IAAI,CAACC,KAAK,KAAK,CAAA,IAAK,IAAI,CAACD,IAAI,CAACE,SAAS;AACrD;EAEA,IAAID,KAAQA,GAAA;IACV,IAAI,IAAI,CAACF,oBAAoB,EAAE;AAC7B,MAAA,OAAO,IAAI,CAACC,IAAI,CAACE,SAAS;AAC5B;AAEA,IAAA,IAAI,IAAI,CAACF,IAAI,CAACG,MAAM,EAAE;AACpB,MAAA,OAAO,CAAG,EAAA,IAAI,CAACH,IAAI,CAACC,KAAK,CAAI,CAAA,EAAA,IAAI,CAACD,IAAI,CAACG,MAAM,CAAE,CAAA;AACjD;AAEA,IAAA,OAAO,IAAI,CAACH,IAAI,CAACC,KAAK;AACxB;EAEA,IAAIG,IAAOA,GAAA;AACT,IAAA,OAAO,IAAI,CAACJ,IAAI,CAACI,IAAI,IAAI,MAAA;AAC3B;EAEA,IAAIC,IAAOA,GAAA;IACT,IAAI,IAAI,CAACN,oBAAoB,IAAI,IAAI,CAACC,IAAI,CAACM,SAAS,EAAE;AACpD,MAAA,OAAO,IAAI,CAACN,IAAI,CAACM,SAAS;AAC5B;AACA,IAAA,OAAO,IAAI,CAACN,IAAI,CAACK,IAAI;AACvB;AAEA,EAAA;IAAAE,oBAAA,CAAAC,kBAAA,CAqCA,o6BAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,WAAA;QAAAC,gBAAA;QAAAC,OAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file +{"version":3,"file":"counter.js","sources":["../../../src/components/vault-reporting/counter.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport {\n HdsTextBody,\n HdsIcon,\n HdsTooltipButton,\n HdsLinkInline,\n} from '@hashicorp/design-system-components/components';\nimport type { IconName } from '@hashicorp/flight-icons/svg';\n\nimport './counter.scss';\n\nexport interface SSUReportingCounterSignature {\n Args: {\n count: number;\n title: string;\n tooltipMessage?: string;\n icon?: IconName;\n suffix?: string;\n link?: string;\n emptyText?: string;\n emptyLink?: string;\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\nexport default class SSUReportingCounter extends Component {\n get shouldShowEmptyState() {\n return this.args.count === 0 && this.args.emptyText;\n }\n\n get count() {\n if (this.shouldShowEmptyState) {\n return this.args.emptyText;\n }\n\n if (this.args.suffix) {\n return `${this.args.count} ${this.args.suffix}`;\n }\n\n return this.args.count;\n }\n\n get icon() {\n return this.args.icon || 'info';\n }\n\n get link() {\n if (this.shouldShowEmptyState && this.args.emptyLink) {\n return this.args.emptyLink;\n }\n return this.args.link;\n }\n\n \n}\n"],"names":["SSUReportingCounter","Component","shouldShowEmptyState","args","count","emptyText","suffix","icon","link","emptyLink","setComponentTemplate","precompileTemplate","strictMode","scope","HdsTextBody","HdsTooltipButton","HdsIcon","HdsLinkInline"],"mappings":";;;;;AAAA;;;AAGC;AA+Bc,MAAMA,4BAA4BC,SAAU,CAAA;EACzD,IAAIC,oBAAuBA,GAAA;AACzB,IAAA,OAAO,IAAI,CAACC,IAAI,CAACC,KAAK,KAAK,CAAA,IAAK,IAAI,CAACD,IAAI,CAACE,SAAS;AACrD;EAEA,IAAID,KAAQA,GAAA;IACV,IAAI,IAAI,CAACF,oBAAoB,EAAE;AAC7B,MAAA,OAAO,IAAI,CAACC,IAAI,CAACE,SAAS;AAC5B;AAEA,IAAA,IAAI,IAAI,CAACF,IAAI,CAACG,MAAM,EAAE;AACpB,MAAA,OAAO,CAAG,EAAA,IAAI,CAACH,IAAI,CAACC,KAAK,CAAI,CAAA,EAAA,IAAI,CAACD,IAAI,CAACG,MAAM,CAAE,CAAA;AACjD;AAEA,IAAA,OAAO,IAAI,CAACH,IAAI,CAACC,KAAK;AACxB;EAEA,IAAIG,IAAOA,GAAA;AACT,IAAA,OAAO,IAAI,CAACJ,IAAI,CAACI,IAAI,IAAI,MAAA;AAC3B;EAEA,IAAIC,IAAOA,GAAA;IACT,IAAI,IAAI,CAACN,oBAAoB,IAAI,IAAI,CAACC,IAAI,CAACM,SAAS,EAAE;AACpD,MAAA,OAAO,IAAI,CAACN,IAAI,CAACM,SAAS;AAC5B;AACA,IAAA,OAAO,IAAI,CAACN,IAAI,CAACK,IAAI;AACvB;AAEA,EAAA;IAAAE,oBAAA,CAAAC,kBAAA,CAqCA,o8BAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,WAAA;QAAAC,gBAAA;QAAAC,OAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/components/vault-reporting/dashboard/export.js b/ui/vault-reporting/dist/components/vault-reporting/dashboard/export.js index 838618965f..bb7a2d7d36 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/dashboard/export.js +++ b/ui/vault-reporting/dist/components/vault-reporting/dashboard/export.js @@ -1,18 +1,34 @@ import Component from '@glimmer/component'; import { HdsDropdown } from '@hashicorp/design-system-components/components'; +import { on } from '@ember/modifier'; +import { fn } from '@ember/helper'; +import { service } from '@ember/service'; import { precompileTemplate } from '@ember/template-compilation'; import { setComponentTemplate } from '@ember/component'; +import { g, i } from 'decorator-transforms/runtime'; /** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: BUSL-1.1 */ class DashboardExport extends Component { + static { + g(this.prototype, "reportingAnalytics", [service]); + } + #reportingAnalytics = (i(this, "reportingAnalytics"), void 0); #getNestedRows(records, prefix = '') { return Object.entries(records).map(([key, value]) => { return [`${prefix} ${key}`, value]; }); } + handleTrackExportToggle = () => { + this.reportingAnalytics.trackEvent('export_toggle'); + }; + handleTrackExportOption = option => { + this.reportingAnalytics.trackEvent(`export_option`, { + option + }); + }; get dataAsDownloadableJSONString() { const { data @@ -37,10 +53,12 @@ class DashboardExport extends Component { return URL.createObjectURL(blob); } static { - setComponentTemplate(precompileTemplate("\n {{#if @data}}\n \n \n JSON\n CSV\n \n {{/if}}\n ", { + setComponentTemplate(precompileTemplate("\n {{#if @data}}\n \n \n JSON\n CSV\n \n {{/if}}\n ", { strictMode: true, scope: () => ({ - HdsDropdown + HdsDropdown, + on, + fn }) }), this); } diff --git a/ui/vault-reporting/dist/components/vault-reporting/dashboard/export.js.map b/ui/vault-reporting/dist/components/vault-reporting/dashboard/export.js.map index 7e024f16a8..02277d7394 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/dashboard/export.js.map +++ b/ui/vault-reporting/dist/components/vault-reporting/dashboard/export.js.map @@ -1 +1 @@ -{"version":3,"file":"export.js","sources":["../../../../src/components/vault-reporting/dashboard/export.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport { HdsDropdown } from '@hashicorp/design-system-components/components';\n\nimport type { UsageDashboardData } from '../../../types';\n\nexport interface DashboardExportSignature {\n Args: {\n data?: UsageDashboardData;\n };\n\n Blocks: {\n default: [];\n };\n Element: HTMLElement;\n}\n\nexport default class DashboardExport extends Component {\n #getNestedRows(records: Record, prefix: string = '') {\n return Object.entries(records).map(([key, value]) => {\n return [`${prefix} ${key}`, value];\n });\n }\n\n get dataAsDownloadableJSONString() {\n const { data } = this.args;\n const file = new Blob([JSON.stringify(data, null, ' ')], {\n type: 'application/json',\n });\n return URL.createObjectURL(file);\n }\n\n get dataAsDownloadableCSVString() {\n const headers = ['Metric', 'Count/Breakdown'];\n // Manually define rows as looping through the data does not leave the most legible structure\n const rows = [\n headers,\n ['Child Namespaces', this.args?.data?.namespaces || 0],\n [\n 'Total KV Secrets',\n (this.args.data?.kvv1Secrets || 0) + (this.args.data?.kvv2Secrets || 0),\n ],\n ['KV V1 Secrets', this.args.data?.kvv1Secrets || 0],\n ['KV V2 Secrets', this.args.data?.kvv2Secrets || 0],\n ['Secret Syncs', this.args.data?.secretSync?.totalDestinations || 0],\n ['PKI Roles', this.args.data?.pki?.totalRoles || 0],\n ...this.#getNestedRows(\n this.args.data?.secretEngines || {},\n 'Secret Engine',\n ),\n ...this.#getNestedRows(this.args.data?.authMethods || {}, 'Auth Method'),\n [\n 'Global Lease Count',\n this.args.data?.leaseCountQuotas.globalLeaseCountQuota.count || 0,\n ],\n [\n 'Global Lease Quota',\n this.args.data?.leaseCountQuotas.globalLeaseCountQuota.capacity || 0,\n ],\n [\n 'Cluster Disaster Recovery',\n this.args?.data?.replicationStatus.drState || '-',\n ],\n [\n 'Cluster Disaster Recovery Primary',\n this.args?.data?.replicationStatus.drPrimary ?? '-',\n ],\n [\n 'Cluster Performance',\n this.args?.data?.replicationStatus.prState || '-',\n ],\n [\n 'Cluster Performance Primary',\n this.args?.data?.replicationStatus.prPrimary ?? '-',\n ],\n ];\n // Escape double quotes, quote cell content and separate with comma\n const csvString = rows\n .map((row) =>\n row\n .map((cell) => {\n const escaped = String(cell).replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n })\n .join(','),\n )\n .join('\\r\\n');\n\n const blob = new Blob([csvString], { type: 'text/csv' });\n\n return URL.createObjectURL(blob);\n }\n\n \n}\n"],"names":["DashboardExport","Component","#getNestedRows","records","prefix","Object","entries","map","key","value","dataAsDownloadableJSONString","data","args","file","Blob","JSON","stringify","type","URL","createObjectURL","dataAsDownloadableCSVString","headers","rows","namespaces","kvv1Secrets","kvv2Secrets","secretSync","totalDestinations","pki","totalRoles","secretEngines","authMethods","leaseCountQuotas","globalLeaseCountQuota","count","capacity","replicationStatus","drState","drPrimary","prState","prPrimary","csvString","row","cell","escaped","String","replace","join","blob","setComponentTemplate","precompileTemplate","strictMode","scope","HdsDropdown"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"export.js","sources":["../../../../src/components/vault-reporting/dashboard/export.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport { HdsDropdown } from '@hashicorp/design-system-components/components';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\n\nimport type { UsageDashboardData } from '../../../types';\nimport type ReportingAnalyticsService from '../../../services/reporting-analytics';\nimport { service } from '@ember/service';\n\nexport interface DashboardExportSignature {\n Args: {\n data?: UsageDashboardData;\n };\n\n Blocks: {\n default: [];\n };\n Element: HTMLElement;\n}\n\nexport default class DashboardExport extends Component {\n @service declare readonly reportingAnalytics: ReportingAnalyticsService;\n\n #getNestedRows(records: Record, prefix: string = '') {\n return Object.entries(records).map(([key, value]) => {\n return [`${prefix} ${key}`, value];\n });\n }\n\n handleTrackExportToggle = () => {\n this.reportingAnalytics.trackEvent('export_toggle');\n };\n\n handleTrackExportOption = (option: string) => {\n this.reportingAnalytics.trackEvent(`export_option`, { option });\n };\n\n get dataAsDownloadableJSONString() {\n const { data } = this.args;\n const file = new Blob([JSON.stringify(data, null, ' ')], {\n type: 'application/json',\n });\n return URL.createObjectURL(file);\n }\n\n get dataAsDownloadableCSVString() {\n const headers = ['Metric', 'Count/Breakdown'];\n // Manually define rows as looping through the data does not leave the most legible structure\n const rows = [\n headers,\n ['Child Namespaces', this.args?.data?.namespaces || 0],\n [\n 'Total KV Secrets',\n (this.args.data?.kvv1Secrets || 0) + (this.args.data?.kvv2Secrets || 0),\n ],\n ['KV V1 Secrets', this.args.data?.kvv1Secrets || 0],\n ['KV V2 Secrets', this.args.data?.kvv2Secrets || 0],\n ['Secret Syncs', this.args.data?.secretSync?.totalDestinations || 0],\n ['PKI Roles', this.args.data?.pki?.totalRoles || 0],\n ...this.#getNestedRows(\n this.args.data?.secretEngines || {},\n 'Secret Engine',\n ),\n ...this.#getNestedRows(this.args.data?.authMethods || {}, 'Auth Method'),\n [\n 'Global Lease Count',\n this.args.data?.leaseCountQuotas.globalLeaseCountQuota.count || 0,\n ],\n [\n 'Global Lease Quota',\n this.args.data?.leaseCountQuotas.globalLeaseCountQuota.capacity || 0,\n ],\n [\n 'Cluster Disaster Recovery',\n this.args?.data?.replicationStatus.drState || '-',\n ],\n [\n 'Cluster Disaster Recovery Primary',\n this.args?.data?.replicationStatus.drPrimary ?? '-',\n ],\n [\n 'Cluster Performance',\n this.args?.data?.replicationStatus.prState || '-',\n ],\n [\n 'Cluster Performance Primary',\n this.args?.data?.replicationStatus.prPrimary ?? '-',\n ],\n ];\n // Escape double quotes, quote cell content and separate with comma\n const csvString = rows\n .map((row) =>\n row\n .map((cell) => {\n const escaped = String(cell).replace(/\"/g, '\"\"');\n return `\"${escaped}\"`;\n })\n .join(','),\n )\n .join('\\r\\n');\n\n const blob = new Blob([csvString], { type: 'text/csv' });\n\n return URL.createObjectURL(blob);\n }\n\n \n}\n"],"names":["DashboardExport","Component","g","prototype","service","i","void 0","#getNestedRows","records","prefix","Object","entries","map","key","value","handleTrackExportToggle","reportingAnalytics","trackEvent","handleTrackExportOption","option","dataAsDownloadableJSONString","data","args","file","Blob","JSON","stringify","type","URL","createObjectURL","dataAsDownloadableCSVString","headers","rows","namespaces","kvv1Secrets","kvv2Secrets","secretSync","totalDestinations","pki","totalRoles","secretEngines","authMethods","leaseCountQuotas","globalLeaseCountQuota","count","capacity","replicationStatus","drState","drPrimary","prState","prPrimary","csvString","row","cell","escaped","String","replace","join","blob","setComponentTemplate","precompileTemplate","strictMode","scope","HdsDropdown","on","fn"],"mappings":"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"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/components/vault-reporting/donut-chart.js b/ui/vault-reporting/dist/components/vault-reporting/donut-chart.js index 3248d298d8..5b4126f6df 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/donut-chart.js +++ b/ui/vault-reporting/dist/components/vault-reporting/donut-chart.js @@ -51,7 +51,7 @@ class SSUReportingDonutChart extends Component { return Math.max(computedRadius, 110); } static { - setComponentTemplate(precompileTemplate("\n \n
\n {{!-- TODO: Figure out glint errors on lineal components --}}\n {{!-- @glint-expect-error --}}\n \n \n \n {{!-- @glint-expect-error --}}\n \n {{#each pie as |slice|}}\n {{!-- @glint-expect-error --}}\n \n {{/each}}\n \n \n
\n \n {{this.total}}\n \n \n {{@title}}\n \n
\n
\n
\n
\n
\n
\n {{#each this.data as |datum|}}\n {{datum.value}} {{datum.label}} \n {{/each}}\n
\n
\n
\n ", { + setComponentTemplate(precompileTemplate("\n \n
\n {{!-- TODO: Figure out glint errors on lineal components --}}\n {{!-- @glint-expect-error --}}\n \n \n \n {{!-- @glint-expect-error --}}\n \n {{#each pie as |slice|}}\n {{!-- @glint-expect-error --}}\n \n {{/each}}\n \n \n
\n \n {{this.total}}\n \n \n {{@title}}\n \n
\n
\n
\n
\n
\n
\n {{#each this.data as |datum|}}\n {{datum.value}} {{datum.label}} \n {{/each}}\n
\n
\n
\n ", { strictMode: true, scope: () => ({ HdsCardContainer, diff --git a/ui/vault-reporting/dist/components/vault-reporting/donut-chart.js.map b/ui/vault-reporting/dist/components/vault-reporting/donut-chart.js.map index 35e12ac4a4..930c529235 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/donut-chart.js.map +++ b/ui/vault-reporting/dist/components/vault-reporting/donut-chart.js.map @@ -1 +1 @@ -{"version":3,"file":"donut-chart.js","sources":["../../../src/components/vault-reporting/donut-chart.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport './donut-chart.scss';\n\nimport Component from '@glimmer/component';\n\nimport {\n HdsCardContainer,\n HdsTextDisplay,\n} from '@hashicorp/design-system-components/components';\nimport LinealArc from '@lineal-viz/lineal/components/lineal/arc/index.js';\nimport LinealArcs from '@lineal-viz/lineal/components/lineal/arcs/index.js';\nimport LinealFluid from '@lineal-viz/lineal/components/lineal/fluid/index.js';\nimport { concat } from '@ember/helper';\n\nexport interface SSUReportingDonutChartSignature {\n Args: {\n data: { value: number; label: string }[];\n title: string;\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\nexport default class SSUReportingDonutChart extends Component {\n get data() {\n return (this.args.data || []).map((datum, index) => {\n return {\n ...datum,\n scaleIndex: index + 1,\n };\n });\n }\n\n get total() {\n return this.data.reduce((runningTotal, { value }) => {\n return runningTotal + value;\n }, 0);\n }\n\n get a11yLabel() {\n const title = `Total of ${this.total} ${this.args.title}.`;\n\n const itemsDescription = this.data\n .map(({ value, label }) => {\n return `${value} ${label}`;\n })\n .join(', ');\n\n return `${title} Comprised of ${itemsDescription}.`;\n }\n\n getOffset(width: number, height: number) {\n return `translate(${width / 2}, ${height / 2})`;\n }\n\n getInnerRadius(width: number, height: number) {\n const computedRadius = Math.min(width, height) / 2 - 50;\n // Smallest inner radius is 60 to allow for text\n return Math.max(computedRadius, 60);\n }\n\n getOuterRadius(width: number, height: number) {\n // Smallest inner radius is 60 to allow for text\n const computedRadius = Math.min(width, height) / 2;\n return Math.max(computedRadius, 110);\n }\n\n \n}\n"],"names":["SSUReportingDonutChart","Component","data","args","map","datum","index","scaleIndex","total","reduce","runningTotal","value","a11yLabel","title","itemsDescription","label","join","getOffset","width","height","getInnerRadius","computedRadius","Math","min","max","getOuterRadius","setComponentTemplate","precompileTemplate","strictMode","scope","HdsCardContainer","LinealFluid","LinealArcs","LinealArc","HdsTextDisplay","concat"],"mappings":";;;;;;;;;AAAA;;;AAGC;AA2Bc,MAAMA,+BAA+BC,SAAU,CAAA;EAC5D,IAAIC,IAAOA,GAAA;AACT,IAAA,OAAO,CAAC,IAAI,CAACC,IAAI,CAACD,IAAI,IAAI,EAAE,EAAEE,GAAG,CAAC,CAACC,KAAO,EAAAC,KAAA,KAAA;MACxC,OAAO;AACL,QAAA,GAAGD,KAAK;QACRE,UAAA,EAAYD,KAAQ,GAAA;OACtB;AACF,KAAA,CAAA;AACF;EAEA,IAAIE,KAAQA,GAAA;IACV,OAAO,IAAI,CAACN,IAAI,CAACO,MAAM,CAAC,CAACC,YAAA,EAAc;AAAEC,MAAAA;AAAO,KAAA,KAAA;MAC9C,OAAOD,YAAe,GAAAC,KAAA;KACrB,EAAA,CAAA,CAAA;AACL;EAEA,IAAIC,SAAYA,GAAA;AACd,IAAA,MAAMC,QAAQ,CAAY,SAAA,EAAA,IAAI,CAACL,KAAK,CAAI,CAAA,EAAA,IAAI,CAACL,IAAI,CAACU,KAAK,CAAG,CAAA,CAAA;IAE1D,MAAMC,gBAAmB,GAAA,IAAI,CAACZ,IAAI,CAC/BE,GAAG,CAAC,CAAC;MAAEO,KAAK;AAAEI,MAAAA;AAAO,KAAA,KAAA;AACpB,MAAA,OAAO,CAAGJ,EAAAA,KAAA,CAASI,CAAAA,EAAAA,MAAO,CAAA;AAC5B,KAAA,CAAA,CACCC,IAAI,CAAC,IAAA,CAAA;AAER,IAAA,OAAO,CAAGH,EAAAA,KAAA,CAAsBC,cAAAA,EAAAA,gBAAA,CAAmB,CAAA,CAAA;AACrD;AAEAG,EAAAA,SAAAA,CAAUC,KAAa,EAAEC,MAAc,EAAE;IACvC,OAAO,CAAA,UAAA,EAAaD,KAAQ,GAAA,CAAA,KAAMC,MAAA,GAAS,CAAE,CAAE,CAAA,CAAA;AACjD;AAEAC,EAAAA,cAAAA,CAAeF,KAAa,EAAEC,MAAc,EAAE;AAC5C,IAAA,MAAME,iBAAiBC,IAAK,CAAAC,GAAG,CAACL,KAAA,EAAOC,UAAU,CAAI,GAAA,EAAA;AACrD;AACA,IAAA,OAAOG,IAAA,CAAKE,GAAG,CAACH,cAAgB,EAAA,EAAA,CAAA;AAClC;AAEAI,EAAAA,cAAAA,CAAeP,KAAa,EAAEC,MAAc,EAAE;AAC5C;IACA,MAAME,cAAiB,GAAAC,IAAA,CAAKC,GAAG,CAACL,OAAOC,MAAU,CAAA,GAAA,CAAA;AACjD,IAAA,OAAOG,IAAA,CAAKE,GAAG,CAACH,cAAgB,EAAA,GAAA,CAAA;AAClC;AAEA,EAAA;IAAAK,oBAAA,CAAAC,kBAAA,CAoEA,4/DAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,gBAAA;QAAAC,WAAA;QAAAC,UAAA;QAAAC,SAAA;QAAAC,cAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file +{"version":3,"file":"donut-chart.js","sources":["../../../src/components/vault-reporting/donut-chart.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport './donut-chart.scss';\n\nimport Component from '@glimmer/component';\n\nimport {\n HdsCardContainer,\n HdsTextDisplay,\n} from '@hashicorp/design-system-components/components';\nimport LinealArc from '@lineal-viz/lineal/components/lineal/arc/index.js';\nimport LinealArcs from '@lineal-viz/lineal/components/lineal/arcs/index.js';\nimport LinealFluid from '@lineal-viz/lineal/components/lineal/fluid/index.js';\nimport { concat } from '@ember/helper';\n\nexport interface SSUReportingDonutChartSignature {\n Args: {\n data: { value: number; label: string }[];\n title: string;\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\nexport default class SSUReportingDonutChart extends Component {\n get data() {\n return (this.args.data || []).map((datum, index) => {\n return {\n ...datum,\n scaleIndex: index + 1,\n };\n });\n }\n\n get total() {\n return this.data.reduce((runningTotal, { value }) => {\n return runningTotal + value;\n }, 0);\n }\n\n get a11yLabel() {\n const title = `Total of ${this.total} ${this.args.title}.`;\n\n const itemsDescription = this.data\n .map(({ value, label }) => {\n return `${value} ${label}`;\n })\n .join(', ');\n\n return `${title} Comprised of ${itemsDescription}.`;\n }\n\n getOffset(width: number, height: number) {\n return `translate(${width / 2}, ${height / 2})`;\n }\n\n getInnerRadius(width: number, height: number) {\n const computedRadius = Math.min(width, height) / 2 - 50;\n // Smallest inner radius is 60 to allow for text\n return Math.max(computedRadius, 60);\n }\n\n getOuterRadius(width: number, height: number) {\n // Smallest inner radius is 60 to allow for text\n const computedRadius = Math.min(width, height) / 2;\n return Math.max(computedRadius, 110);\n }\n\n \n}\n"],"names":["SSUReportingDonutChart","Component","data","args","map","datum","index","scaleIndex","total","reduce","runningTotal","value","a11yLabel","title","itemsDescription","label","join","getOffset","width","height","getInnerRadius","computedRadius","Math","min","max","getOuterRadius","setComponentTemplate","precompileTemplate","strictMode","scope","HdsCardContainer","LinealFluid","LinealArcs","LinealArc","HdsTextDisplay","concat"],"mappings":";;;;;;;;;AAAA;;;AAGC;AA2Bc,MAAMA,+BAA+BC,SAAU,CAAA;EAC5D,IAAIC,IAAOA,GAAA;AACT,IAAA,OAAO,CAAC,IAAI,CAACC,IAAI,CAACD,IAAI,IAAI,EAAE,EAAEE,GAAG,CAAC,CAACC,KAAO,EAAAC,KAAA,KAAA;MACxC,OAAO;AACL,QAAA,GAAGD,KAAK;QACRE,UAAA,EAAYD,KAAQ,GAAA;OACtB;AACF,KAAA,CAAA;AACF;EAEA,IAAIE,KAAQA,GAAA;IACV,OAAO,IAAI,CAACN,IAAI,CAACO,MAAM,CAAC,CAACC,YAAA,EAAc;AAAEC,MAAAA;AAAO,KAAA,KAAA;MAC9C,OAAOD,YAAe,GAAAC,KAAA;KACrB,EAAA,CAAA,CAAA;AACL;EAEA,IAAIC,SAAYA,GAAA;AACd,IAAA,MAAMC,QAAQ,CAAY,SAAA,EAAA,IAAI,CAACL,KAAK,CAAI,CAAA,EAAA,IAAI,CAACL,IAAI,CAACU,KAAK,CAAG,CAAA,CAAA;IAE1D,MAAMC,gBAAmB,GAAA,IAAI,CAACZ,IAAI,CAC/BE,GAAG,CAAC,CAAC;MAAEO,KAAK;AAAEI,MAAAA;AAAO,KAAA,KAAA;AACpB,MAAA,OAAO,CAAGJ,EAAAA,KAAA,CAASI,CAAAA,EAAAA,MAAO,CAAA;AAC5B,KAAA,CAAA,CACCC,IAAI,CAAC,IAAA,CAAA;AAER,IAAA,OAAO,CAAGH,EAAAA,KAAA,CAAsBC,cAAAA,EAAAA,gBAAA,CAAmB,CAAA,CAAA;AACrD;AAEAG,EAAAA,SAAAA,CAAUC,KAAa,EAAEC,MAAc,EAAE;IACvC,OAAO,CAAA,UAAA,EAAaD,KAAQ,GAAA,CAAA,KAAMC,MAAA,GAAS,CAAE,CAAE,CAAA,CAAA;AACjD;AAEAC,EAAAA,cAAAA,CAAeF,KAAa,EAAEC,MAAc,EAAE;AAC5C,IAAA,MAAME,iBAAiBC,IAAK,CAAAC,GAAG,CAACL,KAAA,EAAOC,UAAU,CAAI,GAAA,EAAA;AACrD;AACA,IAAA,OAAOG,IAAA,CAAKE,GAAG,CAACH,cAAgB,EAAA,EAAA,CAAA;AAClC;AAEAI,EAAAA,cAAAA,CAAeP,KAAa,EAAEC,MAAc,EAAE;AAC5C;IACA,MAAME,cAAiB,GAAAC,IAAA,CAAKC,GAAG,CAACL,OAAOC,MAAU,CAAA,GAAA,CAAA;AACjD,IAAA,OAAOG,IAAA,CAAKE,GAAG,CAACH,cAAgB,EAAA,GAAA,CAAA;AAClC;AAEA,EAAA;IAAAK,oBAAA,CAAAC,kBAAA,CAoEA,4hEAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,gBAAA;QAAAC,WAAA;QAAAC,UAAA;QAAAC,SAAA;QAAAC,cAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/components/vault-reporting/global-lease.js b/ui/vault-reporting/dist/components/vault-reporting/global-lease.js index c12fe0900d..fb30e0f8a2 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/global-lease.js +++ b/ui/vault-reporting/dist/components/vault-reporting/global-lease.js @@ -45,7 +45,7 @@ class GlobalLease extends Component { } get description() { if (this.hasData) { - return htmlSafe('Total number of active leases for this quota.'); + return htmlSafe('Total number of active leases for this quota.'); } } get linkUrl() { @@ -68,7 +68,7 @@ class GlobalLease extends Component { } } static { - setComponentTemplate(precompileTemplate("\n \n \n {{#if this.hasData}}\n {{this.percentage}}%\n\n {{#if this.alert}}\n \n {{this.alert.description}}\n \n {{/if}}\n\n
\n
\n
\n
\n \n \n {{this.formattedCount}}\n \n \n
\n {{else}}\n\n \n {{#if (has-block \"empty\")}}\n {{yield A to=\"empty\"}}\n {{else}}\n \n\n \n \n \n {{/if}}\n \n {{/if}}\n\n
\n ", { + setComponentTemplate(precompileTemplate("\n \n \n {{#if this.hasData}}\n {{this.percentage}}%\n\n {{#if this.alert}}\n \n {{this.alert.description}}\n \n {{/if}}\n\n
\n
\n
\n
\n \n \n {{this.formattedCount}}\n \n \n
\n {{else}}\n\n \n {{#if (has-block \"empty\")}}\n {{yield A to=\"empty\"}}\n {{else}}\n \n\n \n \n \n {{/if}}\n \n {{/if}}\n\n
\n ", { strictMode: true, scope: () => ({ HdsCardContainer, diff --git a/ui/vault-reporting/dist/components/vault-reporting/global-lease.js.map b/ui/vault-reporting/dist/components/vault-reporting/global-lease.js.map index 810a684f7b..1a03126a8e 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/global-lease.js.map +++ b/ui/vault-reporting/dist/components/vault-reporting/global-lease.js.map @@ -1 +1 @@ -{"version":3,"file":"global-lease.js","sources":["../../../src/components/vault-reporting/global-lease.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport {\n HdsCardContainer,\n HdsTextDisplay,\n HdsApplicationState,\n HdsAlert,\n} from '@hashicorp/design-system-components/components';\nimport TitleRow from './base/title-row.gts';\n\nimport './global-lease.scss';\nimport cssCustomProperty from '../../modifiers/css-custom-property.ts';\nimport type { HdsApplicationStateSignature } from '@hashicorp/design-system-components/components/hds/application-state/index';\nimport { htmlSafe } from '@ember/template';\n\nexport interface GlobalLeaseSignature {\n Args: {\n count?: number;\n quota?: number;\n };\n\n Blocks: {\n default: [];\n /** We optionally yield application state to allow for overrides on empty state eg:\n * \n * <:empty as |A|>\n * \n * \n * \n * \n * */\n empty: HdsApplicationStateSignature['Blocks']['default'];\n };\n\n Element: HTMLElement;\n}\n\nexport default class GlobalLease extends Component {\n get percentage() {\n const { count = 0, quota = 0 } = this.args;\n\n return Math.round(Math.min((count / quota) * 100, 100));\n }\n\n get progressFillClass() {\n if (this.percentage >= 100) {\n return 'ssu-global-lease__progress-fill--exceeded';\n }\n return '';\n }\n\n get formattedCount() {\n const formatter = new Intl.NumberFormat('en-US', {\n notation: 'compact',\n compactDisplay: 'short',\n });\n\n const { count = 0, quota = 0 } = this.args;\n const formattedCount = formatter.format(count);\n const formattedTotal = formatter.format(quota);\n\n return `${formattedCount} / ${formattedTotal}`;\n }\n\n get percentageString() {\n return `${this.percentage}%`;\n }\n\n get hasData() {\n return this.args.quota && typeof this.args.quota === 'number';\n }\n\n get description() {\n if (this.hasData) {\n return htmlSafe(\n 'Total number of active leases for this quota.',\n );\n }\n }\n\n get linkUrl() {\n if (this.hasData) {\n return 'https://developer.hashicorp.com/vault/tutorials/operations/resource-quotas#global-default-lease-count-quota';\n }\n }\n\n get alert():\n | { color: 'warning' | 'neutral'; description: string }\n | undefined {\n if (this.percentage >= 100) {\n return {\n color: 'warning',\n description:\n 'Global lease quota limit reached. If lease creation is blocked, reduce usage or increase the limit.',\n };\n }\n\n if (this.percentage >= 95) {\n return {\n color: 'neutral',\n description:\n 'Approaching quota limit. Reduce usage or increase the lease limit to avoid blocking new leases.',\n };\n }\n }\n\n \n}\n"],"names":["GlobalLease","Component","percentage","count","quota","args","Math","round","min","progressFillClass","formattedCount","formatter","Intl","NumberFormat","notation","compactDisplay","format","formattedTotal","percentageString","hasData","description","htmlSafe","linkUrl","alert","color","setComponentTemplate","precompileTemplate","strictMode","scope","HdsCardContainer","cssCustomProperty","TitleRow","HdsTextDisplay","HdsAlert","HdsApplicationState"],"mappings":";;;;;;;;AAAA;;;AAGC;AAsCc,MAAMA,oBAAoBC,SAAU,CAAA;EACjD,IAAIC,UAAaA,GAAA;IACf,MAAM;AAAEC,MAAAA,KAAQ,GAAA,CAAC;AAAEC,MAAAA,KAAA,GAAQ;KAAG,GAAG,IAAI,CAACC,IAAI;AAE1C,IAAA,OAAOC,IAAA,CAAKC,KAAK,CAACD,IAAK,CAAAE,GAAG,CAAEL,KAAA,GAAQC,KAAK,GAAI,GAAK,EAAA,GAAA,CAAA,CAAA;AACpD;EAEA,IAAIK,iBAAoBA,GAAA;AACtB,IAAA,IAAI,IAAI,CAACP,UAAU,IAAI,GAAK,EAAA;AAC1B,MAAA,OAAO,2CAAA;AACT;AACA,IAAA,OAAO,EAAA;AACT;EAEA,IAAIQ,cAAiBA,GAAA;IACnB,MAAMC,SAAY,GAAA,IAAIC,IAAK,CAAAC,YAAY,CAAC,OAAS,EAAA;AAC/CC,MAAAA,QAAU,EAAA,SAAA;AACVC,MAAAA,cAAgB,EAAA;AAClB,KAAA,CAAA;IAEA,MAAM;AAAEZ,MAAAA,KAAQ,GAAA,CAAC;AAAEC,MAAAA,KAAA,GAAQ;KAAG,GAAG,IAAI,CAACC,IAAI;AAC1C,IAAA,MAAMK,cAAA,GAAiBC,SAAU,CAAAK,MAAM,CAACb,KAAA,CAAA;AACxC,IAAA,MAAMc,cAAA,GAAiBN,SAAU,CAAAK,MAAM,CAACZ,KAAA,CAAA;AAExC,IAAA,OAAO,CAAGM,EAAAA,cAAA,CAAoBO,GAAAA,EAAAA,eAAgB,CAAA;AAChD;EAEA,IAAIC,gBAAmBA,GAAA;AACrB,IAAA,OAAO,CAAG,EAAA,IAAI,CAAChB,UAAU,CAAG,CAAA,CAAA;AAC9B;EAEA,IAAIiB,OAAUA,GAAA;AACZ,IAAA,OAAO,IAAI,CAACd,IAAI,CAACD,KAAK,IAAI,OAAO,IAAI,CAACC,IAAI,CAACD,KAAK,KAAK,QAAA;AACvD;EAEA,IAAIgB,WAAcA,GAAA;IAChB,IAAI,IAAI,CAACD,OAAO,EAAE;MAChB,OAAOE,QACL,CAAA,wNAAA,CAAA;AAEJ;AACF;EAEA,IAAIC,OAAUA,GAAA;IACZ,IAAI,IAAI,CAACH,OAAO,EAAE;AAChB,MAAA,OAAO,6GAAA;AACT;AACF;EAEA,IAAII,KAAAA,GAEU;AACZ,IAAA,IAAI,IAAI,CAACrB,UAAU,IAAI,GAAK,EAAA;MAC1B,OAAO;AACLsB,QAAAA,KAAO,EAAA,SAAA;AACPJ,QAAAA,WACE,EAAA;OACJ;AACF;AAEA,IAAA,IAAI,IAAI,CAAClB,UAAU,IAAI,EAAI,EAAA;MACzB,OAAO;AACLsB,QAAAA,KAAO,EAAA,SAAA;AACPJ,QAAAA,WACE,EAAA;OACJ;AACF;AACF;AAEA,EAAA;IAAAK,oBAAA,CAAAC,kBAAA,CAqFA,kqEAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,gBAAA;QAAAC,iBAAA;QAAAC,QAAA;QAAAC,cAAA;QAAAC,QAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file +{"version":3,"file":"global-lease.js","sources":["../../../src/components/vault-reporting/global-lease.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport {\n HdsCardContainer,\n HdsTextDisplay,\n HdsApplicationState,\n HdsAlert,\n} from '@hashicorp/design-system-components/components';\nimport TitleRow from './base/title-row.gts';\n\nimport './global-lease.scss';\nimport cssCustomProperty from '../../modifiers/css-custom-property.ts';\nimport type { HdsApplicationStateSignature } from '@hashicorp/design-system-components/components/hds/application-state/index';\nimport { htmlSafe } from '@ember/template';\n\nexport interface GlobalLeaseSignature {\n Args: {\n count?: number;\n quota?: number;\n };\n\n Blocks: {\n default: [];\n /** We optionally yield application state to allow for overrides on empty state eg:\n * \n * <:empty as |A|>\n * \n * \n * \n * \n * */\n empty: HdsApplicationStateSignature['Blocks']['default'];\n };\n\n Element: HTMLElement;\n}\n\nexport default class GlobalLease extends Component {\n get percentage() {\n const { count = 0, quota = 0 } = this.args;\n\n return Math.round(Math.min((count / quota) * 100, 100));\n }\n\n get progressFillClass() {\n if (this.percentage >= 100) {\n return 'ssu-global-lease__progress-fill--exceeded';\n }\n return '';\n }\n\n get formattedCount() {\n const formatter = new Intl.NumberFormat('en-US', {\n notation: 'compact',\n compactDisplay: 'short',\n });\n\n const { count = 0, quota = 0 } = this.args;\n const formattedCount = formatter.format(count);\n const formattedTotal = formatter.format(quota);\n\n return `${formattedCount} / ${formattedTotal}`;\n }\n\n get percentageString() {\n return `${this.percentage}%`;\n }\n\n get hasData() {\n return this.args.quota && typeof this.args.quota === 'number';\n }\n\n get description() {\n if (this.hasData) {\n return htmlSafe(\n 'Total number of active leases for this quota.',\n );\n }\n }\n\n get linkUrl() {\n if (this.hasData) {\n return 'https://developer.hashicorp.com/vault/tutorials/operations/resource-quotas#global-default-lease-count-quota';\n }\n }\n\n get alert():\n | { color: 'warning' | 'neutral'; description: string }\n | undefined {\n if (this.percentage >= 100) {\n return {\n color: 'warning',\n description:\n 'Global lease quota limit reached. If lease creation is blocked, reduce usage or increase the limit.',\n };\n }\n\n if (this.percentage >= 95) {\n return {\n color: 'neutral',\n description:\n 'Approaching quota limit. Reduce usage or increase the lease limit to avoid blocking new leases.',\n };\n }\n }\n\n \n}\n"],"names":["GlobalLease","Component","percentage","count","quota","args","Math","round","min","progressFillClass","formattedCount","formatter","Intl","NumberFormat","notation","compactDisplay","format","formattedTotal","percentageString","hasData","description","htmlSafe","linkUrl","alert","color","setComponentTemplate","precompileTemplate","strictMode","scope","HdsCardContainer","cssCustomProperty","TitleRow","HdsTextDisplay","HdsAlert","HdsApplicationState"],"mappings":";;;;;;;;AAAA;;;AAGC;AAsCc,MAAMA,oBAAoBC,SAAU,CAAA;EACjD,IAAIC,UAAaA,GAAA;IACf,MAAM;AAAEC,MAAAA,KAAQ,GAAA,CAAC;AAAEC,MAAAA,KAAA,GAAQ;KAAG,GAAG,IAAI,CAACC,IAAI;AAE1C,IAAA,OAAOC,IAAA,CAAKC,KAAK,CAACD,IAAK,CAAAE,GAAG,CAAEL,KAAA,GAAQC,KAAK,GAAI,GAAK,EAAA,GAAA,CAAA,CAAA;AACpD;EAEA,IAAIK,iBAAoBA,GAAA;AACtB,IAAA,IAAI,IAAI,CAACP,UAAU,IAAI,GAAK,EAAA;AAC1B,MAAA,OAAO,2CAAA;AACT;AACA,IAAA,OAAO,EAAA;AACT;EAEA,IAAIQ,cAAiBA,GAAA;IACnB,MAAMC,SAAY,GAAA,IAAIC,IAAK,CAAAC,YAAY,CAAC,OAAS,EAAA;AAC/CC,MAAAA,QAAU,EAAA,SAAA;AACVC,MAAAA,cAAgB,EAAA;AAClB,KAAA,CAAA;IAEA,MAAM;AAAEZ,MAAAA,KAAQ,GAAA,CAAC;AAAEC,MAAAA,KAAA,GAAQ;KAAG,GAAG,IAAI,CAACC,IAAI;AAC1C,IAAA,MAAMK,cAAA,GAAiBC,SAAU,CAAAK,MAAM,CAACb,KAAA,CAAA;AACxC,IAAA,MAAMc,cAAA,GAAiBN,SAAU,CAAAK,MAAM,CAACZ,KAAA,CAAA;AAExC,IAAA,OAAO,CAAGM,EAAAA,cAAA,CAAoBO,GAAAA,EAAAA,eAAgB,CAAA;AAChD;EAEA,IAAIC,gBAAmBA,GAAA;AACrB,IAAA,OAAO,CAAG,EAAA,IAAI,CAAChB,UAAU,CAAG,CAAA,CAAA;AAC9B;EAEA,IAAIiB,OAAUA,GAAA;AACZ,IAAA,OAAO,IAAI,CAACd,IAAI,CAACD,KAAK,IAAI,OAAO,IAAI,CAACC,IAAI,CAACD,KAAK,KAAK,QAAA;AACvD;EAEA,IAAIgB,WAAcA,GAAA;IAChB,IAAI,IAAI,CAACD,OAAO,EAAE;MAChB,OAAOE,QACL,CAAA,wOAAA,CAAA;AAEJ;AACF;EAEA,IAAIC,OAAUA,GAAA;IACZ,IAAI,IAAI,CAACH,OAAO,EAAE;AAChB,MAAA,OAAO,6GAAA;AACT;AACF;EAEA,IAAII,KAAAA,GAEU;AACZ,IAAA,IAAI,IAAI,CAACrB,UAAU,IAAI,GAAK,EAAA;MAC1B,OAAO;AACLsB,QAAAA,KAAO,EAAA,SAAA;AACPJ,QAAAA,WACE,EAAA;OACJ;AACF;AAEA,IAAA,IAAI,IAAI,CAAClB,UAAU,IAAI,EAAI,EAAA;MACzB,OAAO;AACLsB,QAAAA,KAAO,EAAA,SAAA;AACPJ,QAAAA,WACE,EAAA;OACJ;AACF;AACF;AAEA,EAAA;IAAAK,oBAAA,CAAAC,kBAAA,CAqFA,kyEAAA,EAAA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,gBAAA;QAAAC,iBAAA;QAAAC,QAAA;QAAAC,cAAA;QAAAC,QAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/components/vault-reporting/horizontal-bar-chart.js b/ui/vault-reporting/dist/components/vault-reporting/horizontal-bar-chart.js index 17eea34e15..21975f07d7 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/horizontal-bar-chart.js +++ b/ui/vault-reporting/dist/components/vault-reporting/horizontal-bar-chart.js @@ -99,7 +99,7 @@ class SSUReportingHorizontalBarChart extends Component { this.xRangeOffsetWidth = offsetWidth; }; static { - setComponentTemplate(precompileTemplate("\n \n \n {{#if this.hasData}}\n {{!-- TODO: Figure out glint errors on lineal components --}}\n {{!-- @glint-expect-error --}}\n \n \n {{!-- We are using the stacked version of the HBars as there seems to be an issue in the non-stacked version for how the x position is calculated. --}}\n {{#let (scaleLinear range=(this.getXRange width) domain=this.xDomain) (scaleBand range=this.yRange domain=this.yDomain) (stackH data=this.data x=\"value\" y=\"label\" z=\"\") as |xScale yScale stacked|}}\n {{#if xScale.isValid}}\n \n {{!-- TODO: Extra wrapper exists only for test attribute, figure out a better way --}}\n \n \n \n \n {{!-- @glint-expect-error --}}\n {{#each stacked.data as |dataset|}}\n {{#each dataset as |datum|}}\n \n {{datum.x}}\n \n {{/each}}\n {{/each}}\n \n {{/if}}\n {{/let}}\n \n \n \n \n Total:\n {{this.total}}\n \n {{else}}\n\n \n {{#if (has-block \"empty\")}}\n {{yield A to=\"empty\"}}\n {{else}}\n \n \n {{#if @linkUrl}}\n \n \n \n {{/if}}\n {{/if}}\n \n {{/if}}\n \n ", { + setComponentTemplate(precompileTemplate("\n \n \n {{#if this.hasData}}\n {{!-- TODO: Figure out glint errors on lineal components --}}\n {{!-- @glint-expect-error --}}\n \n \n {{!-- We are using the stacked version of the HBars as there seems to be an issue in the non-stacked version for how the x position is calculated. --}}\n {{#let (scaleLinear range=(this.getXRange width) domain=this.xDomain) (scaleBand range=this.yRange domain=this.yDomain) (stackH data=this.data x=\"value\" y=\"label\" z=\"\") as |xScale yScale stacked|}}\n {{#if xScale.isValid}}\n \n {{!-- TODO: Extra wrapper exists only for test attribute, figure out a better way --}}\n \n \n \n \n {{!-- @glint-expect-error --}}\n {{#each stacked.data as |dataset|}}\n {{#each dataset as |datum|}}\n \n {{datum.x}}\n \n {{/each}}\n {{/each}}\n \n {{/if}}\n {{/let}}\n \n \n \n \n Total:\n {{this.total}}\n \n {{else}}\n\n \n {{#if (has-block \"empty\")}}\n {{yield A to=\"empty\"}}\n {{else}}\n \n \n {{#if @linkUrl}}\n \n \n \n {{/if}}\n {{/if}}\n \n {{/if}}\n \n ", { strictMode: true, scope: () => ({ HdsCardContainer, diff --git a/ui/vault-reporting/dist/components/vault-reporting/horizontal-bar-chart.js.map b/ui/vault-reporting/dist/components/vault-reporting/horizontal-bar-chart.js.map index 37dba9ab59..2c2af9528d 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/horizontal-bar-chart.js.map +++ b/ui/vault-reporting/dist/components/vault-reporting/horizontal-bar-chart.js.map @@ -1 +1 @@ -{"version":3,"file":"horizontal-bar-chart.js","sources":["../../../src/components/vault-reporting/horizontal-bar-chart.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport './horizontal-bar-chart.scss';\nimport Component from '@glimmer/component';\n\nimport {\n HdsCardContainer,\n HdsSeparator,\n HdsTextBody,\n HdsApplicationState,\n HdsLinkStandalone,\n} from '@hashicorp/design-system-components/components';\nimport TitleRow from './base/title-row.gts';\n\nimport LinealFluid from '@lineal-viz/lineal/components/lineal/fluid/index.js';\nimport LinealHBars from '@lineal-viz/lineal/components/lineal/h-bars/index.js';\nimport scaleLinear from '@lineal-viz/lineal/helpers/scale-linear.js';\nimport scaleBand from '@lineal-viz/lineal/helpers/scale-band.js';\nimport stackH from '@lineal-viz/lineal/helpers/stack-h.js';\nimport LinealAxis from '@lineal-viz/lineal/components/lineal/axis/index.js';\nimport axisOffset from '../../modifiers/axis-offset.ts';\nimport { tracked } from '@glimmer/tracking';\nimport type { SimpleDatum } from '../../types/index.ts';\nimport type { HdsApplicationStateSignature } from '@hashicorp/design-system-components/components/hds/application-state/index';\n\nexport interface SSUReportingHorizontalBarChartSignature {\n Args: {\n data: SimpleDatum[];\n title: string;\n description?: string;\n /** Custom text for the link (defaults to \"View all\") */\n linkText?: string;\n /** Icon to display with the link (defaults to \"arrow-right\") */\n linkIcon?: HdsLinkStandalone['icon'];\n /** URL for the link - if not provided, no link will be shown */\n linkUrl?: string;\n /** Target for the link - defaults to \"_self\" */\n linkTarget?: '_blank' | '_self';\n };\n Blocks: {\n default: [];\n /** We optionally yield application state to allow for overrides on empty state eg:\n * \n * <:empty as |A|>\n * \n * \n * \n * \n * */\n empty: HdsApplicationStateSignature['Blocks']['default'];\n };\n\n Element: HTMLElement;\n}\nexport default class SSUReportingHorizontalBarChart extends Component {\n @tracked xRangeOffsetWidth = 0;\n\n get hasData() {\n return (\n this.args.data &&\n Array.isArray(this.args.data) &&\n this.args.data.length > 0\n );\n }\n\n get data() {\n if (!this.hasData) {\n return [];\n }\n // Filtering DESC for now per designs, could make configurable if needed\n return this.args.data\n .filter(({ value }) => value !== 0)\n .sort((a, b) => {\n return b.value - a.value;\n });\n }\n\n get total() {\n return this.data.reduce((runningTotal, { value }) => {\n return runningTotal + value;\n }, 0);\n }\n\n get a11yLabel() {\n const title = `Total of ${this.total} ${this.args.title}.`;\n\n const itemsDescription = this.data\n .map(({ value, label }) => {\n return `${value} ${label}`;\n })\n .join(', ');\n\n return `${title} Comprised of ${itemsDescription}.`;\n }\n\n get yDomain() {\n return this.data.map(({ label }) => label);\n }\n\n get xDomain() {\n return [0, Math.max(0, ...this.data.map(({ value }) => value))];\n }\n\n get rangeHeight() {\n return this.data.length * 26;\n }\n\n get yRange() {\n return [0, this.rangeHeight];\n }\n\n get emptyStateTitle() {\n return 'None enabled';\n }\n\n get emptyStateDescription() {\n const entitiesTitle = this.args.title;\n return `${entitiesTitle} in this namespace will appear here.`;\n }\n\n get emptyStateLinkText() {\n const entities = this.args.title.toLowerCase();\n return `Enable ${entities}`;\n }\n\n get description() {\n if (this.hasData) {\n return this.args.description;\n }\n }\n\n get linkUrl() {\n if (this.hasData) {\n return this.args.linkUrl;\n }\n }\n\n getXRange = (width: number) => {\n return [0, Math.max(0, width - this.xRangeOffsetWidth - 32)];\n };\n\n handleAxisOffset = (offsetWidth: number) => {\n this.xRangeOffsetWidth = offsetWidth;\n };\n\n \n}\n"],"names":["SSUReportingHorizontalBarChart","Component","g","prototype","tracked","i","void 0","hasData","args","data","Array","isArray","length","filter","value","sort","a","b","total","reduce","runningTotal","a11yLabel","title","itemsDescription","map","label","join","yDomain","xDomain","Math","max","rangeHeight","yRange","emptyStateTitle","emptyStateDescription","entitiesTitle","emptyStateLinkText","entities","toLowerCase","description","linkUrl","getXRange","width","xRangeOffsetWidth","handleAxisOffset","offsetWidth","setComponentTemplate","precompileTemplate","strictMode","scope","HdsCardContainer","TitleRow","LinealFluid","axisOffset","scaleLinear","scaleBand","stackH","LinealAxis","LinealHBars","HdsSeparator","HdsTextBody","HdsApplicationState"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"horizontal-bar-chart.js","sources":["../../../src/components/vault-reporting/horizontal-bar-chart.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport './horizontal-bar-chart.scss';\nimport Component from '@glimmer/component';\n\nimport {\n HdsCardContainer,\n HdsSeparator,\n HdsTextBody,\n HdsApplicationState,\n HdsLinkStandalone,\n} from '@hashicorp/design-system-components/components';\nimport TitleRow from './base/title-row.gts';\n\nimport LinealFluid from '@lineal-viz/lineal/components/lineal/fluid/index.js';\nimport LinealHBars from '@lineal-viz/lineal/components/lineal/h-bars/index.js';\nimport scaleLinear from '@lineal-viz/lineal/helpers/scale-linear.js';\nimport scaleBand from '@lineal-viz/lineal/helpers/scale-band.js';\nimport stackH from '@lineal-viz/lineal/helpers/stack-h.js';\nimport LinealAxis from '@lineal-viz/lineal/components/lineal/axis/index.js';\nimport axisOffset from '../../modifiers/axis-offset.ts';\nimport { tracked } from '@glimmer/tracking';\nimport type { SimpleDatum } from '../../types/index.ts';\nimport type { HdsApplicationStateSignature } from '@hashicorp/design-system-components/components/hds/application-state/index';\n\nexport interface SSUReportingHorizontalBarChartSignature {\n Args: {\n data: SimpleDatum[];\n title: string;\n description?: string;\n /** Custom text for the link (defaults to \"View all\") */\n linkText?: string;\n /** Icon to display with the link (defaults to \"arrow-right\") */\n linkIcon?: HdsLinkStandalone['icon'];\n /** URL for the link - if not provided, no link will be shown */\n linkUrl?: string;\n /** Target for the link - defaults to \"_self\" */\n linkTarget?: '_blank' | '_self';\n };\n Blocks: {\n default: [];\n /** We optionally yield application state to allow for overrides on empty state eg:\n * \n * <:empty as |A|>\n * \n * \n * \n * \n * */\n empty: HdsApplicationStateSignature['Blocks']['default'];\n };\n\n Element: HTMLElement;\n}\nexport default class SSUReportingHorizontalBarChart extends Component {\n @tracked xRangeOffsetWidth = 0;\n\n get hasData() {\n return (\n this.args.data &&\n Array.isArray(this.args.data) &&\n this.args.data.length > 0\n );\n }\n\n get data() {\n if (!this.hasData) {\n return [];\n }\n // Filtering DESC for now per designs, could make configurable if needed\n return this.args.data\n .filter(({ value }) => value !== 0)\n .sort((a, b) => {\n return b.value - a.value;\n });\n }\n\n get total() {\n return this.data.reduce((runningTotal, { value }) => {\n return runningTotal + value;\n }, 0);\n }\n\n get a11yLabel() {\n const title = `Total of ${this.total} ${this.args.title}.`;\n\n const itemsDescription = this.data\n .map(({ value, label }) => {\n return `${value} ${label}`;\n })\n .join(', ');\n\n return `${title} Comprised of ${itemsDescription}.`;\n }\n\n get yDomain() {\n return this.data.map(({ label }) => label);\n }\n\n get xDomain() {\n return [0, Math.max(0, ...this.data.map(({ value }) => value))];\n }\n\n get rangeHeight() {\n return this.data.length * 26;\n }\n\n get yRange() {\n return [0, this.rangeHeight];\n }\n\n get emptyStateTitle() {\n return 'None enabled';\n }\n\n get emptyStateDescription() {\n const entitiesTitle = this.args.title;\n return `${entitiesTitle} in this namespace will appear here.`;\n }\n\n get emptyStateLinkText() {\n const entities = this.args.title.toLowerCase();\n return `Enable ${entities}`;\n }\n\n get description() {\n if (this.hasData) {\n return this.args.description;\n }\n }\n\n get linkUrl() {\n if (this.hasData) {\n return this.args.linkUrl;\n }\n }\n\n getXRange = (width: number) => {\n return [0, Math.max(0, width - this.xRangeOffsetWidth - 32)];\n };\n\n handleAxisOffset = (offsetWidth: number) => {\n this.xRangeOffsetWidth = offsetWidth;\n };\n\n \n}\n"],"names":["SSUReportingHorizontalBarChart","Component","g","prototype","tracked","i","void 0","hasData","args","data","Array","isArray","length","filter","value","sort","a","b","total","reduce","runningTotal","a11yLabel","title","itemsDescription","map","label","join","yDomain","xDomain","Math","max","rangeHeight","yRange","emptyStateTitle","emptyStateDescription","entitiesTitle","emptyStateLinkText","entities","toLowerCase","description","linkUrl","getXRange","width","xRangeOffsetWidth","handleAxisOffset","offsetWidth","setComponentTemplate","precompileTemplate","strictMode","scope","HdsCardContainer","TitleRow","LinealFluid","axisOffset","scaleLinear","scaleBand","stackH","LinealAxis","LinealHBars","HdsSeparator","HdsTextBody","HdsApplicationState"],"mappings":"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"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/components/vault-reporting/views/dashboard.js b/ui/vault-reporting/dist/components/vault-reporting/views/dashboard.js index 82c4530e74..31818ace93 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/views/dashboard.js +++ b/ui/vault-reporting/dist/components/vault-reporting/views/dashboard.js @@ -7,6 +7,8 @@ import ClusterReplication from '../cluster-replication.js'; import DashboardExport from '../dashboard/export.js'; import { tracked } from '@glimmer/tracking'; import { HdsCardContainer, HdsAlert, HdsLinkInline, HdsTextBody, HdsBadge, HdsPageHeader } from '@hashicorp/design-system-components/components'; +import { service } from '@ember/service'; +import { on } from '@ember/modifier'; import { precompileTemplate } from '@ember/template-compilation'; import { setComponentTemplate } from '@ember/component'; import { g, i } from 'decorator-transforms/runtime'; @@ -16,6 +18,10 @@ import { g, i } from 'decorator-transforms/runtime'; * SPDX-License-Identifier: BUSL-1.1 */ class SSUViewDashboard extends Component { + static { + g(this.prototype, "reportingAnalytics", [service]); + } + #reportingAnalytics = (i(this, "reportingAnalytics"), void 0); static { g(this.prototype, "data", [tracked]); } @@ -45,7 +51,17 @@ class SSUViewDashboard extends Component { this.error = e; } }; - getBarChartData = (map = {}, exclude = []) => { + handleTrackAnalyticsEvent = (eventName, properties, options) => { + this.reportingAnalytics.trackEvent(eventName, properties, options); + }; + handleTrackSurveyLink = () => { + this.handleTrackAnalyticsEvent('survey_link'); + }; + handleRefresh = () => { + this.fetchAllData(); + this.handleTrackAnalyticsEvent('refresh_button'); + }; + getBarChartData = (map = {}, exclude) => { return Object.entries(map).map(([label, value]) => { return { label, @@ -110,13 +126,14 @@ class SSUViewDashboard extends Component { return this.isVaultDedicated ? 'admin' : 'root'; } static { - setComponentTemplate(precompileTemplate("\n
\n \n \n Vault Usage\n \n \n \n {{#if this.lastUpdatedTime}}\n \n Updated today at\n {{this.lastUpdatedTime}}.\n\n \n {{/if}}\n \n View and export your Vault usage. Don't see what you're looking for?\n Share feedback\n \n \n \n \n \n \n {{#if this.error}}\n \n Error\n An error\n occurred, please try again.\n \n {{/if}}\n {{#if this.data}}\n \n {{#each this.counters as |counter|}}\n \n {{/each}}\n \n
\n
\n \n\n \n\n \n
\n\n
\n \n <:empty as |A|>\n \n \n \n \n \n \n \n
\n\n
\n {{/if}}\n
\n ", { + setComponentTemplate(precompileTemplate("\n
\n \n \n Vault Usage\n \n \n \n {{#if this.lastUpdatedTime}}\n \n Updated today at\n {{this.lastUpdatedTime}}.\n\n \n {{/if}}\n \n View and export your Vault usage. Don't see what you're looking for?\n Share feedback\n \n \n \n \n \n \n {{#if this.error}}\n \n Error\n An error occurred, please try again.\n \n {{/if}}\n {{#if this.data}}\n \n {{#each this.counters as |counter|}}\n \n {{/each}}\n \n
\n
\n \n\n \n\n \n
\n\n
\n \n <:empty as |A|>\n \n \n \n \n \n \n \n
\n\n
\n {{/if}}\n
\n ", { strictMode: true, scope: () => ({ HdsPageHeader, HdsBadge, HdsTextBody, HdsLinkInline, + on, DashboardExport, HdsAlert, HdsCardContainer, diff --git a/ui/vault-reporting/dist/components/vault-reporting/views/dashboard.js.map b/ui/vault-reporting/dist/components/vault-reporting/views/dashboard.js.map index fd1c341d2f..910ccddd77 100644 --- a/ui/vault-reporting/dist/components/vault-reporting/views/dashboard.js.map +++ b/ui/vault-reporting/dist/components/vault-reporting/views/dashboard.js.map @@ -1 +1 @@ -{"version":3,"file":"dashboard.js","sources":["../../../../src/components/vault-reporting/views/dashboard.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport { array } from '@ember/helper';\nimport './dashboard.scss';\nimport ReportingCounter from '../counter.gts';\nimport ReportingHorizontalBarChart from '../horizontal-bar-chart.gts';\nimport GlobalLease from '../global-lease.gts';\nimport ClusterReplication from '../cluster-replication.gts';\nimport DashboardExport from '../dashboard/export.gts';\n\nimport type {\n UsageDashboardData,\n SimpleDatum,\n getUsageDataFunction,\n} from '../../../types';\nimport { tracked } from '@glimmer/tracking';\nimport type { IconName } from '@hashicorp/flight-icons/svg';\nimport {\n HdsPageHeader,\n HdsLinkInline,\n HdsCardContainer,\n HdsBadge,\n HdsAlert,\n HdsTextBody,\n} from '@hashicorp/design-system-components/components';\n\ninterface CounterBlock {\n title: string;\n tooltipMessage: string;\n data: number;\n icon?: IconName;\n suffix?: string;\n link?: string;\n emptyText?: string;\n emptyLink?: string;\n}\n\nexport interface SSUViewDashboardSignature {\n Args: {\n onFetchUsageData: getUsageDataFunction;\n isVaultDedicated: boolean;\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\nexport default class SSUViewDashboard extends Component {\n @tracked\n data?: UsageDashboardData;\n\n @tracked\n lastUpdatedTime: string = '';\n\n @tracked\n error?: unknown;\n\n constructor(owner: unknown, args: SSUViewDashboardSignature['Args']) {\n super(owner, args);\n this.fetchAllData();\n }\n\n fetchAllData: () => void = async () => {\n try {\n this.error = undefined;\n this.data = await this.args.onFetchUsageData();\n this.lastUpdatedTime = new Intl.DateTimeFormat('en-US', {\n timeStyle: 'medium',\n }).format(new Date());\n } catch (e) {\n this.error = e;\n }\n };\n\n getBarChartData: (\n map: Record,\n exclude?: string[],\n ) => SimpleDatum[] = (map = {}, exclude = []) => {\n return Object.entries(map)\n .map(([label, value]) => {\n return {\n label,\n value,\n };\n })\n .filter((item) => {\n return !exclude?.includes(item.label);\n });\n };\n\n get isVaultDedicated(): boolean {\n return this.args.isVaultDedicated ?? false;\n }\n\n get kvSecretsTooltipMessage(): string {\n const { kvv1Secrets = 0, kvv2Secrets = 0 } = this.data ?? {};\n const kvv1Formatted = Intl.NumberFormat().format(kvv1Secrets);\n const kvv2Formatted = Intl.NumberFormat().format(kvv2Secrets);\n\n if (kvv1Secrets && kvv2Secrets) {\n return `Combined count of ${kvv1Formatted} KV version 1 secrets and ${kvv2Formatted} KV version 2 secrets.`;\n }\n if (kvv1Secrets) {\n return `Total number of ${kvv1Formatted} KV version 1 secrets.`;\n }\n if (kvv2Secrets) {\n return `Total number of ${kvv2Formatted} KV version 2 secrets.`;\n }\n return '';\n }\n\n get counters(): CounterBlock[] {\n const { kvv1Secrets = 0, kvv2Secrets = 0 } = this.data ?? {};\n return [\n {\n title: 'Child namespaces',\n tooltipMessage: 'Total number of namespaces for this cluster.',\n data: this.data?.namespaces ?? 0,\n link: 'access/namespaces',\n },\n {\n title: 'KV secrets',\n tooltipMessage: this.kvSecretsTooltipMessage,\n data: kvv1Secrets + kvv2Secrets,\n emptyText: 'No secrets stored',\n emptyLink: 'secrets',\n },\n {\n title: 'Secrets sync',\n tooltipMessage:\n 'Total number of destinations (e.g. third-party integrations) synced with secrets from this namespace.',\n data: this.data?.secretSync?.totalDestinations ?? 0,\n link: 'sync/secrets/overview',\n emptyText: 'Not activated',\n suffix: 'destinations',\n },\n {\n title: 'PKI roles',\n tooltipMessage: 'Total number of PKI roles configured.',\n data: this.data?.pki?.totalRoles ?? 0,\n emptyText: 'No roles created',\n },\n ];\n }\n\n get namespace(): string {\n return this.isVaultDedicated ? 'admin' : 'root';\n }\n\n \n}\n"],"names":["SSUViewDashboard","Component","g","prototype","tracked","i","void 0","constructor","owner","args","fetchAllData","error","undefined","data","onFetchUsageData","lastUpdatedTime","Intl","DateTimeFormat","timeStyle","format","Date","e","getBarChartData","map","exclude","Object","entries","label","value","filter","item","includes","isVaultDedicated","kvSecretsTooltipMessage","kvv1Secrets","kvv2Secrets","kvv1Formatted","NumberFormat","kvv2Formatted","counters","title","tooltipMessage","namespaces","link","emptyText","emptyLink","secretSync","totalDestinations","suffix","pki","totalRoles","namespace","setComponentTemplate","precompileTemplate","strictMode","scope","HdsPageHeader","HdsBadge","HdsTextBody","HdsLinkInline","DashboardExport","HdsAlert","HdsCardContainer","ReportingCounter","ReportingHorizontalBarChart","array","ClusterReplication","GlobalLease"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dashboard.js","sources":["../../../../src/components/vault-reporting/views/dashboard.gts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport Component from '@glimmer/component';\nimport { array } from '@ember/helper';\nimport './dashboard.scss';\nimport ReportingCounter from '../counter.gts';\nimport ReportingHorizontalBarChart from '../horizontal-bar-chart.gts';\nimport GlobalLease from '../global-lease.gts';\nimport ClusterReplication from '../cluster-replication.gts';\nimport DashboardExport from '../dashboard/export.gts';\n\nimport type {\n UsageDashboardData,\n SimpleDatum,\n getUsageDataFunction,\n} from '../../../types';\nimport { tracked } from '@glimmer/tracking';\nimport type { IconName } from '@hashicorp/flight-icons/svg';\nimport {\n HdsPageHeader,\n HdsLinkInline,\n HdsCardContainer,\n HdsBadge,\n HdsAlert,\n HdsTextBody,\n} from '@hashicorp/design-system-components/components';\nimport { service } from '@ember/service';\nimport type ReportingAnalyticsService from '../../../services/reporting-analytics';\nimport { on } from '@ember/modifier';\n\ninterface CounterBlock {\n title: string;\n tooltipMessage: string;\n data: number;\n icon?: IconName;\n suffix?: string;\n link?: string;\n emptyText?: string;\n emptyLink?: string;\n}\n\nexport interface SSUViewDashboardSignature {\n Args: {\n onFetchUsageData: getUsageDataFunction;\n isVaultDedicated: boolean;\n };\n\n Blocks: {\n default: [];\n };\n\n Element: HTMLElement;\n}\nexport default class SSUViewDashboard extends Component {\n @service declare readonly reportingAnalytics: ReportingAnalyticsService;\n\n @tracked\n data?: UsageDashboardData;\n\n @tracked\n lastUpdatedTime: string = '';\n\n @tracked\n error?: unknown;\n\n constructor(owner: unknown, args: SSUViewDashboardSignature['Args']) {\n super(owner, args);\n this.fetchAllData();\n }\n\n fetchAllData: () => void = async () => {\n try {\n this.error = undefined;\n this.data = await this.args.onFetchUsageData();\n this.lastUpdatedTime = new Intl.DateTimeFormat('en-US', {\n timeStyle: 'medium',\n }).format(new Date());\n } catch (e) {\n this.error = e;\n }\n };\n\n handleTrackAnalyticsEvent = (\n eventName: string,\n properties?: object,\n options?: object,\n ) => {\n this.reportingAnalytics.trackEvent(eventName, properties, options);\n };\n\n handleTrackSurveyLink: () => void = () => {\n this.handleTrackAnalyticsEvent('survey_link');\n };\n\n handleRefresh: () => void = () => {\n this.fetchAllData();\n this.handleTrackAnalyticsEvent('refresh_button');\n };\n\n getBarChartData: (\n map: Record,\n exclude?: string[],\n ) => SimpleDatum[] = (map = {}, exclude?: string[]) => {\n return Object.entries(map)\n .map(([label, value]) => {\n return {\n label,\n value,\n };\n })\n .filter((item) => {\n return !exclude?.includes(item.label);\n });\n };\n\n get isVaultDedicated(): boolean {\n return this.args.isVaultDedicated ?? false;\n }\n\n get kvSecretsTooltipMessage(): string {\n const { kvv1Secrets = 0, kvv2Secrets = 0 } = this.data ?? {};\n const kvv1Formatted = Intl.NumberFormat().format(kvv1Secrets);\n const kvv2Formatted = Intl.NumberFormat().format(kvv2Secrets);\n\n if (kvv1Secrets && kvv2Secrets) {\n return `Combined count of ${kvv1Formatted} KV version 1 secrets and ${kvv2Formatted} KV version 2 secrets.`;\n }\n if (kvv1Secrets) {\n return `Total number of ${kvv1Formatted} KV version 1 secrets.`;\n }\n if (kvv2Secrets) {\n return `Total number of ${kvv2Formatted} KV version 2 secrets.`;\n }\n return '';\n }\n\n get counters(): CounterBlock[] {\n const { kvv1Secrets = 0, kvv2Secrets = 0 } = this.data ?? {};\n return [\n {\n title: 'Child namespaces',\n tooltipMessage: 'Total number of namespaces for this cluster.',\n data: this.data?.namespaces ?? 0,\n link: 'access/namespaces',\n },\n {\n title: 'KV secrets',\n tooltipMessage: this.kvSecretsTooltipMessage,\n data: kvv1Secrets + kvv2Secrets,\n emptyText: 'No secrets stored',\n emptyLink: 'secrets',\n },\n {\n title: 'Secrets sync',\n tooltipMessage:\n 'Total number of destinations (e.g. third-party integrations) synced with secrets from this namespace.',\n data: this.data?.secretSync?.totalDestinations ?? 0,\n link: 'sync/secrets/overview',\n emptyText: 'Not activated',\n suffix: 'destinations',\n },\n {\n title: 'PKI roles',\n tooltipMessage: 'Total number of PKI roles configured.',\n data: this.data?.pki?.totalRoles ?? 0,\n emptyText: 'No roles created',\n },\n ];\n }\n\n get namespace(): string {\n return this.isVaultDedicated ? 'admin' : 'root';\n }\n\n \n}\n"],"names":["SSUViewDashboard","Component","g","prototype","service","i","void 0","tracked","constructor","owner","args","fetchAllData","error","undefined","data","onFetchUsageData","lastUpdatedTime","Intl","DateTimeFormat","timeStyle","format","Date","e","handleTrackAnalyticsEvent","eventName","properties","options","reportingAnalytics","trackEvent","handleTrackSurveyLink","handleRefresh","getBarChartData","map","exclude","Object","entries","label","value","filter","item","includes","isVaultDedicated","kvSecretsTooltipMessage","kvv1Secrets","kvv2Secrets","kvv1Formatted","NumberFormat","kvv2Formatted","counters","title","tooltipMessage","namespaces","link","emptyText","emptyLink","secretSync","totalDestinations","suffix","pki","totalRoles","namespace","setComponentTemplate","precompileTemplate","strictMode","scope","HdsPageHeader","HdsBadge","HdsTextBody","HdsLinkInline","on","DashboardExport","HdsAlert","HdsCardContainer","ReportingCounter","ReportingHorizontalBarChart","array","ClusterReplication","GlobalLease"],"mappings":"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"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/services/reporting-analytics.js b/ui/vault-reporting/dist/services/reporting-analytics.js new file mode 100644 index 0000000000..b371d9d010 --- /dev/null +++ b/ui/vault-reporting/dist/services/reporting-analytics.js @@ -0,0 +1,37 @@ +import { getOwner } from '@ember/owner'; +import Service from '@ember/service'; + +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +/** + * This service is used to look up the `analytics` service in the host application and track events if it exists. If it doesn't exist + * or the implementation breaks it falls back gracefully to do nothing. + */ +class ReportingAnalytics extends Service { + // Using the `@service` decorator will throw an error if the service does not exist on the host application. + // This allows us to be defensive and have `trackEvent` be a no-op if the service is not present. + get analytics() { + return getOwner(this)?.lookup('service:analytics'); + } + trackEvent(event, properties, options) { + if (!this.analytics?.trackEvent) { + return; + } + try { + const prefix = 'vault_reporting'; + const prefixedEvent = `${prefix}_${event}`; + this.analytics.trackEvent(prefixedEvent, properties, options); + } catch (e) { + // no-op + console.warn('Error tracking event:', e); + } + } +} + +// DO NOT DELETE: this is how TypeScript knows how to look up your services. + +export { ReportingAnalytics as default }; +//# sourceMappingURL=reporting-analytics.js.map diff --git a/ui/vault-reporting/dist/services/reporting-analytics.js.map b/ui/vault-reporting/dist/services/reporting-analytics.js.map new file mode 100644 index 0000000000..ca35b62698 --- /dev/null +++ b/ui/vault-reporting/dist/services/reporting-analytics.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reporting-analytics.js","sources":["../../src/services/reporting-analytics.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: BUSL-1.1\n */\n\nimport { getOwner } from '@ember/owner';\nimport Service from '@ember/service';\n/**\n * This service is used to look up the `analytics` service in the host application and track events if it exists. If it doesn't exist\n * or the implementation breaks it falls back gracefully to do nothing.\n */\nexport default class ReportingAnalytics extends Service {\n // Using the `@service` decorator will throw an error if the service does not exist on the host application.\n // This allows us to be defensive and have `trackEvent` be a no-op if the service is not present.\n get analytics() {\n return getOwner(this)?.lookup('service:analytics') as\n | {\n trackEvent: (\n event: string,\n properties?: object,\n options?: object,\n ) => void;\n }\n | undefined;\n }\n\n trackEvent(event: string, properties?: object, options?: object) {\n if (!this.analytics?.trackEvent) {\n return;\n }\n try {\n const prefix = 'vault_reporting';\n const prefixedEvent = `${prefix}_${event}`;\n this.analytics.trackEvent(prefixedEvent, properties, options);\n } catch (e) {\n // no-op\n console.warn('Error tracking event:', e);\n }\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your services.\ndeclare module '@ember/service' {\n interface Registry {\n reportingAnalytics: ReportingAnalytics;\n }\n}\n"],"names":["ReportingAnalytics","Service","analytics","getOwner","lookup","trackEvent","event","properties","options","prefix","prefixedEvent","e","console","warn"],"mappings":";;;AAAA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACe,MAAMA,kBAAkB,SAASC,OAAO,CAAC;AACtD;AACA;EACA,IAAIC,SAASA,GAAG;IACd,OAAOC,QAAQ,CAAC,IAAI,CAAC,EAAEC,MAAM,CAAC,mBAAmB,CAAC;AASpD;AAEAC,EAAAA,UAAUA,CAACC,KAAa,EAAEC,UAAmB,EAAEC,OAAgB,EAAE;AAC/D,IAAA,IAAI,CAAC,IAAI,CAACN,SAAS,EAAEG,UAAU,EAAE;AAC/B,MAAA;AACF;IACA,IAAI;MACF,MAAMI,MAAM,GAAG,iBAAiB;AAChC,MAAA,MAAMC,aAAa,GAAG,CAAA,EAAGD,MAAM,CAAA,CAAA,EAAIH,KAAK,CAAE,CAAA;MAC1C,IAAI,CAACJ,SAAS,CAACG,UAAU,CAACK,aAAa,EAAEH,UAAU,EAAEC,OAAO,CAAC;KAC9D,CAAC,OAAOG,CAAC,EAAE;AACV;AACAC,MAAAA,OAAO,CAACC,IAAI,CAAC,uBAAuB,EAAEF,CAAC,CAAC;AAC1C;AACF;AACF;;AAEA;;;;"} \ No newline at end of file diff --git a/ui/vault-reporting/dist/styles/vault-reporting.css b/ui/vault-reporting/dist/styles/vault-reporting.css index 2ab057a110..555a6ac676 100644 --- a/ui/vault-reporting/dist/styles/vault-reporting.css +++ b/ui/vault-reporting/dist/styles/vault-reporting.css @@ -2,4 +2,4 @@ * Copyright (c) HashiCorp, Inc. */ -.ssu-title-row{margin-bottom:8px}.ssu-title-row__description{display:block;margin-top:.25rem;color:var(--token-color-foreground-faint)}.ssu-title-row__container{display:flex;justify-content:space-between}.ssu-title-row__container__link{padding:0}.ssu-counter{padding:16px}.ssu-counter__title-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}.ssu-counter__title-row__tooltip{margin-left:3px;top:3px}.ssu-global-lease{padding:16px}.ssu-global-lease__progress-wrapper{display:flex;align-items:center;gap:1rem;height:15px}.ssu-global-lease__progress-bar{flex:1;height:100%;background-color:var(--token-color-palette-neutral-100);border:1.5px solid var(--token-color-palette-neutral-200);border-radius:4px;overflow:hidden;font-size:40px;display:inline-block}@keyframes initialWidth{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}.ssu-global-lease__progress-fill{height:100%;width:var(--vault-reporting-global-lease-percentage);animation:1s ease-out initialWidth;transform-origin:left;transition:width 1s ease-out,background-color 1s ease-out;background-color:var(--token-color-palette-neutral-300)}.ssu-global-lease__progress-fill--exceeded{background-color:var(--token-color-palette-red-100)}.ssu-global-lease__empty-state{min-width:66%;margin:16px auto;color:var(--token-color-foreground-faint)}.ssu-global-lease__alert{margin-bottom:8px}.ssu-cluster-replication{padding:16px;display:flex;flex-direction:column;justify-content:center;gap:1rem}.ssu-cluster-replication__list-row__badge{margin:0 .25rem;text-transform:capitalize}.ssu-horizontal-bar-chart__container{padding:16px;overflow:hidden;font-size:13px}.ssu-horizontal-bar-chart__chart{box-sizing:border-box;margin-top:15px;color:var(--token-color-foreground-primary);fill:var(--token-color-foreground-primary)}.ssu-horizontal-bar-chart__chart svg{overflow:visible}.ssu-horizontal-bar-chart__chart rect{fill:var(--token-color-palette-blue-200);transform:translateY(10.5px);rx:3px;ry:3px}.ssu-horizontal-bar-chart__chart .axis line{display:none}.ssu-horizontal-bar-chart__separator{margin-bottom:10px}.ssu-horizontal-bar-chart__empty-state{min-width:66%;margin:16px auto}.ssu-horizontal-bar-chart__total{color:var(--token-color-foreground-primary)}.dashboard{padding:16px}.dashboard__error{margin-top:16px}.dashboard__counters{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:16px;margin:32px 0}.dashboard__viz-blocks{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:16px}.dashboard__viz-block{margin-bottom:16px}.dashboard__badge{margin-left:5px}.dashboard__description p{margin-bottom:8px} \ No newline at end of file +.ssu-cluster-replication{padding:16px;display:flex;flex-direction:column;justify-content:center;gap:1rem}.ssu-cluster-replication__list-row__badge{margin:0 .25rem;text-transform:capitalize}.dashboard{padding:16px}.dashboard__error{margin-top:16px}.dashboard__counters{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:16px;margin:32px 0}.dashboard__viz-blocks{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:16px}.dashboard__viz-block{margin-bottom:16px}.dashboard__badge{margin-left:5px}.dashboard__description p{margin-bottom:8px}.ssu-counter{padding:16px}.ssu-counter__title-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}.ssu-counter__title-row__tooltip{margin-left:3px;top:3px}.ssu-global-lease{padding:16px}.ssu-global-lease__progress-wrapper{display:flex;align-items:center;gap:1rem;height:15px}.ssu-global-lease__progress-bar{flex:1;height:100%;background-color:var(--token-color-palette-neutral-100);border:1.5px solid var(--token-color-palette-neutral-200);border-radius:4px;overflow:hidden;font-size:40px;display:inline-block}@keyframes initialWidth{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}.ssu-global-lease__progress-fill{height:100%;width:var(--vault-reporting-global-lease-percentage);animation:1s ease-out initialWidth;transform-origin:left;transition:width 1s ease-out,background-color 1s ease-out;background-color:var(--token-color-palette-neutral-300)}.ssu-global-lease__progress-fill--exceeded{background-color:var(--token-color-palette-red-100)}.ssu-global-lease__empty-state{min-width:66%;margin:16px auto;color:var(--token-color-foreground-faint)}.ssu-global-lease__alert{margin-bottom:8px}.ssu-title-row{margin-bottom:8px}.ssu-title-row__description{display:block;margin-top:.25rem;color:var(--token-color-foreground-faint)}.ssu-title-row__container{display:flex;justify-content:space-between}.ssu-title-row__container__link{padding:0}.ssu-horizontal-bar-chart__container{padding:16px;overflow:hidden;font-size:13px}.ssu-horizontal-bar-chart__chart{box-sizing:border-box;margin-top:15px;color:var(--token-color-foreground-primary);fill:var(--token-color-foreground-primary)}.ssu-horizontal-bar-chart__chart svg{overflow:visible}.ssu-horizontal-bar-chart__chart rect{fill:var(--token-color-palette-blue-200);transform:translateY(10.5px);rx:3px;ry:3px}.ssu-horizontal-bar-chart__chart .axis line{display:none}.ssu-horizontal-bar-chart__separator{margin-bottom:10px}.ssu-horizontal-bar-chart__empty-state{min-width:66%;margin:16px auto}.ssu-horizontal-bar-chart__total{color:var(--token-color-foreground-primary)} \ No newline at end of file diff --git a/ui/vault-reporting/package.json b/ui/vault-reporting/package.json index d206ce3771..ee23a16497 100644 --- a/ui/vault-reporting/package.json +++ b/ui/vault-reporting/package.json @@ -33,15 +33,15 @@ "scripts": { "build": "rollup --config", "format": "prettier . --cache --write", - "lint": "concurrently \"npm:lint:*(!fix)\" --names \"lint:\" --prefixColors auto", - "lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\" --prefixColors auto && run format", + "lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\" --prefixColors auto", + "lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\" --prefixColors auto && run format", "lint:format": "prettier . --cache --check", "lint:hbs": "ember-template-lint . --no-error-on-unmatched-pattern", "lint:hbs:fix": "ember-template-lint . --fix --no-error-on-unmatched-pattern", "lint:js": "eslint . --cache", "lint:js:fix": "eslint . --fix", "lint:types": "glint", - "prepack": "rollup --config", + "prepack": "pnpm build", "start": "rollup --config --watch", "test": "echo 'A v2 addon does not have tests, run tests in test-app'", "sync-to-vault": "node scripts/sync-to-vault.mjs" @@ -59,10 +59,13 @@ "@embroider/addon-dev": "^7.1.0", "@embroider/addon-shim": "^1.8.9", "@eslint/js": "^9.17.0", + "@glimmer/component": "^1.1.2", + "@glimmer/tracking": "^1.1.2", "@glint/core": "^1.4.0", "@glint/environment-ember-loose": "^1.4.0", "@glint/environment-ember-template-imports": "^1.4.0", "@glint/template": "^1.4.0", + "@hashicorp/flight-icons": "^3.10.0", "@rollup/plugin-babel": "^6.0.4", "@tsconfig/ember": "^3.0.8", "babel-plugin-ember-template-compilation": "^2.2.5", @@ -106,7 +109,8 @@ "./components/vault-reporting/horizontal-bar-chart.js": "./dist/_app_/components/vault-reporting/horizontal-bar-chart.js", "./components/vault-reporting/views/dashboard.js": "./dist/_app_/components/vault-reporting/views/dashboard.js", "./modifiers/axis-offset.js": "./dist/_app_/modifiers/axis-offset.js", - "./modifiers/css-custom-property.js": "./dist/_app_/modifiers/css-custom-property.js" + "./modifiers/css-custom-property.js": "./dist/_app_/modifiers/css-custom-property.js", + "./services/reporting-analytics.js": "./dist/_app_/services/reporting-analytics.js" } } } diff --git a/ui/yarn.lock b/ui/yarn.lock index 089b59fb07..f9156ae04b 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -7202,7 +7202,7 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.24.1": +"core-js@npm:^3.24.1, core-js@npm:^3.38.1": version: 3.41.0 resolution: "core-js@npm:3.41.0" checksum: 05331e92f354d3b92fa296fb3fc90c7b25d1a65230046c68651be29d67245bb156bdde7bf5c8cf8b3ecddfff93273a9ba6567f5e4ee6ceb70f39cee430693509 @@ -10279,6 +10279,13 @@ __metadata: languageName: node linkType: hard +"fflate@npm:^0.4.8": + version: 0.4.8 + resolution: "fflate@npm:0.4.8" + checksum: 29d8cbe44d5e7f53e7f5a160ac7f9cc025480c7b3bfd85c5f898cbe20dfa2dad4732daa534982664bf30b35896a90af44ea33ede5d94c5ffd1b8b0c0a0a56ca2 + languageName: node + linkType: hard + "figures@npm:^2.0.0": version: 2.0.0 resolution: "figures@npm:2.0.0" @@ -15235,6 +15242,33 @@ __metadata: languageName: node linkType: hard +"posthog-js@npm:^1.202.2": + version: 1.236.1 + resolution: "posthog-js@npm:1.236.1" + dependencies: + core-js: ^3.38.1 + fflate: ^0.4.8 + preact: ^10.19.3 + web-vitals: ^4.2.4 + peerDependencies: + "@rrweb/types": 2.0.0-alpha.17 + rrweb-snapshot: 2.0.0-alpha.17 + peerDependenciesMeta: + "@rrweb/types": + optional: true + rrweb-snapshot: + optional: true + checksum: 114f30c71024c425ce31625f1de7ca154feb6bb18a42be439b9595bccc8e8e4c71ba9c075f3215a68d6dadf3168f69a3cc38ffcc1260dd9ec56efc1881c50ca4 + languageName: node + linkType: hard + +"preact@npm:^10.19.3": + version: 10.26.5 + resolution: "preact@npm:10.26.5" + checksum: 3ef769e82bdb26314e51f02d09aea9ba566cad291504a5d79833055b1ff3ca7db647516315d2278498261881c61949917aac05cc56f172c32d013796378c304b + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -18633,6 +18667,7 @@ __metadata: miragejs: ~0.1.48 node-notifier: 8.0.2 pkijs: ~2.4.0 + posthog-js: ^1.202.2 prettier: 3.0.3 prettier-eslint-cli: ~7.1.0 pvutils: ~1.1.3 @@ -18820,6 +18855,13 @@ __metadata: languageName: node linkType: hard +"web-vitals@npm:^4.2.4": + version: 4.2.4 + resolution: "web-vitals@npm:4.2.4" + checksum: 5b3ffe1db33f23aebf8cc8560ac574401a95939baafde5841835c1bb1c01f9a2478442f319f77aa0d7914739fc2f6b020c5d5b128c16c5c77ca6be2f9dfbbde6 + languageName: node + linkType: hard + "webpack-sources@npm:^3.2.3": version: 3.2.3 resolution: "webpack-sources@npm:3.2.3"