- {i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.form.subtitle', {
- defaultMessage:
- 'An analytics collection provides a place to store the analytics events for any given search application you are building. Give it a memorable name below.',
- })}
-
+ {i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.form.subtitle', {
+ defaultMessage:
+ "Consider carefully what you want to name your Collection. You can't rename it later.",
+ })}
+
-
-
-
-
-
- ) : null}
{stats.inference_stats ? (
From 45c00c6141c5a447dd7bb4f6b31930d00bc02374 Mon Sep 17 00:00:00 2001
From: Justin Kambic
Date: Mon, 20 Feb 2023 10:37:49 -0500
Subject: [PATCH 010/101] [Synthetics] Add exponential backoff to screenshot
image API call (#150494)
Co-authored-by: Shahzad
---
.../browser_steps_list.tsx | 4 +-
.../use_retrieve_step_image.ts | 2 +-
.../journey_step_screenshot_container.tsx | 4 +-
.../hooks/use_browser_run_once_monitors.ts | 4 +-
.../hooks/use_simple_run_once_monitors.ts | 2 +-
.../test_now_mode/hooks/use_tick_tick.ts | 10 +-
.../state/browser_journey/api.test.ts | 153 ++++++++++++++++++
.../synthetics/state/browser_journey/api.ts | 20 ++-
8 files changed, 178 insertions(+), 21 deletions(-)
create mode 100644 x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.test.ts
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx
index a343a67021f0b..c90a00710f32f 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx
@@ -119,8 +119,8 @@ export const BrowserStepsList = ({
checkGroup={step.monitor.check_group}
initialStepNumber={step.synthetics?.step?.index}
stepStatus={step.synthetics.payload?.status}
- allStepsLoaded={true}
- retryFetchOnRevisit={false}
+ allStepsLoaded={!loading}
+ retryFetchOnRevisit={true}
size={screenshotImageSize}
/>
),
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/use_retrieve_step_image.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/use_retrieve_step_image.ts
index 98d532b279a8c..d2a6d19355617 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/use_retrieve_step_image.ts
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/use_retrieve_step_image.ts
@@ -42,7 +42,7 @@ export const useRetrieveStepImage = ({
/**
* Whether to retry screenshot image fetch on revisit (when intersection change triggers).
* Will only re-fetch if an image fetch wasn't successful in previous attempts.
- * Set this to `true` fro "Run Once" / "Test Now" modes
+ * Set this to `true` from "Run Once" / "Test Now" modes
*
*/
retryFetchOnRevisit: boolean;
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/screenshot/journey_step_screenshot_container.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/screenshot/journey_step_screenshot_container.tsx
index 0527b6ad8c67a..57533e14ab7ad 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/screenshot/journey_step_screenshot_container.tsx
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/screenshot/journey_step_screenshot_container.tsx
@@ -46,11 +46,11 @@ export const JourneyStepScreenshotContainer = ({
const intersection = useIntersection(intersectionRef, {
root: null,
rootMargin: '0px',
- threshold: 1,
+ threshold: 0.1,
});
const imageResult = useRetrieveStepImage({
- hasIntersected: Boolean(intersection && intersection.intersectionRatio === 1),
+ hasIntersected: Boolean(intersection && intersection.intersectionRatio > 0),
stepStatus,
imgPath,
retryFetchOnRevisit,
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_browser_run_once_monitors.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_browser_run_once_monitors.ts
index cc45ef79db905..4daea98b4e923 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_browser_run_once_monitors.ts
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_browser_run_once_monitors.ts
@@ -66,15 +66,13 @@ export const useBrowserEsResults = ({
export const useBrowserRunOnceMonitors = ({
testRunId,
skipDetails = false,
- refresh = true,
expectSummaryDocs,
}: {
testRunId: string;
- refresh?: boolean;
skipDetails?: boolean;
expectSummaryDocs: number;
}) => {
- const { refreshTimer, lastRefresh } = useTickTick(5 * 1000, refresh);
+ const { refreshTimer, lastRefresh } = useTickTick(5 * 1000);
const [checkGroupResults, setCheckGroupResults] = useState(() => {
return new Array(expectSummaryDocs)
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_simple_run_once_monitors.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_simple_run_once_monitors.ts
index e6cb731c605de..46d619798b8f7 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_simple_run_once_monitors.ts
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_simple_run_once_monitors.ts
@@ -19,7 +19,7 @@ export const useSimpleRunOnceMonitors = ({
expectSummaryDocs: number;
testRunId: string;
}) => {
- const { refreshTimer, lastRefresh } = useTickTick(2 * 1000, false);
+ const { refreshTimer, lastRefresh } = useTickTick(2 * 1000);
const { data, loading } = useEsSearch(
createEsParams({
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_tick_tick.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_tick_tick.ts
index c0e19e2450a71..de67aee828c91 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_tick_tick.ts
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_tick_tick.ts
@@ -5,19 +5,13 @@
* 2.0.
*/
-import { useEffect, useState, useContext } from 'react';
-import { SyntheticsRefreshContext } from '../../../contexts';
-
-export function useTickTick(interval?: number, refresh = true) {
- const { refreshApp } = useContext(SyntheticsRefreshContext);
+import { useEffect, useState } from 'react';
+export function useTickTick(interval?: number) {
const [nextTick, setNextTick] = useState(Date.now());
const [tickTick] = useState(() =>
setInterval(() => {
- if (refresh) {
- refreshApp();
- }
setNextTick(Date.now());
}, interval ?? 5 * 1000)
);
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.test.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.test.ts
new file mode 100644
index 0000000000000..7e5fd5aa8de05
--- /dev/null
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.test.ts
@@ -0,0 +1,153 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { getJourneyScreenshot } from './api';
+
+describe('getJourneyScreenshot', () => {
+ const url = 'http://localhost:5601/internal/uptime/journey/screenshot/checkgroup/step';
+ it('returns null if the response status is not 200', async () => {
+ const mockFetch = jest.fn().mockRejectedValueOnce({ status: 404 });
+ (global as any).fetch = mockFetch;
+
+ const result = await getJourneyScreenshot(url);
+ expect(result).toBeNull();
+ });
+
+ it('returns a ref if `content-type` is application/json', async () => {
+ const mockResponse = {
+ headers: {
+ get: jest.fn().mockImplementation((header) => {
+ if (header === 'content-type') return 'application/json';
+ if (header === 'caption-name') return 'stepName';
+ if (header === 'max-steps') return '0';
+ }),
+ },
+ json: jest.fn().mockResolvedValue({}),
+ status: 200,
+ };
+
+ const mockFetch = jest.fn().mockResolvedValue(mockResponse);
+ global.fetch = mockFetch;
+
+ const result = await getJourneyScreenshot('imgSrc');
+ expect(result).toEqual({
+ ref: {},
+ stepName: 'stepName',
+ maxSteps: 0,
+ });
+ });
+
+ it('returns a blob when `content-type` is not application/json', async () => {
+ const mockResponse = {
+ headers: {
+ get: jest.fn().mockImplementation((header) => {
+ if (header === 'content-type') return 'image/jpeg';
+ if (header === 'caption-name') return 'stepName';
+ if (header === 'max-steps') return '0';
+ }),
+ },
+ blob: jest.fn().mockResolvedValue(new Blob()),
+ status: 200,
+ };
+
+ const mockFetch = jest.fn().mockResolvedValue(mockResponse);
+ global.fetch = mockFetch;
+
+ const result = await getJourneyScreenshot(url);
+ expect(result).toEqual({
+ src: expect.any(String),
+ stepName: 'stepName',
+ maxSteps: 0,
+ });
+ });
+
+ it('does not retry if `shouldBackoff` is false', async () => {
+ const mockResponse = {
+ headers: {
+ get: jest.fn().mockImplementation((header) => {
+ if (header === 'content-type') return 'image/jpeg';
+ if (header === 'caption-name') return 'stepName';
+ if (header === 'max-steps') return '0';
+ }),
+ },
+ blob: jest.fn().mockResolvedValue(new Blob()),
+ status: 404,
+ };
+
+ const mockFetch = jest.fn().mockResolvedValue(mockResponse);
+ global.fetch = mockFetch;
+
+ const result = await getJourneyScreenshot(url, false);
+ expect(result).toBeNull();
+ expect(mockFetch).toHaveBeenCalledTimes(1);
+ });
+
+ it('will retry `n` times', async () => {
+ const mockFailResponse = {
+ headers: {
+ get: jest.fn().mockImplementation((header) => {
+ if (header === 'content-type') return 'image/jpeg';
+ if (header === 'caption-name') return 'stepName';
+ if (header === 'max-steps') return '0';
+ }),
+ },
+ blob: jest.fn().mockResolvedValue(new Blob()),
+ status: 404,
+ };
+ const mockSuccessResponse = {
+ headers: {
+ get: jest.fn().mockImplementation((header) => {
+ if (header === 'content-type') return 'application/json';
+ if (header === 'caption-name') return 'stepName';
+ if (header === 'max-steps') return '0';
+ }),
+ },
+ json: jest.fn().mockResolvedValue({}),
+ status: 200,
+ };
+ let fetchCount = 0;
+
+ const mockFetch = jest.fn().mockImplementation(() => {
+ fetchCount++;
+ if (fetchCount > 4) {
+ return mockSuccessResponse;
+ }
+ return mockFailResponse;
+ });
+ global.fetch = mockFetch;
+
+ const result = await getJourneyScreenshot(url);
+ expect(result).toEqual({
+ ref: {},
+ stepName: 'stepName',
+ maxSteps: 0,
+ });
+ });
+
+ it('will return null when retry is exhausted', async () => {
+ const maxRetry = 3;
+ const initialBackoff = 10;
+ const mockResponse = {
+ headers: {
+ get: jest.fn().mockImplementation((header) => {
+ if (header === 'content-type') return 'image/jpeg';
+ if (header === 'caption-name') return 'stepName';
+ if (header === 'max-steps') return '0';
+ }),
+ },
+ blob: jest.fn().mockResolvedValue(new Blob()),
+ status: 404,
+ };
+
+ const mockFetch = jest.fn().mockReturnValue(mockResponse);
+ global.fetch = mockFetch;
+
+ const result = await getJourneyScreenshot(url, true, maxRetry, initialBackoff);
+ expect(result).toBeNull();
+ expect(mockFetch).toBeCalledTimes(maxRetry + 1);
+ });
+});
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.ts
index 6759bee3b1fe3..33ed12db4b5d3 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.ts
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.ts
@@ -72,14 +72,26 @@ export async function fetchLastSuccessfulCheck({
}
export async function getJourneyScreenshot(
- imgSrc: string
+ imgSrc: string,
+ shouldBackoff = true,
+ maxRetry = 15,
+ initialBackoff = 100
): Promise {
try {
- const imgRequest = new Request(imgSrc);
+ let retryCount = 0;
- const response = await fetch(imgRequest);
+ let response: Response | null = null;
+ let backoff = initialBackoff;
+ while (response?.status !== 200) {
+ const imgRequest = new Request(imgSrc);
- if (response.status !== 200) {
+ response = await fetch(imgRequest);
+ if (!shouldBackoff || retryCount >= maxRetry || response.status !== 404) break;
+ await new Promise((r) => setTimeout(r, (backoff *= 2)));
+ retryCount++;
+ }
+
+ if (response?.status !== 200) {
return null;
}
From c5b4e6dad41eee8ac99c8b85fd107260ff7072a8 Mon Sep 17 00:00:00 2001
From: Mark Hopkin
Date: Mon, 20 Feb 2023 15:43:25 +0000
Subject: [PATCH 011/101] [Fleet][Bugfix] Fix "dataset cannot be modified"
error when editing input package policy (#151618)
## Summary
Originally reported by @ishleenk17, when editing a package policy we
were always getting "Dataset cannot be modified".
The issue was the prepare function wasn't being called for the edit
page, I have added some debug logs.
Skipping release ntoes as this bug was introduced in 8.7:
https://github.com/elastic/kibana/pull/148772
---
.../edit_package_policy_page/hooks/use_package_policy.tsx | 5 ++++-
x-pack/plugins/fleet/server/services/package_policy.ts | 8 ++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx
index 34f30e169cd97..240c09c7777eb 100644
--- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx
+++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx
@@ -36,6 +36,7 @@ import {
} from '../../create_package_policy_page/services';
import type { PackagePolicyFormState } from '../../create_package_policy_page/types';
import { fixApmDurationVars, hasUpgradeAvailable } from '../utils';
+import { prepareInputPackagePolicyDataset } from '../../create_package_policy_page/services/prepare_input_pkg_policy_dataset';
function mergeVars(
packageVars?: PackagePolicyConfigRecord,
@@ -94,7 +95,9 @@ export function usePackagePolicyWithRelatedData(
const savePackagePolicy = async () => {
setFormState('LOADING');
- const { elasticsearch, ...restPackagePolicy } = packagePolicy; // ignore 'elasticsearch' property since it fails route validation
+ const {
+ policy: { elasticsearch, ...restPackagePolicy },
+ } = await prepareInputPackagePolicyDataset(packagePolicy);
const result = await sendUpdatePackagePolicy(packagePolicyId, restPackagePolicy);
setFormState('SUBMITTED');
return result;
diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts
index 5eacf8dd0c3a8..282cb85b2b895 100644
--- a/x-pack/plugins/fleet/server/services/package_policy.ts
+++ b/x-pack/plugins/fleet/server/services/package_policy.ts
@@ -2151,6 +2151,14 @@ export function _validateRestrictedFieldsNotModifiedOrThrow(opts: {
oldStream?.vars['data_stream.dataset']?.value !==
stream?.vars?.['data_stream.dataset']?.value
) {
+ // seeing this error in dev? Package policy must be called with prepareInputPackagePolicyDataset function first in UI code
+ appContextService
+ .getLogger()
+ .debug(
+ `Rejecting package policy update due to dataset change, old val '${
+ oldStream?.vars['data_stream.dataset']?.value
+ }, new val '${JSON.stringify(stream?.vars?.['data_stream.dataset']?.value)}'`
+ );
throw new PackagePolicyValidationError(
i18n.translate('xpack.fleet.updatePackagePolicy.datasetCannotBeModified', {
defaultMessage:
From ffd607295e0e6afb429692e703aab4085dabbdc4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Loix?=
Date: Mon, 20 Feb 2023 16:07:14 +0000
Subject: [PATCH 012/101] =?UTF-8?q?[Content=20management]=C2=A0RPC=20layer?=
=?UTF-8?q?=20(#151264)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../content_management/common/index.ts | 7 +-
src/plugins/content_management/common/rpc.ts | 148 -----------
.../common/rpc/constants.ts | 11 +
.../content_management/common/rpc/create.ts | 33 +++
.../content_management/common/rpc/delete.ts | 28 +++
.../content_management/common/rpc/get.ts | 29 +++
.../content_management/common/rpc/index.ts | 18 ++
.../content_management/common/rpc/rpc.ts | 25 ++
.../content_management/common/rpc/search.ts | 33 +++
.../content_management/common/rpc/types.ts | 13 +
.../content_management/common/rpc/update.ts | 35 +++
.../content_client/content_client.test.ts | 20 +-
.../public/content_client/content_client.tsx | 24 +-
.../content_client_mutation_hooks.test.tsx | 6 +-
.../content_client_query_hooks.test.tsx | 8 +-
.../content_client_query_hooks.tsx | 7 +-
.../public/crud_client/crud_client.ts | 4 +-
.../public/rpc_client/rpc_client.ts | 14 +-
.../server/core/core.test.ts | 45 ++--
.../content_management/server/core/index.ts | 4 +-
.../server/core/mocks/in_memory_storage.ts | 20 +-
.../server/core/mocks/index.ts | 4 +-
.../content_management/server/core/types.ts | 54 +++-
.../content_management/server/plugin.test.ts | 185 ++++++++++++++
.../content_management/server/plugin.ts | 20 +-
.../content_management/server/rpc/index.ts | 17 ++
.../server/rpc/procedures/all_procedures.ts | 20 ++
.../server/rpc/procedures/create.test.ts | 238 ++++++++++++++++++
.../server/rpc/procedures/create.ts | 66 +++++
.../server/rpc/procedures/get.test.ts | 200 +++++++++++++++
.../server/rpc/procedures/get.ts | 53 ++++
.../server/rpc/procedures/index.ts | 25 ++
.../server/rpc/routes/error_wrapper.ts | 25 ++
.../server/rpc/routes/index.ts | 9 +
.../server/rpc/routes/routes.ts | 69 +++++
.../server/rpc/rpc_service.test.ts | 105 ++++++++
.../server/rpc/rpc_service.ts | 60 +++++
.../content_management/server/rpc/types.ts | 14 ++
.../content_management/server/utils.ts | 18 ++
39 files changed, 1486 insertions(+), 228 deletions(-)
delete mode 100644 src/plugins/content_management/common/rpc.ts
create mode 100644 src/plugins/content_management/common/rpc/constants.ts
create mode 100644 src/plugins/content_management/common/rpc/create.ts
create mode 100644 src/plugins/content_management/common/rpc/delete.ts
create mode 100644 src/plugins/content_management/common/rpc/get.ts
create mode 100644 src/plugins/content_management/common/rpc/index.ts
create mode 100644 src/plugins/content_management/common/rpc/rpc.ts
create mode 100644 src/plugins/content_management/common/rpc/search.ts
create mode 100644 src/plugins/content_management/common/rpc/types.ts
create mode 100644 src/plugins/content_management/common/rpc/update.ts
create mode 100644 src/plugins/content_management/server/plugin.test.ts
create mode 100644 src/plugins/content_management/server/rpc/index.ts
create mode 100644 src/plugins/content_management/server/rpc/procedures/all_procedures.ts
create mode 100644 src/plugins/content_management/server/rpc/procedures/create.test.ts
create mode 100644 src/plugins/content_management/server/rpc/procedures/create.ts
create mode 100644 src/plugins/content_management/server/rpc/procedures/get.test.ts
create mode 100644 src/plugins/content_management/server/rpc/procedures/get.ts
create mode 100644 src/plugins/content_management/server/rpc/procedures/index.ts
create mode 100644 src/plugins/content_management/server/rpc/routes/error_wrapper.ts
create mode 100644 src/plugins/content_management/server/rpc/routes/index.ts
create mode 100644 src/plugins/content_management/server/rpc/routes/routes.ts
create mode 100644 src/plugins/content_management/server/rpc/rpc_service.test.ts
create mode 100644 src/plugins/content_management/server/rpc/rpc_service.ts
create mode 100644 src/plugins/content_management/server/rpc/types.ts
create mode 100644 src/plugins/content_management/server/utils.ts
diff --git a/src/plugins/content_management/common/index.ts b/src/plugins/content_management/common/index.ts
index 1670078ae8d79..ab127d4691fb0 100644
--- a/src/plugins/content_management/common/index.ts
+++ b/src/plugins/content_management/common/index.ts
@@ -7,14 +7,15 @@
*/
export { PLUGIN_ID, API_ENDPOINT } from './constants';
+
export type {
ProcedureSchemas,
ProcedureName,
GetIn,
CreateIn,
- SearchIn,
- SearchOut,
- DeleteIn,
UpdateIn,
+ DeleteIn,
+ SearchIn,
} from './rpc';
+
export { procedureNames, schemas as rpcSchemas } from './rpc';
diff --git a/src/plugins/content_management/common/rpc.ts b/src/plugins/content_management/common/rpc.ts
deleted file mode 100644
index aa0d6a3b2e2c8..0000000000000
--- a/src/plugins/content_management/common/rpc.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
- * in compliance with, at your election, the Elastic License 2.0 or the Server
- * Side Public License, v 1.
- */
-import { schema, Type } from '@kbn/config-schema';
-
-export interface ProcedureSchemas {
- in?: Type | false;
- out?: Type | false;
-}
-
-export const procedureNames = ['get', 'create', 'update', 'delete', 'search'] as const;
-
-export type ProcedureName = typeof procedureNames[number];
-
-// ---------------------------------
-// API
-// ---------------------------------
-
-// ------- GET --------
-const getSchemas: ProcedureSchemas = {
- in: schema.object(
- {
- contentType: schema.string(),
- id: schema.string(),
- options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
- },
- { unknowns: 'forbid' }
- ),
- // --> "out" will be specified by each storage layer
- out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
-};
-
-export interface GetIn {
- id: string;
- contentType: string;
- options?: Options;
-}
-
-// -- Create content
-const createSchemas: ProcedureSchemas = {
- in: schema.object(
- {
- contentType: schema.string(),
- data: schema.object({}, { unknowns: 'allow' }),
- options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
- },
- { unknowns: 'forbid' }
- ),
- // Here we could enforce that an "id" field is returned
- out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
-};
-
-export interface CreateIn<
- T extends string = string,
- Data extends object = Record,
- Options extends object = any
-> {
- contentType: T;
- data: Data;
- options?: Options;
-}
-
-// -- Update content
-const updateSchemas: ProcedureSchemas = {
- in: schema.object(
- {
- contentType: schema.string(),
- data: schema.object({}, { unknowns: 'allow' }),
- options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
- },
- { unknowns: 'forbid' }
- ),
- out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
-};
-
-export interface UpdateIn<
- T extends string = string,
- Data extends object = Record,
- Options extends object = any
-> {
- contentType: T;
- data: Data;
- options?: Options;
-}
-
-// -- Delete content
-const deleteSchemas: ProcedureSchemas = {
- in: schema.object(
- {
- contentType: schema.string(),
- data: schema.object({}, { unknowns: 'allow' }),
- options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
- },
- { unknowns: 'forbid' }
- ),
- out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
-};
-
-export interface DeleteIn<
- T extends string = string,
- Data extends object = Record,
- Options extends object = any
-> {
- contentType: T;
- data: Data;
- options?: Options;
-}
-
-// -- Search content
-const searchSchemas: ProcedureSchemas = {
- in: schema.object(
- {
- contentType: schema.string(),
- data: schema.object({}, { unknowns: 'allow' }),
- options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
- },
- { unknowns: 'forbid' }
- ),
- out: schema.object({ hits: schema.arrayOf(schema.object({}, { unknowns: 'allow' })) }),
-};
-
-export interface SearchIn<
- T extends string = string,
- Params extends object = Record,
- Options extends object = any
-> {
- contentType: T;
- params: Params;
- options?: Options;
-}
-
-export interface SearchOut> {
- hits: Data[];
-}
-
-export const schemas: {
- [key in ProcedureName]: ProcedureSchemas;
-} = {
- get: getSchemas,
- create: createSchemas,
- update: updateSchemas,
- delete: deleteSchemas,
- search: searchSchemas,
-};
diff --git a/src/plugins/content_management/common/rpc/constants.ts b/src/plugins/content_management/common/rpc/constants.ts
new file mode 100644
index 0000000000000..98d110ada127f
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/constants.ts
@@ -0,0 +1,11 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+export const procedureNames = ['get', 'create', 'update', 'delete', 'search'] as const;
+
+export type ProcedureName = typeof procedureNames[number];
diff --git a/src/plugins/content_management/common/rpc/create.ts b/src/plugins/content_management/common/rpc/create.ts
new file mode 100644
index 0000000000000..b5a7cfa7cd0e8
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/create.ts
@@ -0,0 +1,33 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import { schema } from '@kbn/config-schema';
+
+import type { ProcedureSchemas } from './types';
+
+export const createSchemas: ProcedureSchemas = {
+ in: schema.object(
+ {
+ contentTypeId: schema.string(),
+ // --> "data" to create a content will be defined by each content type
+ data: schema.recordOf(schema.string(), schema.any()),
+ options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+ },
+ { unknowns: 'forbid' }
+ ),
+ out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+};
+
+export interface CreateIn<
+ T extends string = string,
+ Data extends object = object,
+ Options extends object = object
+> {
+ contentTypeId: T;
+ data: Data;
+ options?: Options;
+}
diff --git a/src/plugins/content_management/common/rpc/delete.ts b/src/plugins/content_management/common/rpc/delete.ts
new file mode 100644
index 0000000000000..261c6397ab578
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/delete.ts
@@ -0,0 +1,28 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import { schema } from '@kbn/config-schema';
+
+import type { ProcedureSchemas } from './types';
+
+export const deleteSchemas: ProcedureSchemas = {
+ in: schema.object(
+ {
+ contentTypeId: schema.string(),
+ id: schema.string({ minLength: 1 }),
+ options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+ },
+ { unknowns: 'forbid' }
+ ),
+ out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+};
+
+export interface DeleteIn {
+ contentTypeId: T;
+ id: string;
+ options?: Options;
+}
diff --git a/src/plugins/content_management/common/rpc/get.ts b/src/plugins/content_management/common/rpc/get.ts
new file mode 100644
index 0000000000000..a408a5f1afe83
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/get.ts
@@ -0,0 +1,29 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import { schema } from '@kbn/config-schema';
+
+import type { ProcedureSchemas } from './types';
+
+export const getSchemas: ProcedureSchemas = {
+ in: schema.object(
+ {
+ contentTypeId: schema.string(),
+ id: schema.string({ minLength: 1 }),
+ options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+ },
+ { unknowns: 'forbid' }
+ ),
+ // --> "out" will be (optionally) specified by each storage layer
+ out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+};
+
+export interface GetIn {
+ id: string;
+ contentTypeId: T;
+ options?: Options;
+}
diff --git a/src/plugins/content_management/common/rpc/index.ts b/src/plugins/content_management/common/rpc/index.ts
new file mode 100644
index 0000000000000..961eecae0c1d3
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/index.ts
@@ -0,0 +1,18 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+export { schemas } from './rpc';
+export { procedureNames } from './constants';
+
+export type { GetIn } from './get';
+export type { CreateIn } from './create';
+export type { UpdateIn } from './update';
+export type { DeleteIn } from './delete';
+export type { SearchIn } from './search';
+export type { ProcedureSchemas } from './types';
+export type { ProcedureName } from './constants';
diff --git a/src/plugins/content_management/common/rpc/rpc.ts b/src/plugins/content_management/common/rpc/rpc.ts
new file mode 100644
index 0000000000000..7c763afe9a716
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/rpc.ts
@@ -0,0 +1,25 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import type { ProcedureName } from './constants';
+import type { ProcedureSchemas } from './types';
+import { getSchemas } from './get';
+import { createSchemas } from './create';
+import { updateSchemas } from './update';
+import { deleteSchemas } from './delete';
+import { searchSchemas } from './search';
+
+export const schemas: {
+ [key in ProcedureName]: ProcedureSchemas;
+} = {
+ get: getSchemas,
+ create: createSchemas,
+ update: updateSchemas,
+ delete: deleteSchemas,
+ search: searchSchemas,
+};
diff --git a/src/plugins/content_management/common/rpc/search.ts b/src/plugins/content_management/common/rpc/search.ts
new file mode 100644
index 0000000000000..904784aa93e8a
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/search.ts
@@ -0,0 +1,33 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import { schema } from '@kbn/config-schema';
+
+import type { ProcedureSchemas } from './types';
+
+export const searchSchemas: ProcedureSchemas = {
+ in: schema.object(
+ {
+ contentTypeId: schema.string(),
+ // --> "query" that can be executed will be defined by each content type
+ query: schema.recordOf(schema.string(), schema.any()),
+ options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+ },
+ { unknowns: 'forbid' }
+ ),
+ out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+};
+
+export interface SearchIn<
+ T extends string = string,
+ Query extends object = object,
+ Options extends object = object
+> {
+ contentTypeId: T;
+ query: Query;
+ options?: Options;
+}
diff --git a/src/plugins/content_management/common/rpc/types.ts b/src/plugins/content_management/common/rpc/types.ts
new file mode 100644
index 0000000000000..6a19a80956708
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/types.ts
@@ -0,0 +1,13 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import type { Type } from '@kbn/config-schema';
+
+export interface ProcedureSchemas {
+ in: Type | false;
+ out: Type | false;
+}
diff --git a/src/plugins/content_management/common/rpc/update.ts b/src/plugins/content_management/common/rpc/update.ts
new file mode 100644
index 0000000000000..a523822377eb3
--- /dev/null
+++ b/src/plugins/content_management/common/rpc/update.ts
@@ -0,0 +1,35 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import { schema } from '@kbn/config-schema';
+
+import type { ProcedureSchemas } from './types';
+
+export const updateSchemas: ProcedureSchemas = {
+ in: schema.object(
+ {
+ contentTypeId: schema.string(),
+ id: schema.string({ minLength: 1 }),
+ // --> "data" to update a content will be defined by each content type
+ data: schema.recordOf(schema.string(), schema.any()),
+ options: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+ },
+ { unknowns: 'forbid' }
+ ),
+ out: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+};
+
+export interface UpdateIn<
+ T extends string = string,
+ Data extends object = object,
+ Options extends object = object
+> {
+ contentTypeId: T;
+ id: string;
+ data: Data;
+ options?: Options;
+}
diff --git a/src/plugins/content_management/public/content_client/content_client.test.ts b/src/plugins/content_management/public/content_client/content_client.test.ts
index 02bd67a1da8da..238570aeb3f49 100644
--- a/src/plugins/content_management/public/content_client/content_client.test.ts
+++ b/src/plugins/content_management/public/content_client/content_client.test.ts
@@ -10,7 +10,7 @@ import { lastValueFrom } from 'rxjs';
import { takeWhile, toArray } from 'rxjs/operators';
import { createCrudClientMock } from '../crud_client/crud_client.mock';
import { ContentClient } from './content_client';
-import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common';
+import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn } from '../../common';
const setup = () => {
const crudClient = createCrudClientMock();
@@ -21,7 +21,7 @@ const setup = () => {
describe('#get', () => {
it('calls rpcClient.get with input and returns output', async () => {
const { crudClient, contentClient } = setup();
- const input: GetIn = { id: 'test', contentType: 'testType' };
+ const input: GetIn = { id: 'test', contentTypeId: 'testType' };
const output = { test: 'test' };
crudClient.get.mockResolvedValueOnce(output);
expect(await contentClient.get(input)).toEqual(output);
@@ -30,7 +30,7 @@ describe('#get', () => {
it('calls rpcClient.get$ with input and returns output', async () => {
const { crudClient, contentClient } = setup();
- const input: GetIn = { id: 'test', contentType: 'testType' };
+ const input: GetIn = { id: 'test', contentTypeId: 'testType' };
const output = { test: 'test' };
crudClient.get.mockResolvedValueOnce(output);
const get$ = contentClient.get$(input).pipe(
@@ -53,7 +53,7 @@ describe('#get', () => {
describe('#create', () => {
it('calls rpcClient.create with input and returns output', async () => {
const { crudClient, contentClient } = setup();
- const input: CreateIn = { contentType: 'testType', data: { foo: 'bar' } };
+ const input: CreateIn = { contentTypeId: 'testType', data: { foo: 'bar' } };
const output = { test: 'test' };
crudClient.create.mockResolvedValueOnce(output);
@@ -65,7 +65,7 @@ describe('#create', () => {
describe('#update', () => {
it('calls rpcClient.update with input and returns output', async () => {
const { crudClient, contentClient } = setup();
- const input: UpdateIn = { contentType: 'testType', data: { id: 'test', foo: 'bar' } };
+ const input: UpdateIn = { contentTypeId: 'testType', id: 'test', data: { foo: 'bar' } };
const output = { test: 'test' };
crudClient.update.mockResolvedValueOnce(output);
@@ -77,7 +77,7 @@ describe('#update', () => {
describe('#delete', () => {
it('calls rpcClient.delete with input and returns output', async () => {
const { crudClient, contentClient } = setup();
- const input: DeleteIn = { contentType: 'testType', data: { id: 'test' } };
+ const input: DeleteIn = { contentTypeId: 'testType', id: 'test' };
const output = { test: 'test' };
crudClient.delete.mockResolvedValueOnce(output);
@@ -89,8 +89,8 @@ describe('#delete', () => {
describe('#search', () => {
it('calls rpcClient.search with input and returns output', async () => {
const { crudClient, contentClient } = setup();
- const input: SearchIn = { contentType: 'testType', params: {} };
- const output: SearchOut = { hits: [{ test: 'test' }] };
+ const input: SearchIn = { contentTypeId: 'testType', query: {} };
+ const output = { hits: [{ id: 'test' }] };
crudClient.search.mockResolvedValueOnce(output);
expect(await contentClient.search(input)).toEqual(output);
expect(crudClient.search).toBeCalledWith(input);
@@ -98,8 +98,8 @@ describe('#search', () => {
it('calls rpcClient.search$ with input and returns output', async () => {
const { crudClient, contentClient } = setup();
- const input: SearchIn = { contentType: 'testType', params: {} };
- const output: SearchOut = { hits: [{ test: 'test' }] };
+ const input: SearchIn = { contentTypeId: 'testType', query: {} };
+ const output = { hits: [{ id: 'test' }] };
crudClient.search.mockResolvedValueOnce(output);
const search$ = contentClient.search$(input).pipe(
takeWhile((result) => {
diff --git a/src/plugins/content_management/public/content_client/content_client.tsx b/src/plugins/content_management/public/content_client/content_client.tsx
index 4a4952a082060..149e509ae9510 100644
--- a/src/plugins/content_management/public/content_client/content_client.tsx
+++ b/src/plugins/content_management/public/content_client/content_client.tsx
@@ -9,7 +9,7 @@
import { QueryClient } from '@tanstack/react-query';
import { createQueryObservable } from './query_observable';
import type { CrudClient } from '../crud_client';
-import type { CreateIn, GetIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common';
+import type { CreateIn, GetIn, UpdateIn, DeleteIn, SearchIn } from '../../common';
const queryKeyBuilder = {
all: (type: string) => [type] as const,
@@ -29,14 +29,14 @@ const createQueryOptionBuilder = ({
return {
get: (input: I) => {
return {
- queryKey: queryKeyBuilder.item(input.contentType, input.id),
- queryFn: () => crudClientProvider(input.contentType).get(input),
+ queryKey: queryKeyBuilder.item(input.contentTypeId, input.id),
+ queryFn: () => crudClientProvider(input.contentTypeId).get(input),
};
},
- search: (input: I) => {
+ search: (input: I) => {
return {
- queryKey: queryKeyBuilder.search(input.contentType, input.params),
- queryFn: () => crudClientProvider(input.contentType).search(input),
+ queryKey: queryKeyBuilder.search(input.contentTypeId, input.query),
+ queryFn: () => crudClientProvider(input.contentTypeId).search(input),
};
},
};
@@ -62,22 +62,22 @@ export class ContentClient {
}
create(input: I): Promise {
- return this.crudClientProvider(input.contentType).create(input);
+ return this.crudClientProvider(input.contentTypeId).create(input);
}
update(input: I): Promise {
- return this.crudClientProvider(input.contentType).update(input);
+ return this.crudClientProvider(input.contentTypeId).update(input);
}
delete(input: I): Promise {
- return this.crudClientProvider(input.contentType).delete(input);
+ return this.crudClientProvider(input.contentTypeId).delete(input);
}
- search(input: I): Promise {
- return this.crudClientProvider(input.contentType).search(input);
+ search(input: I): Promise {
+ return this.crudClientProvider(input.contentTypeId).search(input);
}
- search$(input: I) {
+ search$(input: I) {
return createQueryObservable(this.queryClient, this.queryOptionBuilder.search(input));
}
}
diff --git a/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx b/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx
index ca1d8fe8f8e29..7a19cf2dae7a9 100644
--- a/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx
+++ b/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx
@@ -36,7 +36,7 @@ const setup = () => {
describe('useCreateContentMutation', () => {
test('should call rpcClient.create with input and resolve with output', async () => {
const { Wrapper, crudClient } = setup();
- const input: CreateIn = { contentType: 'testType', data: { foo: 'bar' } };
+ const input: CreateIn = { contentTypeId: 'testType', data: { foo: 'bar' } };
const output = { test: 'test' };
crudClient.create.mockResolvedValueOnce(output);
const { result, waitFor } = renderHook(() => useCreateContentMutation(), { wrapper: Wrapper });
@@ -51,7 +51,7 @@ describe('useCreateContentMutation', () => {
describe('useUpdateContentMutation', () => {
test('should call rpcClient.update with input and resolve with output', async () => {
const { Wrapper, crudClient } = setup();
- const input: UpdateIn = { contentType: 'testType', data: { foo: 'bar' } };
+ const input: UpdateIn = { contentTypeId: 'testType', id: 'test', data: { foo: 'bar' } };
const output = { test: 'test' };
crudClient.update.mockResolvedValueOnce(output);
const { result, waitFor } = renderHook(() => useUpdateContentMutation(), { wrapper: Wrapper });
@@ -66,7 +66,7 @@ describe('useUpdateContentMutation', () => {
describe('useDeleteContentMutation', () => {
test('should call rpcClient.delete with input and resolve with output', async () => {
const { Wrapper, crudClient } = setup();
- const input: DeleteIn = { contentType: 'testType', data: { foo: 'bar' } };
+ const input: DeleteIn = { contentTypeId: 'testType', id: 'test' };
const output = { test: 'test' };
crudClient.delete.mockResolvedValueOnce(output);
const { result, waitFor } = renderHook(() => useDeleteContentMutation(), { wrapper: Wrapper });
diff --git a/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx b/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx
index 7ed1ff8412a45..a716831efc3ad 100644
--- a/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx
+++ b/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx
@@ -12,7 +12,7 @@ import { ContentClientProvider } from './content_client_context';
import { ContentClient } from './content_client';
import { createCrudClientMock } from '../crud_client/crud_client.mock';
import { useGetContentQuery, useSearchContentQuery } from './content_client_query_hooks';
-import type { GetIn, SearchIn, SearchOut } from '../../common';
+import type { GetIn, SearchIn } from '../../common';
const setup = () => {
const crudClient = createCrudClientMock();
@@ -32,7 +32,7 @@ const setup = () => {
describe('useGetContentQuery', () => {
test('should call rpcClient.get with input and resolve with output', async () => {
const { crudClient, Wrapper } = setup();
- const input: GetIn = { id: 'test', contentType: 'testType' };
+ const input: GetIn = { id: 'test', contentTypeId: 'testType' };
const output = { test: 'test' };
crudClient.get.mockResolvedValueOnce(output);
const { result, waitFor } = renderHook(() => useGetContentQuery(input), { wrapper: Wrapper });
@@ -44,8 +44,8 @@ describe('useGetContentQuery', () => {
describe('useSearchContentQuery', () => {
test('should call rpcClient.search with input and resolve with output', async () => {
const { crudClient, Wrapper } = setup();
- const input: SearchIn = { contentType: 'testType', params: {} };
- const output: SearchOut = { hits: [{ test: 'test' }] };
+ const input: SearchIn = { contentTypeId: 'testType', query: {} };
+ const output = { hits: [{ id: 'test' }] };
crudClient.search.mockResolvedValueOnce(output);
const { result, waitFor } = renderHook(() => useSearchContentQuery(input), {
wrapper: Wrapper,
diff --git a/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx b/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx
index 8231d7bfc9390..3549b2489b27d 100644
--- a/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx
+++ b/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx
@@ -8,7 +8,7 @@
import { useQuery, QueryObserverOptions } from '@tanstack/react-query';
import { useContentClient } from './content_client_context';
-import type { GetIn, SearchIn, SearchOut } from '../../common';
+import type { GetIn, SearchIn } from '../../common';
/**
* Exposed `useQuery` options
@@ -36,10 +36,7 @@ export const useGetContentQuery = (
* @param input - get content identifier like "id" and "contentType"
* @param queryOptions - query options
*/
-export const useSearchContentQuery = <
- I extends SearchIn = SearchIn,
- O extends SearchOut = SearchOut
->(
+export const useSearchContentQuery = (
input: I,
queryOptions?: QueryOptions
) => {
diff --git a/src/plugins/content_management/public/crud_client/crud_client.ts b/src/plugins/content_management/public/crud_client/crud_client.ts
index e2c5fd8fb86a5..094703a97d0c0 100644
--- a/src/plugins/content_management/public/crud_client/crud_client.ts
+++ b/src/plugins/content_management/public/crud_client/crud_client.ts
@@ -6,12 +6,12 @@
* Side Public License, v 1.
*/
-import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common';
+import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn } from '../../common';
export interface CrudClient {
get(input: I): Promise;
create(input: I): Promise;
update(input: I): Promise;
delete(input: I): Promise;
- search(input: I): Promise;
+ search(input: I): Promise;
}
diff --git a/src/plugins/content_management/public/rpc_client/rpc_client.ts b/src/plugins/content_management/public/rpc_client/rpc_client.ts
index 5ce2e781dcbb1..f4095c430654e 100644
--- a/src/plugins/content_management/public/rpc_client/rpc_client.ts
+++ b/src/plugins/content_management/public/rpc_client/rpc_client.ts
@@ -8,15 +8,7 @@
import { HttpSetup } from '@kbn/core/public';
import { API_ENDPOINT } from '../../common';
-import type {
- GetIn,
- CreateIn,
- UpdateIn,
- DeleteIn,
- SearchIn,
- SearchOut,
- ProcedureName,
-} from '../../common';
+import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn, ProcedureName } from '../../common';
import type { CrudClient } from '../crud_client/crud_client';
export class RpcClient implements CrudClient {
@@ -38,9 +30,7 @@ export class RpcClient implements CrudClient {
return this.sendMessage('delete', input);
}
- public search(
- input: I
- ): Promise {
+ public search(input: I): Promise {
return this.sendMessage('search', input);
}
diff --git a/src/plugins/content_management/server/core/core.test.ts b/src/plugins/content_management/server/core/core.test.ts
index 19670740290f8..8a73a48fbbc6d 100644
--- a/src/plugins/content_management/server/core/core.test.ts
+++ b/src/plugins/content_management/server/core/core.test.ts
@@ -5,9 +5,11 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
+import { schema } from '@kbn/config-schema';
+
import { loggingSystemMock } from '@kbn/core/server/mocks';
import { Core } from './core';
-import { createMemoryStorage, MockContent } from './mocks';
+import { createMemoryStorage, FooContent } from './mocks';
import { ContentRegistry } from './registry';
import { ContentCrud } from './crud';
import type {
@@ -24,19 +26,30 @@ import type {
DeleteItemSuccess,
DeleteItemError,
} from './event_types';
+import { ContentTypeDefinition, StorageContext } from './types';
const logger = loggingSystemMock.createLogger();
const FOO_CONTENT_ID = 'foo';
+const fooSchema = schema.object({ title: schema.string() });
const setup = ({ registerFooType = false }: { registerFooType?: boolean } = {}) => {
- const ctx = {};
+ const ctx: StorageContext = {
+ requestHandlerContext: {} as any,
+ };
const core = new Core({ logger });
const coreSetup = core.setup();
- const contentDefinition = {
+ const contentDefinition: ContentTypeDefinition = {
id: FOO_CONTENT_ID,
storage: createMemoryStorage(),
+ schemas: {
+ content: {
+ create: { in: { data: fooSchema } },
+ update: { in: { data: fooSchema } },
+ search: { in: { query: schema.any() } },
+ },
+ },
};
const cleanUp = () => {
coreSetup.api.eventBus.stop();
@@ -124,7 +137,7 @@ describe('Content Core', () => {
const res = await fooContentCrud!.get(ctx, '1234');
expect(res.item).toBeUndefined();
- await fooContentCrud!.create, { id: string }>(
+ await fooContentCrud!.create, { id: string }>(
ctx,
{ title: 'Hello' },
{ id: '1234' } // We send this "id" option to specify the id of the content created
@@ -143,12 +156,12 @@ describe('Content Core', () => {
test('update()', async () => {
const { fooContentCrud, ctx, cleanUp } = setup({ registerFooType: true });
- await fooContentCrud!.create, { id: string }>(
+ await fooContentCrud!.create, { id: string }>(
ctx,
{ title: 'Hello' },
{ id: '1234' }
);
- await fooContentCrud!.update>(ctx, '1234', { title: 'changed' });
+ await fooContentCrud!.update>(ctx, '1234', { title: 'changed' });
expect(fooContentCrud!.get(ctx, '1234')).resolves.toEqual({
contentTypeId: FOO_CONTENT_ID,
item: {
@@ -163,12 +176,12 @@ describe('Content Core', () => {
test('update() - options are forwared to storage layer', async () => {
const { fooContentCrud, ctx, cleanUp } = setup({ registerFooType: true });
- await fooContentCrud!.create, { id: string }>(
+ await fooContentCrud!.create, { id: string }>(
ctx,
{ title: 'Hello' },
{ id: '1234' }
);
- const res = await fooContentCrud!.update>(
+ const res = await fooContentCrud!.update>(
ctx,
'1234',
{ title: 'changed' },
@@ -199,7 +212,7 @@ describe('Content Core', () => {
test('delete()', async () => {
const { fooContentCrud, ctx, cleanUp } = setup({ registerFooType: true });
- await fooContentCrud!.create, { id: string }>(
+ await fooContentCrud!.create, { id: string }>(
ctx,
{ title: 'Hello' },
{ id: '1234' }
@@ -220,7 +233,7 @@ describe('Content Core', () => {
test('delete() - options are forwared to storage layer', async () => {
const { fooContentCrud, ctx, cleanUp } = setup({ registerFooType: true });
- await fooContentCrud!.create, { id: string }>(
+ await fooContentCrud!.create, { id: string }>(
ctx,
{ title: 'Hello' },
{ id: '1234' }
@@ -311,7 +324,7 @@ describe('Content Core', () => {
register(contentDefinition);
- await crud(FOO_CONTENT_ID).create, { id: string }>(
+ await crud(FOO_CONTENT_ID).create, { id: string }>(
ctx,
{ title: 'Hello' },
{ id: '1234' }
@@ -351,7 +364,7 @@ describe('Content Core', () => {
const data = { title: 'Hello' };
- await fooContentCrud!.create, { id: string }>(ctx, data, {
+ await fooContentCrud!.create, { id: string }>(ctx, data, {
id: '1234',
});
@@ -416,7 +429,7 @@ describe('Content Core', () => {
const listener = jest.fn();
const sub = eventBus.events$.subscribe(listener);
- const promise = fooContentCrud!.create, { id: string }>(
+ const promise = fooContentCrud!.create, { id: string }>(
ctx,
data,
{
@@ -452,7 +465,7 @@ describe('Content Core', () => {
const errorMessage = 'Ohhh no!';
const reject = jest.fn();
await fooContentCrud!
- .create, { id: string; errorToThrow: string }>(ctx, data, {
+ .create, { id: string; errorToThrow: string }>(ctx, data, {
id: '1234',
errorToThrow: errorMessage,
})
@@ -479,7 +492,7 @@ describe('Content Core', () => {
registerFooType: true,
});
- await fooContentCrud!.create, { id: string }>(
+ await fooContentCrud!.create, { id: string }>(
ctx,
{ title: 'Hello' },
{
@@ -551,7 +564,7 @@ describe('Content Core', () => {
registerFooType: true,
});
- await fooContentCrud!.create, { id: string }>(
+ await fooContentCrud!.create, { id: string }>(
ctx,
{ title: 'Hello' },
{
diff --git a/src/plugins/content_management/server/core/index.ts b/src/plugins/content_management/server/core/index.ts
index f292f5fa2df9a..8490272e90fb4 100644
--- a/src/plugins/content_management/server/core/index.ts
+++ b/src/plugins/content_management/server/core/index.ts
@@ -12,6 +12,8 @@ export type { CoreApi } from './core';
export type { ContentType } from './content_type';
-export type { ContentStorage, ContentTypeDefinition, StorageContext } from './types';
+export type { ContentStorage, ContentTypeDefinition, StorageContext, RpcSchemas } from './types';
export type { ContentRegistry } from './registry';
+
+export type { ContentCrud } from './crud';
diff --git a/src/plugins/content_management/server/core/mocks/in_memory_storage.ts b/src/plugins/content_management/server/core/mocks/in_memory_storage.ts
index a2297731198af..5497cf85cdf09 100644
--- a/src/plugins/content_management/server/core/mocks/in_memory_storage.ts
+++ b/src/plugins/content_management/server/core/mocks/in_memory_storage.ts
@@ -8,7 +8,7 @@
import type { ContentStorage, StorageContext } from '../types';
-export interface MockContent {
+export interface FooContent {
id: string;
title: string;
}
@@ -16,7 +16,7 @@ export interface MockContent {
let idx = 0;
class InMemoryStorage implements ContentStorage {
- private db: Map = new Map();
+ private db: Map = new Map();
async get(
ctx: StorageContext,
@@ -48,9 +48,9 @@ class InMemoryStorage implements ContentStorage {
async create(
ctx: StorageContext,
- data: Omit,
+ data: Omit,
{ id: _id, errorToThrow }: { id?: string; errorToThrow?: string } = {}
- ): Promise {
+ ): Promise {
// This allows us to test that proper error events are thrown when the storage layer op fails
if (errorToThrow) {
throw new Error(errorToThrow);
@@ -59,7 +59,7 @@ class InMemoryStorage implements ContentStorage {
const nextId = idx++;
const id = _id ?? nextId.toString();
- const content: MockContent = {
+ const content: FooContent = {
...data,
id,
};
@@ -72,7 +72,7 @@ class InMemoryStorage implements ContentStorage {
async update(
ctx: StorageContext,
id: string,
- data: Partial>,
+ data: Partial>,
{ forwardInResponse, errorToThrow }: { forwardInResponse?: object; errorToThrow?: string } = {}
) {
// This allows us to test that proper error events are thrown when the storage layer op fails
@@ -139,3 +139,11 @@ class InMemoryStorage implements ContentStorage {
export const createMemoryStorage = () => {
return new InMemoryStorage();
};
+
+export const createMockedStorage = (): jest.Mocked => ({
+ get: jest.fn(),
+ bulkGet: jest.fn(),
+ create: jest.fn(),
+ update: jest.fn(),
+ delete: jest.fn(),
+});
diff --git a/src/plugins/content_management/server/core/mocks/index.ts b/src/plugins/content_management/server/core/mocks/index.ts
index b7f9d8a2f2585..b7b8da240a4e7 100644
--- a/src/plugins/content_management/server/core/mocks/index.ts
+++ b/src/plugins/content_management/server/core/mocks/index.ts
@@ -6,5 +6,5 @@
* Side Public License, v 1.
*/
-export { createMemoryStorage } from './in_memory_storage';
-export type { MockContent } from './in_memory_storage';
+export { createMemoryStorage, createMockedStorage } from './in_memory_storage';
+export type { FooContent } from './in_memory_storage';
diff --git a/src/plugins/content_management/server/core/types.ts b/src/plugins/content_management/server/core/types.ts
index 4ebd79d605717..f21cdf8361b40 100644
--- a/src/plugins/content_management/server/core/types.ts
+++ b/src/plugins/content_management/server/core/types.ts
@@ -6,11 +6,12 @@
* Side Public License, v 1.
*/
+import type { Type } from '@kbn/config-schema';
import type { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server';
/** Context that is sent to all storage instance methods */
export interface StorageContext {
- requestHandlerContext?: RequestHandlerContext;
+ requestHandlerContext: RequestHandlerContext;
}
export interface ContentStorage {
@@ -30,9 +31,60 @@ export interface ContentStorage {
delete(ctx: StorageContext, id: string, options: unknown): Promise;
}
+export interface RpcSchemas {
+ get?: {
+ in?: {
+ options?: Type;
+ };
+ out?: {
+ result: Type;
+ };
+ };
+ create: {
+ in: {
+ data: Type;
+ options?: Type;
+ };
+ out?: {
+ result: Type;
+ };
+ };
+ update: {
+ in: {
+ data: Type;
+ options?: Type;
+ };
+ out?: {
+ result: Type;
+ };
+ };
+ delete?: {
+ in?: {
+ options?: Type;
+ };
+ out?: {
+ result: Type;
+ };
+ };
+ search: {
+ in: {
+ query: Type;
+ options?: Type;
+ };
+ out?: {
+ result: Type;
+ };
+ };
+}
+
+export type ContentSchemas = RpcSchemas;
+
export interface ContentTypeDefinition {
/** Unique id for the content type */
id: string;
/** The storage layer for the content. It must implment the ContentStorage interface. */
storage: S;
+ schemas: {
+ content: ContentSchemas;
+ };
}
diff --git a/src/plugins/content_management/server/plugin.test.ts b/src/plugins/content_management/server/plugin.test.ts
new file mode 100644
index 0000000000000..944f3a8644062
--- /dev/null
+++ b/src/plugins/content_management/server/plugin.test.ts
@@ -0,0 +1,185 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { loggingSystemMock, coreMock } from '@kbn/core/server/mocks';
+import { ContentManagementPlugin } from './plugin';
+import { IRouter } from '@kbn/core/server';
+import { ProcedureName, procedureNames } from '../common';
+import type { Context, ProcedureDefinition } from './rpc';
+
+jest.mock('./core', () => ({
+ ...jest.requireActual('./core'),
+ Core: class {
+ setup() {
+ return {
+ contentRegistry: 'mockedContentRegistry',
+ api: {
+ register: jest.fn().mockReturnValue('mockedRegister'),
+ crud: jest.fn().mockReturnValue('mockedCrud'),
+ eventBus: {
+ emit: jest.fn().mockReturnValue('mockedEventBusEmit'),
+ },
+ },
+ };
+ }
+ },
+}));
+
+const mockGet = jest.fn().mockResolvedValue('getMocked');
+const mockCreate = jest.fn().mockResolvedValue('createMocked');
+const mockUpdate = jest.fn().mockResolvedValue('updateMocked');
+const mockDelete = jest.fn().mockResolvedValue('deleteMocked');
+const mockSearch = jest.fn().mockResolvedValue('searchMocked');
+
+jest.mock('./rpc/procedures/all_procedures', () => ({
+ procedures: {
+ get: {
+ fn: (...args: unknown[]) => mockGet(...args),
+ schemas: {
+ in: {
+ validate: () => undefined,
+ } as any,
+ },
+ },
+ create: {
+ fn: (...args: unknown[]) => mockCreate(...args),
+ schemas: {
+ in: {
+ validate: () => undefined,
+ } as any,
+ },
+ },
+ update: {
+ fn: (...args: unknown[]) => mockUpdate(...args),
+ schemas: {
+ in: {
+ validate: () => undefined,
+ } as any,
+ },
+ },
+ delete: {
+ fn: (...args: unknown[]) => mockDelete(...args),
+ schemas: {
+ in: {
+ validate: () => undefined,
+ } as any,
+ },
+ },
+ search: {
+ fn: (...args: unknown[]) => mockSearch(...args),
+ schemas: {
+ in: {
+ validate: () => undefined,
+ } as any,
+ },
+ },
+ } as { [key in ProcedureName]: ProcedureDefinition },
+}));
+
+const setup = () => {
+ const logger = loggingSystemMock.create();
+ const { http } = coreMock.createSetup();
+
+ const router: IRouter = http.createRouter();
+ router.post = jest.fn();
+
+ const plugin = new ContentManagementPlugin({ logger });
+
+ return { plugin, http: { createRouter: () => router }, router };
+};
+
+describe('ContentManagementPlugin', () => {
+ describe('setup()', () => {
+ test('should expose the core API', () => {
+ const { plugin, http } = setup();
+ const api = plugin.setup({ http });
+
+ expect(Object.keys(api).sort()).toEqual(['crud', 'eventBus', 'register']);
+ expect(api.crud('')).toBe('mockedCrud');
+ expect(api.register({} as any)).toBe('mockedRegister');
+ expect(api.eventBus.emit({} as any)).toBe('mockedEventBusEmit');
+ });
+
+ describe('RPC', () => {
+ test('should create a single POST HTTP route on the router', () => {
+ const { plugin, http, router } = setup();
+ plugin.setup({ http });
+
+ expect(router.post).toBeCalledTimes(1);
+ const [routeConfig]: Parameters = (router.post as jest.Mock).mock.calls[0];
+
+ expect(routeConfig.path).toBe('/api/content_management/rpc/{name}');
+ });
+
+ test('should register all the procedures in the RPC service and the route handler must send to each procedure the core request context + the request body as input', async () => {
+ const { plugin, http, router } = setup();
+ plugin.setup({ http });
+
+ const [_, handler]: Parameters = (router.post as jest.Mock).mock.calls[0];
+
+ const mockedRequestHandlerContext: any = { foo: 'bar' };
+ const mockedResponse: any = {
+ ok: jest.fn((data: { body: unknown }) => data.body),
+ customError: jest.fn((e: any) => e),
+ };
+
+ const input = { testInput: 'baz' };
+
+ // Call the handler for each of our procedure names
+ const result = await Promise.all(
+ procedureNames.map((name) => {
+ const mockedRequest: any = {
+ params: { name },
+ body: input,
+ };
+
+ return handler(mockedRequestHandlerContext, mockedRequest, mockedResponse);
+ })
+ );
+
+ // Each procedure result is returned inside the response.ok() => body
+ expect(result).toEqual(procedureNames.map((name) => ({ result: `${name}Mocked` })));
+
+ // Each procedure has been called with the context and input
+ const context = {
+ requestHandlerContext: mockedRequestHandlerContext,
+ contentRegistry: 'mockedContentRegistry',
+ };
+ expect(mockGet).toHaveBeenCalledWith(context, input);
+ expect(mockCreate).toHaveBeenCalledWith(context, input);
+ expect(mockUpdate).toHaveBeenCalledWith(context, input);
+ expect(mockDelete).toHaveBeenCalledWith(context, input);
+ expect(mockSearch).toHaveBeenCalledWith(context, input);
+ });
+
+ test('should return error in custom error format', async () => {
+ const { plugin, http, router } = setup();
+ plugin.setup({ http });
+
+ const [_, handler]: Parameters = (router.post as jest.Mock).mock.calls[0];
+
+ // const mockedRequestHandlerContext: any = { foo: 'bar' };
+ const mockedResponse: any = {
+ ok: jest.fn((response: { body: unknown }) => response.body),
+ customError: jest.fn((e: any) => e),
+ };
+
+ mockGet.mockRejectedValueOnce(new Error('Houston we got a problem.'));
+ const error = await handler({} as any, { params: { name: 'get' } } as any, mockedResponse);
+
+ expect(error).toEqual({
+ body: {
+ message: new Error('Houston we got a problem.'),
+ },
+ headers: {},
+ statusCode: 500,
+ });
+ });
+ });
+ });
+});
diff --git a/src/plugins/content_management/server/plugin.ts b/src/plugins/content_management/server/plugin.ts
index 5e3ba371a4e16..e13c5af7b7a6e 100755
--- a/src/plugins/content_management/server/plugin.ts
+++ b/src/plugins/content_management/server/plugin.ts
@@ -14,11 +14,16 @@ import type {
Logger,
} from '@kbn/core/server';
import { Core } from './core';
+import { initRpcRoutes, registerProcedures, RpcService } from './rpc';
+import type { Context as RpcContext } from './rpc';
import {
ContentManagementServerSetup,
ContentManagementServerStart,
SetupDependencies,
} from './types';
+import { procedureNames } from '../common';
+
+type CreateRouterFn = CoreSetup['http']['createRouter'];
export class ContentManagementPlugin
implements Plugin
@@ -26,13 +31,22 @@ export class ContentManagementPlugin
private readonly logger: Logger;
private readonly core: Core;
- constructor(initializerContext: PluginInitializerContext) {
+ constructor(initializerContext: { logger: PluginInitializerContext['logger'] }) {
this.logger = initializerContext.logger.get();
this.core = new Core({ logger: this.logger });
}
- public setup(core: CoreSetup) {
- const { api: coreApi } = this.core.setup();
+ public setup(core: { http: { createRouter: CreateRouterFn } }) {
+ const { api: coreApi, contentRegistry } = this.core.setup();
+
+ const rpc = new RpcService();
+ registerProcedures(rpc);
+
+ const router = core.http.createRouter();
+ initRpcRoutes(procedureNames, router, {
+ rpc,
+ contentRegistry,
+ });
return {
...coreApi,
diff --git a/src/plugins/content_management/server/rpc/index.ts b/src/plugins/content_management/server/rpc/index.ts
new file mode 100644
index 0000000000000..3d68b6feb398d
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/index.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+export { RpcService } from './rpc_service';
+
+export { initRpcRoutes } from './routes';
+
+export { registerProcedures } from './procedures';
+
+export type { Context } from './types';
+
+export type { ProcedureDefinition } from './rpc_service';
diff --git a/src/plugins/content_management/server/rpc/procedures/all_procedures.ts b/src/plugins/content_management/server/rpc/procedures/all_procedures.ts
new file mode 100644
index 0000000000000..045aea006eb95
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/procedures/all_procedures.ts
@@ -0,0 +1,20 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import type { ProcedureName } from '../../../common';
+import type { ProcedureDefinition } from '../rpc_service';
+import type { Context } from '../types';
+import { get } from './get';
+import { create } from './create';
+
+export const procedures: { [key in ProcedureName]: ProcedureDefinition } = {
+ get,
+ create,
+ update: get, // TODO
+ delete: get, // TODO
+ search: get, // TODO
+};
diff --git a/src/plugins/content_management/server/rpc/procedures/create.test.ts b/src/plugins/content_management/server/rpc/procedures/create.test.ts
new file mode 100644
index 0000000000000..2c3432e03ef69
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/procedures/create.test.ts
@@ -0,0 +1,238 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { schema } from '@kbn/config-schema';
+import { validate } from '../../utils';
+import { ContentRegistry } from '../../core/registry';
+import { createMockedStorage } from '../../core/mocks';
+import type { RpcSchemas } from '../../core';
+import { EventBus } from '../../core/event_bus';
+import { create } from './create';
+
+const { fn, schemas } = create;
+
+const inputSchema = schemas?.in;
+const outputSchema = schemas?.out;
+
+if (!inputSchema) {
+ throw new Error(`Input schema missing for [create] procedure.`);
+}
+
+if (!outputSchema) {
+ throw new Error(`Output schema missing for [create] procedure.`);
+}
+
+const FOO_CONTENT_ID = 'foo';
+const fooDataSchema = schema.object({ title: schema.string() }, { unknowns: 'forbid' });
+
+describe('RPC -> create()', () => {
+ describe('Input/Output validation', () => {
+ /**
+ * These tests are for the procedure call itself. Every RPC needs to declare in/out schema
+ * We will test _specific_ validation schema inside the procedure in separate tests.
+ */
+ test('should validate that a contentTypeId and "data" object is passed', () => {
+ [
+ { input: { contentTypeId: 'foo', data: { title: 'hello' } } },
+ {
+ input: { data: { title: 'hello' } }, // contentTypeId missing
+ expectedError: '[contentTypeId]: expected value of type [string] but got [undefined]',
+ },
+ {
+ input: { contentTypeId: 'foo' }, // data missing
+ expectedError: '[data]: expected value of type [object] but got [undefined]',
+ },
+ {
+ input: { contentTypeId: 'foo', data: 123 }, // data is not an object
+ expectedError: '[data]: expected value of type [object] but got [number]',
+ },
+ {
+ input: { contentTypeId: 'foo', data: { title: 'hello' }, unknown: 'foo' },
+ expectedError: '[unknown]: definition for this key is missing',
+ },
+ ].forEach(({ input, expectedError }) => {
+ const error = validate(input, inputSchema);
+
+ if (!expectedError) {
+ try {
+ expect(error).toBe(null);
+ } catch (e) {
+ throw new Error(`Expected no error but got [{${error?.message}}].`);
+ }
+ } else {
+ expect(error?.message).toBe(expectedError);
+ }
+ });
+ });
+
+ test('should allow an options "object" to be passed', () => {
+ let error = validate(
+ {
+ contentTypeId: 'foo',
+ data: { title: 'hello' },
+ options: { any: 'object' },
+ },
+ inputSchema
+ );
+
+ expect(error).toBe(null);
+
+ error = validate(
+ {
+ contentTypeId: 'foo',
+ data: { title: 'hello' },
+ options: 123, // Not an object
+ },
+ inputSchema
+ );
+
+ expect(error?.message).toBe(
+ '[options]: expected a plain object value, but found [number] instead.'
+ );
+ });
+
+ test('should validate that the response is an object', () => {
+ let error = validate(
+ {
+ any: 'object',
+ },
+ outputSchema
+ );
+
+ expect(error).toBe(null);
+
+ error = validate(123, outputSchema);
+
+ expect(error?.message).toBe('expected a plain object value, but found [number] instead.');
+ });
+ });
+
+ describe('procedure', () => {
+ const createSchemas = (): RpcSchemas => {
+ return {
+ create: {
+ in: {
+ data: fooDataSchema,
+ },
+ },
+ } as any;
+ };
+
+ const setup = ({ contentSchemas = createSchemas() } = {}) => {
+ const contentRegistry = new ContentRegistry(new EventBus());
+ const storage = createMockedStorage();
+ contentRegistry.register({
+ id: FOO_CONTENT_ID,
+ storage,
+ schemas: {
+ content: contentSchemas,
+ },
+ });
+
+ const requestHandlerContext = 'mockedRequestHandlerContext';
+ const ctx: any = { contentRegistry, requestHandlerContext };
+
+ return { ctx, storage };
+ };
+
+ test('should return the storage create() result', async () => {
+ const { ctx, storage } = setup();
+
+ const expected = 'CreateResult';
+ storage.create.mockResolvedValueOnce(expected);
+
+ const result = await fn(ctx, { contentTypeId: FOO_CONTENT_ID, data: { title: 'Hello' } });
+
+ expect(result).toEqual({
+ contentTypeId: FOO_CONTENT_ID,
+ result: expected,
+ });
+
+ expect(storage.create).toHaveBeenCalledWith(
+ { requestHandlerContext: ctx.requestHandlerContext },
+ { title: 'Hello' },
+ undefined
+ );
+ });
+
+ describe('validation', () => {
+ test('should validate that content type definition exist', () => {
+ const { ctx } = setup();
+ expect(() =>
+ fn(ctx, { contentTypeId: 'unknown', data: { title: 'Hello' } })
+ ).rejects.toEqual(new Error('Content [unknown] is not registered.'));
+ });
+
+ test('should validate the data sent in input - missing field', () => {
+ const { ctx } = setup();
+ expect(() => fn(ctx, { contentTypeId: FOO_CONTENT_ID, data: {} })).rejects.toEqual(
+ new Error('[title]: expected value of type [string] but got [undefined]')
+ );
+ });
+
+ test('should validate the data sent in input - unknown field', () => {
+ const { ctx } = setup();
+ expect(() =>
+ fn(ctx, {
+ contentTypeId: FOO_CONTENT_ID,
+ data: { title: 'Hello', unknownField: 'Hello' },
+ })
+ ).rejects.toEqual(new Error('[unknownField]: definition for this key is missing'));
+ });
+
+ test('should enforce a schema for options if options are passed', () => {
+ const { ctx } = setup();
+ expect(() =>
+ fn(ctx, {
+ contentTypeId: FOO_CONTENT_ID,
+ data: { title: 'Hello' },
+ options: { foo: 'bar' },
+ })
+ ).rejects.toEqual(new Error('Schema missing for rpc procedure [create.in.options].'));
+ });
+
+ test('should validate the options', () => {
+ const { ctx } = setup({
+ contentSchemas: {
+ create: {
+ in: {
+ data: fooDataSchema,
+ options: schema.object({ validOption: schema.maybe(schema.boolean()) }),
+ },
+ },
+ } as any,
+ });
+ expect(() =>
+ fn(ctx, {
+ contentTypeId: FOO_CONTENT_ID,
+ data: { title: 'Hello' },
+ options: { foo: 'bar' },
+ })
+ ).rejects.toEqual(new Error('[foo]: definition for this key is missing'));
+ });
+
+ test('should validate the result if schema is provided', () => {
+ const { ctx, storage } = setup({
+ contentSchemas: {
+ create: {
+ in: { data: fooDataSchema },
+ out: { result: schema.object({ validField: schema.maybe(schema.boolean()) }) },
+ },
+ } as any,
+ });
+
+ const invalidResult = { wrongField: 'bad' };
+ storage.create.mockResolvedValueOnce(invalidResult);
+
+ expect(() =>
+ fn(ctx, { contentTypeId: FOO_CONTENT_ID, data: { title: 'Hello' } })
+ ).rejects.toEqual(new Error('[wrongField]: definition for this key is missing'));
+ });
+ });
+ });
+});
diff --git a/src/plugins/content_management/server/rpc/procedures/create.ts b/src/plugins/content_management/server/rpc/procedures/create.ts
new file mode 100644
index 0000000000000..1aa7d4e4dfc93
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/procedures/create.ts
@@ -0,0 +1,66 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { rpcSchemas } from '../../../common';
+import type { CreateIn } from '../../../common';
+import type { StorageContext, ContentCrud } from '../../core';
+import type { ProcedureDefinition } from '../rpc_service';
+import type { Context } from '../types';
+import { validate } from '../../utils';
+
+export const create: ProcedureDefinition> = {
+ schemas: rpcSchemas.create,
+ fn: async (ctx, input) => {
+ const contentDefinition = ctx.contentRegistry.getDefinition(input.contentTypeId);
+ const { create: schemas } = contentDefinition.schemas.content;
+
+ // Validate data to be stored
+ if (schemas.in.data) {
+ const error = validate(input.data, schemas.in.data);
+ if (error) {
+ // TODO: Improve error handling
+ throw error;
+ }
+ } else {
+ // TODO: Improve error handling
+ throw new Error('Schema missing for rpc call [create.in.data].');
+ }
+
+ // Validate the possible options
+ if (input.options) {
+ if (!schemas.in?.options) {
+ // TODO: Improve error handling
+ throw new Error('Schema missing for rpc procedure [create.in.options].');
+ }
+ const error = validate(input.options, schemas.in.options);
+ if (error) {
+ // TODO: Improve error handling
+ throw error;
+ }
+ }
+
+ // Execute CRUD
+ const crudInstance: ContentCrud = ctx.contentRegistry.getCrud(input.contentTypeId);
+ const storageContext: StorageContext = {
+ requestHandlerContext: ctx.requestHandlerContext,
+ };
+ const result = await crudInstance.create(storageContext, input.data, input.options);
+
+ // Validate result
+ const resultSchema = schemas.out?.result;
+ if (resultSchema) {
+ const error = validate(result.result, resultSchema);
+ if (error) {
+ // TODO: Improve error handling
+ throw error;
+ }
+ }
+
+ return result;
+ },
+};
diff --git a/src/plugins/content_management/server/rpc/procedures/get.test.ts b/src/plugins/content_management/server/rpc/procedures/get.test.ts
new file mode 100644
index 0000000000000..d3214faaa1e9c
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/procedures/get.test.ts
@@ -0,0 +1,200 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { schema } from '@kbn/config-schema';
+import { validate } from '../../utils';
+import { ContentRegistry } from '../../core/registry';
+import { createMockedStorage } from '../../core/mocks';
+import type { RpcSchemas } from '../../core';
+import { EventBus } from '../../core/event_bus';
+import { get } from './get';
+
+const { fn, schemas } = get;
+
+const inputSchema = schemas?.in;
+const outputSchema = schemas?.out;
+
+if (!inputSchema) {
+ throw new Error(`Input schema missing for [get] procedure.`);
+}
+
+if (!outputSchema) {
+ throw new Error(`Output schema missing for [get] procedure.`);
+}
+
+const FOO_CONTENT_ID = 'foo';
+
+describe('RPC -> get()', () => {
+ describe('Input/Output validation', () => {
+ /**
+ * These tests are for the procedure call itself. Every RPC needs to declare in/out schema
+ * We will test _specific_ validation schema inside the procedure in separate tests.
+ */
+ test('should validate that a contentTypeId and an id is passed', () => {
+ [
+ { input: { contentTypeId: 'foo', id: '123' } },
+ {
+ input: { id: '777' }, // contentTypeId missing
+ expectedError: '[contentTypeId]: expected value of type [string] but got [undefined]',
+ },
+ {
+ input: { contentTypeId: 'foo', id: '123', unknown: 'foo' },
+ expectedError: '[unknown]: definition for this key is missing',
+ },
+ {
+ input: { contentTypeId: 'foo', id: '' }, // id must have min 1 char
+ expectedError: '[id]: value has length [0] but it must have a minimum length of [1].',
+ },
+ ].forEach(({ input, expectedError }) => {
+ const error = validate(input, inputSchema);
+
+ if (!expectedError) {
+ try {
+ expect(error).toBe(null);
+ } catch (e) {
+ throw new Error(`Expected no error but got [{${error?.message}}].`);
+ }
+ } else {
+ expect(error?.message).toBe(expectedError);
+ }
+ });
+ });
+
+ test('should allow an options "object" to be passed', () => {
+ let error = validate(
+ {
+ contentTypeId: 'foo',
+ id: '123',
+ options: { any: 'object' },
+ },
+ inputSchema
+ );
+
+ expect(error).toBe(null);
+
+ error = validate(
+ {
+ contentTypeId: 'foo',
+ id: '123',
+ options: 123, // Not an object
+ },
+ inputSchema
+ );
+
+ expect(error?.message).toBe(
+ '[options]: expected a plain object value, but found [number] instead.'
+ );
+ });
+
+ test('should validate that the response is an object', () => {
+ let error = validate(
+ {
+ any: 'object',
+ },
+ outputSchema
+ );
+
+ expect(error).toBe(null);
+
+ error = validate(123, outputSchema);
+
+ expect(error?.message).toBe('expected a plain object value, but found [number] instead.');
+ });
+ });
+
+ describe('procedure', () => {
+ const createSchemas = (): RpcSchemas => {
+ return {} as any;
+ };
+
+ const setup = ({ contentSchemas = createSchemas() } = {}) => {
+ const contentRegistry = new ContentRegistry(new EventBus());
+ const storage = createMockedStorage();
+ contentRegistry.register({
+ id: FOO_CONTENT_ID,
+ storage,
+ schemas: {
+ content: contentSchemas,
+ },
+ });
+
+ const requestHandlerContext = 'mockedRequestHandlerContext';
+ const ctx: any = { contentRegistry, requestHandlerContext };
+
+ return { ctx, storage };
+ };
+
+ test('should return the storage get() result', async () => {
+ const { ctx, storage } = setup();
+
+ const expected = 'GetResult';
+ storage.get.mockResolvedValueOnce(expected);
+
+ const result = await fn(ctx, { contentTypeId: FOO_CONTENT_ID, id: '1234' });
+
+ expect(result).toEqual({
+ contentTypeId: FOO_CONTENT_ID,
+ item: expected,
+ });
+
+ expect(storage.get).toHaveBeenCalledWith(
+ { requestHandlerContext: ctx.requestHandlerContext },
+ '1234',
+ undefined
+ );
+ });
+
+ describe('validation', () => {
+ test('should validate that content type definition exist', () => {
+ const { ctx } = setup();
+ expect(() => fn(ctx, { contentTypeId: 'unknown', id: '1234' })).rejects.toEqual(
+ new Error('Content [unknown] is not registered.')
+ );
+ });
+
+ test('should enforce a schema for options if options are passed', () => {
+ const { ctx } = setup();
+ expect(() =>
+ fn(ctx, { contentTypeId: FOO_CONTENT_ID, id: '1234', options: { foo: 'bar' } })
+ ).rejects.toEqual(new Error('Schema missing for rpc procedure [get.in.options].'));
+ });
+
+ test('should validate the options', () => {
+ const { ctx } = setup({
+ contentSchemas: {
+ get: {
+ in: {
+ options: schema.object({ validOption: schema.maybe(schema.boolean()) }),
+ },
+ },
+ } as any,
+ });
+ expect(() =>
+ fn(ctx, { contentTypeId: FOO_CONTENT_ID, id: '1234', options: { foo: 'bar' } })
+ ).rejects.toEqual(new Error('[foo]: definition for this key is missing'));
+ });
+
+ test('should validate the result if schema is provided', () => {
+ const { ctx, storage } = setup({
+ contentSchemas: {
+ get: {
+ out: { result: schema.object({ validField: schema.maybe(schema.boolean()) }) },
+ },
+ } as any,
+ });
+
+ const invalidResult = { wrongField: 'bad' };
+ storage.get.mockResolvedValueOnce(invalidResult);
+
+ expect(() => fn(ctx, { contentTypeId: FOO_CONTENT_ID, id: '1234' })).rejects.toEqual(
+ new Error('[wrongField]: definition for this key is missing')
+ );
+ });
+ });
+ });
+});
diff --git a/src/plugins/content_management/server/rpc/procedures/get.ts b/src/plugins/content_management/server/rpc/procedures/get.ts
new file mode 100644
index 0000000000000..73960ad8f3a2f
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/procedures/get.ts
@@ -0,0 +1,53 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { rpcSchemas } from '../../../common';
+import type { GetIn } from '../../../common';
+import type { ContentCrud, StorageContext } from '../../core';
+import { validate } from '../../utils';
+import type { ProcedureDefinition } from '../rpc_service';
+import type { Context } from '../types';
+
+export const get: ProcedureDefinition> = {
+ schemas: rpcSchemas.get,
+ fn: async (ctx, input) => {
+ const contentDefinition = ctx.contentRegistry.getDefinition(input.contentTypeId);
+ const { get: schemas } = contentDefinition.schemas.content;
+
+ if (input.options) {
+ // Validate the options provided
+ if (!schemas?.in?.options) {
+ throw new Error(`Schema missing for rpc procedure [get.in.options].`);
+ }
+ const error = validate(input.options, schemas.in.options);
+ if (error) {
+ // TODO: Improve error handling
+ throw error;
+ }
+ }
+
+ // Execute CRUD
+ const crudInstance: ContentCrud = ctx.contentRegistry.getCrud(input.contentTypeId);
+ const storageContext: StorageContext = {
+ requestHandlerContext: ctx.requestHandlerContext,
+ };
+ const result = await crudInstance.get(storageContext, input.id, input.options);
+
+ // Validate result
+ const resultSchema = schemas?.out?.result;
+ if (resultSchema) {
+ const error = validate(result.item, resultSchema);
+ if (error) {
+ // TODO: Improve error handling
+ throw error;
+ }
+ }
+
+ return result;
+ },
+};
diff --git a/src/plugins/content_management/server/rpc/procedures/index.ts b/src/plugins/content_management/server/rpc/procedures/index.ts
new file mode 100644
index 0000000000000..6cfaba67c38c8
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/procedures/index.ts
@@ -0,0 +1,25 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import type { ProcedureName } from '../../../common';
+import type { RpcService } from '../rpc_service';
+import type { Context } from '../types';
+import { procedures } from './all_procedures';
+
+// Type utility to correclty set the type of JS Object.entries()
+type Entries = Array<
+ {
+ [K in keyof T]: [K, T[K]];
+ }[keyof T]
+>;
+
+export function registerProcedures(rpc: RpcService) {
+ (Object.entries(procedures) as Entries).forEach(([name, definition]) => {
+ rpc.register(name, definition);
+ });
+}
diff --git a/src/plugins/content_management/server/rpc/routes/error_wrapper.ts b/src/plugins/content_management/server/rpc/routes/error_wrapper.ts
new file mode 100644
index 0000000000000..9dc98810a0832
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/routes/error_wrapper.ts
@@ -0,0 +1,25 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { boomify, isBoom } from '@hapi/boom';
+import { ResponseError, CustomHttpResponseOptions } from '@kbn/core/server';
+
+export function wrapError(error: any): CustomHttpResponseOptions {
+ const boom = isBoom(error)
+ ? error
+ : boomify(error, { statusCode: error.status ?? error.statusCode });
+ const statusCode = boom.output.statusCode;
+ return {
+ body: {
+ message: boom,
+ ...(statusCode !== 500 && error.body ? { attributes: { body: error.body } } : {}),
+ },
+ headers: boom.output.headers as { [key: string]: string },
+ statusCode,
+ };
+}
diff --git a/src/plugins/content_management/server/rpc/routes/index.ts b/src/plugins/content_management/server/rpc/routes/index.ts
new file mode 100644
index 0000000000000..60deb3ae64d66
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/routes/index.ts
@@ -0,0 +1,9 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+export { initRpcRoutes } from './routes';
diff --git a/src/plugins/content_management/server/rpc/routes/routes.ts b/src/plugins/content_management/server/rpc/routes/routes.ts
new file mode 100644
index 0000000000000..c5d57fe3e010e
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/routes/routes.ts
@@ -0,0 +1,69 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import { schema } from '@kbn/config-schema';
+import type { IRouter } from '@kbn/core/server';
+
+import { ProcedureName } from '../../../common';
+import type { ContentRegistry } from '../../core';
+
+import type { RpcService } from '../rpc_service';
+import type { Context as RpcContext } from '../types';
+import { wrapError } from './error_wrapper';
+
+interface RouteContext {
+ rpc: RpcService;
+ contentRegistry: ContentRegistry;
+}
+
+export function initRpcRoutes(
+ procedureNames: readonly ProcedureName[],
+ router: IRouter,
+ { rpc, contentRegistry }: RouteContext
+) {
+ if (procedureNames.length === 0) {
+ throw new Error(`No procedure names provided.`);
+ }
+
+ /**
+ * @apiGroup ContentManagement
+ *
+ * @api {post} /content_management/rpc/{call} Execute RPC call
+ * @apiName RPC
+ */
+ router.post(
+ {
+ path: '/api/content_management/rpc/{name}',
+ validate: {
+ params: schema.object({
+ // @ts-ignore We validate above that procedureNames has at least one item
+ // so we can ignore the "Target requires 1 element(s) but source may have fewer." TS error
+ name: schema.oneOf(procedureNames.map((fnName) => schema.literal(fnName))),
+ }),
+ // Any object payload can be passed, we will validate the input when calling the rpc handler
+ body: schema.maybe(schema.object({}, { unknowns: 'allow' })),
+ },
+ },
+ async (requestHandlerContext, request, response) => {
+ try {
+ const context: RpcContext = {
+ contentRegistry,
+ requestHandlerContext,
+ };
+ const { name } = request.params as { name: ProcedureName };
+
+ const result = await rpc.call(context, name, request.body);
+
+ return response.ok({
+ body: result,
+ });
+ } catch (e) {
+ return response.customError(wrapError(e));
+ }
+ }
+ );
+}
diff --git a/src/plugins/content_management/server/rpc/rpc_service.test.ts b/src/plugins/content_management/server/rpc/rpc_service.test.ts
new file mode 100644
index 0000000000000..0ac81a3c3fa8f
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/rpc_service.test.ts
@@ -0,0 +1,105 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { schema } from '@kbn/config-schema';
+import { ProcedureDefinition, RpcService } from './rpc_service';
+
+describe('RpcService', () => {
+ describe('register()', () => {
+ test('should register a procedure', () => {
+ const rpc = new RpcService<{}, 'foo'>();
+ const fn = jest.fn();
+ const procedure: ProcedureDefinition<{}> = { fn };
+ rpc.register('foo', procedure);
+
+ const context = {};
+ rpc.call(context, 'foo');
+
+ expect(fn).toHaveBeenCalledWith(context, undefined);
+ });
+ });
+
+ describe('call()', () => {
+ test('should require a schema if an input is passed', () => {
+ const rpc = new RpcService<{}, 'foo'>();
+ const fn = jest.fn();
+ const procedure: ProcedureDefinition<{}> = { fn };
+ rpc.register('foo', procedure);
+
+ const context = {};
+ const input = { foo: 'bar' };
+
+ expect(() => {
+ return rpc.call(context, 'foo', input);
+ }).rejects.toEqual(new Error('Input schema missing for [foo] procedure.'));
+ });
+
+ test('should call the provided handler with the input and context', async () => {
+ const rpc = new RpcService<{}, 'foo'>();
+
+ const output = { success: true };
+
+ const fn = jest.fn().mockResolvedValue(output);
+ const procedure: ProcedureDefinition<{}> = {
+ fn,
+ schemas: { in: schema.object({ foo: schema.string() }), out: schema.any() },
+ };
+ rpc.register('foo', procedure);
+
+ const context = {};
+ const input = { foo: 'bar' };
+
+ const { result } = await rpc.call(context, 'foo', input);
+
+ expect(fn).toHaveBeenCalledWith(context, input);
+ expect(result).toEqual(output);
+ });
+
+ test('should throw an error if the procedure is not registered', () => {
+ const rpc = new RpcService();
+
+ expect(() => {
+ return rpc.call(undefined, 'unknown');
+ }).rejects.toEqual(new Error('Procedure [unknown] is not registered.'));
+ });
+
+ test('should validate that the input is valid', () => {
+ const rpc = new RpcService<{}, 'foo'>();
+
+ const fn = jest.fn();
+ const procedure: ProcedureDefinition<{}> = {
+ fn,
+ schemas: { in: schema.object({ foo: schema.string() }), out: schema.any() },
+ };
+ rpc.register('foo', procedure);
+
+ const context = {};
+ const input = { bad: 'unknown prop' };
+
+ expect(() => {
+ return rpc.call(context, 'foo', input);
+ }).rejects.toEqual(new Error('[foo]: expected value of type [string] but got [undefined]'));
+ });
+
+ test('should validate the output if schema is provided', () => {
+ const rpc = new RpcService<{}, 'foo'>();
+
+ const fn = jest.fn().mockResolvedValue({ bad: 'unknown prop' });
+ const procedure: ProcedureDefinition<{}> = {
+ fn,
+ schemas: { in: schema.never(), out: schema.object({ foo: schema.string() }) },
+ };
+ rpc.register('foo', procedure);
+
+ const context = {};
+ expect(() => {
+ return rpc.call(context, 'foo');
+ }).rejects.toEqual(new Error('[foo]: expected value of type [string] but got [undefined]'));
+ });
+ });
+});
diff --git a/src/plugins/content_management/server/rpc/rpc_service.ts b/src/plugins/content_management/server/rpc/rpc_service.ts
new file mode 100644
index 0000000000000..b7f6d8aedcd7a
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/rpc_service.ts
@@ -0,0 +1,60 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import type { ProcedureSchemas } from '../../common';
+import { validate } from '../utils';
+
+export interface ProcedureDefinition<
+ Context extends object | void = void,
+ I extends object | void = void,
+ O = any
+> {
+ fn: (context: Context, input: I extends void ? undefined : I) => Promise;
+ schemas?: ProcedureSchemas;
+}
+
+export class RpcService {
+ private registry: Map> = new Map();
+
+ register(name: Names, definition: ProcedureDefinition) {
+ this.registry.set(name, definition);
+ }
+
+ async call(context: Context, name: Names, input?: unknown): Promise<{ result: unknown }> {
+ const procedure: ProcedureDefinition | undefined = this.registry.get(name);
+
+ if (!procedure) throw new Error(`Procedure [${name}] is not registered.`);
+
+ const { fn, schemas } = procedure;
+
+ // 1. Validate input
+ if (schemas?.in) {
+ const error = validate(input, schemas.in);
+ if (error) {
+ // TODO: Improve error handling
+ throw error;
+ }
+ } else if (input !== undefined) {
+ // TODO: Improve error handling
+ throw new Error(`Input schema missing for [${name}] procedure.`);
+ }
+
+ // 2. Execute procedure
+ const result = await fn(context, input);
+
+ // 3. Validate output
+ if (schemas?.out) {
+ const error = validate(result, schemas.out);
+ if (error) {
+ // TODO: Improve error handling
+ throw error;
+ }
+ }
+
+ return { result };
+ }
+}
diff --git a/src/plugins/content_management/server/rpc/types.ts b/src/plugins/content_management/server/rpc/types.ts
new file mode 100644
index 0000000000000..71ce1bd4bf86d
--- /dev/null
+++ b/src/plugins/content_management/server/rpc/types.ts
@@ -0,0 +1,14 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+import type { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server';
+import type { ContentRegistry } from '../core';
+
+export interface Context {
+ contentRegistry: ContentRegistry;
+ requestHandlerContext: RequestHandlerContext;
+}
diff --git a/src/plugins/content_management/server/utils.ts b/src/plugins/content_management/server/utils.ts
new file mode 100644
index 0000000000000..cd001f77350a2
--- /dev/null
+++ b/src/plugins/content_management/server/utils.ts
@@ -0,0 +1,18 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { Type, ValidationError } from '@kbn/config-schema';
+
+export const validate = (input: unknown, schema: Type): ValidationError | null => {
+ try {
+ schema.validate(input);
+ return null;
+ } catch (e: any) {
+ return e as ValidationError;
+ }
+};
From 11577869c967637240ad3701fcab720bb3c560ea Mon Sep 17 00:00:00 2001
From: mohamedhamed-ahmed
Date: Mon, 20 Feb 2023 16:52:03 +0000
Subject: [PATCH 013/101] [Infrastructure UI]: Fix full page refresh on hosts
link in invetory page (#151496)
closes #151396
## Summary
The links to "Introducing a new host analysis experience" and
"Kubernetes dashboards" (when Kubernetes pods are selected) cause a full
page refresh in Kibana instead of navigating to the other pages without
the refresh.
The onClick handler was being overridden every time and this change is
to prevent this from happening.
### Testing
https://user-images.githubusercontent.com/11225826/219460137-a132f13e-3dbc-48b5-848e-a9dd8ace55df.mov
---------
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
---
.../infra/public/components/try_it_button.tsx | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/x-pack/plugins/infra/public/components/try_it_button.tsx b/x-pack/plugins/infra/public/components/try_it_button.tsx
index eeb9d68a93a69..8097461986287 100644
--- a/x-pack/plugins/infra/public/components/try_it_button.tsx
+++ b/x-pack/plugins/infra/public/components/try_it_button.tsx
@@ -13,6 +13,7 @@ import { css } from '@emotion/react';
import { EuiLinkColor } from '@elastic/eui';
import { ExperimentalBadge } from './experimental_badge';
+type OnClickEvent = React.MouseEvent | React.MouseEvent;
interface Props {
color?: EuiLinkColor;
'data-test-subj'?: string;
@@ -20,7 +21,7 @@ interface Props {
label: string;
link: LinkDescriptor;
hideBadge?: boolean;
- onClick?: () => void;
+ onClick?: (e?: OnClickEvent) => void;
}
export const TryItButton = ({
label,
@@ -33,6 +34,11 @@ export const TryItButton = ({
}: Props) => {
const linkProps = useLinkProps({ ...link });
+ const handleClick = (event: OnClickEvent) => {
+ if (linkProps.onClick) linkProps.onClick(event);
+ if (onClick) onClick(event);
+ };
+
return (
{!hideBadge && (
@@ -40,7 +46,7 @@ export const TryItButton = ({
{experimental && (
From 6917d810d5b383fa2cb4a8b3ae89138dc2f7181f Mon Sep 17 00:00:00 2001
From: Yan Savitski
Date: Mon, 20 Feb 2023 17:56:13 +0100
Subject: [PATCH 014/101] Behavioral analytics empty state (#151622)
Fix issue #3972
---
.../add_analytics_collection_form.tsx | 10 +++-
.../analytics_overview/analytics_overview.tsx | 30 ++--------
.../analytics_overview_empty_page.tsx | 59 +++++++++++++++++++
3 files changed, 72 insertions(+), 27 deletions(-)
create mode 100644 x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview_empty_page.tsx
diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx
index 34a04d2470e62..baa0430150c09 100644
--- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx
@@ -11,6 +11,8 @@ import { useActions, useValues } from 'kea';
import { EuiFormRow, EuiFieldText, EuiForm } from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
+
import { AddAnalyticsCollectionLogic } from './add_analytics_collection_logic';
interface AddAnalyticsCollectionForm {
@@ -36,7 +38,13 @@ export const AddAnalyticsCollectionForm: React.FC =
}
}}
>
-
+ {
const { fetchAnalyticsCollections } = useActions(AnalyticsCollectionsLogic);
@@ -46,6 +47,7 @@ export const AnalyticsOverview: React.FC = () => {
pageTitle: i18n.translate('xpack.enterpriseSearch.analytics.collections.pageTitle', {
defaultMessage: 'Behavioral Analytics',
}),
+ rightSideItems: [],
}}
>
{!hasNoAnalyticsCollections && (
@@ -67,31 +69,7 @@ export const AnalyticsOverview: React.FC = () => {
{hasNoAnalyticsCollections ? (
-
- {i18n.translate(
- 'xpack.enterpriseSearch.analytics.collections.emptyState.headingTitle',
- {
- defaultMessage: 'You dont have any collections yet',
- }
- )}
-
- }
- body={
-
- {i18n.translate(
- 'xpack.enterpriseSearch.analytics.collections.emptyState.subHeading',
- {
- defaultMessage:
- 'An analytics collection provides a place to store the analytics events for any given search application you are building. Create a new collection to get started.',
- }
- )}
-
- }
- actions={[]}
- />
+
) : (
)}
diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview_empty_page.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview_empty_page.tsx
new file mode 100644
index 0000000000000..f57d9b851cd46
--- /dev/null
+++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview_empty_page.tsx
@@ -0,0 +1,59 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+
+import { EuiEmptyPrompt, EuiImage, EuiLink, EuiTitle } from '@elastic/eui';
+
+import { i18n } from '@kbn/i18n';
+
+import noMlModelsGraphicDark from '../../../../assets/images/no_ml_models_dark.svg';
+
+import { docLinks } from '../../../shared/doc_links';
+import { AddAnalyticsCollection } from '../add_analytics_collections/add_analytics_collection';
+
+const ICON_WIDTH = 294;
+
+export const AnalyticsOverviewEmptyPage: React.FC = () => (
+ }
+ layout="horizontal"
+ color="plain"
+ title={
+
+ {i18n.translate('xpack.enterpriseSearch.analytics.collections.emptyState.headingTitle', {
+ defaultMessage: 'Create your first Collection',
+ })}
+
+ }
+ body={
+
+ {i18n.translate('xpack.enterpriseSearch.analytics.collections.emptyState.subHeading', {
+ defaultMessage:
+ 'Collections are required to store analytics events for your search application.',
+ })}
+
+ }
+ actions={[]}
+ footer={
+ <>
+
+
+ {i18n.translate('xpack.enterpriseSearch.analytics.collections.emptyState.footerText', {
+ defaultMessage: 'Want to learn more?',
+ })}
+
+ {' '}
+
+ {i18n.translate('xpack.enterpriseSearch.analytics.collections.emptyState.footerLink', {
+ defaultMessage: 'Read documentation',
+ })}
+
+ >
+ }
+ />
+);
From 4381fccc7c7d2b4174d2349ca875e38a6fa91510 Mon Sep 17 00:00:00 2001
From: Nav <13634519+navarone-feekery@users.noreply.github.com>
Date: Mon, 20 Feb 2023 18:10:15 +0100
Subject: [PATCH 015/101] [Enterprise Search] Fix word wrapping on extraction
rules table (#151634)
Use `EuiFlexItem` to fix table rendering bug
https://github.com/elastic/enterprise-search-team/issues/3957
---
.../extraction_rules/field_rules_table.tsx | 77 +++++++++++--------
1 file changed, 46 insertions(+), 31 deletions(-)
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/field_rules_table.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/field_rules_table.tsx
index c8f6b3a882a96..19f313d66e5ba 100644
--- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/field_rules_table.tsx
+++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/field_rules_table.tsx
@@ -7,7 +7,14 @@
import React from 'react';
-import { EuiBasicTable, EuiBasicTableColumn, EuiCode, EuiFlexGroup, EuiText } from '@elastic/eui';
+import {
+ EuiBasicTable,
+ EuiBasicTableColumn,
+ EuiCode,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiText,
+} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
@@ -48,16 +55,20 @@ export const FieldRulesTable: React.FC = ({
}),
render: (rule: FieldRuleWithId) => (
-
- {rule.source_type === FieldType.HTML
- ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.HTMLLabel', {
- defaultMessage: 'HTML: ',
- })
- : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.UrlLabel', {
- defaultMessage: 'URL: ',
- })}
-
- {rule.selector}
+
+
+ {rule.source_type === FieldType.HTML
+ ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.HTMLLabel', {
+ defaultMessage: 'HTML: ',
+ })
+ : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.UrlLabel', {
+ defaultMessage: 'URL: ',
+ })}
+
+
+
+ {rule.selector}
+
),
},
@@ -70,26 +81,30 @@ export const FieldRulesTable: React.FC = ({
multiple_objects_handling: multipleObjectsHandling,
}: FieldRuleWithId) => (
-
- {content.value_type === ContentFrom.EXTRACTED
- ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.extractedLabel', {
- defaultMessage: 'Extracted as: ',
- })
- : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.fixedLabel', {
- defaultMessage: 'Fixed value: ',
- })}
-
-
- {content.value_type === ContentFrom.FIXED
- ? content.value
- : multipleObjectsHandling === MultipleObjectsHandling.ARRAY
- ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.arrayLabel', {
- defaultMessage: 'array',
- })
- : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.stringLabel', {
- defaultMessage: 'string',
- })}
-
+
+
+ {content.value_type === ContentFrom.EXTRACTED
+ ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.extractedLabel', {
+ defaultMessage: 'Extracted as: ',
+ })
+ : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.fixedLabel', {
+ defaultMessage: 'Fixed value: ',
+ })}
+
+
+
+
+ {content.value_type === ContentFrom.FIXED
+ ? content.value
+ : multipleObjectsHandling === MultipleObjectsHandling.ARRAY
+ ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.arrayLabel', {
+ defaultMessage: 'array',
+ })
+ : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.stringLabel', {
+ defaultMessage: 'string',
+ })}
+
+
),
},
From 3acff6faf84713545e60b9118d47b5716fac9280 Mon Sep 17 00:00:00 2001
From: Milton Hultgren
Date: Mon, 20 Feb 2023 21:14:50 +0100
Subject: [PATCH 016/101] [Monitoring] Add Version column to Cluster Listing
table (#151638)
Fixes #151508
Using the data already provided by the API, I've added a new column to
the cluster listing table to show the version there as well.
---
.../public/components/cluster/listing/listing.js | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js b/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js
index 612b6e9154689..4df463d5ef383 100644
--- a/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js
+++ b/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js
@@ -230,6 +230,14 @@ const getColumns = (
);
},
},
+ {
+ name: i18n.translate('xpack.monitoring.cluster.listing.versionColumnTitle', {
+ defaultMessage: 'Version',
+ }),
+ field: 'version',
+ 'data-test-subj': 'clusterVersion',
+ sortable: true,
+ },
];
};
From 9d1aac60c1005a72a15e3fb3cc34a66510ffe688 Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Tue, 21 Feb 2023 01:03:25 -0500
Subject: [PATCH 017/101] [api-docs] 2023-02-21 Daily api_docs build (#151660)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/255
---
api_docs/actions.mdx | 2 +-
api_docs/advanced_settings.mdx | 2 +-
api_docs/aiops.mdx | 2 +-
api_docs/alerting.mdx | 2 +-
api_docs/apm.mdx | 2 +-
api_docs/banners.mdx | 2 +-
api_docs/bfetch.mdx | 2 +-
api_docs/canvas.mdx | 2 +-
api_docs/cases.mdx | 2 +-
api_docs/charts.mdx | 2 +-
api_docs/cloud.mdx | 2 +-
api_docs/cloud_chat.mdx | 2 +-
api_docs/cloud_data_migration.mdx | 2 +-
api_docs/cloud_defend.mdx | 2 +-
api_docs/cloud_experiments.mdx | 2 +-
api_docs/cloud_security_posture.mdx | 2 +-
api_docs/console.mdx | 2 +-
api_docs/content_management.devdocs.json | 161 ++++++++----------
api_docs/content_management.mdx | 4 +-
api_docs/controls.mdx | 2 +-
api_docs/custom_integrations.mdx | 2 +-
api_docs/dashboard.mdx | 2 +-
api_docs/dashboard_enhanced.mdx | 2 +-
api_docs/data.mdx | 2 +-
api_docs/data_query.mdx | 2 +-
api_docs/data_search.mdx | 2 +-
api_docs/data_view_editor.mdx | 2 +-
api_docs/data_view_field_editor.mdx | 2 +-
api_docs/data_view_management.mdx | 2 +-
api_docs/data_views.mdx | 2 +-
api_docs/data_visualizer.mdx | 2 +-
api_docs/deprecations_by_api.mdx | 2 +-
api_docs/deprecations_by_plugin.mdx | 4 +-
api_docs/deprecations_by_team.mdx | 2 +-
api_docs/dev_tools.mdx | 2 +-
api_docs/discover.mdx | 2 +-
api_docs/discover_enhanced.mdx | 2 +-
api_docs/ecs_data_quality_dashboard.mdx | 2 +-
api_docs/embeddable.mdx | 2 +-
api_docs/embeddable_enhanced.mdx | 2 +-
api_docs/encrypted_saved_objects.mdx | 2 +-
api_docs/enterprise_search.mdx | 2 +-
api_docs/es_ui_shared.mdx | 2 +-
api_docs/event_annotation.mdx | 2 +-
api_docs/event_log.mdx | 2 +-
api_docs/expression_error.mdx | 2 +-
api_docs/expression_gauge.mdx | 2 +-
api_docs/expression_heatmap.mdx | 2 +-
api_docs/expression_image.mdx | 2 +-
api_docs/expression_legacy_metric_vis.mdx | 2 +-
api_docs/expression_metric.mdx | 2 +-
api_docs/expression_metric_vis.mdx | 2 +-
api_docs/expression_partition_vis.mdx | 2 +-
api_docs/expression_repeat_image.mdx | 2 +-
api_docs/expression_reveal_image.mdx | 2 +-
api_docs/expression_shape.mdx | 2 +-
api_docs/expression_tagcloud.mdx | 2 +-
api_docs/expression_x_y.mdx | 2 +-
api_docs/expressions.mdx | 2 +-
api_docs/features.mdx | 2 +-
api_docs/field_formats.mdx | 2 +-
api_docs/file_upload.mdx | 2 +-
api_docs/files.mdx | 2 +-
api_docs/files_management.mdx | 2 +-
api_docs/fleet.mdx | 2 +-
api_docs/global_search.mdx | 2 +-
api_docs/guided_onboarding.mdx | 2 +-
api_docs/home.mdx | 2 +-
api_docs/image_embeddable.mdx | 2 +-
api_docs/index_lifecycle_management.mdx | 2 +-
api_docs/index_management.mdx | 2 +-
api_docs/infra.mdx | 2 +-
api_docs/inspector.mdx | 2 +-
api_docs/interactive_setup.mdx | 2 +-
api_docs/kbn_ace.mdx | 2 +-
api_docs/kbn_aiops_components.mdx | 2 +-
api_docs/kbn_aiops_utils.mdx | 2 +-
api_docs/kbn_alerts.mdx | 2 +-
api_docs/kbn_alerts_ui_shared.mdx | 2 +-
api_docs/kbn_analytics.mdx | 2 +-
api_docs/kbn_analytics_client.mdx | 2 +-
..._analytics_shippers_elastic_v3_browser.mdx | 2 +-
...n_analytics_shippers_elastic_v3_common.mdx | 2 +-
...n_analytics_shippers_elastic_v3_server.mdx | 2 +-
api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +-
api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +-
api_docs/kbn_apm_config_loader.mdx | 2 +-
api_docs/kbn_apm_synthtrace.mdx | 2 +-
api_docs/kbn_apm_synthtrace_client.mdx | 2 +-
api_docs/kbn_apm_utils.mdx | 2 +-
api_docs/kbn_axe_config.mdx | 2 +-
api_docs/kbn_cases_components.mdx | 2 +-
api_docs/kbn_cell_actions.mdx | 2 +-
api_docs/kbn_chart_expressions_common.mdx | 2 +-
api_docs/kbn_chart_icons.mdx | 2 +-
api_docs/kbn_ci_stats_core.mdx | 2 +-
api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +-
api_docs/kbn_ci_stats_reporter.mdx | 2 +-
api_docs/kbn_cli_dev_mode.mdx | 2 +-
api_docs/kbn_code_editor.mdx | 2 +-
api_docs/kbn_code_editor_mocks.mdx | 2 +-
api_docs/kbn_coloring.mdx | 2 +-
api_docs/kbn_config.mdx | 2 +-
api_docs/kbn_config_mocks.mdx | 2 +-
api_docs/kbn_config_schema.mdx | 2 +-
.../kbn_content_management_content_editor.mdx | 2 +-
.../kbn_content_management_table_list.mdx | 2 +-
api_docs/kbn_core_analytics_browser.mdx | 2 +-
.../kbn_core_analytics_browser_internal.mdx | 2 +-
api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +-
api_docs/kbn_core_analytics_server.mdx | 2 +-
.../kbn_core_analytics_server_internal.mdx | 2 +-
api_docs/kbn_core_analytics_server_mocks.mdx | 2 +-
api_docs/kbn_core_application_browser.mdx | 2 +-
.../kbn_core_application_browser_internal.mdx | 2 +-
.../kbn_core_application_browser_mocks.mdx | 2 +-
api_docs/kbn_core_application_common.mdx | 2 +-
api_docs/kbn_core_apps_browser_internal.mdx | 2 +-
api_docs/kbn_core_apps_browser_mocks.mdx | 2 +-
api_docs/kbn_core_apps_server_internal.mdx | 2 +-
api_docs/kbn_core_base_browser_mocks.mdx | 2 +-
api_docs/kbn_core_base_common.mdx | 2 +-
api_docs/kbn_core_base_server_internal.mdx | 2 +-
api_docs/kbn_core_base_server_mocks.mdx | 2 +-
.../kbn_core_capabilities_browser_mocks.mdx | 2 +-
api_docs/kbn_core_capabilities_common.mdx | 2 +-
api_docs/kbn_core_capabilities_server.mdx | 2 +-
.../kbn_core_capabilities_server_mocks.mdx | 2 +-
api_docs/kbn_core_chrome_browser.mdx | 2 +-
api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +-
api_docs/kbn_core_config_server_internal.mdx | 2 +-
api_docs/kbn_core_custom_branding_browser.mdx | 2 +-
..._core_custom_branding_browser_internal.mdx | 2 +-
...kbn_core_custom_branding_browser_mocks.mdx | 2 +-
api_docs/kbn_core_custom_branding_common.mdx | 2 +-
api_docs/kbn_core_custom_branding_server.mdx | 2 +-
...n_core_custom_branding_server_internal.mdx | 2 +-
.../kbn_core_custom_branding_server_mocks.mdx | 2 +-
api_docs/kbn_core_deprecations_browser.mdx | 2 +-
...kbn_core_deprecations_browser_internal.mdx | 2 +-
.../kbn_core_deprecations_browser_mocks.mdx | 2 +-
api_docs/kbn_core_deprecations_common.mdx | 2 +-
api_docs/kbn_core_deprecations_server.mdx | 2 +-
.../kbn_core_deprecations_server_internal.mdx | 2 +-
.../kbn_core_deprecations_server_mocks.mdx | 2 +-
api_docs/kbn_core_doc_links_browser.mdx | 2 +-
api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +-
api_docs/kbn_core_doc_links_server.mdx | 2 +-
api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +-
...e_elasticsearch_client_server_internal.mdx | 2 +-
...core_elasticsearch_client_server_mocks.mdx | 2 +-
api_docs/kbn_core_elasticsearch_server.mdx | 2 +-
...kbn_core_elasticsearch_server_internal.mdx | 2 +-
.../kbn_core_elasticsearch_server_mocks.mdx | 2 +-
.../kbn_core_environment_server_internal.mdx | 2 +-
.../kbn_core_environment_server_mocks.mdx | 2 +-
.../kbn_core_execution_context_browser.mdx | 2 +-
...ore_execution_context_browser_internal.mdx | 2 +-
...n_core_execution_context_browser_mocks.mdx | 2 +-
.../kbn_core_execution_context_common.mdx | 2 +-
.../kbn_core_execution_context_server.mdx | 2 +-
...core_execution_context_server_internal.mdx | 2 +-
...bn_core_execution_context_server_mocks.mdx | 2 +-
api_docs/kbn_core_fatal_errors_browser.mdx | 2 +-
.../kbn_core_fatal_errors_browser_mocks.mdx | 2 +-
api_docs/kbn_core_http_browser.mdx | 2 +-
api_docs/kbn_core_http_browser_internal.mdx | 2 +-
api_docs/kbn_core_http_browser_mocks.mdx | 2 +-
api_docs/kbn_core_http_common.mdx | 2 +-
.../kbn_core_http_context_server_mocks.mdx | 2 +-
...re_http_request_handler_context_server.mdx | 2 +-
api_docs/kbn_core_http_resources_server.mdx | 2 +-
...bn_core_http_resources_server_internal.mdx | 2 +-
.../kbn_core_http_resources_server_mocks.mdx | 2 +-
.../kbn_core_http_router_server_internal.mdx | 2 +-
.../kbn_core_http_router_server_mocks.mdx | 2 +-
api_docs/kbn_core_http_server.mdx | 2 +-
api_docs/kbn_core_http_server_internal.mdx | 2 +-
api_docs/kbn_core_http_server_mocks.mdx | 2 +-
api_docs/kbn_core_i18n_browser.mdx | 2 +-
api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +-
api_docs/kbn_core_i18n_server.mdx | 2 +-
api_docs/kbn_core_i18n_server_internal.mdx | 2 +-
api_docs/kbn_core_i18n_server_mocks.mdx | 2 +-
...n_core_injected_metadata_browser_mocks.mdx | 2 +-
...kbn_core_integrations_browser_internal.mdx | 2 +-
.../kbn_core_integrations_browser_mocks.mdx | 2 +-
api_docs/kbn_core_lifecycle_browser.mdx | 2 +-
api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +-
api_docs/kbn_core_lifecycle_server.mdx | 2 +-
api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +-
api_docs/kbn_core_logging_browser_mocks.mdx | 2 +-
api_docs/kbn_core_logging_common_internal.mdx | 2 +-
api_docs/kbn_core_logging_server.mdx | 2 +-
api_docs/kbn_core_logging_server_internal.mdx | 2 +-
api_docs/kbn_core_logging_server_mocks.mdx | 2 +-
...ore_metrics_collectors_server_internal.mdx | 2 +-
...n_core_metrics_collectors_server_mocks.mdx | 2 +-
api_docs/kbn_core_metrics_server.mdx | 2 +-
api_docs/kbn_core_metrics_server_internal.mdx | 2 +-
api_docs/kbn_core_metrics_server_mocks.mdx | 2 +-
api_docs/kbn_core_mount_utils_browser.mdx | 2 +-
api_docs/kbn_core_node_server.mdx | 2 +-
api_docs/kbn_core_node_server_internal.mdx | 2 +-
api_docs/kbn_core_node_server_mocks.mdx | 2 +-
api_docs/kbn_core_notifications_browser.mdx | 2 +-
...bn_core_notifications_browser_internal.mdx | 2 +-
.../kbn_core_notifications_browser_mocks.mdx | 2 +-
api_docs/kbn_core_overlays_browser.mdx | 2 +-
.../kbn_core_overlays_browser_internal.mdx | 2 +-
api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +-
api_docs/kbn_core_plugins_browser.mdx | 2 +-
api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +-
api_docs/kbn_core_plugins_server.mdx | 2 +-
api_docs/kbn_core_plugins_server_mocks.mdx | 2 +-
api_docs/kbn_core_preboot_server.mdx | 2 +-
api_docs/kbn_core_preboot_server_mocks.mdx | 2 +-
api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +-
.../kbn_core_rendering_server_internal.mdx | 2 +-
api_docs/kbn_core_rendering_server_mocks.mdx | 2 +-
api_docs/kbn_core_root_server_internal.mdx | 2 +-
.../kbn_core_saved_objects_api_browser.mdx | 2 +-
.../kbn_core_saved_objects_api_server.mdx | 2 +-
...core_saved_objects_api_server_internal.mdx | 2 +-
...bn_core_saved_objects_api_server_mocks.mdx | 2 +-
...ore_saved_objects_base_server_internal.mdx | 2 +-
...n_core_saved_objects_base_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_browser.mdx | 2 +-
...bn_core_saved_objects_browser_internal.mdx | 2 +-
.../kbn_core_saved_objects_browser_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_common.mdx | 2 +-
..._objects_import_export_server_internal.mdx | 2 +-
...ved_objects_import_export_server_mocks.mdx | 2 +-
...aved_objects_migration_server_internal.mdx | 2 +-
...e_saved_objects_migration_server_mocks.mdx | 2 +-
api_docs/kbn_core_saved_objects_server.mdx | 2 +-
...kbn_core_saved_objects_server_internal.mdx | 2 +-
.../kbn_core_saved_objects_server_mocks.mdx | 2 +-
.../kbn_core_saved_objects_utils_server.mdx | 2 +-
api_docs/kbn_core_status_common.mdx | 2 +-
api_docs/kbn_core_status_common_internal.mdx | 2 +-
api_docs/kbn_core_status_server.mdx | 2 +-
api_docs/kbn_core_status_server_internal.mdx | 2 +-
api_docs/kbn_core_status_server_mocks.mdx | 2 +-
...core_test_helpers_deprecations_getters.mdx | 2 +-
...n_core_test_helpers_http_setup_browser.mdx | 2 +-
api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +-
...n_core_test_helpers_so_type_serializer.mdx | 2 +-
api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +-
api_docs/kbn_core_theme_browser.mdx | 2 +-
api_docs/kbn_core_theme_browser_internal.mdx | 2 +-
api_docs/kbn_core_theme_browser_mocks.mdx | 2 +-
api_docs/kbn_core_ui_settings_browser.mdx | 2 +-
.../kbn_core_ui_settings_browser_internal.mdx | 2 +-
.../kbn_core_ui_settings_browser_mocks.mdx | 2 +-
api_docs/kbn_core_ui_settings_common.mdx | 2 +-
api_docs/kbn_core_ui_settings_server.mdx | 2 +-
.../kbn_core_ui_settings_server_internal.mdx | 2 +-
.../kbn_core_ui_settings_server_mocks.mdx | 2 +-
api_docs/kbn_core_usage_data_server.mdx | 2 +-
.../kbn_core_usage_data_server_internal.mdx | 2 +-
api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +-
api_docs/kbn_crypto.mdx | 2 +-
api_docs/kbn_crypto_browser.mdx | 2 +-
api_docs/kbn_cypress_config.mdx | 2 +-
api_docs/kbn_datemath.mdx | 2 +-
api_docs/kbn_dev_cli_errors.mdx | 2 +-
api_docs/kbn_dev_cli_runner.mdx | 2 +-
api_docs/kbn_dev_proc_runner.mdx | 2 +-
api_docs/kbn_dev_utils.mdx | 2 +-
api_docs/kbn_doc_links.mdx | 2 +-
api_docs/kbn_docs_utils.mdx | 2 +-
api_docs/kbn_ebt_tools.mdx | 2 +-
api_docs/kbn_ecs.mdx | 2 +-
api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +-
api_docs/kbn_es.mdx | 2 +-
api_docs/kbn_es_archiver.mdx | 2 +-
api_docs/kbn_es_errors.mdx | 2 +-
api_docs/kbn_es_query.mdx | 2 +-
api_docs/kbn_es_types.mdx | 2 +-
api_docs/kbn_eslint_plugin_imports.mdx | 2 +-
api_docs/kbn_field_types.mdx | 2 +-
api_docs/kbn_find_used_node_modules.mdx | 2 +-
.../kbn_ftr_common_functional_services.mdx | 2 +-
api_docs/kbn_generate.mdx | 2 +-
api_docs/kbn_guided_onboarding.mdx | 2 +-
api_docs/kbn_handlebars.mdx | 2 +-
api_docs/kbn_hapi_mocks.mdx | 2 +-
api_docs/kbn_health_gateway_server.mdx | 2 +-
api_docs/kbn_home_sample_data_card.mdx | 2 +-
api_docs/kbn_home_sample_data_tab.mdx | 2 +-
api_docs/kbn_i18n.mdx | 2 +-
api_docs/kbn_i18n_react.mdx | 2 +-
api_docs/kbn_import_resolver.mdx | 2 +-
api_docs/kbn_interpreter.mdx | 2 +-
api_docs/kbn_io_ts_utils.mdx | 2 +-
api_docs/kbn_jest_serializers.mdx | 2 +-
api_docs/kbn_journeys.mdx | 2 +-
api_docs/kbn_json_ast.mdx | 2 +-
api_docs/kbn_kibana_manifest_schema.mdx | 2 +-
.../kbn_language_documentation_popover.mdx | 2 +-
api_docs/kbn_logging.mdx | 2 +-
api_docs/kbn_logging_mocks.mdx | 2 +-
api_docs/kbn_managed_vscode_config.mdx | 2 +-
api_docs/kbn_mapbox_gl.mdx | 2 +-
api_docs/kbn_ml_agg_utils.mdx | 2 +-
api_docs/kbn_ml_date_picker.mdx | 2 +-
api_docs/kbn_ml_is_defined.mdx | 2 +-
api_docs/kbn_ml_is_populated_object.mdx | 2 +-
api_docs/kbn_ml_local_storage.mdx | 2 +-
api_docs/kbn_ml_nested_property.mdx | 2 +-
api_docs/kbn_ml_query_utils.mdx | 2 +-
api_docs/kbn_ml_string_hash.mdx | 2 +-
api_docs/kbn_ml_url_state.mdx | 2 +-
api_docs/kbn_monaco.mdx | 2 +-
api_docs/kbn_optimizer.mdx | 2 +-
api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +-
api_docs/kbn_osquery_io_ts_types.mdx | 2 +-
..._performance_testing_dataset_extractor.mdx | 2 +-
api_docs/kbn_plugin_generator.mdx | 2 +-
api_docs/kbn_plugin_helpers.mdx | 2 +-
api_docs/kbn_react_field.mdx | 2 +-
api_docs/kbn_repo_file_maps.mdx | 2 +-
api_docs/kbn_repo_linter.mdx | 2 +-
api_docs/kbn_repo_path.mdx | 2 +-
api_docs/kbn_repo_source_classifier.mdx | 2 +-
api_docs/kbn_rison.mdx | 2 +-
api_docs/kbn_rule_data_utils.mdx | 2 +-
.../kbn_securitysolution_autocomplete.mdx | 2 +-
api_docs/kbn_securitysolution_ecs.mdx | 2 +-
api_docs/kbn_securitysolution_es_utils.mdx | 2 +-
...ritysolution_exception_list_components.mdx | 2 +-
api_docs/kbn_securitysolution_hook_utils.mdx | 2 +-
..._securitysolution_io_ts_alerting_types.mdx | 2 +-
.../kbn_securitysolution_io_ts_list_types.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +-
api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +-
api_docs/kbn_securitysolution_list_api.mdx | 2 +-
.../kbn_securitysolution_list_constants.mdx | 2 +-
api_docs/kbn_securitysolution_list_hooks.mdx | 2 +-
api_docs/kbn_securitysolution_list_utils.mdx | 2 +-
api_docs/kbn_securitysolution_rules.mdx | 2 +-
api_docs/kbn_securitysolution_t_grid.mdx | 2 +-
api_docs/kbn_securitysolution_utils.mdx | 2 +-
api_docs/kbn_server_http_tools.mdx | 2 +-
api_docs/kbn_server_route_repository.mdx | 2 +-
api_docs/kbn_shared_svg.mdx | 2 +-
api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +-
...ared_ux_avatar_user_profile_components.mdx | 2 +-
.../kbn_shared_ux_button_exit_full_screen.mdx | 2 +-
...hared_ux_button_exit_full_screen_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +-
api_docs/kbn_shared_ux_card_no_data.mdx | 2 +-
api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_context.mdx | 2 +-
api_docs/kbn_shared_ux_file_image.mdx | 2 +-
api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_file_picker.mdx | 2 +-
api_docs/kbn_shared_ux_file_upload.mdx | 2 +-
api_docs/kbn_shared_ux_file_util.mdx | 2 +-
api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +-
.../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_markdown.mdx | 2 +-
api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +-
.../kbn_shared_ux_page_analytics_no_data.mdx | 2 +-
...shared_ux_page_analytics_no_data_mocks.mdx | 2 +-
.../kbn_shared_ux_page_kibana_no_data.mdx | 2 +-
...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +-
.../kbn_shared_ux_page_kibana_template.mdx | 2 +-
...n_shared_ux_page_kibana_template_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_no_data.mdx | 2 +-
.../kbn_shared_ux_page_no_data_config.mdx | 2 +-
...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +-
.../kbn_shared_ux_prompt_no_data_views.mdx | 2 +-
...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +-
api_docs/kbn_shared_ux_router.mdx | 2 +-
api_docs/kbn_shared_ux_router_mocks.mdx | 2 +-
api_docs/kbn_shared_ux_storybook_config.mdx | 2 +-
api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +-
api_docs/kbn_shared_ux_utility.mdx | 2 +-
api_docs/kbn_slo_schema.mdx | 2 +-
api_docs/kbn_some_dev_log.mdx | 2 +-
api_docs/kbn_std.mdx | 2 +-
api_docs/kbn_stdio_dev_helpers.mdx | 2 +-
api_docs/kbn_storybook.mdx | 2 +-
api_docs/kbn_telemetry_tools.mdx | 2 +-
api_docs/kbn_test.mdx | 2 +-
api_docs/kbn_test_jest_helpers.mdx | 2 +-
api_docs/kbn_test_subj_selector.mdx | 2 +-
api_docs/kbn_tooling_log.mdx | 2 +-
api_docs/kbn_ts_projects.mdx | 2 +-
api_docs/kbn_typed_react_router_config.mdx | 2 +-
api_docs/kbn_ui_actions_browser.mdx | 2 +-
api_docs/kbn_ui_shared_deps_src.mdx | 2 +-
api_docs/kbn_ui_theme.mdx | 2 +-
api_docs/kbn_user_profile_components.mdx | 2 +-
api_docs/kbn_utility_types.mdx | 2 +-
api_docs/kbn_utility_types_jest.mdx | 2 +-
api_docs/kbn_utils.mdx | 2 +-
api_docs/kbn_yarn_lock_validator.mdx | 2 +-
api_docs/kibana_overview.mdx | 2 +-
api_docs/kibana_react.devdocs.json | 6 +-
api_docs/kibana_react.mdx | 2 +-
api_docs/kibana_utils.mdx | 2 +-
api_docs/kubernetes_security.mdx | 2 +-
api_docs/lens.mdx | 2 +-
api_docs/license_api_guard.mdx | 2 +-
api_docs/license_management.mdx | 2 +-
api_docs/licensing.mdx | 2 +-
api_docs/lists.mdx | 2 +-
api_docs/management.mdx | 2 +-
api_docs/maps.mdx | 2 +-
api_docs/maps_ems.mdx | 2 +-
api_docs/ml.mdx | 2 +-
api_docs/monitoring.mdx | 2 +-
api_docs/monitoring_collection.mdx | 2 +-
api_docs/navigation.mdx | 2 +-
api_docs/newsfeed.mdx | 2 +-
api_docs/notifications.mdx | 2 +-
api_docs/observability.mdx | 2 +-
api_docs/osquery.mdx | 2 +-
api_docs/plugin_directory.mdx | 6 +-
api_docs/presentation_util.mdx | 2 +-
api_docs/profiling.mdx | 2 +-
api_docs/remote_clusters.mdx | 2 +-
api_docs/reporting.mdx | 2 +-
api_docs/rollup.mdx | 2 +-
api_docs/rule_registry.mdx | 2 +-
api_docs/runtime_fields.mdx | 2 +-
api_docs/saved_objects.mdx | 2 +-
api_docs/saved_objects_finder.mdx | 2 +-
api_docs/saved_objects_management.mdx | 2 +-
api_docs/saved_objects_tagging.mdx | 2 +-
api_docs/saved_objects_tagging_oss.mdx | 2 +-
api_docs/saved_search.mdx | 2 +-
api_docs/screenshot_mode.mdx | 2 +-
api_docs/screenshotting.mdx | 2 +-
api_docs/security.mdx | 2 +-
api_docs/security_solution.mdx | 2 +-
api_docs/session_view.mdx | 2 +-
api_docs/share.mdx | 2 +-
api_docs/snapshot_restore.mdx | 2 +-
api_docs/spaces.mdx | 2 +-
api_docs/stack_alerts.mdx | 2 +-
api_docs/stack_connectors.mdx | 2 +-
api_docs/task_manager.mdx | 2 +-
api_docs/telemetry.mdx | 2 +-
api_docs/telemetry_collection_manager.mdx | 2 +-
api_docs/telemetry_collection_xpack.mdx | 2 +-
api_docs/telemetry_management_section.mdx | 2 +-
api_docs/threat_intelligence.mdx | 2 +-
api_docs/timelines.mdx | 2 +-
api_docs/transform.mdx | 2 +-
api_docs/triggers_actions_ui.mdx | 2 +-
api_docs/ui_actions.mdx | 2 +-
api_docs/ui_actions_enhanced.mdx | 2 +-
api_docs/unified_field_list.mdx | 2 +-
api_docs/unified_histogram.mdx | 2 +-
api_docs/unified_search.mdx | 2 +-
api_docs/unified_search_autocomplete.mdx | 2 +-
api_docs/url_forwarding.mdx | 2 +-
api_docs/usage_collection.mdx | 2 +-
api_docs/ux.mdx | 2 +-
api_docs/vis_default_editor.mdx | 2 +-
api_docs/vis_type_gauge.mdx | 2 +-
api_docs/vis_type_heatmap.mdx | 2 +-
api_docs/vis_type_pie.mdx | 2 +-
api_docs/vis_type_table.mdx | 2 +-
api_docs/vis_type_timelion.mdx | 2 +-
api_docs/vis_type_timeseries.mdx | 2 +-
api_docs/vis_type_vega.mdx | 2 +-
api_docs/vis_type_vislib.mdx | 2 +-
api_docs/vis_type_xy.mdx | 2 +-
api_docs/visualizations.mdx | 2 +-
478 files changed, 550 insertions(+), 577 deletions(-)
diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index 96933145bfd1a..3e926c99476ef 100644
--- a/api_docs/actions.mdx
+++ b/api_docs/actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions
title: "actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the actions plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions']
---
import actionsObj from './actions.devdocs.json';
diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx
index 9245052c091e5..8b7c1387882a8 100644
--- a/api_docs/advanced_settings.mdx
+++ b/api_docs/advanced_settings.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings
title: "advancedSettings"
image: https://source.unsplash.com/400x175/?github
description: API docs for the advancedSettings plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings']
---
import advancedSettingsObj from './advanced_settings.devdocs.json';
diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx
index bb3492b0d47ac..c0df2688bc350 100644
--- a/api_docs/aiops.mdx
+++ b/api_docs/aiops.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops
title: "aiops"
image: https://source.unsplash.com/400x175/?github
description: API docs for the aiops plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops']
---
import aiopsObj from './aiops.devdocs.json';
diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx
index 499a7945a0076..adada612c63f6 100644
--- a/api_docs/alerting.mdx
+++ b/api_docs/alerting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting
title: "alerting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the alerting plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting']
---
import alertingObj from './alerting.devdocs.json';
diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx
index f3f795ff3c0c9..0a1ea8fbc3f59 100644
--- a/api_docs/apm.mdx
+++ b/api_docs/apm.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm
title: "apm"
image: https://source.unsplash.com/400x175/?github
description: API docs for the apm plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm']
---
import apmObj from './apm.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index f17edc6e906a6..390aea6cfea56 100644
--- a/api_docs/banners.mdx
+++ b/api_docs/banners.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners
title: "banners"
image: https://source.unsplash.com/400x175/?github
description: API docs for the banners plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners']
---
import bannersObj from './banners.devdocs.json';
diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx
index dabb284b2e4a3..bd2371a5e5b5e 100644
--- a/api_docs/bfetch.mdx
+++ b/api_docs/bfetch.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch
title: "bfetch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the bfetch plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch']
---
import bfetchObj from './bfetch.devdocs.json';
diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx
index a16c0af5f3459..2eb95893c4fb7 100644
--- a/api_docs/canvas.mdx
+++ b/api_docs/canvas.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas
title: "canvas"
image: https://source.unsplash.com/400x175/?github
description: API docs for the canvas plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas']
---
import canvasObj from './canvas.devdocs.json';
diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx
index 144a098e2786f..1a59ab69ccccf 100644
--- a/api_docs/cases.mdx
+++ b/api_docs/cases.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases
title: "cases"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cases plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases']
---
import casesObj from './cases.devdocs.json';
diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx
index 69e52325ae810..419e785e6fa23 100644
--- a/api_docs/charts.mdx
+++ b/api_docs/charts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts
title: "charts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the charts plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts']
---
import chartsObj from './charts.devdocs.json';
diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx
index b527598cf8c46..f0eeee257c076 100644
--- a/api_docs/cloud.mdx
+++ b/api_docs/cloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud
title: "cloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloud plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud']
---
import cloudObj from './cloud.devdocs.json';
diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx
index 0dfe68156b3d7..1b66211c3606a 100644
--- a/api_docs/cloud_chat.mdx
+++ b/api_docs/cloud_chat.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat
title: "cloudChat"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudChat plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat']
---
import cloudChatObj from './cloud_chat.devdocs.json';
diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx
index 0cf526dd9c85e..15a13dd2ba2ad 100644
--- a/api_docs/cloud_data_migration.mdx
+++ b/api_docs/cloud_data_migration.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration
title: "cloudDataMigration"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDataMigration plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration']
---
import cloudDataMigrationObj from './cloud_data_migration.devdocs.json';
diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx
index 2c9fd613912e1..1d37f83f96702 100644
--- a/api_docs/cloud_defend.mdx
+++ b/api_docs/cloud_defend.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend
title: "cloudDefend"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudDefend plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend']
---
import cloudDefendObj from './cloud_defend.devdocs.json';
diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx
index 9227acec97276..bb69cb33d2319 100644
--- a/api_docs/cloud_experiments.mdx
+++ b/api_docs/cloud_experiments.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments
title: "cloudExperiments"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudExperiments plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments']
---
import cloudExperimentsObj from './cloud_experiments.devdocs.json';
diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx
index 2241f950c24a7..bb9ab23be4031 100644
--- a/api_docs/cloud_security_posture.mdx
+++ b/api_docs/cloud_security_posture.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture
title: "cloudSecurityPosture"
image: https://source.unsplash.com/400x175/?github
description: API docs for the cloudSecurityPosture plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture']
---
import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json';
diff --git a/api_docs/console.mdx b/api_docs/console.mdx
index 4e03f66dd18a3..e7214f8f32f32 100644
--- a/api_docs/console.mdx
+++ b/api_docs/console.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console
title: "console"
image: https://source.unsplash.com/400x175/?github
description: API docs for the console plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console']
---
import consoleObj from './console.devdocs.json';
diff --git a/api_docs/content_management.devdocs.json b/api_docs/content_management.devdocs.json
index e07703f73f764..779fcfac4f572 100644
--- a/api_docs/content_management.devdocs.json
+++ b/api_docs/content_management.devdocs.json
@@ -145,21 +145,21 @@
},
""
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/create.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
{
"parentPluginId": "contentManagement",
- "id": "def-common.CreateIn.contentType",
+ "id": "def-common.CreateIn.contentTypeId",
"type": "Uncategorized",
"tags": [],
- "label": "contentType",
+ "label": "contentTypeId",
"description": [],
"signature": [
"T"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/create.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -173,7 +173,7 @@
"signature": [
"Data"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/create.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -187,7 +187,7 @@
"signature": [
"Options | undefined"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/create.ts",
"deprecated": false,
"trackAdoption": false
}
@@ -209,37 +209,34 @@
"section": "def-common.DeleteIn",
"text": "DeleteIn"
},
- ""
+ ""
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/delete.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
{
"parentPluginId": "contentManagement",
- "id": "def-common.DeleteIn.contentType",
+ "id": "def-common.DeleteIn.contentTypeId",
"type": "Uncategorized",
"tags": [],
- "label": "contentType",
+ "label": "contentTypeId",
"description": [],
"signature": [
"T"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/delete.ts",
"deprecated": false,
"trackAdoption": false
},
{
"parentPluginId": "contentManagement",
- "id": "def-common.DeleteIn.data",
- "type": "Uncategorized",
+ "id": "def-common.DeleteIn.id",
+ "type": "string",
"tags": [],
- "label": "data",
+ "label": "id",
"description": [],
- "signature": [
- "Data"
- ],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/delete.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -253,7 +250,7 @@
"signature": [
"Options | undefined"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/delete.ts",
"deprecated": false,
"trackAdoption": false
}
@@ -275,9 +272,9 @@
"section": "def-common.GetIn",
"text": "GetIn"
},
- ""
+ ""
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/get.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
@@ -288,18 +285,21 @@
"tags": [],
"label": "id",
"description": [],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/get.ts",
"deprecated": false,
"trackAdoption": false
},
{
"parentPluginId": "contentManagement",
- "id": "def-common.GetIn.contentType",
- "type": "string",
+ "id": "def-common.GetIn.contentTypeId",
+ "type": "Uncategorized",
"tags": [],
- "label": "contentType",
+ "label": "contentTypeId",
"description": [],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "signature": [
+ "T"
+ ],
+ "path": "src/plugins/content_management/common/rpc/get.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -313,7 +313,7 @@
"signature": [
"Options | undefined"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/get.ts",
"deprecated": false,
"trackAdoption": false
}
@@ -327,7 +327,7 @@
"tags": [],
"label": "ProcedureSchemas",
"description": [],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/types.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
@@ -347,9 +347,9 @@
"section": "def-common.Type",
"text": "Type"
},
- " | undefined"
+ ""
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/types.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -369,9 +369,9 @@
"section": "def-common.Type",
"text": "Type"
},
- " | undefined"
+ ""
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/types.ts",
"deprecated": false,
"trackAdoption": false
}
@@ -393,37 +393,37 @@
"section": "def-common.SearchIn",
"text": "SearchIn"
},
- ""
+ ""
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/search.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
{
"parentPluginId": "contentManagement",
- "id": "def-common.SearchIn.contentType",
+ "id": "def-common.SearchIn.contentTypeId",
"type": "Uncategorized",
"tags": [],
- "label": "contentType",
+ "label": "contentTypeId",
"description": [],
"signature": [
"T"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/search.ts",
"deprecated": false,
"trackAdoption": false
},
{
"parentPluginId": "contentManagement",
- "id": "def-common.SearchIn.params",
+ "id": "def-common.SearchIn.query",
"type": "Uncategorized",
"tags": [],
- "label": "params",
+ "label": "query",
"description": [],
"signature": [
- "Params"
+ "Query"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/search.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -437,45 +437,7 @@
"signature": [
"Options | undefined"
],
- "path": "src/plugins/content_management/common/rpc.ts",
- "deprecated": false,
- "trackAdoption": false
- }
- ],
- "initialIsOpen": false
- },
- {
- "parentPluginId": "contentManagement",
- "id": "def-common.SearchOut",
- "type": "Interface",
- "tags": [],
- "label": "SearchOut",
- "description": [],
- "signature": [
- {
- "pluginId": "contentManagement",
- "scope": "common",
- "docId": "kibContentManagementPluginApi",
- "section": "def-common.SearchOut",
- "text": "SearchOut"
- },
- ""
- ],
- "path": "src/plugins/content_management/common/rpc.ts",
- "deprecated": false,
- "trackAdoption": false,
- "children": [
- {
- "parentPluginId": "contentManagement",
- "id": "def-common.SearchOut.hits",
- "type": "Array",
- "tags": [],
- "label": "hits",
- "description": [],
- "signature": [
- "Data[]"
- ],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/search.ts",
"deprecated": false,
"trackAdoption": false
}
@@ -499,21 +461,32 @@
},
""
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/update.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
{
"parentPluginId": "contentManagement",
- "id": "def-common.UpdateIn.contentType",
+ "id": "def-common.UpdateIn.contentTypeId",
"type": "Uncategorized",
"tags": [],
- "label": "contentType",
+ "label": "contentTypeId",
"description": [],
"signature": [
"T"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/update.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
+ {
+ "parentPluginId": "contentManagement",
+ "id": "def-common.UpdateIn.id",
+ "type": "string",
+ "tags": [],
+ "label": "id",
+ "description": [],
+ "path": "src/plugins/content_management/common/rpc/update.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -527,7 +500,7 @@
"signature": [
"Data"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/update.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -541,7 +514,7 @@
"signature": [
"Options | undefined"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/update.ts",
"deprecated": false,
"trackAdoption": false
}
@@ -591,7 +564,7 @@
"signature": [
"\"create\" | \"update\" | \"get\" | \"delete\" | \"search\""
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/constants.ts",
"deprecated": false,
"trackAdoption": false,
"initialIsOpen": false
@@ -608,7 +581,7 @@
"signature": [
"readonly [\"get\", \"create\", \"update\", \"delete\", \"search\"]"
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/constants.ts",
"deprecated": false,
"trackAdoption": false,
"initialIsOpen": false
@@ -620,7 +593,7 @@
"tags": [],
"label": "schemas",
"description": [],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/rpc.ts",
"deprecated": false,
"trackAdoption": false,
"children": [
@@ -640,7 +613,7 @@
"text": "ProcedureSchemas"
}
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/rpc.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -660,7 +633,7 @@
"text": "ProcedureSchemas"
}
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/rpc.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -680,7 +653,7 @@
"text": "ProcedureSchemas"
}
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/rpc.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -700,7 +673,7 @@
"text": "ProcedureSchemas"
}
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/rpc.ts",
"deprecated": false,
"trackAdoption": false
},
@@ -720,7 +693,7 @@
"text": "ProcedureSchemas"
}
],
- "path": "src/plugins/content_management/common/rpc.ts",
+ "path": "src/plugins/content_management/common/rpc/rpc.ts",
"deprecated": false,
"trackAdoption": false
}
diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx
index 86289b6f484fd..de9413917e3c1 100644
--- a/api_docs/content_management.mdx
+++ b/api_docs/content_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement
title: "contentManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the contentManagement plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement']
---
import contentManagementObj from './content_management.devdocs.json';
@@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 42 | 0 | 42 | 3 |
+| 41 | 0 | 41 | 3 |
## Client
diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx
index 76767eafedcd5..2031219295dc0 100644
--- a/api_docs/controls.mdx
+++ b/api_docs/controls.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls
title: "controls"
image: https://source.unsplash.com/400x175/?github
description: API docs for the controls plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls']
---
import controlsObj from './controls.devdocs.json';
diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx
index d078f40776bfe..a498d9daf1215 100644
--- a/api_docs/custom_integrations.mdx
+++ b/api_docs/custom_integrations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations
title: "customIntegrations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the customIntegrations plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations']
---
import customIntegrationsObj from './custom_integrations.devdocs.json';
diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx
index c61f643760bca..47ccf22f1d4c0 100644
--- a/api_docs/dashboard.mdx
+++ b/api_docs/dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard
title: "dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboard plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard']
---
import dashboardObj from './dashboard.devdocs.json';
diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx
index 2e1f0066d887e..5ae45f329d207 100644
--- a/api_docs/dashboard_enhanced.mdx
+++ b/api_docs/dashboard_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced
title: "dashboardEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dashboardEnhanced plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced']
---
import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json';
diff --git a/api_docs/data.mdx b/api_docs/data.mdx
index 36dd1ccf8c417..b1841ff331163 100644
--- a/api_docs/data.mdx
+++ b/api_docs/data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data
title: "data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data']
---
import dataObj from './data.devdocs.json';
diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx
index 29cce7557e5d6..0bcaf823d1053 100644
--- a/api_docs/data_query.mdx
+++ b/api_docs/data_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query
title: "data.query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.query plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query']
---
import dataQueryObj from './data_query.devdocs.json';
diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx
index c9601b08984ac..2928c1d74b072 100644
--- a/api_docs/data_search.mdx
+++ b/api_docs/data_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search
title: "data.search"
image: https://source.unsplash.com/400x175/?github
description: API docs for the data.search plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search']
---
import dataSearchObj from './data_search.devdocs.json';
diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx
index 75f656bafdee2..1dcd1ce588b5a 100644
--- a/api_docs/data_view_editor.mdx
+++ b/api_docs/data_view_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor
title: "dataViewEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewEditor plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor']
---
import dataViewEditorObj from './data_view_editor.devdocs.json';
diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx
index e14e5e81de3db..06034d231565c 100644
--- a/api_docs/data_view_field_editor.mdx
+++ b/api_docs/data_view_field_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor
title: "dataViewFieldEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewFieldEditor plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor']
---
import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json';
diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx
index 839366c6a72f9..93c19543506a5 100644
--- a/api_docs/data_view_management.mdx
+++ b/api_docs/data_view_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement
title: "dataViewManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViewManagement plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement']
---
import dataViewManagementObj from './data_view_management.devdocs.json';
diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx
index 07e8d8ea4d415..de2998519b208 100644
--- a/api_docs/data_views.mdx
+++ b/api_docs/data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews
title: "dataViews"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataViews plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews']
---
import dataViewsObj from './data_views.devdocs.json';
diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx
index c5a3cb1916567..c1ce80e4c5782 100644
--- a/api_docs/data_visualizer.mdx
+++ b/api_docs/data_visualizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer
title: "dataVisualizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the dataVisualizer plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer']
---
import dataVisualizerObj from './data_visualizer.devdocs.json';
diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx
index 67da4dc09d388..b1c36f670e74f 100644
--- a/api_docs/deprecations_by_api.mdx
+++ b/api_docs/deprecations_by_api.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api
title: Deprecated API usage by API
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index 7f1d78ce960de..ef311a52fa2a8 100644
--- a/api_docs/deprecations_by_plugin.mdx
+++ b/api_docs/deprecations_by_plugin.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin
slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin
title: Deprecated API usage by plugin
description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by.
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -339,7 +339,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [create_static_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts#:~:text=title), [create_static_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts#:~:text=title) | - |
| | [create_static_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts#:~:text=title) | - |
| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/plugin.ts#:~:text=environment) | 8.8.0 |
-| | [app_root.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root.tsx#:~:text=RedirectAppLinks), [app_root.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root.tsx#:~:text=RedirectAppLinks), [app_root.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root.tsx#:~:text=RedirectAppLinks) | - |
+| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root/index.tsx#:~:text=RedirectAppLinks) | - |
| | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 |
| | [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/context/license/license_context.tsx#:~:text=license%24) | 8.8.0 |
| | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 |
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index b3fe11110da41..9a3512c26dfa5 100644
--- a/api_docs/deprecations_by_team.mdx
+++ b/api_docs/deprecations_by_team.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam
slug: /kibana-dev-docs/api-meta/deprecations-due-by-team
title: Deprecated APIs due to be removed, by team
description: Lists the teams that are referencing deprecated APIs with a remove by date.
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index 3750aa0bbfca1..e19682fd4a70f 100644
--- a/api_docs/dev_tools.mdx
+++ b/api_docs/dev_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools
title: "devTools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the devTools plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools']
---
import devToolsObj from './dev_tools.devdocs.json';
diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx
index 731f54e4bae4a..6af7f3c703902 100644
--- a/api_docs/discover.mdx
+++ b/api_docs/discover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover
title: "discover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discover plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover']
---
import discoverObj from './discover.devdocs.json';
diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx
index df26d7a3f63c4..14819947d3e54 100644
--- a/api_docs/discover_enhanced.mdx
+++ b/api_docs/discover_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced
title: "discoverEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the discoverEnhanced plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced']
---
import discoverEnhancedObj from './discover_enhanced.devdocs.json';
diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx
index 63ab8db054397..1e6a21f7c8171 100644
--- a/api_docs/ecs_data_quality_dashboard.mdx
+++ b/api_docs/ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard
title: "ecsDataQualityDashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ecsDataQualityDashboard plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard']
---
import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx
index 84f2732b4763f..161766f380f10 100644
--- a/api_docs/embeddable.mdx
+++ b/api_docs/embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable
title: "embeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddable plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable']
---
import embeddableObj from './embeddable.devdocs.json';
diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx
index 77c6ef1cc13ec..efe75258646d6 100644
--- a/api_docs/embeddable_enhanced.mdx
+++ b/api_docs/embeddable_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced
title: "embeddableEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the embeddableEnhanced plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced']
---
import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json';
diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx
index 3a95b8b4588f1..4d58390c80b3c 100644
--- a/api_docs/encrypted_saved_objects.mdx
+++ b/api_docs/encrypted_saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects
title: "encryptedSavedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the encryptedSavedObjects plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects']
---
import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json';
diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx
index ccdfb19bce93a..8184578800fdf 100644
--- a/api_docs/enterprise_search.mdx
+++ b/api_docs/enterprise_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch
title: "enterpriseSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the enterpriseSearch plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch']
---
import enterpriseSearchObj from './enterprise_search.devdocs.json';
diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx
index 66286c65b3b3e..722fe7bde8d81 100644
--- a/api_docs/es_ui_shared.mdx
+++ b/api_docs/es_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared
title: "esUiShared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the esUiShared plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared']
---
import esUiSharedObj from './es_ui_shared.devdocs.json';
diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx
index cf2fb6514cec1..d2f42a849ddb1 100644
--- a/api_docs/event_annotation.mdx
+++ b/api_docs/event_annotation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation
title: "eventAnnotation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventAnnotation plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation']
---
import eventAnnotationObj from './event_annotation.devdocs.json';
diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx
index b46b1c1673882..c0d159cf945b0 100644
--- a/api_docs/event_log.mdx
+++ b/api_docs/event_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog
title: "eventLog"
image: https://source.unsplash.com/400x175/?github
description: API docs for the eventLog plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog']
---
import eventLogObj from './event_log.devdocs.json';
diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx
index b1bc04ed2298f..80baa289f0e2e 100644
--- a/api_docs/expression_error.mdx
+++ b/api_docs/expression_error.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError
title: "expressionError"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionError plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError']
---
import expressionErrorObj from './expression_error.devdocs.json';
diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx
index 7c50317ce6567..b9dccdadd3bc3 100644
--- a/api_docs/expression_gauge.mdx
+++ b/api_docs/expression_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge
title: "expressionGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionGauge plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge']
---
import expressionGaugeObj from './expression_gauge.devdocs.json';
diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx
index a1187dc6d0763..5811a29f8bfad 100644
--- a/api_docs/expression_heatmap.mdx
+++ b/api_docs/expression_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap
title: "expressionHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionHeatmap plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap']
---
import expressionHeatmapObj from './expression_heatmap.devdocs.json';
diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx
index 30cd7104a45d2..88bdd4792667e 100644
--- a/api_docs/expression_image.mdx
+++ b/api_docs/expression_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage
title: "expressionImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionImage plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage']
---
import expressionImageObj from './expression_image.devdocs.json';
diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx
index 66c30f6ca11c7..a6caeb0d77c18 100644
--- a/api_docs/expression_legacy_metric_vis.mdx
+++ b/api_docs/expression_legacy_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis
title: "expressionLegacyMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionLegacyMetricVis plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis']
---
import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json';
diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx
index da30a1490364d..f43139104ef14 100644
--- a/api_docs/expression_metric.mdx
+++ b/api_docs/expression_metric.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric
title: "expressionMetric"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetric plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric']
---
import expressionMetricObj from './expression_metric.devdocs.json';
diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx
index 5ab21304bfdf2..93a50653e87f8 100644
--- a/api_docs/expression_metric_vis.mdx
+++ b/api_docs/expression_metric_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis
title: "expressionMetricVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionMetricVis plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis']
---
import expressionMetricVisObj from './expression_metric_vis.devdocs.json';
diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx
index 4409df31e008a..56a58c391c375 100644
--- a/api_docs/expression_partition_vis.mdx
+++ b/api_docs/expression_partition_vis.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis
title: "expressionPartitionVis"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionPartitionVis plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis']
---
import expressionPartitionVisObj from './expression_partition_vis.devdocs.json';
diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx
index b04d38c25bac8..362ca0c24aea2 100644
--- a/api_docs/expression_repeat_image.mdx
+++ b/api_docs/expression_repeat_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage
title: "expressionRepeatImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRepeatImage plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage']
---
import expressionRepeatImageObj from './expression_repeat_image.devdocs.json';
diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx
index 2e9e4de423103..72fdf146aa441 100644
--- a/api_docs/expression_reveal_image.mdx
+++ b/api_docs/expression_reveal_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage
title: "expressionRevealImage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionRevealImage plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage']
---
import expressionRevealImageObj from './expression_reveal_image.devdocs.json';
diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx
index f2d2619c6307a..ddbaeb42b1332 100644
--- a/api_docs/expression_shape.mdx
+++ b/api_docs/expression_shape.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape
title: "expressionShape"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionShape plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape']
---
import expressionShapeObj from './expression_shape.devdocs.json';
diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx
index fc0f9235a1092..10a0bcb9bf6ad 100644
--- a/api_docs/expression_tagcloud.mdx
+++ b/api_docs/expression_tagcloud.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud
title: "expressionTagcloud"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionTagcloud plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud']
---
import expressionTagcloudObj from './expression_tagcloud.devdocs.json';
diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx
index fbe05b487dc39..a5797770c3a7c 100644
--- a/api_docs/expression_x_y.mdx
+++ b/api_docs/expression_x_y.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY
title: "expressionXY"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressionXY plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY']
---
import expressionXYObj from './expression_x_y.devdocs.json';
diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx
index 3732d359741c6..f43af727a8cc1 100644
--- a/api_docs/expressions.mdx
+++ b/api_docs/expressions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions
title: "expressions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the expressions plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions']
---
import expressionsObj from './expressions.devdocs.json';
diff --git a/api_docs/features.mdx b/api_docs/features.mdx
index 54edad3a62b9f..9e3bba7f9e307 100644
--- a/api_docs/features.mdx
+++ b/api_docs/features.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features
title: "features"
image: https://source.unsplash.com/400x175/?github
description: API docs for the features plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features']
---
import featuresObj from './features.devdocs.json';
diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx
index 6da5d6b4d1081..5b0aacb51f4ea 100644
--- a/api_docs/field_formats.mdx
+++ b/api_docs/field_formats.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats
title: "fieldFormats"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fieldFormats plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats']
---
import fieldFormatsObj from './field_formats.devdocs.json';
diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx
index a23f1cf26ae9e..3d3220e6d71d5 100644
--- a/api_docs/file_upload.mdx
+++ b/api_docs/file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload
title: "fileUpload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fileUpload plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload']
---
import fileUploadObj from './file_upload.devdocs.json';
diff --git a/api_docs/files.mdx b/api_docs/files.mdx
index 2f273447d4f9e..5e5cbfb19c6e9 100644
--- a/api_docs/files.mdx
+++ b/api_docs/files.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files
title: "files"
image: https://source.unsplash.com/400x175/?github
description: API docs for the files plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files']
---
import filesObj from './files.devdocs.json';
diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx
index 79d63fdf97fda..675ad45079f83 100644
--- a/api_docs/files_management.mdx
+++ b/api_docs/files_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement
title: "filesManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the filesManagement plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement']
---
import filesManagementObj from './files_management.devdocs.json';
diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx
index 81812b8f19fe1..953b463a74548 100644
--- a/api_docs/fleet.mdx
+++ b/api_docs/fleet.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet
title: "fleet"
image: https://source.unsplash.com/400x175/?github
description: API docs for the fleet plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet']
---
import fleetObj from './fleet.devdocs.json';
diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx
index 4eec34b4078f9..6202396e1e7cb 100644
--- a/api_docs/global_search.mdx
+++ b/api_docs/global_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch
title: "globalSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the globalSearch plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch']
---
import globalSearchObj from './global_search.devdocs.json';
diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx
index 43101fedab1e6..7bbd0b618c908 100644
--- a/api_docs/guided_onboarding.mdx
+++ b/api_docs/guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding
title: "guidedOnboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the guidedOnboarding plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding']
---
import guidedOnboardingObj from './guided_onboarding.devdocs.json';
diff --git a/api_docs/home.mdx b/api_docs/home.mdx
index d72e68287c1f7..b1940dbc190b2 100644
--- a/api_docs/home.mdx
+++ b/api_docs/home.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home
title: "home"
image: https://source.unsplash.com/400x175/?github
description: API docs for the home plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home']
---
import homeObj from './home.devdocs.json';
diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx
index b02019dc3934b..231db4c6bebdb 100644
--- a/api_docs/image_embeddable.mdx
+++ b/api_docs/image_embeddable.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable
title: "imageEmbeddable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the imageEmbeddable plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable']
---
import imageEmbeddableObj from './image_embeddable.devdocs.json';
diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx
index f5ce120f83aa2..c6c75389f83a3 100644
--- a/api_docs/index_lifecycle_management.mdx
+++ b/api_docs/index_lifecycle_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement
title: "indexLifecycleManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexLifecycleManagement plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement']
---
import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json';
diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx
index 6de10fdb6beca..ea16aa53a349b 100644
--- a/api_docs/index_management.mdx
+++ b/api_docs/index_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement
title: "indexManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the indexManagement plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement']
---
import indexManagementObj from './index_management.devdocs.json';
diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx
index d4f2769034149..704f12fc8722c 100644
--- a/api_docs/infra.mdx
+++ b/api_docs/infra.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra
title: "infra"
image: https://source.unsplash.com/400x175/?github
description: API docs for the infra plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra']
---
import infraObj from './infra.devdocs.json';
diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx
index fe1dd4d34f93c..bca3c11993651 100644
--- a/api_docs/inspector.mdx
+++ b/api_docs/inspector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector
title: "inspector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the inspector plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector']
---
import inspectorObj from './inspector.devdocs.json';
diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx
index 1f006d364686b..17875d743a453 100644
--- a/api_docs/interactive_setup.mdx
+++ b/api_docs/interactive_setup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup
title: "interactiveSetup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the interactiveSetup plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup']
---
import interactiveSetupObj from './interactive_setup.devdocs.json';
diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx
index b4f7c361086e2..f9b3a60039b24 100644
--- a/api_docs/kbn_ace.mdx
+++ b/api_docs/kbn_ace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace
title: "@kbn/ace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ace plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace']
---
import kbnAceObj from './kbn_ace.devdocs.json';
diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx
index 0d9c2c389305f..c9696a8715dbc 100644
--- a/api_docs/kbn_aiops_components.mdx
+++ b/api_docs/kbn_aiops_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components
title: "@kbn/aiops-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-components plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components']
---
import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json';
diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx
index 2e6a52dd1c380..ab74febebf3da 100644
--- a/api_docs/kbn_aiops_utils.mdx
+++ b/api_docs/kbn_aiops_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils
title: "@kbn/aiops-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/aiops-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils']
---
import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json';
diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx
index e248e80581a4e..427b8b5e49ce6 100644
--- a/api_docs/kbn_alerts.mdx
+++ b/api_docs/kbn_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts
title: "@kbn/alerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts']
---
import kbnAlertsObj from './kbn_alerts.devdocs.json';
diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx
index 7c01647a92dbc..e216fcc07dda8 100644
--- a/api_docs/kbn_alerts_ui_shared.mdx
+++ b/api_docs/kbn_alerts_ui_shared.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared
title: "@kbn/alerts-ui-shared"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/alerts-ui-shared plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared']
---
import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json';
diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx
index fdd30a59099f1..f635927f86b0b 100644
--- a/api_docs/kbn_analytics.mdx
+++ b/api_docs/kbn_analytics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics
title: "@kbn/analytics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics']
---
import kbnAnalyticsObj from './kbn_analytics.devdocs.json';
diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx
index a4f582b1d6965..e2d5952a3729f 100644
--- a/api_docs/kbn_analytics_client.mdx
+++ b/api_docs/kbn_analytics_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client
title: "@kbn/analytics-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-client plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client']
---
import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
index be53f47dcb664..f02f5e1c1c212 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser
title: "@kbn/analytics-shippers-elastic-v3-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser']
---
import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
index 4b5bea9cb4236..e5d41537a41fd 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common
title: "@kbn/analytics-shippers-elastic-v3-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common']
---
import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
index ba59066cca87f..5c5ef1306ffec 100644
--- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
+++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server
title: "@kbn/analytics-shippers-elastic-v3-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server']
---
import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx
index 59584a1b0465b..d9b6680f5bc8f 100644
--- a/api_docs/kbn_analytics_shippers_fullstory.mdx
+++ b/api_docs/kbn_analytics_shippers_fullstory.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory
title: "@kbn/analytics-shippers-fullstory"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-fullstory plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory']
---
import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json';
diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx
index dd80a9e7fcd42..4d3dff27228a7 100644
--- a/api_docs/kbn_analytics_shippers_gainsight.mdx
+++ b/api_docs/kbn_analytics_shippers_gainsight.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight
title: "@kbn/analytics-shippers-gainsight"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/analytics-shippers-gainsight plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight']
---
import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json';
diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx
index 2eaa5f30b8baa..635d6bd97cbb2 100644
--- a/api_docs/kbn_apm_config_loader.mdx
+++ b/api_docs/kbn_apm_config_loader.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader
title: "@kbn/apm-config-loader"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-config-loader plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader']
---
import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx
index a3993b93e2b2a..fafa6c8e15455 100644
--- a/api_docs/kbn_apm_synthtrace.mdx
+++ b/api_docs/kbn_apm_synthtrace.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace
title: "@kbn/apm-synthtrace"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace']
---
import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json';
diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx
index 92c09d6e41661..4fb4669907449 100644
--- a/api_docs/kbn_apm_synthtrace_client.mdx
+++ b/api_docs/kbn_apm_synthtrace_client.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client
title: "@kbn/apm-synthtrace-client"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-synthtrace-client plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client']
---
import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json';
diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx
index d220351e7a3c3..0fe3cdd8230a9 100644
--- a/api_docs/kbn_apm_utils.mdx
+++ b/api_docs/kbn_apm_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils
title: "@kbn/apm-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/apm-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils']
---
import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json';
diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx
index 6e1cc62cab8bb..2db64454f2fed 100644
--- a/api_docs/kbn_axe_config.mdx
+++ b/api_docs/kbn_axe_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config
title: "@kbn/axe-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/axe-config plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config']
---
import kbnAxeConfigObj from './kbn_axe_config.devdocs.json';
diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx
index a013a376ab233..2df6c87d68c6d 100644
--- a/api_docs/kbn_cases_components.mdx
+++ b/api_docs/kbn_cases_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components
title: "@kbn/cases-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cases-components plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components']
---
import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json';
diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx
index 712ffeb923cd7..4095c4a302ca3 100644
--- a/api_docs/kbn_cell_actions.mdx
+++ b/api_docs/kbn_cell_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions
title: "@kbn/cell-actions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cell-actions plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions']
---
import kbnCellActionsObj from './kbn_cell_actions.devdocs.json';
diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx
index 31408f4502319..3fc4f3a6dfbfa 100644
--- a/api_docs/kbn_chart_expressions_common.mdx
+++ b/api_docs/kbn_chart_expressions_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common
title: "@kbn/chart-expressions-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-expressions-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common']
---
import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json';
diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx
index eba68b2697f4c..cb0ec12455375 100644
--- a/api_docs/kbn_chart_icons.mdx
+++ b/api_docs/kbn_chart_icons.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons
title: "@kbn/chart-icons"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/chart-icons plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons']
---
import kbnChartIconsObj from './kbn_chart_icons.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx
index a14a8d64e13e8..cbbaab83c591d 100644
--- a/api_docs/kbn_ci_stats_core.mdx
+++ b/api_docs/kbn_ci_stats_core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core
title: "@kbn/ci-stats-core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-core plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core']
---
import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx
index 61f64964d9119..7b27011a7c775 100644
--- a/api_docs/kbn_ci_stats_performance_metrics.mdx
+++ b/api_docs/kbn_ci_stats_performance_metrics.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics
title: "@kbn/ci-stats-performance-metrics"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-performance-metrics plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics']
---
import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json';
diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx
index 73403609a9a24..7cc043207929f 100644
--- a/api_docs/kbn_ci_stats_reporter.mdx
+++ b/api_docs/kbn_ci_stats_reporter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter
title: "@kbn/ci-stats-reporter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ci-stats-reporter plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter']
---
import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json';
diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx
index dcbedc12127d2..32ef0cd5402a5 100644
--- a/api_docs/kbn_cli_dev_mode.mdx
+++ b/api_docs/kbn_cli_dev_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode
title: "@kbn/cli-dev-mode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cli-dev-mode plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode']
---
import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json';
diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx
index 579a8c18fe3f7..b732297b203fc 100644
--- a/api_docs/kbn_code_editor.mdx
+++ b/api_docs/kbn_code_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor
title: "@kbn/code-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor']
---
import kbnCodeEditorObj from './kbn_code_editor.devdocs.json';
diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx
index 10f9a1f8d1616..3af81131ee414 100644
--- a/api_docs/kbn_code_editor_mocks.mdx
+++ b/api_docs/kbn_code_editor_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks
title: "@kbn/code-editor-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/code-editor-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks']
---
import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json';
diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx
index 0054f02b88b6d..dd9ec036c7ca7 100644
--- a/api_docs/kbn_coloring.mdx
+++ b/api_docs/kbn_coloring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring
title: "@kbn/coloring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/coloring plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring']
---
import kbnColoringObj from './kbn_coloring.devdocs.json';
diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx
index 0a97b71138c1f..4482c7f5dff18 100644
--- a/api_docs/kbn_config.mdx
+++ b/api_docs/kbn_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config
title: "@kbn/config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config']
---
import kbnConfigObj from './kbn_config.devdocs.json';
diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx
index d3d8c69026b6d..e1ee7cdc865a9 100644
--- a/api_docs/kbn_config_mocks.mdx
+++ b/api_docs/kbn_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks
title: "@kbn/config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks']
---
import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx
index a0f1fa4a9d9a4..0aa3db7aff995 100644
--- a/api_docs/kbn_config_schema.mdx
+++ b/api_docs/kbn_config_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema
title: "@kbn/config-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/config-schema plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema']
---
import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json';
diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx
index ba55373185863..02cf81a71786b 100644
--- a/api_docs/kbn_content_management_content_editor.mdx
+++ b/api_docs/kbn_content_management_content_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor
title: "@kbn/content-management-content-editor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-content-editor plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor']
---
import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json';
diff --git a/api_docs/kbn_content_management_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx
index c056c6413ce0b..ea0f9f2e35dc9 100644
--- a/api_docs/kbn_content_management_table_list.mdx
+++ b/api_docs/kbn_content_management_table_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list
title: "@kbn/content-management-table-list"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/content-management-table-list plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list']
---
import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx
index 6794d50e0747a..966d45b50d665 100644
--- a/api_docs/kbn_core_analytics_browser.mdx
+++ b/api_docs/kbn_core_analytics_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser
title: "@kbn/core-analytics-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser']
---
import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx
index 59cfea9ea1b89..39288e860fd13 100644
--- a/api_docs/kbn_core_analytics_browser_internal.mdx
+++ b/api_docs/kbn_core_analytics_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal
title: "@kbn/core-analytics-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal']
---
import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx
index 3b50ad6169b8b..fa4f7b3aa1112 100644
--- a/api_docs/kbn_core_analytics_browser_mocks.mdx
+++ b/api_docs/kbn_core_analytics_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks
title: "@kbn/core-analytics-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks']
---
import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx
index 2da32f7c1a6f4..66d85ba70e6ac 100644
--- a/api_docs/kbn_core_analytics_server.mdx
+++ b/api_docs/kbn_core_analytics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server
title: "@kbn/core-analytics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server']
---
import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx
index 3b7d5a3046b27..1c99d0541add8 100644
--- a/api_docs/kbn_core_analytics_server_internal.mdx
+++ b/api_docs/kbn_core_analytics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal
title: "@kbn/core-analytics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal']
---
import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx
index f08cdd12d528e..7d80eb71e06ee 100644
--- a/api_docs/kbn_core_analytics_server_mocks.mdx
+++ b/api_docs/kbn_core_analytics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks
title: "@kbn/core-analytics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-analytics-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks']
---
import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx
index 402c2297f236b..e940ee965a119 100644
--- a/api_docs/kbn_core_application_browser.mdx
+++ b/api_docs/kbn_core_application_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser
title: "@kbn/core-application-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser']
---
import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx
index 385e097e709db..6c2c21928f147 100644
--- a/api_docs/kbn_core_application_browser_internal.mdx
+++ b/api_docs/kbn_core_application_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal
title: "@kbn/core-application-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal']
---
import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx
index 4891aab4f86c7..68468e5fb340b 100644
--- a/api_docs/kbn_core_application_browser_mocks.mdx
+++ b/api_docs/kbn_core_application_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks
title: "@kbn/core-application-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks']
---
import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx
index 0bee8677e8617..72ee977d01ee9 100644
--- a/api_docs/kbn_core_application_common.mdx
+++ b/api_docs/kbn_core_application_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common
title: "@kbn/core-application-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-application-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common']
---
import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json';
diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx
index 8345bac27dd6e..3d2f5364882b4 100644
--- a/api_docs/kbn_core_apps_browser_internal.mdx
+++ b/api_docs/kbn_core_apps_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal
title: "@kbn/core-apps-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal']
---
import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx
index 3397169accccf..3710af98fb348 100644
--- a/api_docs/kbn_core_apps_browser_mocks.mdx
+++ b/api_docs/kbn_core_apps_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks
title: "@kbn/core-apps-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks']
---
import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx
index 585bb2ff41528..e880d11da6141 100644
--- a/api_docs/kbn_core_apps_server_internal.mdx
+++ b/api_docs/kbn_core_apps_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal
title: "@kbn/core-apps-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-apps-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal']
---
import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx
index 38f54791fed0d..9ee2552a2662b 100644
--- a/api_docs/kbn_core_base_browser_mocks.mdx
+++ b/api_docs/kbn_core_base_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks
title: "@kbn/core-base-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks']
---
import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx
index e867b8416a9a6..412fdaf7d4956 100644
--- a/api_docs/kbn_core_base_common.mdx
+++ b/api_docs/kbn_core_base_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common
title: "@kbn/core-base-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common']
---
import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json';
diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx
index 5fa1fc69984c3..da8667ec9f4a5 100644
--- a/api_docs/kbn_core_base_server_internal.mdx
+++ b/api_docs/kbn_core_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal
title: "@kbn/core-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal']
---
import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx
index 096e24ce4e432..d6b453ce2cdff 100644
--- a/api_docs/kbn_core_base_server_mocks.mdx
+++ b/api_docs/kbn_core_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks
title: "@kbn/core-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-base-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks']
---
import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx
index 13f21613ee0e8..6cf8d2552bcbb 100644
--- a/api_docs/kbn_core_capabilities_browser_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks
title: "@kbn/core-capabilities-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks']
---
import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx
index 58b92d226f0ef..4a0d4e62fcdcb 100644
--- a/api_docs/kbn_core_capabilities_common.mdx
+++ b/api_docs/kbn_core_capabilities_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common
title: "@kbn/core-capabilities-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common']
---
import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx
index 3db1299b5b4dd..8e0e23e4a006f 100644
--- a/api_docs/kbn_core_capabilities_server.mdx
+++ b/api_docs/kbn_core_capabilities_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server
title: "@kbn/core-capabilities-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server']
---
import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json';
diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx
index 340c1b66be40c..8da4a0abfb4f6 100644
--- a/api_docs/kbn_core_capabilities_server_mocks.mdx
+++ b/api_docs/kbn_core_capabilities_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks
title: "@kbn/core-capabilities-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-capabilities-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks']
---
import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx
index 923f0f68cef77..8220f61b3b760 100644
--- a/api_docs/kbn_core_chrome_browser.mdx
+++ b/api_docs/kbn_core_chrome_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser
title: "@kbn/core-chrome-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser']
---
import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json';
diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx
index 72823e124ddda..b6abbdc10bce1 100644
--- a/api_docs/kbn_core_chrome_browser_mocks.mdx
+++ b/api_docs/kbn_core_chrome_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks
title: "@kbn/core-chrome-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-chrome-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks']
---
import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx
index 8c76d4232bfbe..dee1ad581964d 100644
--- a/api_docs/kbn_core_config_server_internal.mdx
+++ b/api_docs/kbn_core_config_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal
title: "@kbn/core-config-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-config-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal']
---
import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx
index d5bfa74abb01e..1ef5500a4a112 100644
--- a/api_docs/kbn_core_custom_branding_browser.mdx
+++ b/api_docs/kbn_core_custom_branding_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser
title: "@kbn/core-custom-branding-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser']
---
import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx
index 4ee3d451240ea..0d1bfd645fd6b 100644
--- a/api_docs/kbn_core_custom_branding_browser_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal
title: "@kbn/core-custom-branding-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal']
---
import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx
index 575e759e5795b..41652a24b2de2 100644
--- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks
title: "@kbn/core-custom-branding-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks']
---
import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx
index c7b25a59588fc..510c39c764001 100644
--- a/api_docs/kbn_core_custom_branding_common.mdx
+++ b/api_docs/kbn_core_custom_branding_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common
title: "@kbn/core-custom-branding-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common']
---
import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx
index a536f2e761c00..41c69f6a08c32 100644
--- a/api_docs/kbn_core_custom_branding_server.mdx
+++ b/api_docs/kbn_core_custom_branding_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server
title: "@kbn/core-custom-branding-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server']
---
import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx
index 47a6e6b3ab8aa..bc2b2aff1d9af 100644
--- a/api_docs/kbn_core_custom_branding_server_internal.mdx
+++ b/api_docs/kbn_core_custom_branding_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal
title: "@kbn/core-custom-branding-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal']
---
import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx
index 91cffaf9c59c8..627967fc335b4 100644
--- a/api_docs/kbn_core_custom_branding_server_mocks.mdx
+++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks
title: "@kbn/core-custom-branding-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-custom-branding-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks']
---
import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx
index df24e33e30631..8ef75740987eb 100644
--- a/api_docs/kbn_core_deprecations_browser.mdx
+++ b/api_docs/kbn_core_deprecations_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser
title: "@kbn/core-deprecations-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser']
---
import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx
index a4e7199abbab7..7901f9a98a7e4 100644
--- a/api_docs/kbn_core_deprecations_browser_internal.mdx
+++ b/api_docs/kbn_core_deprecations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal
title: "@kbn/core-deprecations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal']
---
import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx
index 91d5ef4e27505..e2d7bcda0a2a9 100644
--- a/api_docs/kbn_core_deprecations_browser_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks
title: "@kbn/core-deprecations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks']
---
import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx
index feafe5f535402..40bb2bbfc1b85 100644
--- a/api_docs/kbn_core_deprecations_common.mdx
+++ b/api_docs/kbn_core_deprecations_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common
title: "@kbn/core-deprecations-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common']
---
import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx
index e4e584660a257..27b6d914c85f6 100644
--- a/api_docs/kbn_core_deprecations_server.mdx
+++ b/api_docs/kbn_core_deprecations_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server
title: "@kbn/core-deprecations-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server']
---
import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx
index b2998949e2783..bc66b55f84bc6 100644
--- a/api_docs/kbn_core_deprecations_server_internal.mdx
+++ b/api_docs/kbn_core_deprecations_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal
title: "@kbn/core-deprecations-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal']
---
import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx
index d791f8dc091db..8a9ccdacf34fe 100644
--- a/api_docs/kbn_core_deprecations_server_mocks.mdx
+++ b/api_docs/kbn_core_deprecations_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks
title: "@kbn/core-deprecations-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-deprecations-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks']
---
import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx
index d7272b8702452..32f0252b272b9 100644
--- a/api_docs/kbn_core_doc_links_browser.mdx
+++ b/api_docs/kbn_core_doc_links_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser
title: "@kbn/core-doc-links-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser']
---
import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx
index 8cc9314588852..c525c3a50c64d 100644
--- a/api_docs/kbn_core_doc_links_browser_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks
title: "@kbn/core-doc-links-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks']
---
import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx
index c44141272426e..abb6ba6f2cfec 100644
--- a/api_docs/kbn_core_doc_links_server.mdx
+++ b/api_docs/kbn_core_doc_links_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server
title: "@kbn/core-doc-links-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server']
---
import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json';
diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx
index f956481be6799..e3b7db75215b8 100644
--- a/api_docs/kbn_core_doc_links_server_mocks.mdx
+++ b/api_docs/kbn_core_doc_links_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks
title: "@kbn/core-doc-links-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-doc-links-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks']
---
import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
index d4ea13c09b843..ac9a8ab04a956 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal
title: "@kbn/core-elasticsearch-client-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal']
---
import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
index d21e5a8fdbfbe..1b841b939d068 100644
--- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks
title: "@kbn/core-elasticsearch-client-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks']
---
import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx
index de4d748698836..ff9026332740a 100644
--- a/api_docs/kbn_core_elasticsearch_server.mdx
+++ b/api_docs/kbn_core_elasticsearch_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server
title: "@kbn/core-elasticsearch-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server']
---
import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx
index 948c593757bfb..ff08543c85012 100644
--- a/api_docs/kbn_core_elasticsearch_server_internal.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal
title: "@kbn/core-elasticsearch-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal']
---
import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
index d41844afd3667..b489cb0a0e5fc 100644
--- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx
+++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks
title: "@kbn/core-elasticsearch-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-elasticsearch-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks']
---
import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx
index a82f0f9fb2423..41eb176aeb1b1 100644
--- a/api_docs/kbn_core_environment_server_internal.mdx
+++ b/api_docs/kbn_core_environment_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal
title: "@kbn/core-environment-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal']
---
import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx
index 47311134bd641..da9070bbd9d5b 100644
--- a/api_docs/kbn_core_environment_server_mocks.mdx
+++ b/api_docs/kbn_core_environment_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks
title: "@kbn/core-environment-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-environment-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks']
---
import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx
index 4cebaebc37152..91a1eb7e95d14 100644
--- a/api_docs/kbn_core_execution_context_browser.mdx
+++ b/api_docs/kbn_core_execution_context_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser
title: "@kbn/core-execution-context-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser']
---
import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx
index 11861857533ec..4ac62f82f9a47 100644
--- a/api_docs/kbn_core_execution_context_browser_internal.mdx
+++ b/api_docs/kbn_core_execution_context_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal
title: "@kbn/core-execution-context-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal']
---
import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx
index 6671aa66b6244..5a3747e4e07f2 100644
--- a/api_docs/kbn_core_execution_context_browser_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks
title: "@kbn/core-execution-context-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks']
---
import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx
index 0848747995860..0732a260a34ce 100644
--- a/api_docs/kbn_core_execution_context_common.mdx
+++ b/api_docs/kbn_core_execution_context_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common
title: "@kbn/core-execution-context-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common']
---
import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx
index f1a3588ab5619..20f52ba6731eb 100644
--- a/api_docs/kbn_core_execution_context_server.mdx
+++ b/api_docs/kbn_core_execution_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server
title: "@kbn/core-execution-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server']
---
import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx
index 49bc1e0fc5956..124a09ff69906 100644
--- a/api_docs/kbn_core_execution_context_server_internal.mdx
+++ b/api_docs/kbn_core_execution_context_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal
title: "@kbn/core-execution-context-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal']
---
import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx
index 83470e1ce70bd..f519ee25f8939 100644
--- a/api_docs/kbn_core_execution_context_server_mocks.mdx
+++ b/api_docs/kbn_core_execution_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks
title: "@kbn/core-execution-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-execution-context-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks']
---
import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx
index e7fe23a1f923d..affcecc3d105c 100644
--- a/api_docs/kbn_core_fatal_errors_browser.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser
title: "@kbn/core-fatal-errors-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser']
---
import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json';
diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
index 6050c6460c640..09744283fb995 100644
--- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
+++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks
title: "@kbn/core-fatal-errors-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks']
---
import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx
index ba0462eb73dd5..9ae008e7d011a 100644
--- a/api_docs/kbn_core_http_browser.mdx
+++ b/api_docs/kbn_core_http_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser
title: "@kbn/core-http-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser']
---
import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx
index 1cc849bbacc6d..24b19ae8f1d73 100644
--- a/api_docs/kbn_core_http_browser_internal.mdx
+++ b/api_docs/kbn_core_http_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal
title: "@kbn/core-http-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal']
---
import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx
index 5733e4c1b131f..0dc8effe9371b 100644
--- a/api_docs/kbn_core_http_browser_mocks.mdx
+++ b/api_docs/kbn_core_http_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks
title: "@kbn/core-http-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks']
---
import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx
index 468e3ee8565da..193eb2c930e79 100644
--- a/api_docs/kbn_core_http_common.mdx
+++ b/api_docs/kbn_core_http_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common
title: "@kbn/core-http-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common']
---
import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json';
diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx
index 881296bbabfa0..5ce70258f0b49 100644
--- a/api_docs/kbn_core_http_context_server_mocks.mdx
+++ b/api_docs/kbn_core_http_context_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks
title: "@kbn/core-http-context-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-context-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks']
---
import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx
index 187fbc64a729f..144b306e15894 100644
--- a/api_docs/kbn_core_http_request_handler_context_server.mdx
+++ b/api_docs/kbn_core_http_request_handler_context_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server
title: "@kbn/core-http-request-handler-context-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-request-handler-context-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server']
---
import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx
index 8bbdf13209a8f..a83b82030ec1c 100644
--- a/api_docs/kbn_core_http_resources_server.mdx
+++ b/api_docs/kbn_core_http_resources_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server
title: "@kbn/core-http-resources-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server']
---
import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx
index 37d4699472358..c1ae8be00852a 100644
--- a/api_docs/kbn_core_http_resources_server_internal.mdx
+++ b/api_docs/kbn_core_http_resources_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal
title: "@kbn/core-http-resources-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal']
---
import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx
index 34c5f35f98a46..ec2499cd82c66 100644
--- a/api_docs/kbn_core_http_resources_server_mocks.mdx
+++ b/api_docs/kbn_core_http_resources_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks
title: "@kbn/core-http-resources-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-resources-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks']
---
import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx
index 1f2b2f9a594ec..0e95e8581367e 100644
--- a/api_docs/kbn_core_http_router_server_internal.mdx
+++ b/api_docs/kbn_core_http_router_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal
title: "@kbn/core-http-router-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal']
---
import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx
index b2ba7568155f3..292c9086ece26 100644
--- a/api_docs/kbn_core_http_router_server_mocks.mdx
+++ b/api_docs/kbn_core_http_router_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks
title: "@kbn/core-http-router-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-router-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks']
---
import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx
index 8f8561a7aba19..d06fc41f1decb 100644
--- a/api_docs/kbn_core_http_server.mdx
+++ b/api_docs/kbn_core_http_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server
title: "@kbn/core-http-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server']
---
import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json';
diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx
index fb8fb86f0b642..5f70eaeac6401 100644
--- a/api_docs/kbn_core_http_server_internal.mdx
+++ b/api_docs/kbn_core_http_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal
title: "@kbn/core-http-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal']
---
import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx
index 439a62eb454a8..6812b745be87e 100644
--- a/api_docs/kbn_core_http_server_mocks.mdx
+++ b/api_docs/kbn_core_http_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks
title: "@kbn/core-http-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-http-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks']
---
import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx
index 254d6e4076e3a..b51b90da236ea 100644
--- a/api_docs/kbn_core_i18n_browser.mdx
+++ b/api_docs/kbn_core_i18n_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser
title: "@kbn/core-i18n-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser']
---
import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx
index 5bddf2b09444a..f0197ce673b94 100644
--- a/api_docs/kbn_core_i18n_browser_mocks.mdx
+++ b/api_docs/kbn_core_i18n_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks
title: "@kbn/core-i18n-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks']
---
import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx
index b66acca16e868..bc9fbd36bef6d 100644
--- a/api_docs/kbn_core_i18n_server.mdx
+++ b/api_docs/kbn_core_i18n_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server
title: "@kbn/core-i18n-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server']
---
import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx
index a5e8f868ac9c9..5608bbe492830 100644
--- a/api_docs/kbn_core_i18n_server_internal.mdx
+++ b/api_docs/kbn_core_i18n_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal
title: "@kbn/core-i18n-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal']
---
import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx
index 27089b3d906c0..0396bf48da5d1 100644
--- a/api_docs/kbn_core_i18n_server_mocks.mdx
+++ b/api_docs/kbn_core_i18n_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks
title: "@kbn/core-i18n-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-i18n-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks']
---
import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
index e8cf6e6aae8bf..179135ccbfd40 100644
--- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
+++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks
title: "@kbn/core-injected-metadata-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks']
---
import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx
index 697a11b2eddbd..d459bf1aeaa3a 100644
--- a/api_docs/kbn_core_integrations_browser_internal.mdx
+++ b/api_docs/kbn_core_integrations_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal
title: "@kbn/core-integrations-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal']
---
import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx
index 54f1ca99a5ad2..205ac88f5e470 100644
--- a/api_docs/kbn_core_integrations_browser_mocks.mdx
+++ b/api_docs/kbn_core_integrations_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks
title: "@kbn/core-integrations-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-integrations-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks']
---
import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx
index c2014b28f71ee..6d6d9a2bb00f2 100644
--- a/api_docs/kbn_core_lifecycle_browser.mdx
+++ b/api_docs/kbn_core_lifecycle_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser
title: "@kbn/core-lifecycle-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser']
---
import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
index 7c80bb07cb26c..306399cce5929 100644
--- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks
title: "@kbn/core-lifecycle-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks']
---
import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx
index fad5102dbb5de..c53509c3542d8 100644
--- a/api_docs/kbn_core_lifecycle_server.mdx
+++ b/api_docs/kbn_core_lifecycle_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server
title: "@kbn/core-lifecycle-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server']
---
import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json';
diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx
index 7dbd79ffb7ff8..b08743a11140a 100644
--- a/api_docs/kbn_core_lifecycle_server_mocks.mdx
+++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks
title: "@kbn/core-lifecycle-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-lifecycle-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks']
---
import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx
index 2db94746fdada..b6e432314e9bb 100644
--- a/api_docs/kbn_core_logging_browser_mocks.mdx
+++ b/api_docs/kbn_core_logging_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks
title: "@kbn/core-logging-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks']
---
import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx
index 206c465c9e888..c78fcd55ebefc 100644
--- a/api_docs/kbn_core_logging_common_internal.mdx
+++ b/api_docs/kbn_core_logging_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal
title: "@kbn/core-logging-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-common-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal']
---
import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx
index 9c3ca307d4cd9..939b44ee1b714 100644
--- a/api_docs/kbn_core_logging_server.mdx
+++ b/api_docs/kbn_core_logging_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server
title: "@kbn/core-logging-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server']
---
import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx
index c4716ff3b5e99..8053ab596c478 100644
--- a/api_docs/kbn_core_logging_server_internal.mdx
+++ b/api_docs/kbn_core_logging_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal
title: "@kbn/core-logging-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal']
---
import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx
index 21ea3efb9569a..140fd197caed0 100644
--- a/api_docs/kbn_core_logging_server_mocks.mdx
+++ b/api_docs/kbn_core_logging_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks
title: "@kbn/core-logging-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-logging-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks']
---
import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
index c8fefef62dc69..d36475ee881a3 100644
--- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal
title: "@kbn/core-metrics-collectors-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal']
---
import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
index b882b6e8b8d09..1daf6aad8e8fe 100644
--- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks
title: "@kbn/core-metrics-collectors-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks']
---
import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx
index d5409904bcc24..10e6282332ea7 100644
--- a/api_docs/kbn_core_metrics_server.mdx
+++ b/api_docs/kbn_core_metrics_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server
title: "@kbn/core-metrics-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server']
---
import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx
index 41328cc8fbd85..43685ad91870f 100644
--- a/api_docs/kbn_core_metrics_server_internal.mdx
+++ b/api_docs/kbn_core_metrics_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal
title: "@kbn/core-metrics-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal']
---
import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx
index 7836063fa6cec..069d9964aaae0 100644
--- a/api_docs/kbn_core_metrics_server_mocks.mdx
+++ b/api_docs/kbn_core_metrics_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks
title: "@kbn/core-metrics-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-metrics-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks']
---
import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx
index 2337624574bc0..8acfeb3f25e3c 100644
--- a/api_docs/kbn_core_mount_utils_browser.mdx
+++ b/api_docs/kbn_core_mount_utils_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser
title: "@kbn/core-mount-utils-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-mount-utils-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser']
---
import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json';
diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx
index 22a38393679d6..4c64ebacd23f6 100644
--- a/api_docs/kbn_core_node_server.mdx
+++ b/api_docs/kbn_core_node_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server
title: "@kbn/core-node-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server']
---
import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json';
diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx
index a2007c5386244..6e24319a666e3 100644
--- a/api_docs/kbn_core_node_server_internal.mdx
+++ b/api_docs/kbn_core_node_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal
title: "@kbn/core-node-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal']
---
import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx
index c60b5c9c38a16..c65c52f49f473 100644
--- a/api_docs/kbn_core_node_server_mocks.mdx
+++ b/api_docs/kbn_core_node_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks
title: "@kbn/core-node-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-node-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks']
---
import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx
index 1ccd35eb88e8c..77a16b07643c2 100644
--- a/api_docs/kbn_core_notifications_browser.mdx
+++ b/api_docs/kbn_core_notifications_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser
title: "@kbn/core-notifications-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser']
---
import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx
index 2cdd40c239d7b..26a3363d26fbc 100644
--- a/api_docs/kbn_core_notifications_browser_internal.mdx
+++ b/api_docs/kbn_core_notifications_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal
title: "@kbn/core-notifications-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal']
---
import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx
index f380380f53402..47a6777732623 100644
--- a/api_docs/kbn_core_notifications_browser_mocks.mdx
+++ b/api_docs/kbn_core_notifications_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks
title: "@kbn/core-notifications-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-notifications-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks']
---
import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx
index 2c00bd8dca498..46f1c5fc8196c 100644
--- a/api_docs/kbn_core_overlays_browser.mdx
+++ b/api_docs/kbn_core_overlays_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser
title: "@kbn/core-overlays-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser']
---
import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx
index 28113ba2fe8ad..fade1b5a20320 100644
--- a/api_docs/kbn_core_overlays_browser_internal.mdx
+++ b/api_docs/kbn_core_overlays_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal
title: "@kbn/core-overlays-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal']
---
import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx
index 1fdbdce8c4a23..339686def13c0 100644
--- a/api_docs/kbn_core_overlays_browser_mocks.mdx
+++ b/api_docs/kbn_core_overlays_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks
title: "@kbn/core-overlays-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-overlays-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks']
---
import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx
index e248aa8631ed6..92bea55f56f76 100644
--- a/api_docs/kbn_core_plugins_browser.mdx
+++ b/api_docs/kbn_core_plugins_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser
title: "@kbn/core-plugins-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser']
---
import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx
index 9236ee535e234..33347b183b6a7 100644
--- a/api_docs/kbn_core_plugins_browser_mocks.mdx
+++ b/api_docs/kbn_core_plugins_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks
title: "@kbn/core-plugins-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks']
---
import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx
index ba32494cdb58f..4ff83cf8191d2 100644
--- a/api_docs/kbn_core_plugins_server.mdx
+++ b/api_docs/kbn_core_plugins_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server
title: "@kbn/core-plugins-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server']
---
import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json';
diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx
index 506717032999a..dc367f111add3 100644
--- a/api_docs/kbn_core_plugins_server_mocks.mdx
+++ b/api_docs/kbn_core_plugins_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks
title: "@kbn/core-plugins-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-plugins-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks']
---
import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx
index 3cc348974e927..e0d550041cfc5 100644
--- a/api_docs/kbn_core_preboot_server.mdx
+++ b/api_docs/kbn_core_preboot_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server
title: "@kbn/core-preboot-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server']
---
import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json';
diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx
index fa8262c2d3542..e4b629ab32037 100644
--- a/api_docs/kbn_core_preboot_server_mocks.mdx
+++ b/api_docs/kbn_core_preboot_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks
title: "@kbn/core-preboot-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-preboot-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks']
---
import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx
index 2069bb04969c7..2b735abc2620b 100644
--- a/api_docs/kbn_core_rendering_browser_mocks.mdx
+++ b/api_docs/kbn_core_rendering_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks
title: "@kbn/core-rendering-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks']
---
import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx
index 4243dc0cacebd..8c265cb3c7e6c 100644
--- a/api_docs/kbn_core_rendering_server_internal.mdx
+++ b/api_docs/kbn_core_rendering_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal
title: "@kbn/core-rendering-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal']
---
import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx
index 70f8cf8840a44..06b40ffd1cdb3 100644
--- a/api_docs/kbn_core_rendering_server_mocks.mdx
+++ b/api_docs/kbn_core_rendering_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks
title: "@kbn/core-rendering-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-rendering-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks']
---
import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx
index e9839c3450547..a060864d5066e 100644
--- a/api_docs/kbn_core_root_server_internal.mdx
+++ b/api_docs/kbn_core_root_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal
title: "@kbn/core-root-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-root-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal']
---
import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx
index fc1934655900f..f0edb4776f5ad 100644
--- a/api_docs/kbn_core_saved_objects_api_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_api_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser
title: "@kbn/core-saved-objects-api-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser']
---
import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx
index cd839fc3de5ef..a7cde7f878840 100644
--- a/api_docs/kbn_core_saved_objects_api_server.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server
title: "@kbn/core-saved-objects-api-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server']
---
import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx
index 783344c8123bc..8b9e4f3ba610b 100644
--- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal
title: "@kbn/core-saved-objects-api-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal']
---
import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
index 6dbad2dc6fd45..f73eab4ae5a5b 100644
--- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks
title: "@kbn/core-saved-objects-api-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks']
---
import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
index d4a63a654ffce..3a7bbd2e54977 100644
--- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal
title: "@kbn/core-saved-objects-base-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal']
---
import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
index 9b7180a6446b9..1bfa37135bf73 100644
--- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks
title: "@kbn/core-saved-objects-base-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks']
---
import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx
index f863ae6c716aa..c9f7d61a8cd39 100644
--- a/api_docs/kbn_core_saved_objects_browser.mdx
+++ b/api_docs/kbn_core_saved_objects_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser
title: "@kbn/core-saved-objects-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser']
---
import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx
index 50e26a8049b8d..50387786c60ff 100644
--- a/api_docs/kbn_core_saved_objects_browser_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal
title: "@kbn/core-saved-objects-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal']
---
import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
index b28cbcc1b8df8..8605324724902 100644
--- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks
title: "@kbn/core-saved-objects-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks']
---
import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx
index 5f5d9c3d1521b..0e20bceeb2556 100644
--- a/api_docs/kbn_core_saved_objects_common.mdx
+++ b/api_docs/kbn_core_saved_objects_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common
title: "@kbn/core-saved-objects-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common']
---
import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
index 36929b9fb2dbe..9284ecaae1c2e 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal
title: "@kbn/core-saved-objects-import-export-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal']
---
import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
index 90371d4dae687..7b3b9b8536d31 100644
--- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks
title: "@kbn/core-saved-objects-import-export-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks']
---
import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
index c806ca6d8d6b5..32f3c5b7b6655 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal
title: "@kbn/core-saved-objects-migration-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal']
---
import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
index c57db751a98be..a1d597c1c6fe5 100644
--- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks
title: "@kbn/core-saved-objects-migration-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks']
---
import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx
index 32334fdaf08cc..3d87c55f1428c 100644
--- a/api_docs/kbn_core_saved_objects_server.mdx
+++ b/api_docs/kbn_core_saved_objects_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server
title: "@kbn/core-saved-objects-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server']
---
import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx
index 5413f47fd6c2d..d56b7f4bbfd15 100644
--- a/api_docs/kbn_core_saved_objects_server_internal.mdx
+++ b/api_docs/kbn_core_saved_objects_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal
title: "@kbn/core-saved-objects-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal']
---
import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx
index 4c73e2b6ed011..4404fda72564c 100644
--- a/api_docs/kbn_core_saved_objects_server_mocks.mdx
+++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks
title: "@kbn/core-saved-objects-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks']
---
import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx
index 51df7a6ea6fd2..7ce5cb45bdeb1 100644
--- a/api_docs/kbn_core_saved_objects_utils_server.mdx
+++ b/api_docs/kbn_core_saved_objects_utils_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server
title: "@kbn/core-saved-objects-utils-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-saved-objects-utils-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server']
---
import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx
index be111450ce9a5..9c64990d286b0 100644
--- a/api_docs/kbn_core_status_common.mdx
+++ b/api_docs/kbn_core_status_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common
title: "@kbn/core-status-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common']
---
import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json';
diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx
index ac48c40ffd285..424888c8aa2b6 100644
--- a/api_docs/kbn_core_status_common_internal.mdx
+++ b/api_docs/kbn_core_status_common_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal
title: "@kbn/core-status-common-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-common-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal']
---
import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx
index b9d3a17c1442a..6477075fa3bfc 100644
--- a/api_docs/kbn_core_status_server.mdx
+++ b/api_docs/kbn_core_status_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server
title: "@kbn/core-status-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server']
---
import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json';
diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx
index 71104c5e2d289..6782772b8c228 100644
--- a/api_docs/kbn_core_status_server_internal.mdx
+++ b/api_docs/kbn_core_status_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal
title: "@kbn/core-status-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal']
---
import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx
index 263625bc6cfd0..4b77a88937a30 100644
--- a/api_docs/kbn_core_status_server_mocks.mdx
+++ b/api_docs/kbn_core_status_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks
title: "@kbn/core-status-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-status-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks']
---
import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
index 90817a5473fc9..ae5239538d38d 100644
--- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
+++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters
title: "@kbn/core-test-helpers-deprecations-getters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters']
---
import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
index e6009d0995990..f70e4c3534ed7 100644
--- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
+++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser
title: "@kbn/core-test-helpers-http-setup-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser']
---
import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx
index e43fd87bc9857..14d9281233b2e 100644
--- a/api_docs/kbn_core_test_helpers_kbn_server.mdx
+++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server
title: "@kbn/core-test-helpers-kbn-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-kbn-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server']
---
import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
index 5c8fc8c91633a..0270000c32ef3 100644
--- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
+++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer
title: "@kbn/core-test-helpers-so-type-serializer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer']
---
import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json';
diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx
index 9ee03c0b713a0..996595528a76e 100644
--- a/api_docs/kbn_core_test_helpers_test_utils.mdx
+++ b/api_docs/kbn_core_test_helpers_test_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils
title: "@kbn/core-test-helpers-test-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-test-helpers-test-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils']
---
import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx
index c4fd5f82dd5fb..68891b4c19a72 100644
--- a/api_docs/kbn_core_theme_browser.mdx
+++ b/api_docs/kbn_core_theme_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser
title: "@kbn/core-theme-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser']
---
import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx
index 8d000ef75965c..ec326db54267f 100644
--- a/api_docs/kbn_core_theme_browser_internal.mdx
+++ b/api_docs/kbn_core_theme_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal
title: "@kbn/core-theme-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal']
---
import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx
index fe3f00483029d..12ceb96f1f953 100644
--- a/api_docs/kbn_core_theme_browser_mocks.mdx
+++ b/api_docs/kbn_core_theme_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks
title: "@kbn/core-theme-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-theme-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks']
---
import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx
index f69ddbe2db500..1433e8e0b8451 100644
--- a/api_docs/kbn_core_ui_settings_browser.mdx
+++ b/api_docs/kbn_core_ui_settings_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser
title: "@kbn/core-ui-settings-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser']
---
import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx
index 743fc5026fd7c..ce0be9d0eecfc 100644
--- a/api_docs/kbn_core_ui_settings_browser_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal
title: "@kbn/core-ui-settings-browser-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal']
---
import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
index 7a89d13887060..b56e363c1707b 100644
--- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks
title: "@kbn/core-ui-settings-browser-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-browser-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks']
---
import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx
index 2685042c99ca3..4383dc30150f4 100644
--- a/api_docs/kbn_core_ui_settings_common.mdx
+++ b/api_docs/kbn_core_ui_settings_common.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common
title: "@kbn/core-ui-settings-common"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-common plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common']
---
import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx
index 0b6d0ef4a8fd0..141a3b67487b1 100644
--- a/api_docs/kbn_core_ui_settings_server.mdx
+++ b/api_docs/kbn_core_ui_settings_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server
title: "@kbn/core-ui-settings-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server']
---
import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx
index 7a5541618570b..0b18ce294fb2e 100644
--- a/api_docs/kbn_core_ui_settings_server_internal.mdx
+++ b/api_docs/kbn_core_ui_settings_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal
title: "@kbn/core-ui-settings-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal']
---
import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx
index ed632bac6923d..cb352de9c7071 100644
--- a/api_docs/kbn_core_ui_settings_server_mocks.mdx
+++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks
title: "@kbn/core-ui-settings-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-ui-settings-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks']
---
import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx
index cec5693f18e8c..4a7b514af95dd 100644
--- a/api_docs/kbn_core_usage_data_server.mdx
+++ b/api_docs/kbn_core_usage_data_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server
title: "@kbn/core-usage-data-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server']
---
import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx
index 0f7563155a215..0ba98d7e11377 100644
--- a/api_docs/kbn_core_usage_data_server_internal.mdx
+++ b/api_docs/kbn_core_usage_data_server_internal.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal
title: "@kbn/core-usage-data-server-internal"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-internal plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal']
---
import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json';
diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx
index a9f2c6ec8ccd1..e711636756b4a 100644
--- a/api_docs/kbn_core_usage_data_server_mocks.mdx
+++ b/api_docs/kbn_core_usage_data_server_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks
title: "@kbn/core-usage-data-server-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-usage-data-server-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks']
---
import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx
index 17c1f8bddcd13..0eb371a73845b 100644
--- a/api_docs/kbn_crypto.mdx
+++ b/api_docs/kbn_crypto.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto
title: "@kbn/crypto"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto']
---
import kbnCryptoObj from './kbn_crypto.devdocs.json';
diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx
index b87b7f5a394ff..ed21fc5391ab5 100644
--- a/api_docs/kbn_crypto_browser.mdx
+++ b/api_docs/kbn_crypto_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser
title: "@kbn/crypto-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/crypto-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser']
---
import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json';
diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx
index 21fc0de49ac44..ea9449b2b1c96 100644
--- a/api_docs/kbn_cypress_config.mdx
+++ b/api_docs/kbn_cypress_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config
title: "@kbn/cypress-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/cypress-config plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config']
---
import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json';
diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx
index 016d420304c3c..3908f6b4f8204 100644
--- a/api_docs/kbn_datemath.mdx
+++ b/api_docs/kbn_datemath.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath
title: "@kbn/datemath"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/datemath plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath']
---
import kbnDatemathObj from './kbn_datemath.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx
index e8d91700308ab..3cfd155383384 100644
--- a/api_docs/kbn_dev_cli_errors.mdx
+++ b/api_docs/kbn_dev_cli_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors
title: "@kbn/dev-cli-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-errors plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors']
---
import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json';
diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx
index ed922c8ff936b..37baabb24a6eb 100644
--- a/api_docs/kbn_dev_cli_runner.mdx
+++ b/api_docs/kbn_dev_cli_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner
title: "@kbn/dev-cli-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-cli-runner plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner']
---
import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json';
diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx
index 1ade2ba9083af..33e17e03beb13 100644
--- a/api_docs/kbn_dev_proc_runner.mdx
+++ b/api_docs/kbn_dev_proc_runner.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner
title: "@kbn/dev-proc-runner"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-proc-runner plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner']
---
import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json';
diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx
index e24854d638e66..e44589c5ad5c8 100644
--- a/api_docs/kbn_dev_utils.mdx
+++ b/api_docs/kbn_dev_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils
title: "@kbn/dev-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/dev-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils']
---
import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json';
diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx
index 1d4b2205eb970..004ce641602e4 100644
--- a/api_docs/kbn_doc_links.mdx
+++ b/api_docs/kbn_doc_links.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links
title: "@kbn/doc-links"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/doc-links plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links']
---
import kbnDocLinksObj from './kbn_doc_links.devdocs.json';
diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx
index 83d780b1c79a7..ed1b9fa7f8442 100644
--- a/api_docs/kbn_docs_utils.mdx
+++ b/api_docs/kbn_docs_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils
title: "@kbn/docs-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/docs-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils']
---
import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json';
diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx
index 6f49285595010..49148bf13e43e 100644
--- a/api_docs/kbn_ebt_tools.mdx
+++ b/api_docs/kbn_ebt_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools
title: "@kbn/ebt-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ebt-tools plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools']
---
import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json';
diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx
index 233b7dfe75200..488cebb89a3b6 100644
--- a/api_docs/kbn_ecs.mdx
+++ b/api_docs/kbn_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs
title: "@kbn/ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs']
---
import kbnEcsObj from './kbn_ecs.devdocs.json';
diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx
index 38e09e65f8481..f0092b0f8bb11 100644
--- a/api_docs/kbn_ecs_data_quality_dashboard.mdx
+++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard
title: "@kbn/ecs-data-quality-dashboard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ecs-data-quality-dashboard plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard']
---
import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json';
diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx
index b330e06b57d90..de79ec32efbca 100644
--- a/api_docs/kbn_es.mdx
+++ b/api_docs/kbn_es.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es
title: "@kbn/es"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es']
---
import kbnEsObj from './kbn_es.devdocs.json';
diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx
index 599019cc009fe..2f5e0c942eb0f 100644
--- a/api_docs/kbn_es_archiver.mdx
+++ b/api_docs/kbn_es_archiver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver
title: "@kbn/es-archiver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-archiver plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver']
---
import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json';
diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx
index fd0f157c395f0..93fa195ba86cd 100644
--- a/api_docs/kbn_es_errors.mdx
+++ b/api_docs/kbn_es_errors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors
title: "@kbn/es-errors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-errors plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors']
---
import kbnEsErrorsObj from './kbn_es_errors.devdocs.json';
diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx
index 95ceda0aae49f..22bee16d0585c 100644
--- a/api_docs/kbn_es_query.mdx
+++ b/api_docs/kbn_es_query.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query
title: "@kbn/es-query"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-query plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query']
---
import kbnEsQueryObj from './kbn_es_query.devdocs.json';
diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx
index 26cec9c4ab5d2..16e8ec6d3ae5c 100644
--- a/api_docs/kbn_es_types.mdx
+++ b/api_docs/kbn_es_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types
title: "@kbn/es-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/es-types plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types']
---
import kbnEsTypesObj from './kbn_es_types.devdocs.json';
diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx
index 53fcc95d2dff5..0837f234cf360 100644
--- a/api_docs/kbn_eslint_plugin_imports.mdx
+++ b/api_docs/kbn_eslint_plugin_imports.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports
title: "@kbn/eslint-plugin-imports"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/eslint-plugin-imports plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports']
---
import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json';
diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx
index 226a8dacd1d5e..8213f9ee28f66 100644
--- a/api_docs/kbn_field_types.mdx
+++ b/api_docs/kbn_field_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types
title: "@kbn/field-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/field-types plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types']
---
import kbnFieldTypesObj from './kbn_field_types.devdocs.json';
diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx
index f27d225848341..68e4f0d3116fb 100644
--- a/api_docs/kbn_find_used_node_modules.mdx
+++ b/api_docs/kbn_find_used_node_modules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules
title: "@kbn/find-used-node-modules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/find-used-node-modules plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules']
---
import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json';
diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx
index 7dd9c9efcbb07..affa92183f493 100644
--- a/api_docs/kbn_ftr_common_functional_services.mdx
+++ b/api_docs/kbn_ftr_common_functional_services.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services
title: "@kbn/ftr-common-functional-services"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ftr-common-functional-services plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services']
---
import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json';
diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx
index 3f992668fc267..3fd8dc4fad5c3 100644
--- a/api_docs/kbn_generate.mdx
+++ b/api_docs/kbn_generate.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate
title: "@kbn/generate"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/generate plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate']
---
import kbnGenerateObj from './kbn_generate.devdocs.json';
diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx
index d054c64b034df..5e2a8257212e6 100644
--- a/api_docs/kbn_guided_onboarding.mdx
+++ b/api_docs/kbn_guided_onboarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding
title: "@kbn/guided-onboarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/guided-onboarding plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding']
---
import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json';
diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx
index a63a0044ee9ef..dfcaeb8177ede 100644
--- a/api_docs/kbn_handlebars.mdx
+++ b/api_docs/kbn_handlebars.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars
title: "@kbn/handlebars"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/handlebars plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars']
---
import kbnHandlebarsObj from './kbn_handlebars.devdocs.json';
diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx
index 363afd715ec82..d832fa1f08892 100644
--- a/api_docs/kbn_hapi_mocks.mdx
+++ b/api_docs/kbn_hapi_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks
title: "@kbn/hapi-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/hapi-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks']
---
import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json';
diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx
index 5ce3a5a53cb4f..904c8e9030cd9 100644
--- a/api_docs/kbn_health_gateway_server.mdx
+++ b/api_docs/kbn_health_gateway_server.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server
title: "@kbn/health-gateway-server"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/health-gateway-server plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server']
---
import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx
index efb81282a2eb8..64a8be7ee09a6 100644
--- a/api_docs/kbn_home_sample_data_card.mdx
+++ b/api_docs/kbn_home_sample_data_card.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card
title: "@kbn/home-sample-data-card"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-card plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card']
---
import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx
index 7bcfea3f992ba..6055316ebaff3 100644
--- a/api_docs/kbn_home_sample_data_tab.mdx
+++ b/api_docs/kbn_home_sample_data_tab.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab
title: "@kbn/home-sample-data-tab"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/home-sample-data-tab plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab']
---
import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json';
diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx
index f7f0d79b51896..2cb9c9a8cfa3a 100644
--- a/api_docs/kbn_i18n.mdx
+++ b/api_docs/kbn_i18n.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n
title: "@kbn/i18n"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n']
---
import kbnI18nObj from './kbn_i18n.devdocs.json';
diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx
index 6cad7a308521e..9ff4b65f97fcc 100644
--- a/api_docs/kbn_i18n_react.mdx
+++ b/api_docs/kbn_i18n_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react
title: "@kbn/i18n-react"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/i18n-react plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react']
---
import kbnI18nReactObj from './kbn_i18n_react.devdocs.json';
diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx
index ee11d3b98e916..40b31612ad951 100644
--- a/api_docs/kbn_import_resolver.mdx
+++ b/api_docs/kbn_import_resolver.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver
title: "@kbn/import-resolver"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/import-resolver plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver']
---
import kbnImportResolverObj from './kbn_import_resolver.devdocs.json';
diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx
index 71acbdfceccde..abc36c4c5455c 100644
--- a/api_docs/kbn_interpreter.mdx
+++ b/api_docs/kbn_interpreter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter
title: "@kbn/interpreter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/interpreter plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter']
---
import kbnInterpreterObj from './kbn_interpreter.devdocs.json';
diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx
index 0732beddbe3d5..1e18a8d3b7586 100644
--- a/api_docs/kbn_io_ts_utils.mdx
+++ b/api_docs/kbn_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils
title: "@kbn/io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/io-ts-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils']
---
import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx
index 1bdc744fda561..234d28e295b15 100644
--- a/api_docs/kbn_jest_serializers.mdx
+++ b/api_docs/kbn_jest_serializers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers
title: "@kbn/jest-serializers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/jest-serializers plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers']
---
import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json';
diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx
index 04d6a5f8aea23..c85a757c4ed59 100644
--- a/api_docs/kbn_journeys.mdx
+++ b/api_docs/kbn_journeys.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys
title: "@kbn/journeys"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/journeys plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys']
---
import kbnJourneysObj from './kbn_journeys.devdocs.json';
diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx
index a32ec42a31a58..97a034693722e 100644
--- a/api_docs/kbn_json_ast.mdx
+++ b/api_docs/kbn_json_ast.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast
title: "@kbn/json-ast"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/json-ast plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast']
---
import kbnJsonAstObj from './kbn_json_ast.devdocs.json';
diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx
index ea5124de46380..ae7075c556124 100644
--- a/api_docs/kbn_kibana_manifest_schema.mdx
+++ b/api_docs/kbn_kibana_manifest_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema
title: "@kbn/kibana-manifest-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/kibana-manifest-schema plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema']
---
import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json';
diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx
index 525debe3e59ba..78b6689e3620b 100644
--- a/api_docs/kbn_language_documentation_popover.mdx
+++ b/api_docs/kbn_language_documentation_popover.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover
title: "@kbn/language-documentation-popover"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/language-documentation-popover plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover']
---
import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json';
diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx
index 58f742823501a..b52baaa950073 100644
--- a/api_docs/kbn_logging.mdx
+++ b/api_docs/kbn_logging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging
title: "@kbn/logging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging']
---
import kbnLoggingObj from './kbn_logging.devdocs.json';
diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx
index ba54bee88a96c..0f17dea4d5288 100644
--- a/api_docs/kbn_logging_mocks.mdx
+++ b/api_docs/kbn_logging_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks
title: "@kbn/logging-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/logging-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks']
---
import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json';
diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx
index 55a53849b7308..09afe4a531470 100644
--- a/api_docs/kbn_managed_vscode_config.mdx
+++ b/api_docs/kbn_managed_vscode_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config
title: "@kbn/managed-vscode-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/managed-vscode-config plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config']
---
import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json';
diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx
index ba4c25cde7863..87352e3142191 100644
--- a/api_docs/kbn_mapbox_gl.mdx
+++ b/api_docs/kbn_mapbox_gl.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl
title: "@kbn/mapbox-gl"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/mapbox-gl plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl']
---
import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json';
diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx
index d2d69b0da539f..0b2ad6dcde023 100644
--- a/api_docs/kbn_ml_agg_utils.mdx
+++ b/api_docs/kbn_ml_agg_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils
title: "@kbn/ml-agg-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-agg-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils']
---
import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx
index a430bf20343ef..b5a408b845b23 100644
--- a/api_docs/kbn_ml_date_picker.mdx
+++ b/api_docs/kbn_ml_date_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker
title: "@kbn/ml-date-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-date-picker plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker']
---
import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json';
diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx
index 70338f98822a5..a17bf71066b85 100644
--- a/api_docs/kbn_ml_is_defined.mdx
+++ b/api_docs/kbn_ml_is_defined.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined
title: "@kbn/ml-is-defined"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-defined plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined']
---
import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json';
diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx
index 5105e44223eb5..de78d68d1e53e 100644
--- a/api_docs/kbn_ml_is_populated_object.mdx
+++ b/api_docs/kbn_ml_is_populated_object.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object
title: "@kbn/ml-is-populated-object"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-is-populated-object plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object']
---
import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json';
diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx
index a89a4551ddce1..41209eacc44a6 100644
--- a/api_docs/kbn_ml_local_storage.mdx
+++ b/api_docs/kbn_ml_local_storage.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage
title: "@kbn/ml-local-storage"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-local-storage plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage']
---
import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json';
diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx
index e1746a6af92c5..9e80df4909ede 100644
--- a/api_docs/kbn_ml_nested_property.mdx
+++ b/api_docs/kbn_ml_nested_property.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property
title: "@kbn/ml-nested-property"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-nested-property plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property']
---
import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json';
diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx
index ff82185705640..6bc362697e9a2 100644
--- a/api_docs/kbn_ml_query_utils.mdx
+++ b/api_docs/kbn_ml_query_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils
title: "@kbn/ml-query-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-query-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils']
---
import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json';
diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx
index 813472f4b7e1a..596fe6523a2d2 100644
--- a/api_docs/kbn_ml_string_hash.mdx
+++ b/api_docs/kbn_ml_string_hash.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash
title: "@kbn/ml-string-hash"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-string-hash plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash']
---
import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json';
diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx
index c08356c6aed9e..99b64dfadbf3a 100644
--- a/api_docs/kbn_ml_url_state.mdx
+++ b/api_docs/kbn_ml_url_state.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state
title: "@kbn/ml-url-state"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ml-url-state plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state']
---
import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json';
diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx
index cf5582c8a82b5..9a2501165adad 100644
--- a/api_docs/kbn_monaco.mdx
+++ b/api_docs/kbn_monaco.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco
title: "@kbn/monaco"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/monaco plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco']
---
import kbnMonacoObj from './kbn_monaco.devdocs.json';
diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx
index 7a6ab5045eeb3..447ef2dddf8e1 100644
--- a/api_docs/kbn_optimizer.mdx
+++ b/api_docs/kbn_optimizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer
title: "@kbn/optimizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer']
---
import kbnOptimizerObj from './kbn_optimizer.devdocs.json';
diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx
index e64a36bcb6aed..b1f02f021a94e 100644
--- a/api_docs/kbn_optimizer_webpack_helpers.mdx
+++ b/api_docs/kbn_optimizer_webpack_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers
title: "@kbn/optimizer-webpack-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/optimizer-webpack-helpers plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers']
---
import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json';
diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx
index 420e450af5048..f12bb05c5e02a 100644
--- a/api_docs/kbn_osquery_io_ts_types.mdx
+++ b/api_docs/kbn_osquery_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types
title: "@kbn/osquery-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/osquery-io-ts-types plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types']
---
import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx
index 4b85392dadaf9..bc4d50e4a8ec0 100644
--- a/api_docs/kbn_performance_testing_dataset_extractor.mdx
+++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor
title: "@kbn/performance-testing-dataset-extractor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/performance-testing-dataset-extractor plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor']
---
import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json';
diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx
index 67793b2036afe..6b2260140b27b 100644
--- a/api_docs/kbn_plugin_generator.mdx
+++ b/api_docs/kbn_plugin_generator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator
title: "@kbn/plugin-generator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-generator plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator']
---
import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json';
diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx
index af30584b14b70..0b7384d58217f 100644
--- a/api_docs/kbn_plugin_helpers.mdx
+++ b/api_docs/kbn_plugin_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers
title: "@kbn/plugin-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/plugin-helpers plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers']
---
import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json';
diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx
index c27921942567b..e38e032918779 100644
--- a/api_docs/kbn_react_field.mdx
+++ b/api_docs/kbn_react_field.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field
title: "@kbn/react-field"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/react-field plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field']
---
import kbnReactFieldObj from './kbn_react_field.devdocs.json';
diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx
index 2b66983b04631..18856c87584df 100644
--- a/api_docs/kbn_repo_file_maps.mdx
+++ b/api_docs/kbn_repo_file_maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps
title: "@kbn/repo-file-maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-file-maps plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps']
---
import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json';
diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx
index a2ef5fb848975..139bc59f09efd 100644
--- a/api_docs/kbn_repo_linter.mdx
+++ b/api_docs/kbn_repo_linter.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter
title: "@kbn/repo-linter"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-linter plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter']
---
import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json';
diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx
index 72baaba52cb39..450ab51bb769e 100644
--- a/api_docs/kbn_repo_path.mdx
+++ b/api_docs/kbn_repo_path.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path
title: "@kbn/repo-path"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-path plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path']
---
import kbnRepoPathObj from './kbn_repo_path.devdocs.json';
diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx
index 62200ce2a6b29..a3afc7e6e394c 100644
--- a/api_docs/kbn_repo_source_classifier.mdx
+++ b/api_docs/kbn_repo_source_classifier.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier
title: "@kbn/repo-source-classifier"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/repo-source-classifier plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier']
---
import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json';
diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx
index 0216b143ac1a9..ef8fbeddce1b6 100644
--- a/api_docs/kbn_rison.mdx
+++ b/api_docs/kbn_rison.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison
title: "@kbn/rison"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rison plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison']
---
import kbnRisonObj from './kbn_rison.devdocs.json';
diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx
index 30ad77ec97405..ce2c207c44cb9 100644
--- a/api_docs/kbn_rule_data_utils.mdx
+++ b/api_docs/kbn_rule_data_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils
title: "@kbn/rule-data-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/rule-data-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils']
---
import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx
index 40af692a950d0..213798600769a 100644
--- a/api_docs/kbn_securitysolution_autocomplete.mdx
+++ b/api_docs/kbn_securitysolution_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete
title: "@kbn/securitysolution-autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-autocomplete plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete']
---
import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx
index 4d94d4095eb5e..add3cfd3ddcb2 100644
--- a/api_docs/kbn_securitysolution_ecs.mdx
+++ b/api_docs/kbn_securitysolution_ecs.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs
title: "@kbn/securitysolution-ecs"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-ecs plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs']
---
import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx
index a2fd7b4e0bc3d..e1e4d7c386a6a 100644
--- a/api_docs/kbn_securitysolution_es_utils.mdx
+++ b/api_docs/kbn_securitysolution_es_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils
title: "@kbn/securitysolution-es-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-es-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils']
---
import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx
index 82368f6a96acc..4a2c126f2c3f4 100644
--- a/api_docs/kbn_securitysolution_exception_list_components.mdx
+++ b/api_docs/kbn_securitysolution_exception_list_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components
title: "@kbn/securitysolution-exception-list-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-exception-list-components plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components']
---
import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx
index 804da6b8b59f1..741e6e52093bc 100644
--- a/api_docs/kbn_securitysolution_hook_utils.mdx
+++ b/api_docs/kbn_securitysolution_hook_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils
title: "@kbn/securitysolution-hook-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-hook-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils']
---
import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
index 2f35df6a1d133..d64bd39381a14 100644
--- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types
title: "@kbn/securitysolution-io-ts-alerting-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types']
---
import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
index 67e90cc95d773..c1933b1d716a9 100644
--- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types
title: "@kbn/securitysolution-io-ts-list-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-list-types plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types']
---
import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx
index a5d651b4b73e5..d18659ef45b36 100644
--- a/api_docs/kbn_securitysolution_io_ts_types.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types
title: "@kbn/securitysolution-io-ts-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-types plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types']
---
import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx
index 8c2fd8fe460fe..7830db8ad32bf 100644
--- a/api_docs/kbn_securitysolution_io_ts_utils.mdx
+++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils
title: "@kbn/securitysolution-io-ts-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-io-ts-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils']
---
import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx
index dfb5e1df613fe..959df4c94ed3d 100644
--- a/api_docs/kbn_securitysolution_list_api.mdx
+++ b/api_docs/kbn_securitysolution_list_api.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api
title: "@kbn/securitysolution-list-api"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-api plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api']
---
import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx
index b0e2d13e37dc1..edfb2c6cdcc37 100644
--- a/api_docs/kbn_securitysolution_list_constants.mdx
+++ b/api_docs/kbn_securitysolution_list_constants.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants
title: "@kbn/securitysolution-list-constants"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-constants plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants']
---
import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx
index 34e05a010e1eb..8fa3a18ea5633 100644
--- a/api_docs/kbn_securitysolution_list_hooks.mdx
+++ b/api_docs/kbn_securitysolution_list_hooks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks
title: "@kbn/securitysolution-list-hooks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-hooks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks']
---
import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx
index e029f7d05eb0c..a93c450c85fcf 100644
--- a/api_docs/kbn_securitysolution_list_utils.mdx
+++ b/api_docs/kbn_securitysolution_list_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils
title: "@kbn/securitysolution-list-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-list-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils']
---
import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx
index 59dca2e61fd41..940401dcb1966 100644
--- a/api_docs/kbn_securitysolution_rules.mdx
+++ b/api_docs/kbn_securitysolution_rules.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules
title: "@kbn/securitysolution-rules"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-rules plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules']
---
import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx
index b9e30ed72e87d..455c90cf9eae3 100644
--- a/api_docs/kbn_securitysolution_t_grid.mdx
+++ b/api_docs/kbn_securitysolution_t_grid.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid
title: "@kbn/securitysolution-t-grid"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-t-grid plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid']
---
import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx
index 4379fd7e5c371..ee287d3470065 100644
--- a/api_docs/kbn_securitysolution_utils.mdx
+++ b/api_docs/kbn_securitysolution_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils
title: "@kbn/securitysolution-utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/securitysolution-utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils']
---
import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json';
diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx
index e8d800c098ac7..1b5ebe0ee3ab9 100644
--- a/api_docs/kbn_server_http_tools.mdx
+++ b/api_docs/kbn_server_http_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools
title: "@kbn/server-http-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-http-tools plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools']
---
import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json';
diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx
index ca2e84fe82070..20564c2a15c2c 100644
--- a/api_docs/kbn_server_route_repository.mdx
+++ b/api_docs/kbn_server_route_repository.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository
title: "@kbn/server-route-repository"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/server-route-repository plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository']
---
import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json';
diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx
index 3d0c72ac5dc58..8dd64775f30e8 100644
--- a/api_docs/kbn_shared_svg.mdx
+++ b/api_docs/kbn_shared_svg.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg
title: "@kbn/shared-svg"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-svg plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg']
---
import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx
index abce5645028cc..6cfe61898f43f 100644
--- a/api_docs/kbn_shared_ux_avatar_solution.mdx
+++ b/api_docs/kbn_shared_ux_avatar_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution
title: "@kbn/shared-ux-avatar-solution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-solution plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution']
---
import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
index 5433748a7b71b..af72da48648c7 100644
--- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
+++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components
title: "@kbn/shared-ux-avatar-user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components']
---
import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
index a91862543c204..9a1487ae5aca8 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen
title: "@kbn/shared-ux-button-exit-full-screen"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen']
---
import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
index ffe2da716ebe4..8b7a45e188408 100644
--- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
+++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks
title: "@kbn/shared-ux-button-exit-full-screen-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks']
---
import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx
index b26cd11051781..84d5531642146 100644
--- a/api_docs/kbn_shared_ux_button_toolbar.mdx
+++ b/api_docs/kbn_shared_ux_button_toolbar.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar
title: "@kbn/shared-ux-button-toolbar"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-button-toolbar plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar']
---
import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx
index f898b1e0b3578..d6b422d937535 100644
--- a/api_docs/kbn_shared_ux_card_no_data.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data
title: "@kbn/shared-ux-card-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data']
---
import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
index ccd74e7cf5a37..08f0073f79005 100644
--- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks
title: "@kbn/shared-ux-card-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks']
---
import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx
index f2743044d191c..98e19c9f6c08e 100644
--- a/api_docs/kbn_shared_ux_file_context.mdx
+++ b/api_docs/kbn_shared_ux_file_context.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context
title: "@kbn/shared-ux-file-context"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-context plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context']
---
import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx
index 5a91d401f37ef..e0f939a4b42ac 100644
--- a/api_docs/kbn_shared_ux_file_image.mdx
+++ b/api_docs/kbn_shared_ux_file_image.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image
title: "@kbn/shared-ux-file-image"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image']
---
import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx
index c3a77f79eb091..bfd3ddd58aef3 100644
--- a/api_docs/kbn_shared_ux_file_image_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks
title: "@kbn/shared-ux-file-image-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-image-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks']
---
import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx
index c2c6c39d6955c..0e75a42baf3a8 100644
--- a/api_docs/kbn_shared_ux_file_mocks.mdx
+++ b/api_docs/kbn_shared_ux_file_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks
title: "@kbn/shared-ux-file-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks']
---
import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx
index 9a5a45fc60559..98cc4fdf9bf71 100644
--- a/api_docs/kbn_shared_ux_file_picker.mdx
+++ b/api_docs/kbn_shared_ux_file_picker.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker
title: "@kbn/shared-ux-file-picker"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-picker plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker']
---
import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx
index 188f080a22918..0a87ef2e49859 100644
--- a/api_docs/kbn_shared_ux_file_upload.mdx
+++ b/api_docs/kbn_shared_ux_file_upload.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload
title: "@kbn/shared-ux-file-upload"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-upload plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload']
---
import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx
index 7b0295303f1ae..41a8a4bc37989 100644
--- a/api_docs/kbn_shared_ux_file_util.mdx
+++ b/api_docs/kbn_shared_ux_file_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util
title: "@kbn/shared-ux-file-util"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-file-util plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util']
---
import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx
index 00c5e6218d5fd..b925d3df6c55e 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app
title: "@kbn/shared-ux-link-redirect-app"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app']
---
import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
index a9a14665cb611..c01f812af5a4b 100644
--- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
+++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks
title: "@kbn/shared-ux-link-redirect-app-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks']
---
import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx
index 58ae69c930830..4b68fa6dc58ca 100644
--- a/api_docs/kbn_shared_ux_markdown.mdx
+++ b/api_docs/kbn_shared_ux_markdown.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown
title: "@kbn/shared-ux-markdown"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown']
---
import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx
index f18eba3b6f0d2..1c703a2369b3c 100644
--- a/api_docs/kbn_shared_ux_markdown_mocks.mdx
+++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks
title: "@kbn/shared-ux-markdown-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-markdown-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks']
---
import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
index a49324cf8ceac..3768fbcd49cc6 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data
title: "@kbn/shared-ux-page-analytics-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data']
---
import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
index 4740dfb66c8d7..6b1e2b8a5984b 100644
--- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks
title: "@kbn/shared-ux-page-analytics-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks']
---
import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
index 6c66d0ca50fa9..ec00c6ac80b1a 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data
title: "@kbn/shared-ux-page-kibana-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data']
---
import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
index 8ef50a3f4ebfe..42ab9f9f06b3b 100644
--- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks
title: "@kbn/shared-ux-page-kibana-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks']
---
import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx
index 9d048a043ca0e..16b4ac7220b90 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template
title: "@kbn/shared-ux-page-kibana-template"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template']
---
import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
index 880fc2a69fbfd..bdb90364b95ee 100644
--- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks
title: "@kbn/shared-ux-page-kibana-template-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks']
---
import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx
index 2fe3dd235c3aa..120916cd68c1d 100644
--- a/api_docs/kbn_shared_ux_page_no_data.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data
title: "@kbn/shared-ux-page-no-data"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data']
---
import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx
index 11baa2035383a..eb96fd40af573 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config
title: "@kbn/shared-ux-page-no-data-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config']
---
import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
index f6344bb78377b..b6d1deae0b930 100644
--- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks
title: "@kbn/shared-ux-page-no-data-config-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks']
---
import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
index 5a745b342ee54..f427553fea303 100644
--- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
+++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks
title: "@kbn/shared-ux-page-no-data-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks']
---
import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx
index 5e6f0b6822a38..d3cedcf51828e 100644
--- a/api_docs/kbn_shared_ux_page_solution_nav.mdx
+++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav
title: "@kbn/shared-ux-page-solution-nav"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-page-solution-nav plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav']
---
import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
index cb9c14bd9d02d..26a062a60edee 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views
title: "@kbn/shared-ux-prompt-no-data-views"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views']
---
import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
index c70969fe98c4d..b39d624eb71e4 100644
--- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
+++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks
title: "@kbn/shared-ux-prompt-no-data-views-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks']
---
import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx
index 4b0b162f5581e..66fac2533b311 100644
--- a/api_docs/kbn_shared_ux_prompt_not_found.mdx
+++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found
title: "@kbn/shared-ux-prompt-not-found"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-prompt-not-found plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found']
---
import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx
index 8f8ab282de35f..35cc667e36f5a 100644
--- a/api_docs/kbn_shared_ux_router.mdx
+++ b/api_docs/kbn_shared_ux_router.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router
title: "@kbn/shared-ux-router"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router']
---
import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx
index ccebdf6448785..049ebcb17cb97 100644
--- a/api_docs/kbn_shared_ux_router_mocks.mdx
+++ b/api_docs/kbn_shared_ux_router_mocks.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks
title: "@kbn/shared-ux-router-mocks"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-router-mocks plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks']
---
import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx
index 5d0b1207865c9..be11e8095ce12 100644
--- a/api_docs/kbn_shared_ux_storybook_config.mdx
+++ b/api_docs/kbn_shared_ux_storybook_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config
title: "@kbn/shared-ux-storybook-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-config plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config']
---
import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx
index 435b73883ddd5..0d993dc36582b 100644
--- a/api_docs/kbn_shared_ux_storybook_mock.mdx
+++ b/api_docs/kbn_shared_ux_storybook_mock.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock
title: "@kbn/shared-ux-storybook-mock"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-storybook-mock plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock']
---
import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx
index 59ed50b9dd653..08ebaf46f88dc 100644
--- a/api_docs/kbn_shared_ux_utility.mdx
+++ b/api_docs/kbn_shared_ux_utility.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility
title: "@kbn/shared-ux-utility"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/shared-ux-utility plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility']
---
import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json';
diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx
index 868fa725e6fe8..3c3692c849172 100644
--- a/api_docs/kbn_slo_schema.mdx
+++ b/api_docs/kbn_slo_schema.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema
title: "@kbn/slo-schema"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/slo-schema plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema']
---
import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json';
diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx
index e27aed6e01387..471d20db13daf 100644
--- a/api_docs/kbn_some_dev_log.mdx
+++ b/api_docs/kbn_some_dev_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log
title: "@kbn/some-dev-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/some-dev-log plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log']
---
import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json';
diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx
index 76f8a35a5297a..6af2033dfd0e7 100644
--- a/api_docs/kbn_std.mdx
+++ b/api_docs/kbn_std.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std
title: "@kbn/std"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/std plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std']
---
import kbnStdObj from './kbn_std.devdocs.json';
diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx
index 426333f87db2b..2fa8c47bf0f20 100644
--- a/api_docs/kbn_stdio_dev_helpers.mdx
+++ b/api_docs/kbn_stdio_dev_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers
title: "@kbn/stdio-dev-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/stdio-dev-helpers plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers']
---
import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json';
diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx
index 2e62629ecfcea..013b04a6ab6a3 100644
--- a/api_docs/kbn_storybook.mdx
+++ b/api_docs/kbn_storybook.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook
title: "@kbn/storybook"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/storybook plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook']
---
import kbnStorybookObj from './kbn_storybook.devdocs.json';
diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx
index 5921d55260350..6487d555a588c 100644
--- a/api_docs/kbn_telemetry_tools.mdx
+++ b/api_docs/kbn_telemetry_tools.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools
title: "@kbn/telemetry-tools"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/telemetry-tools plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools']
---
import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json';
diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx
index a50dd34fee731..0e7fb7d9c2538 100644
--- a/api_docs/kbn_test.mdx
+++ b/api_docs/kbn_test.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test
title: "@kbn/test"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test']
---
import kbnTestObj from './kbn_test.devdocs.json';
diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx
index 234fa0505f8a5..355290bae78bf 100644
--- a/api_docs/kbn_test_jest_helpers.mdx
+++ b/api_docs/kbn_test_jest_helpers.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers
title: "@kbn/test-jest-helpers"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-jest-helpers plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers']
---
import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json';
diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx
index 1e757612e0bc8..5443337f7498c 100644
--- a/api_docs/kbn_test_subj_selector.mdx
+++ b/api_docs/kbn_test_subj_selector.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector
title: "@kbn/test-subj-selector"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/test-subj-selector plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector']
---
import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json';
diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx
index e5710c6b20438..1987689104e19 100644
--- a/api_docs/kbn_tooling_log.mdx
+++ b/api_docs/kbn_tooling_log.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log
title: "@kbn/tooling-log"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/tooling-log plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log']
---
import kbnToolingLogObj from './kbn_tooling_log.devdocs.json';
diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx
index a8dc0bf221cd9..5b5f002032916 100644
--- a/api_docs/kbn_ts_projects.mdx
+++ b/api_docs/kbn_ts_projects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects
title: "@kbn/ts-projects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ts-projects plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects']
---
import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json';
diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx
index 672262ec1bbf6..e8c2d9140e38d 100644
--- a/api_docs/kbn_typed_react_router_config.mdx
+++ b/api_docs/kbn_typed_react_router_config.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config
title: "@kbn/typed-react-router-config"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/typed-react-router-config plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config']
---
import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json';
diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx
index 6701da7ac1271..4f630f5bb6c26 100644
--- a/api_docs/kbn_ui_actions_browser.mdx
+++ b/api_docs/kbn_ui_actions_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser
title: "@kbn/ui-actions-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-actions-browser plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser']
---
import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json';
diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx
index e2442efde5d40..590c9f141a32c 100644
--- a/api_docs/kbn_ui_shared_deps_src.mdx
+++ b/api_docs/kbn_ui_shared_deps_src.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src
title: "@kbn/ui-shared-deps-src"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-shared-deps-src plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src']
---
import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json';
diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx
index fcdb05e485bf1..2d95a6167fe2b 100644
--- a/api_docs/kbn_ui_theme.mdx
+++ b/api_docs/kbn_ui_theme.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme
title: "@kbn/ui-theme"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/ui-theme plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme']
---
import kbnUiThemeObj from './kbn_ui_theme.devdocs.json';
diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx
index 1209a4e7d95cb..9c162f36e195c 100644
--- a/api_docs/kbn_user_profile_components.mdx
+++ b/api_docs/kbn_user_profile_components.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components
title: "@kbn/user-profile-components"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/user-profile-components plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components']
---
import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json';
diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx
index cd795d56fae98..9e569eb13c66f 100644
--- a/api_docs/kbn_utility_types.mdx
+++ b/api_docs/kbn_utility_types.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types
title: "@kbn/utility-types"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types']
---
import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json';
diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx
index 54965902c245f..28c69ad56caa3 100644
--- a/api_docs/kbn_utility_types_jest.mdx
+++ b/api_docs/kbn_utility_types_jest.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest
title: "@kbn/utility-types-jest"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utility-types-jest plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest']
---
import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json';
diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx
index 521a0ce780a38..a81f4e3a573cb 100644
--- a/api_docs/kbn_utils.mdx
+++ b/api_docs/kbn_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils
title: "@kbn/utils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/utils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils']
---
import kbnUtilsObj from './kbn_utils.devdocs.json';
diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx
index a6fdd0dab15f2..0c8e51749bce7 100644
--- a/api_docs/kbn_yarn_lock_validator.mdx
+++ b/api_docs/kbn_yarn_lock_validator.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator
title: "@kbn/yarn-lock-validator"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/yarn-lock-validator plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator']
---
import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json';
diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx
index 57a85165c0966..471920263bfca 100644
--- a/api_docs/kibana_overview.mdx
+++ b/api_docs/kibana_overview.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview
title: "kibanaOverview"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaOverview plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview']
---
import kibanaOverviewObj from './kibana_overview.devdocs.json';
diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json
index 2ed468ecd418c..3569fa25e46b4 100644
--- a/api_docs/kibana_react.devdocs.json
+++ b/api_docs/kibana_react.devdocs.json
@@ -1354,15 +1354,15 @@
},
{
"plugin": "apm",
- "path": "x-pack/plugins/apm/public/components/routing/app_root.tsx"
+ "path": "x-pack/plugins/apm/public/components/routing/app_root/index.tsx"
},
{
"plugin": "apm",
- "path": "x-pack/plugins/apm/public/components/routing/app_root.tsx"
+ "path": "x-pack/plugins/apm/public/components/routing/app_root/index.tsx"
},
{
"plugin": "apm",
- "path": "x-pack/plugins/apm/public/components/routing/app_root.tsx"
+ "path": "x-pack/plugins/apm/public/components/routing/app_root/index.tsx"
},
{
"plugin": "enterpriseSearch",
diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx
index 448b48f068ea7..a1cd10b5d2323 100644
--- a/api_docs/kibana_react.mdx
+++ b/api_docs/kibana_react.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact
title: "kibanaReact"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaReact plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact']
---
import kibanaReactObj from './kibana_react.devdocs.json';
diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx
index 1b5db05b11475..443a6f043921b 100644
--- a/api_docs/kibana_utils.mdx
+++ b/api_docs/kibana_utils.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils
title: "kibanaUtils"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kibanaUtils plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils']
---
import kibanaUtilsObj from './kibana_utils.devdocs.json';
diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx
index 1942ccdb117a9..16cacfa325773 100644
--- a/api_docs/kubernetes_security.mdx
+++ b/api_docs/kubernetes_security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity
title: "kubernetesSecurity"
image: https://source.unsplash.com/400x175/?github
description: API docs for the kubernetesSecurity plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity']
---
import kubernetesSecurityObj from './kubernetes_security.devdocs.json';
diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx
index c09f062ed8156..b5294a551334e 100644
--- a/api_docs/lens.mdx
+++ b/api_docs/lens.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens
title: "lens"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lens plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens']
---
import lensObj from './lens.devdocs.json';
diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx
index 5d81f88672dac..40ce8a38d116e 100644
--- a/api_docs/license_api_guard.mdx
+++ b/api_docs/license_api_guard.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard
title: "licenseApiGuard"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseApiGuard plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard']
---
import licenseApiGuardObj from './license_api_guard.devdocs.json';
diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx
index 40e68e76b0622..77bedb1b11517 100644
--- a/api_docs/license_management.mdx
+++ b/api_docs/license_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement
title: "licenseManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licenseManagement plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement']
---
import licenseManagementObj from './license_management.devdocs.json';
diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx
index 237cd7f685687..8ebf24f36e2e5 100644
--- a/api_docs/licensing.mdx
+++ b/api_docs/licensing.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing
title: "licensing"
image: https://source.unsplash.com/400x175/?github
description: API docs for the licensing plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing']
---
import licensingObj from './licensing.devdocs.json';
diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx
index 8628ea7da9c3c..561435c2be514 100644
--- a/api_docs/lists.mdx
+++ b/api_docs/lists.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists
title: "lists"
image: https://source.unsplash.com/400x175/?github
description: API docs for the lists plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists']
---
import listsObj from './lists.devdocs.json';
diff --git a/api_docs/management.mdx b/api_docs/management.mdx
index 56fb05b98a355..6d6bbc6a02f26 100644
--- a/api_docs/management.mdx
+++ b/api_docs/management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management
title: "management"
image: https://source.unsplash.com/400x175/?github
description: API docs for the management plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management']
---
import managementObj from './management.devdocs.json';
diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx
index ec16183e6ffcd..f02a89ac26fcb 100644
--- a/api_docs/maps.mdx
+++ b/api_docs/maps.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps
title: "maps"
image: https://source.unsplash.com/400x175/?github
description: API docs for the maps plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps']
---
import mapsObj from './maps.devdocs.json';
diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx
index e4bb2ce719c9b..3eb4448752b3e 100644
--- a/api_docs/maps_ems.mdx
+++ b/api_docs/maps_ems.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms
title: "mapsEms"
image: https://source.unsplash.com/400x175/?github
description: API docs for the mapsEms plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms']
---
import mapsEmsObj from './maps_ems.devdocs.json';
diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx
index 37803bba12b4b..6635a01a23bb7 100644
--- a/api_docs/ml.mdx
+++ b/api_docs/ml.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml
title: "ml"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ml plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml']
---
import mlObj from './ml.devdocs.json';
diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx
index fcbd35d894f05..228899752c821 100644
--- a/api_docs/monitoring.mdx
+++ b/api_docs/monitoring.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring
title: "monitoring"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoring plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring']
---
import monitoringObj from './monitoring.devdocs.json';
diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx
index e7de2e1022c2c..76588c2a1f27a 100644
--- a/api_docs/monitoring_collection.mdx
+++ b/api_docs/monitoring_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection
title: "monitoringCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the monitoringCollection plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection']
---
import monitoringCollectionObj from './monitoring_collection.devdocs.json';
diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx
index 51532d9b55306..c1ef320f6acc1 100644
--- a/api_docs/navigation.mdx
+++ b/api_docs/navigation.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation
title: "navigation"
image: https://source.unsplash.com/400x175/?github
description: API docs for the navigation plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation']
---
import navigationObj from './navigation.devdocs.json';
diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx
index 8e1508e041a0b..9a21cb27a02d1 100644
--- a/api_docs/newsfeed.mdx
+++ b/api_docs/newsfeed.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed
title: "newsfeed"
image: https://source.unsplash.com/400x175/?github
description: API docs for the newsfeed plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed']
---
import newsfeedObj from './newsfeed.devdocs.json';
diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx
index 1d4520887d226..9c86e4b570f5f 100644
--- a/api_docs/notifications.mdx
+++ b/api_docs/notifications.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications
title: "notifications"
image: https://source.unsplash.com/400x175/?github
description: API docs for the notifications plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications']
---
import notificationsObj from './notifications.devdocs.json';
diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx
index 6a6bb5fd855c3..920856da040ca 100644
--- a/api_docs/observability.mdx
+++ b/api_docs/observability.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability
title: "observability"
image: https://source.unsplash.com/400x175/?github
description: API docs for the observability plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability']
---
import observabilityObj from './observability.devdocs.json';
diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx
index e7d333db5a41d..18a3338a0bd36 100644
--- a/api_docs/osquery.mdx
+++ b/api_docs/osquery.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery
title: "osquery"
image: https://source.unsplash.com/400x175/?github
description: API docs for the osquery plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery']
---
import osqueryObj from './osquery.devdocs.json';
diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx
index cfadf8f4aed06..c859b841720ff 100644
--- a/api_docs/plugin_directory.mdx
+++ b/api_docs/plugin_directory.mdx
@@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory
slug: /kibana-dev-docs/api-meta/plugin-api-directory
title: Directory
description: Directory of public APIs available through plugins or packages.
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| API Count | Any Count | Missing comments | Missing exports |
|--------------|----------|-----------------|--------|
-| 67652 | 515 | 58482 | 1232 |
+| 67651 | 515 | 58481 | 1232 |
## Plugin Directory
@@ -47,7 +47,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| cloudLinks | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Adds the links to the Elastic Cloud console | 0 | 0 | 0 | 0 |
| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 17 | 0 | 2 | 2 |
| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 13 | 0 | 13 | 1 |
-| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 42 | 0 | 42 | 3 |
+| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 41 | 0 | 41 | 3 |
| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 270 | 0 | 266 | 9 |
| crossClusterReplication | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 |
| customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 |
diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx
index b7f4d8e01ee74..b9618c23b8f65 100644
--- a/api_docs/presentation_util.mdx
+++ b/api_docs/presentation_util.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil
title: "presentationUtil"
image: https://source.unsplash.com/400x175/?github
description: API docs for the presentationUtil plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil']
---
import presentationUtilObj from './presentation_util.devdocs.json';
diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx
index a723cb7c9f0f8..db28fdc75ba51 100644
--- a/api_docs/profiling.mdx
+++ b/api_docs/profiling.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling
title: "profiling"
image: https://source.unsplash.com/400x175/?github
description: API docs for the profiling plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling']
---
import profilingObj from './profiling.devdocs.json';
diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx
index 0c8a768fb2076..df53b30d642e5 100644
--- a/api_docs/remote_clusters.mdx
+++ b/api_docs/remote_clusters.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters
title: "remoteClusters"
image: https://source.unsplash.com/400x175/?github
description: API docs for the remoteClusters plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters']
---
import remoteClustersObj from './remote_clusters.devdocs.json';
diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx
index 7a6482f49f79a..9cb366395527d 100644
--- a/api_docs/reporting.mdx
+++ b/api_docs/reporting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting
title: "reporting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the reporting plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting']
---
import reportingObj from './reporting.devdocs.json';
diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx
index 2318817871ec7..a253b1d85aad9 100644
--- a/api_docs/rollup.mdx
+++ b/api_docs/rollup.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup
title: "rollup"
image: https://source.unsplash.com/400x175/?github
description: API docs for the rollup plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup']
---
import rollupObj from './rollup.devdocs.json';
diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx
index dd24ee33abea2..ba86ab2579e90 100644
--- a/api_docs/rule_registry.mdx
+++ b/api_docs/rule_registry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry
title: "ruleRegistry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ruleRegistry plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry']
---
import ruleRegistryObj from './rule_registry.devdocs.json';
diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx
index 3f393b8162f13..d99378636a54d 100644
--- a/api_docs/runtime_fields.mdx
+++ b/api_docs/runtime_fields.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields
title: "runtimeFields"
image: https://source.unsplash.com/400x175/?github
description: API docs for the runtimeFields plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields']
---
import runtimeFieldsObj from './runtime_fields.devdocs.json';
diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx
index 69d2a95675288..55e0c212706fa 100644
--- a/api_docs/saved_objects.mdx
+++ b/api_docs/saved_objects.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects
title: "savedObjects"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjects plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects']
---
import savedObjectsObj from './saved_objects.devdocs.json';
diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx
index a50830e5d6427..e6dbc3297abf6 100644
--- a/api_docs/saved_objects_finder.mdx
+++ b/api_docs/saved_objects_finder.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder
title: "savedObjectsFinder"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsFinder plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder']
---
import savedObjectsFinderObj from './saved_objects_finder.devdocs.json';
diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx
index 3e6fdb23513c8..a35cca4bae9ab 100644
--- a/api_docs/saved_objects_management.mdx
+++ b/api_docs/saved_objects_management.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement
title: "savedObjectsManagement"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsManagement plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement']
---
import savedObjectsManagementObj from './saved_objects_management.devdocs.json';
diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx
index c5c98aa5fd26e..d00586ff065d2 100644
--- a/api_docs/saved_objects_tagging.mdx
+++ b/api_docs/saved_objects_tagging.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging
title: "savedObjectsTagging"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTagging plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging']
---
import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json';
diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx
index c3dfdf396c4dd..074359af3e0aa 100644
--- a/api_docs/saved_objects_tagging_oss.mdx
+++ b/api_docs/saved_objects_tagging_oss.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss
title: "savedObjectsTaggingOss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTaggingOss plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss']
---
import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json';
diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx
index a071dfa95de2a..e78551708a4c2 100644
--- a/api_docs/saved_search.mdx
+++ b/api_docs/saved_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch
title: "savedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedSearch plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch']
---
import savedSearchObj from './saved_search.devdocs.json';
diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx
index b9d468ad1e489..a7f7297614f91 100644
--- a/api_docs/screenshot_mode.mdx
+++ b/api_docs/screenshot_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode
title: "screenshotMode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotMode plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode']
---
import screenshotModeObj from './screenshot_mode.devdocs.json';
diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx
index 524d3224bd97c..2c15986ab2c9e 100644
--- a/api_docs/screenshotting.mdx
+++ b/api_docs/screenshotting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting
title: "screenshotting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotting plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting']
---
import screenshottingObj from './screenshotting.devdocs.json';
diff --git a/api_docs/security.mdx b/api_docs/security.mdx
index 464007edd638c..70191ab01dddd 100644
--- a/api_docs/security.mdx
+++ b/api_docs/security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security
title: "security"
image: https://source.unsplash.com/400x175/?github
description: API docs for the security plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security']
---
import securityObj from './security.devdocs.json';
diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx
index 7da4fe95a9723..7d8ff51f0d821 100644
--- a/api_docs/security_solution.mdx
+++ b/api_docs/security_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution
title: "securitySolution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolution plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution']
---
import securitySolutionObj from './security_solution.devdocs.json';
diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx
index 79c633e929cbe..753021b212885 100644
--- a/api_docs/session_view.mdx
+++ b/api_docs/session_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView
title: "sessionView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the sessionView plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView']
---
import sessionViewObj from './session_view.devdocs.json';
diff --git a/api_docs/share.mdx b/api_docs/share.mdx
index d65b70b25bee2..0a2150f3472a8 100644
--- a/api_docs/share.mdx
+++ b/api_docs/share.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share
title: "share"
image: https://source.unsplash.com/400x175/?github
description: API docs for the share plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share']
---
import shareObj from './share.devdocs.json';
diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx
index 2065e157190ed..a07946b0b092d 100644
--- a/api_docs/snapshot_restore.mdx
+++ b/api_docs/snapshot_restore.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore
title: "snapshotRestore"
image: https://source.unsplash.com/400x175/?github
description: API docs for the snapshotRestore plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore']
---
import snapshotRestoreObj from './snapshot_restore.devdocs.json';
diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx
index 3e6c947d7c190..cc10d7b96133a 100644
--- a/api_docs/spaces.mdx
+++ b/api_docs/spaces.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces
title: "spaces"
image: https://source.unsplash.com/400x175/?github
description: API docs for the spaces plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces']
---
import spacesObj from './spaces.devdocs.json';
diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx
index 2f77771cabddf..fba351dcf90a6 100644
--- a/api_docs/stack_alerts.mdx
+++ b/api_docs/stack_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts
title: "stackAlerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackAlerts plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts']
---
import stackAlertsObj from './stack_alerts.devdocs.json';
diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx
index 65d4034f1c4c7..1e632a9600bba 100644
--- a/api_docs/stack_connectors.mdx
+++ b/api_docs/stack_connectors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors
title: "stackConnectors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackConnectors plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors']
---
import stackConnectorsObj from './stack_connectors.devdocs.json';
diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx
index 2b33c780b1dc8..8e881116157f5 100644
--- a/api_docs/task_manager.mdx
+++ b/api_docs/task_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager
title: "taskManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the taskManager plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager']
---
import taskManagerObj from './task_manager.devdocs.json';
diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx
index 4f1012c941b03..8a6bbb9e3cbaa 100644
--- a/api_docs/telemetry.mdx
+++ b/api_docs/telemetry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry
title: "telemetry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetry plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry']
---
import telemetryObj from './telemetry.devdocs.json';
diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx
index 95f467111ce28..0c6893e47cc3a 100644
--- a/api_docs/telemetry_collection_manager.mdx
+++ b/api_docs/telemetry_collection_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager
title: "telemetryCollectionManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionManager plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager']
---
import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json';
diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx
index 683cf622bea2e..58d6865457bff 100644
--- a/api_docs/telemetry_collection_xpack.mdx
+++ b/api_docs/telemetry_collection_xpack.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack
title: "telemetryCollectionXpack"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionXpack plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack']
---
import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json';
diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx
index c833009c2b659..8d75936a263a8 100644
--- a/api_docs/telemetry_management_section.mdx
+++ b/api_docs/telemetry_management_section.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection
title: "telemetryManagementSection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryManagementSection plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection']
---
import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json';
diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx
index 6f55313cd5594..6349f41c5699b 100644
--- a/api_docs/threat_intelligence.mdx
+++ b/api_docs/threat_intelligence.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence
title: "threatIntelligence"
image: https://source.unsplash.com/400x175/?github
description: API docs for the threatIntelligence plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence']
---
import threatIntelligenceObj from './threat_intelligence.devdocs.json';
diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx
index e46738830f917..de4bac799f58a 100644
--- a/api_docs/timelines.mdx
+++ b/api_docs/timelines.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines
title: "timelines"
image: https://source.unsplash.com/400x175/?github
description: API docs for the timelines plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines']
---
import timelinesObj from './timelines.devdocs.json';
diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx
index 9ef7ff44da039..76a65f5eb8c92 100644
--- a/api_docs/transform.mdx
+++ b/api_docs/transform.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform
title: "transform"
image: https://source.unsplash.com/400x175/?github
description: API docs for the transform plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform']
---
import transformObj from './transform.devdocs.json';
diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx
index 71aad35bb2d2d..0cd2f8955e1a1 100644
--- a/api_docs/triggers_actions_ui.mdx
+++ b/api_docs/triggers_actions_ui.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi
title: "triggersActionsUi"
image: https://source.unsplash.com/400x175/?github
description: API docs for the triggersActionsUi plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi']
---
import triggersActionsUiObj from './triggers_actions_ui.devdocs.json';
diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx
index 4b0d58ddbbaba..4125cdb045e35 100644
--- a/api_docs/ui_actions.mdx
+++ b/api_docs/ui_actions.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions
title: "uiActions"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActions plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions']
---
import uiActionsObj from './ui_actions.devdocs.json';
diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx
index 5efedf944a46b..eea96407dace6 100644
--- a/api_docs/ui_actions_enhanced.mdx
+++ b/api_docs/ui_actions_enhanced.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced
title: "uiActionsEnhanced"
image: https://source.unsplash.com/400x175/?github
description: API docs for the uiActionsEnhanced plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced']
---
import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json';
diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx
index 411406ee78739..34d2c09362829 100644
--- a/api_docs/unified_field_list.mdx
+++ b/api_docs/unified_field_list.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList
title: "unifiedFieldList"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedFieldList plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList']
---
import unifiedFieldListObj from './unified_field_list.devdocs.json';
diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx
index ad91b5ff5c8eb..ddc71d4cfd0b3 100644
--- a/api_docs/unified_histogram.mdx
+++ b/api_docs/unified_histogram.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram
title: "unifiedHistogram"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedHistogram plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram']
---
import unifiedHistogramObj from './unified_histogram.devdocs.json';
diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx
index d59df28cf25fd..651e8c93786c9 100644
--- a/api_docs/unified_search.mdx
+++ b/api_docs/unified_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch
title: "unifiedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch']
---
import unifiedSearchObj from './unified_search.devdocs.json';
diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx
index bc7d7b7f6caec..e5bcf93633d3f 100644
--- a/api_docs/unified_search_autocomplete.mdx
+++ b/api_docs/unified_search_autocomplete.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete
title: "unifiedSearch.autocomplete"
image: https://source.unsplash.com/400x175/?github
description: API docs for the unifiedSearch.autocomplete plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete']
---
import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json';
diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx
index 51809fb7f2ba8..73feec578abc9 100644
--- a/api_docs/url_forwarding.mdx
+++ b/api_docs/url_forwarding.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding
title: "urlForwarding"
image: https://source.unsplash.com/400x175/?github
description: API docs for the urlForwarding plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding']
---
import urlForwardingObj from './url_forwarding.devdocs.json';
diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx
index de86a5db1a5b5..35aae853c2e12 100644
--- a/api_docs/usage_collection.mdx
+++ b/api_docs/usage_collection.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection
title: "usageCollection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the usageCollection plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection']
---
import usageCollectionObj from './usage_collection.devdocs.json';
diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx
index 24ee835704a01..3b184cd0f3e92 100644
--- a/api_docs/ux.mdx
+++ b/api_docs/ux.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux
title: "ux"
image: https://source.unsplash.com/400x175/?github
description: API docs for the ux plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux']
---
import uxObj from './ux.devdocs.json';
diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx
index a0e7e6b0bf29e..c1909f3b2ff58 100644
--- a/api_docs/vis_default_editor.mdx
+++ b/api_docs/vis_default_editor.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor
title: "visDefaultEditor"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visDefaultEditor plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor']
---
import visDefaultEditorObj from './vis_default_editor.devdocs.json';
diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx
index 32ab661386964..d0eb416f6c0b0 100644
--- a/api_docs/vis_type_gauge.mdx
+++ b/api_docs/vis_type_gauge.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge
title: "visTypeGauge"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeGauge plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge']
---
import visTypeGaugeObj from './vis_type_gauge.devdocs.json';
diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx
index b3a96b9133305..e12b5502a0c0f 100644
--- a/api_docs/vis_type_heatmap.mdx
+++ b/api_docs/vis_type_heatmap.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap
title: "visTypeHeatmap"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeHeatmap plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap']
---
import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json';
diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx
index 3370f0f1880a2..444127e1ec286 100644
--- a/api_docs/vis_type_pie.mdx
+++ b/api_docs/vis_type_pie.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie
title: "visTypePie"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypePie plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie']
---
import visTypePieObj from './vis_type_pie.devdocs.json';
diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx
index af0471e1a18be..8b4667ed7e8b3 100644
--- a/api_docs/vis_type_table.mdx
+++ b/api_docs/vis_type_table.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable
title: "visTypeTable"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTable plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable']
---
import visTypeTableObj from './vis_type_table.devdocs.json';
diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx
index c9bce3f960b76..72a47efd044dd 100644
--- a/api_docs/vis_type_timelion.mdx
+++ b/api_docs/vis_type_timelion.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion
title: "visTypeTimelion"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimelion plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion']
---
import visTypeTimelionObj from './vis_type_timelion.devdocs.json';
diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx
index 3ce2e96e27a66..e45229f25e088 100644
--- a/api_docs/vis_type_timeseries.mdx
+++ b/api_docs/vis_type_timeseries.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries
title: "visTypeTimeseries"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeTimeseries plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries']
---
import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json';
diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx
index 4f6cced591c3a..10248e6aa1b28 100644
--- a/api_docs/vis_type_vega.mdx
+++ b/api_docs/vis_type_vega.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega
title: "visTypeVega"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVega plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega']
---
import visTypeVegaObj from './vis_type_vega.devdocs.json';
diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx
index 44ed4f77a5bf0..f1761d76647b8 100644
--- a/api_docs/vis_type_vislib.mdx
+++ b/api_docs/vis_type_vislib.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib
title: "visTypeVislib"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeVislib plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib']
---
import visTypeVislibObj from './vis_type_vislib.devdocs.json';
diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx
index d4b132c817135..01232bd409ecd 100644
--- a/api_docs/vis_type_xy.mdx
+++ b/api_docs/vis_type_xy.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy
title: "visTypeXy"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visTypeXy plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy']
---
import visTypeXyObj from './vis_type_xy.devdocs.json';
diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx
index a1f81f986bf99..fb6fa4c55159c 100644
--- a/api_docs/visualizations.mdx
+++ b/api_docs/visualizations.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations
title: "visualizations"
image: https://source.unsplash.com/400x175/?github
description: API docs for the visualizations plugin
-date: 2023-02-20
+date: 2023-02-21
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
From d841c93ede0ba1a196efa67fe4ec2d2d59dd7619 Mon Sep 17 00:00:00 2001
From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com>
Date: Tue, 21 Feb 2023 08:15:13 +0100
Subject: [PATCH 018/101] [Fleet] added missing content type application/gzip
to openapi (#151566)
## Summary
Related to https://github.com/elastic/kibana/issues/148599
Added missing `application/gzip` content type to openapi for packages
upload API.
---
x-pack/plugins/fleet/common/openapi/bundled.json | 6 ++++++
x-pack/plugins/fleet/common/openapi/bundled.yaml | 4 ++++
x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml | 4 ++++
3 files changed, 14 insertions(+)
diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json
index f535bad37c6c2..93d0673faa6ba 100644
--- a/x-pack/plugins/fleet/common/openapi/bundled.json
+++ b/x-pack/plugins/fleet/common/openapi/bundled.json
@@ -435,6 +435,12 @@
"type": "string",
"format": "binary"
}
+ },
+ "application/gzip": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
}
}
}
diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml
index 7dcc4ba9610d2..2ce0a08ef8158 100644
--- a/x-pack/plugins/fleet/common/openapi/bundled.yaml
+++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml
@@ -281,6 +281,10 @@ paths:
schema:
type: string
format: binary
+ application/gzip:
+ schema:
+ type: string
+ format: binary
/epm/packages/_bulk:
post:
summary: Packages - Bulk install
diff --git a/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml b/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml
index d3ef2a279494e..b44ab7e9b8168 100644
--- a/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml
+++ b/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml
@@ -80,6 +80,10 @@ post:
requestBody:
content:
application/zip:
+ schema:
+ type: string
+ format: binary
+ application/gzip:
schema:
type: string
format: binary
\ No newline at end of file
From 8111d87ee98797b53b86dc6a673bc13d1bad6ab2 Mon Sep 17 00:00:00 2001
From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com>
Date: Tue, 21 Feb 2023 08:17:34 +0100
Subject: [PATCH 019/101] [Fleet] fix nullable timeout query params in
agent_policies API (#151553)
## Summary
Fixes https://github.com/elastic/kibana/issues/151525
OpenAPI was set to nullable for `unenroll_timeout` and
`inactivity_timeout`, but the `null` values were not actually accepted.
Fixed that by changing `schema.maybe()` to `schema.nullable()`.
EDIT: On a second look, I think rather the OpenAPI should be updated, so
that these are not nullable fields, but rather optional. Nullable
doesn't work well with setting default values (which we want for
`inactivity_timeout`).
```
POST kbn:/api/fleet/agent_policies
{
"data_output_id": null,
"description": "Collect windows event logs.",
"download_source_id": null,
"fleet_server_host_id": null,
"monitoring_output_id": null,
"name": "Windows4",
"namespace": "default"
}
{
"item": {
"id": "c1ac4bf0-aea3-11ed-810e-a1ed2deae3ac",
"data_output_id": null,
"description": "Collect windows event logs.",
"download_source_id": null,
"fleet_server_host_id": null,
"monitoring_output_id": null,
"name": "Windows4",
"namespace": "default",
"inactivity_timeout": 1209600,
"status": "active",
"is_managed": false,
"revision": 1,
"updated_at": "2023-02-17T09:16:27.055Z",
"updated_by": "elastic",
"schema_version": "1.0.0"
}
}
```
---
x-pack/plugins/fleet/common/openapi/bundled.json | 6 ++----
x-pack/plugins/fleet/common/openapi/bundled.yaml | 2 --
.../common/openapi/components/schemas/new_agent_policy.yaml | 2 --
3 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json
index 93d0673faa6ba..18096816da32d 100644
--- a/x-pack/plugins/fleet/common/openapi/bundled.json
+++ b/x-pack/plugins/fleet/common/openapi/bundled.json
@@ -5734,12 +5734,10 @@
"nullable": true
},
"unenroll_timeout": {
- "type": "number",
- "nullable": true
+ "type": "number"
},
"inactivity_timeout": {
- "type": "number",
- "nullable": true
+ "type": "number"
}
},
"required": [
diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml
index 2ce0a08ef8158..6aa226c302d18 100644
--- a/x-pack/plugins/fleet/common/openapi/bundled.yaml
+++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml
@@ -3651,10 +3651,8 @@ components:
nullable: true
unenroll_timeout:
type: number
- nullable: true
inactivity_timeout:
type: number
- nullable: true
required:
- name
- namespace
diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml
index 4dcd8681ac0ea..2edab88c70490 100644
--- a/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml
+++ b/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml
@@ -30,10 +30,8 @@ properties:
nullable: true
unenroll_timeout:
type: number
- nullable: true
inactivity_timeout:
type: number
- nullable: true
required:
- name
- namespace
From d5674c70afcaabf57551a73dcfe711f94140e5fd Mon Sep 17 00:00:00 2001
From: Boris Kirov
Date: Tue, 21 Feb 2023 09:54:00 +0100
Subject: [PATCH 020/101] Update tooltip diff flamegraph (#151625)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
We recently reviewed the final copy for the `Normalize by` menu in the
Diff Flamegraph with the writing team and we have the final copy that we
will use there. This PR is aiming to update that.
Related to:
https://github.com/elastic/kibana/pull/151437
---------
Co-authored-by: Tim Rühsen
---
.../components/flame_graphs_view/normalization_menu.tsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx b/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx
index 17d4bfefea294..9a6eaba2af677 100644
--- a/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx
+++ b/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx
@@ -156,7 +156,7 @@ export function NormalizationMenu(props: Props) {
'xpack.profiling.flameGraphNormalizationMenu.normalizeByTimeTooltip',
{
defaultMessage:
- 'To compare a set of machines over time periods of different lengths (for example: Compare the last hour against the last 24h), choose Normalize by Time. The number of samples on the shorter timeframe will be multiplied to match the longer timeframe (in this example, by 24).',
+ 'Select Normalize by Scale factor and set your Baseline and Comparison scale factors to compare a set of machines of different sizes. For example, you can compare a deployment of 10% of machines to a deployment of 90% of machines.',
}
)}
@@ -167,7 +167,7 @@ export function NormalizationMenu(props: Props) {
'xpack.profiling.flameGraphNormalizationMenu.normalizeByScaleTooltip',
{
defaultMessage:
- 'To compare differently-sized sets of machines (e.g. a deployment on 10% of machines against a deployment on 90% of machines), choose Scale Factor and provide an appropriate factor to multiply the right-hand side with.',
+ 'Select Normalize by Time to compare a set of machines across different time periods. For example, if you compare the last hour to the last 24 hours, the shorter timeframe (1 hour) is multiplied to match the longer timeframe (24 hours).',
}
)}
From 94c95431d71b3c67fc8b21f53cf0c21a8bf474c1 Mon Sep 17 00:00:00 2001
From: jennypavlova
Date: Tue, 21 Feb 2023 10:20:12 +0100
Subject: [PATCH 021/101] Hosts landing page: Dark/Light mode image change
(#151623)
Closes [#149626](https://github.com/elastic/kibana/issues/149626)
## Summary
This PR changes the image on the hosts landing page and adds a dark-mode
image.
## Testing
Go to Hosts Page (in order to see the landing page you need to disable
hosts view in Advance settings)
Check the image on the landing page (Switch dark/light mode in Advance
settings)
---
.../enable_hosts_view_page.tsx | 13 +-
.../hosts_landing_beta.svg | 920 ------------------
.../hosts_landing_beta_dark.svg | 9 +
.../hosts_landing_beta_light.svg | 9 +
4 files changed, 29 insertions(+), 922 deletions(-)
delete mode 100644 x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta.svg
create mode 100644 x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_dark.svg
create mode 100644 x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_light.svg
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/enable_hosts_view_page.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/enable_hosts_view_page.tsx
index 886de82f1e9b8..ccdcb30e65821 100644
--- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/enable_hosts_view_page.tsx
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/enable_hosts_view_page.tsx
@@ -11,8 +11,10 @@ import { css } from '@emotion/react';
import { useEuiBackgroundColor } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { useTrackPageview } from '@kbn/observability-plugin/public';
+import { useUiSetting } from '@kbn/kibana-react-plugin/public';
import { MetricsPageTemplate } from '../../../page_template';
-import hostsLandingBeta from './hosts_landing_beta.svg';
+import hostsLandingBetaLight from './hosts_landing_beta_light.svg';
+import hostsLandingBetaDark from './hosts_landing_beta_dark.svg';
import { ExperimentalBadge } from '../../../../../components/experimental_badge';
interface Props {
@@ -21,6 +23,7 @@ interface Props {
export const EnableHostsViewPage = ({ actions }: Props) => {
const backgroundColor = useEuiBackgroundColor('subdued');
+ const isDarkMode = useUiSetting('theme:darkMode');
useTrackPageview({ app: 'infra_metrics', path: 'hosts_feature_enable_landing_page' });
useTrackPageview({
@@ -41,7 +44,13 @@ export const EnableHostsViewPage = ({ actions }: Props) => {
}
alignment="center"
- icon={}
+ icon={
+
+ }
color="plain"
layout="horizontal"
body={
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta.svg b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta.svg
deleted file mode 100644
index 832b7fd689bce..0000000000000
--- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta.svg
+++ /dev/null
@@ -1,920 +0,0 @@
-
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_dark.svg b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_dark.svg
new file mode 100644
index 0000000000000..221076d4fe290
--- /dev/null
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_dark.svg
@@ -0,0 +1,9 @@
+
diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_light.svg b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_light.svg
new file mode 100644
index 0000000000000..00d5aa123db8e
--- /dev/null
+++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_light.svg
@@ -0,0 +1,9 @@
+
From 6682bfd7bccb12f926038520d0ae9a9906f6db94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?=
Date: Tue, 21 Feb 2023 10:22:06 +0100
Subject: [PATCH 022/101] [Usage Collection] Reuse concurrent collectors
(#151626)
---
.../server/collector/collector_set.test.ts | 52 +++++++++++++++++++
.../server/collector/collector_set.ts | 33 ++++++++----
2 files changed, 75 insertions(+), 10 deletions(-)
diff --git a/src/plugins/usage_collection/server/collector/collector_set.test.ts b/src/plugins/usage_collection/server/collector/collector_set.test.ts
index bf3381c4510d3..56b4e55eccfc4 100644
--- a/src/plugins/usage_collection/server/collector/collector_set.test.ts
+++ b/src/plugins/usage_collection/server/collector/collector_set.test.ts
@@ -601,5 +601,57 @@ describe('CollectorSet', () => {
expect.any(Function)
);
});
+
+ it('reuses ongoing collectors for subsequent calls', async () => {
+ const fetchMock = jest.fn(
+ () => new Promise((resolve) => setTimeout(() => resolve({ test: 1000 }), 100))
+ );
+
+ collectorSet.registerCollector(
+ collectorSet.makeUsageCollector({
+ type: 'slow_collector',
+ isReady: () => true,
+ schema: { test: { type: 'long' } },
+ fetch: fetchMock,
+ })
+ );
+
+ const mockEsClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
+ const mockSoClient = savedObjectsClientMock.create();
+
+ // Call bulkFetch twice concurrently
+ await Promise.all([
+ collectorSet.bulkFetch(mockEsClient, mockSoClient),
+ collectorSet.bulkFetch(mockEsClient, mockSoClient),
+ ]);
+
+ // It should be called once
+ expect(fetchMock).toHaveBeenCalledTimes(1);
+ });
+
+ it('calls completed collectors on subsequent calls', async () => {
+ const fetchMock = jest.fn(
+ () => new Promise((resolve) => setTimeout(() => resolve({ test: 1000 }), 100))
+ );
+
+ collectorSet.registerCollector(
+ collectorSet.makeUsageCollector({
+ type: 'slow_collector',
+ isReady: () => true,
+ schema: { test: { type: 'long' } },
+ fetch: fetchMock,
+ })
+ );
+
+ const mockEsClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
+ const mockSoClient = savedObjectsClientMock.create();
+
+ // Call bulkFetch twice sequentially
+ await collectorSet.bulkFetch(mockEsClient, mockSoClient);
+ await collectorSet.bulkFetch(mockEsClient, mockSoClient);
+
+ // It should be called once
+ expect(fetchMock).toHaveBeenCalledTimes(2);
+ });
});
});
diff --git a/src/plugins/usage_collection/server/collector/collector_set.ts b/src/plugins/usage_collection/server/collector/collector_set.ts
index 8251b95a1beb8..d1b06e63b3b95 100644
--- a/src/plugins/usage_collection/server/collector/collector_set.ts
+++ b/src/plugins/usage_collection/server/collector/collector_set.ts
@@ -31,6 +31,12 @@ interface CollectorWithStatus {
collector: AnyCollector;
}
+interface FetchCollectorOutput {
+ result?: unknown;
+ status: 'failed' | 'success';
+ type: string;
+}
+
export interface CollectorSetConfig {
logger: Logger;
executionContext: ExecutionContextSetup;
@@ -43,6 +49,7 @@ export class CollectorSet {
private readonly executionContext: ExecutionContextSetup;
private readonly maximumWaitTimeForAllCollectorsInS: number;
private readonly collectors: Map;
+ private readonly fetchingCollectors = new WeakMap>();
constructor({
logger,
executionContext,
@@ -190,11 +197,7 @@ export class CollectorSet {
private fetchCollector = async (
collector: AnyCollector,
context: CollectorFetchContext
- ): Promise<{
- result?: unknown;
- status: 'failed' | 'success';
- type: string;
- }> => {
+ ): Promise => {
const { type } = collector;
this.logger.debug(`Fetching data from ${type} collector`);
const executionContext: KibanaExecutionContext = {
@@ -231,12 +234,22 @@ export class CollectorSet {
const fetchExecutions = await Promise.all(
readyCollectors.map(async (collector) => {
- const wrappedPromise = perfTimerify(
- `fetch_${collector.type}`,
- async () => await this.fetchCollector(collector, context)
- );
+ // If the collector is processing from a concurrent request, reuse it.
+ let wrappedPromise = this.fetchingCollectors.get(collector);
+
+ if (!wrappedPromise) {
+ // Otherwise, call it
+ wrappedPromise = perfTimerify(
+ `fetch_${collector.type}`,
+ async () => await this.fetchCollector(collector, context)
+ )();
+ }
+
+ this.fetchingCollectors.set(collector, wrappedPromise);
+
+ wrappedPromise.finally(() => this.fetchingCollectors.delete(collector));
- return await wrappedPromise();
+ return await wrappedPromise;
})
);
const durationMarks = getMarks();
From b163cb2d8512ca331c4d99288964d37d2a16fbfb Mon Sep 17 00:00:00 2001
From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com>
Date: Tue, 21 Feb 2023 10:30:42 +0100
Subject: [PATCH 023/101] [Fleet] Fixing update tags status reporting complete
too early (#151330)
## Summary
Fixes https://github.com/elastic/kibana/issues/150654
Found a bug in update tags, that when writing out action results, the
count was not correct in case of conflicts (less agents were updated
than agentIds).
This resulted in action result count reaching the total early, and
marking the action status complete.
This caused a failure in performance tests, because the action was set
to complete, but actually not all agents had the new tag yet.
With the fix on action results I see the ack count correct, and the
action moving to COMPLETE when all retries have finished.
Added another fix for `nbAgentsActionCreated` incorrectly showing higher
count than expected. This value comes from the sum of agentIds in the
`.fleet-actions` doc. Changed the implementation so that
`.fleet-actions` is updated on every retry to only record agents
updated, failed, and on last retry conflicted. This ensures that the
`nbAgentsActionCreated` will be accurate.
Tested with 50k agents, see recording here
https://github.com/elastic/kibana/pull/151330#discussion_r1109526053
### Checklist
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
---
.../services/agents/update_agent_tags.test.ts | 57 +++++++++++++++--
.../agents/update_agent_tags_action_runner.ts | 61 +++++++++++++------
2 files changed, 94 insertions(+), 24 deletions(-)
diff --git a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts
index 3ef1a269d8e6f..ab407705007db 100644
--- a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts
+++ b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts
@@ -110,7 +110,7 @@ describe('update_agent_tags', () => {
expect(agentAction?.body).toEqual(
expect.objectContaining({
action_id: expect.anything(),
- agents: ['agent1'],
+ agents: [expect.any(String)],
type: 'UPDATE_TAGS',
total: 1,
})
@@ -120,7 +120,7 @@ describe('update_agent_tags', () => {
const agentIds = actionResults?.body
?.filter((i: any) => i.agent_id)
.map((i: any) => i.agent_id);
- expect(agentIds).toEqual(['agent1']);
+ expect(agentIds.length).toEqual(1);
expect(actionResults.body[1].error).not.toBeDefined();
});
@@ -142,7 +142,7 @@ describe('update_agent_tags', () => {
expect(agentAction?.body).toEqual(
expect.objectContaining({
action_id: expect.anything(),
- agents: [agentInRegularDoc._id],
+ agents: [expect.any(String)],
type: 'UPDATE_TAGS',
total: 1,
})
@@ -152,12 +152,23 @@ describe('update_agent_tags', () => {
it('should write error action results when failures are returned', async () => {
esClient.updateByQuery.mockReset();
esClient.updateByQuery.mockResolvedValue({
- failures: [{ cause: { reason: 'error reason' } }],
+ failures: [{ id: 'failure1', cause: { reason: 'error reason' } }],
updated: 0,
+ total: 1,
} as any);
await updateAgentTags(soClient, esClient, { agentIds: ['agent1'] }, ['one'], []);
+ const agentAction = esClient.create.mock.calls[0][0] as any;
+ expect(agentAction?.body).toEqual(
+ expect.objectContaining({
+ action_id: expect.anything(),
+ agents: ['failure1'],
+ type: 'UPDATE_TAGS',
+ total: 1,
+ })
+ );
+
const errorResults = esClient.bulk.mock.calls[0][0] as any;
expect(errorResults.body[1].error).toEqual('error reason');
});
@@ -181,6 +192,7 @@ describe('update_agent_tags', () => {
failures: [],
updated: 0,
version_conflicts: 100,
+ total: 100,
} as any);
await expect(
@@ -198,10 +210,43 @@ describe('update_agent_tags', () => {
}
)
).rejects.toThrowError('version conflict of 100 agents');
+
+ const agentAction = esClient.create.mock.calls[0][0] as any;
+ expect(agentAction?.body.agents.length).toEqual(100);
+
const errorResults = esClient.bulk.mock.calls[0][0] as any;
expect(errorResults.body[1].error).toEqual('version conflict on last retry');
});
+ it('should combine action agents from updated, failures and version conflicts on last retry', async () => {
+ esClient.updateByQuery.mockReset();
+ esClient.updateByQuery.mockResolvedValue({
+ failures: [{ id: 'failure1', cause: { reason: 'error reason' } }],
+ updated: 1,
+ version_conflicts: 1,
+ total: 3,
+ } as any);
+
+ await expect(
+ updateTagsBatch(
+ soClient,
+ esClient,
+ [{ id: 'agent1' } as Agent],
+ {},
+ {
+ tagsToAdd: ['new'],
+ tagsToRemove: [],
+ kuery: '',
+ total: 3,
+ retryCount: MAX_RETRY_COUNT,
+ }
+ )
+ ).rejects.toThrowError('version conflict of 1 agents');
+
+ const agentAction = esClient.create.mock.calls[0][0] as any;
+ expect(agentAction?.body.agents.length).toEqual(3);
+ });
+
it('should run add tags async when actioning more agents than batch size', async () => {
esClient.search.mockResolvedValue({
hits: {
@@ -301,7 +346,7 @@ describe('update_agent_tags', () => {
it('should write total from total param if updateByQuery returns less results', async () => {
esClient.updateByQuery.mockReset();
- esClient.updateByQuery.mockResolvedValue({ failures: [], updated: 0, total: 50 } as any);
+ esClient.updateByQuery.mockResolvedValue({ failures: [], updated: 1, total: 50 } as any);
await updateTagsBatch(
soClient,
@@ -320,7 +365,7 @@ describe('update_agent_tags', () => {
expect(agentAction?.body).toEqual(
expect.objectContaining({
action_id: expect.anything(),
- agents: ['agent1'],
+ agents: [expect.any(String)],
type: 'UPDATE_TAGS',
total: 100,
})
diff --git a/x-pack/plugins/fleet/server/services/agents/update_agent_tags_action_runner.ts b/x-pack/plugins/fleet/server/services/agents/update_agent_tags_action_runner.ts
index 1f12968b67c36..d8208fd5f8d08 100644
--- a/x-pack/plugins/fleet/server/services/agents/update_agent_tags_action_runner.ts
+++ b/x-pack/plugins/fleet/server/services/agents/update_agent_tags_action_runner.ts
@@ -129,56 +129,81 @@ export async function updateTagsBatch(
appContextService.getLogger().debug(JSON.stringify(res).slice(0, 1000));
- if (options.retryCount === undefined) {
- // creating an action doc so that update tags shows up in activity
- await createAgentAction(esClient, {
- id: actionId,
- agents: agentIds,
- created_at: new Date().toISOString(),
- type: 'UPDATE_TAGS',
- total: options.total ?? res.total,
- });
- }
-
// creating unique ids to use as agentId, as we don't have all agent ids in case of action by kuery
const getUuidArray = (count: number) => Array.from({ length: count }, () => uuidv4());
+ const updatedCount = res.updated ?? 0;
+ const updatedIds = getUuidArray(updatedCount);
+
+ const failures = res.failures ?? [];
+ const failureCount = failures.length;
+
+ const isLastRetry = options.retryCount === MAX_RETRY_COUNT;
+
+ const versionConflictCount = res.version_conflicts ?? 0;
+ const versionConflictIds = isLastRetry ? getUuidArray(versionConflictCount) : [];
+
+ // creating an action doc so that update tags shows up in activity
+ // the logic only saves agent count in the action that updated, failed or in case of last retry, conflicted
+ // this ensures that the action status count will be accurate
+ await createAgentAction(esClient, {
+ id: actionId,
+ agents: updatedIds
+ .concat(failures.map((failure) => failure.id))
+ .concat(isLastRetry ? versionConflictIds : []),
+ created_at: new Date().toISOString(),
+ type: 'UPDATE_TAGS',
+ total: options.total ?? res.total,
+ });
+ appContextService
+ .getLogger()
+ .debug(
+ `action doc wrote on ${
+ updatedCount + failureCount + (isLastRetry ? versionConflictCount : 0)
+ } agentIds, updated: ${updatedCount}, failed: ${failureCount}, version_conflicts: ${versionConflictCount}`
+ );
+
// writing successful action results
- if (res.updated ?? 0 > 0) {
+ if (updatedCount > 0) {
await bulkCreateAgentActionResults(
esClient,
- agentIds.map((id) => ({
+ updatedIds.map((id) => ({
agentId: id,
actionId,
}))
);
+ appContextService.getLogger().debug(`action updated result wrote on ${updatedCount} agents`);
}
// writing failures from es update
- if (res.failures && res.failures.length > 0) {
+ if (failures.length > 0) {
await bulkCreateAgentActionResults(
esClient,
- res.failures.map((failure) => ({
+ failures.map((failure) => ({
agentId: failure.id,
actionId,
error: failure.cause.reason,
}))
);
+ appContextService.getLogger().debug(`action failed result wrote on ${failureCount} agents`);
}
- if (res.version_conflicts ?? 0 > 0) {
+ if (versionConflictCount > 0) {
// write out error results on last retry, so action is not stuck in progress
if (options.retryCount === MAX_RETRY_COUNT) {
await bulkCreateAgentActionResults(
esClient,
- getUuidArray(res.version_conflicts!).map((id) => ({
+ versionConflictIds.map((id) => ({
agentId: id,
actionId,
error: 'version conflict on last retry',
}))
);
+ appContextService
+ .getLogger()
+ .debug(`action conflict result wrote on ${versionConflictCount} agents`);
}
- throw new Error(`version conflict of ${res.version_conflicts} agents`);
+ throw new Error(`version conflict of ${versionConflictCount} agents`);
}
return { actionId, updated: res.updated, took: res.took };
From 243da3d79b784e39dfc5ea4e6b8ce336d6ca3a0a Mon Sep 17 00:00:00 2001
From: James Gowdy
Date: Tue, 21 Feb 2023 09:38:26 +0000
Subject: [PATCH 024/101] [ML] Allow row expansion for blocked jobs (#151351)
Fixes https://github.com/elastic/kibana/issues/151292
Allows the row to be expanded when a job in a blocked state, i.e. is
resetting, reverting or deleting.
The datafeed preview, forecasts, annotations and model snapshots tabs
are disabled
However, if the user already had one of these tabs open when the job
enters a blocked state, the tab will not change and so all actions
inside the tab also need to be disabled.
---
.../annotations_table/annotations_table.js | 140 +++++++++---------
.../model_snapshots/model_snapshots_table.tsx | 7 +-
.../forecasts_table/forecasts_table.js | 5 +-
.../components/job_details/job_details.js | 38 +++--
.../components/jobs_list/jobs_list.js | 1 -
.../jobs_list_view/jobs_list_view.js | 6 -
6 files changed, 100 insertions(+), 97 deletions(-)
diff --git a/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js b/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js
index a0a364e3af0f8..f46de2a913e05 100644
--- a/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js
+++ b/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js
@@ -482,87 +482,87 @@ class AnnotationsTableUI extends Component {
}
const actions = [];
-
- actions.push({
- name: editAnnotationsText,
- description: editAnnotationsText,
- icon: 'pencil',
- type: 'icon',
- onClick: (annotation) => {
- const annotationId = annotation._id;
- const originalAnnotation = annotations.find((d) => d._id === annotationId);
-
- annotationUpdatesService.setValue(originalAnnotation ?? annotation);
- },
- 'data-test-subj': `mlAnnotationsActionEdit`,
- });
-
- if (this.state.jobId && this.props.jobs[0].analysis_config.bucket_span) {
- // add datafeed modal action
+ if (this.props.jobs === undefined || this.props.jobs[0]?.blocked === undefined) {
actions.push({
- name: viewDataFeedText,
- description: viewDataFeedText,
- icon: 'visAreaStacked',
+ name: editAnnotationsText,
+ description: editAnnotationsText,
+ icon: 'pencil',
type: 'icon',
onClick: (annotation) => {
- this.setState({
- datafeedFlyoutVisible: true,
- datafeedEnd: annotation.end_timestamp,
- });
+ const annotationId = annotation._id;
+ const originalAnnotation = annotations.find((d) => d._id === annotationId);
+
+ annotationUpdatesService.setValue(originalAnnotation ?? annotation);
},
- 'data-test-subj': `mlAnnotationsActionViewDatafeed`,
+ 'data-test-subj': `mlAnnotationsActionEdit`,
});
- }
- if (isSingleMetricViewerLinkVisible) {
- actions.push({
- name: (annotation) => {
- const isDrillDownAvailable = isTimeSeriesViewJob(this.getJob(annotation.job_id));
+ if (this.state.jobId && this.props.jobs[0].analysis_config.bucket_span) {
+ // add datafeed modal action
+ actions.push({
+ name: viewDataFeedText,
+ description: viewDataFeedText,
+ icon: 'visAreaStacked',
+ type: 'icon',
+ onClick: (annotation) => {
+ this.setState({
+ datafeedFlyoutVisible: true,
+ datafeedEnd: annotation.end_timestamp,
+ });
+ },
+ 'data-test-subj': `mlAnnotationsActionViewDatafeed`,
+ });
+ }
- if (isDrillDownAvailable) {
- return (
-
- );
- }
- return (
- {
+ const isDrillDownAvailable = isTimeSeriesViewJob(this.getJob(annotation.job_id));
+
+ if (isDrillDownAvailable) {
+ return (
- }
- >
-
-
- );
- },
- description: (annotation) => {
- const isDrillDownAvailable = isTimeSeriesViewJob(this.getJob(annotation.job_id));
-
- return isDrillDownAvailable
- ? i18n.translate('xpack.ml.annotationsTable.openInSingleMetricViewerAriaLabel', {
- defaultMessage: 'Open in Single Metric Viewer',
- })
- : i18n.translate(
- 'xpack.ml.annotationsTable.jobConfigurationNotSupportedInSingleMetricViewerAriaLabel',
- { defaultMessage: 'Job configuration not supported in Single Metric Viewer' }
);
- },
- enabled: (annotation) => isTimeSeriesViewJob(this.getJob(annotation.job_id)),
- icon: 'visLine',
- type: 'icon',
- onClick: (annotation) => this.openSingleMetricView(annotation),
- 'data-test-subj': `mlAnnotationsActionOpenInSingleMetricViewer`,
- });
+ }
+ return (
+
+ }
+ >
+
+
+ );
+ },
+ description: (annotation) => {
+ const isDrillDownAvailable = isTimeSeriesViewJob(this.getJob(annotation.job_id));
+
+ return isDrillDownAvailable
+ ? i18n.translate('xpack.ml.annotationsTable.openInSingleMetricViewerAriaLabel', {
+ defaultMessage: 'Open in Single Metric Viewer',
+ })
+ : i18n.translate(
+ 'xpack.ml.annotationsTable.jobConfigurationNotSupportedInSingleMetricViewerAriaLabel',
+ { defaultMessage: 'Job configuration not supported in Single Metric Viewer' }
+ );
+ },
+ enabled: (annotation) => isTimeSeriesViewJob(this.getJob(annotation.job_id)),
+ icon: 'visLine',
+ type: 'icon',
+ onClick: (annotation) => this.openSingleMetricView(annotation),
+ 'data-test-subj': `mlAnnotationsActionOpenInSingleMetricViewer`,
+ });
+ }
}
-
const getRowProps = (item) => {
return {
'data-test-subj': `mlAnnotationsTableRow row-${item._id}`,
diff --git a/x-pack/plugins/ml/public/application/components/model_snapshots/model_snapshots_table.tsx b/x-pack/plugins/ml/public/application/components/model_snapshots/model_snapshots_table.tsx
index cfd586b3a3396..414e7faca5691 100644
--- a/x-pack/plugins/ml/public/application/components/model_snapshots/model_snapshots_table.tsx
+++ b/x-pack/plugins/ml/public/application/components/model_snapshots/model_snapshots_table.tsx
@@ -5,7 +5,7 @@
* 2.0.
*/
-import React, { FC, useEffect, useCallback, useState, useRef } from 'react';
+import React, { FC, useEffect, useCallback, useState, useRef, useMemo } from 'react';
import { i18n } from '@kbn/i18n';
import {
@@ -50,6 +50,7 @@ export const ModelSnapshotTable: FC = ({ job, refreshJobList }) => {
const [revertSnapshot, setRevertSnapshot] = useState(null);
const [closeJobModalVisible, setCloseJobModalVisible] = useState(null);
const [combinedJobState, setCombinedJobState] = useState(null);
+ const actionsEnabled = useMemo(() => job.blocked === undefined, [job]);
const isMounted = useRef(true);
useEffect(() => {
@@ -185,7 +186,7 @@ export const ModelSnapshotTable: FC = ({ job, refreshJobList }) => {
description: i18n.translate('xpack.ml.modelSnapshotTable.actions.revert.description', {
defaultMessage: 'Revert to this snapshot',
}),
- enabled: () => canCreateJob && canStartStopDatafeed,
+ enabled: () => actionsEnabled && canCreateJob && canStartStopDatafeed,
type: 'icon',
icon: 'crosshairs',
onClick: checkJobIsClosed,
@@ -197,7 +198,7 @@ export const ModelSnapshotTable: FC = ({ job, refreshJobList }) => {
description: i18n.translate('xpack.ml.modelSnapshotTable.actions.edit.description', {
defaultMessage: 'Edit this snapshot',
}),
- enabled: () => canCreateJob,
+ enabled: () => actionsEnabled && canCreateJob,
type: 'icon',
icon: 'pencil',
onClick: setEditSnapshot,
diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js
index 593a09d377057..69e036abf4d2c 100644
--- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js
+++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js
@@ -311,7 +311,10 @@ export class ForecastsTableUI extends Component {
return (
this.openSingleMetricView(forecast)}
- isDisabled={forecast.forecast_status !== FORECAST_REQUEST_STATE.FINISHED}
+ isDisabled={
+ this.props.job.blocked !== undefined ||
+ forecast.forecast_status !== FORECAST_REQUEST_STATE.FINISHED
+ }
iconType="visLine"
aria-label={viewForecastAriaLabel}
/>
diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js
index 8d98052eab26c..4eec95106eca2 100644
--- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js
+++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js
@@ -83,22 +83,24 @@ export class JobDetailsUI extends Component {
alertRules,
} = extractJobDetails(job, basePath, refreshJobList);
- datafeed.titleAction = (
-
- this.setState({
- datafeedChartFlyoutVisible: true,
- })
- }
- iconType="visAreaStacked"
- size="s"
- >
-
-
- );
+ if (job.blocked === undefined) {
+ datafeed.titleAction = (
+
+ this.setState({
+ datafeedChartFlyoutVisible: true,
+ })
+ }
+ iconType="visAreaStacked"
+ size="s"
+ >
+
+
+ );
+ }
const tabs = [
{
@@ -216,6 +218,7 @@ export class JobDetailsUI extends Component {
tabs.push(
{
id: 'datafeed-preview',
+ disabled: job.blocked !== undefined,
'data-test-subj': 'mlJobListTab-datafeed-preview',
name: i18n.translate('xpack.ml.jobsList.jobDetails.tabs.datafeedPreviewLabel', {
defaultMessage: 'Datafeed preview',
@@ -224,6 +227,7 @@ export class JobDetailsUI extends Component {
},
{
id: 'forecasts',
+ disabled: job.blocked !== undefined,
'data-test-subj': 'mlJobListTab-forecasts',
name: i18n.translate('xpack.ml.jobsList.jobDetails.tabs.forecastsLabel', {
defaultMessage: 'Forecasts',
@@ -235,6 +239,7 @@ export class JobDetailsUI extends Component {
tabs.push({
id: 'annotations',
+ disabled: job.blocked !== undefined,
'data-test-subj': 'mlJobListTab-annotations',
name: i18n.translate('xpack.ml.jobsList.jobDetails.tabs.annotationsLabel', {
defaultMessage: 'Annotations',
@@ -249,6 +254,7 @@ export class JobDetailsUI extends Component {
tabs.push({
id: 'modelSnapshots',
+ disabled: job.blocked !== undefined,
'data-test-subj': 'mlJobListTab-modelSnapshots',
name: i18n.translate('xpack.ml.jobsList.jobDetails.tabs.modelSnapshotsLabel', {
defaultMessage: 'Model snapshots',
diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js
index d5459fd5b8e33..a2a03ef7ce69c 100644
--- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js
+++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js
@@ -141,7 +141,6 @@ export class JobsList extends Component {
render: (item) => (
this.toggleRow(item)}
- isDisabled={item.blocked !== undefined}
iconType={this.state.itemIdToExpandedRowMap[item.id] ? 'arrowDown' : 'arrowRight'}
aria-label={
this.state.itemIdToExpandedRowMap[item.id]
diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js
index b186192b64744..179d5d48b3fe5 100644
--- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js
+++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js
@@ -342,12 +342,6 @@ export class JobsListView extends Component {
this.updateFunctions[j](fullJobsList[j]);
});
- jobs.forEach((job) => {
- if (job.blocked !== undefined && this.state.itemIdToExpandedRowMap[job.id]) {
- this.toggleRow(job.id);
- }
- });
-
this.isDoneRefreshing();
if (jobsSummaryList.some((j) => j.blocked !== undefined)) {
// if there are some jobs in a deleting state, start polling for
From 9683beba6af5f78fa88350aa5bcab95d767cd763 Mon Sep 17 00:00:00 2001
From: Maxim Palenov
Date: Tue, 21 Feb 2023 10:43:25 +0100
Subject: [PATCH 025/101] [Security Solution] Fix rules filtering after
enabling/disabling a rule (#151284)
**Addresses:** https://github.com/elastic/kibana/issues/151151
## Summary
It fixes rules filtering after enabling or disabling a rule.
### Details
The problem is caused by improper cache invalidation. Rules cache used to be modified upon enabling or disabling one or more rules but it started causing troubles after introduction a filter by enabled or disabled state. Cached rules modification is is complex and bug prone especially taking into account it will need to mirror backend logic and further plans on extending rule filers. So the simplest solution is invalidation of the whole rules cache. Though it may also lead to unfriendly UX when disabled or enabled rules "jump" in the table. The best approach is marking find rule request cached data as stale so data is refetched each time use changes filter state, sort by field or use pagination.
**Before:**
https://user-images.githubusercontent.com/1938181/218776621-f8903a88-1685-4a2c-9074-02fac0623dc4.mov
**After:**
https://user-images.githubusercontent.com/3775283/219630525-af109575-3a01-4988-bb6b-690473d33b80.mov
### Checklist
- [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios
---
.../rule_management/api/hooks/use_fetch_rule_by_id_query.ts | 3 +++
.../rule_management/api/hooks/use_find_rules_query.ts | 3 +++
2 files changed, 6 insertions(+)
diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts
index da0761d5160c7..4c8ee37e3e211 100644
--- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts
+++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts
@@ -35,6 +35,9 @@ export const useFetchRuleByIdQuery = (id: string, options?: UseQueryOptions
Date: Tue, 21 Feb 2023 10:58:41 +0100
Subject: [PATCH 026/101] Refresh the app after saving a monitor (#150733)
## Summary
Closes #150594
Ensures the synthetics app refreshes its state when a monitor is
created, no matter the method.
This mirrors how the [Simple monitor creation flow
works](https://github.com/afgomez/kibana/blob/3595849389663290df868784402b91d428b8ab54/x-pack/plugins/synthetics/public/apps/synthetics/components/getting_started/use_simple_monitor.ts#L70-L71)
---
.../monitor_add_edit/hooks/use_monitor_save.ts | 9 ++++++++-
.../components/monitors_page/overview/overview_page.tsx | 3 ++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.ts
index e09a4dd886133..9fd18e5dfa04d 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.ts
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.ts
@@ -8,13 +8,18 @@
import { FETCH_STATUS, useFetcher } from '@kbn/observability-plugin/public';
import { useParams, useRouteMatch } from 'react-router-dom';
import { useEffect } from 'react';
+import { useDispatch } from 'react-redux';
import { i18n } from '@kbn/i18n';
import { MONITOR_EDIT_ROUTE } from '../../../../../../common/constants';
import { SyntheticsMonitor } from '../../../../../../common/runtime_types';
import { createMonitorAPI, updateMonitorAPI } from '../../../state/monitor_management/api';
import { kibanaService } from '../../../../../utils/kibana_service';
+import { cleanMonitorListState } from '../../../state';
+import { useSyntheticsRefreshContext } from '../../../contexts';
export const useMonitorSave = ({ monitorData }: { monitorData?: SyntheticsMonitor }) => {
+ const dispatch = useDispatch();
+ const { refreshApp } = useSyntheticsRefreshContext();
const { monitorId } = useParams<{ monitorId: string }>();
const editRouteMatch = useRouteMatch({ path: MONITOR_EDIT_ROUTE });
@@ -42,12 +47,14 @@ export const useMonitorSave = ({ monitorData }: { monitorData?: SyntheticsMonito
toastLifeTimeMs: 3000,
});
} else if (status === FETCH_STATUS.SUCCESS && !loading) {
+ refreshApp();
+ dispatch(cleanMonitorListState());
kibanaService.toasts.addSuccess({
title: monitorId ? MONITOR_UPDATED_SUCCESS_LABEL : MONITOR_SUCCESS_LABEL,
toastLifeTimeMs: 3000,
});
}
- }, [data, status, monitorId, loading]);
+ }, [data, status, monitorId, loading, refreshApp, dispatch]);
return { status, loading, isEdit };
};
diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx
index 158061692d475..2acb2b7a35ed7 100644
--- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx
+++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx
@@ -56,6 +56,7 @@ export const OverviewPage: React.FC = () => {
} = useEnablement();
const {
+ loaded: overviewLoaded,
data: { monitors },
pageState,
} = useSelector(selectOverviewState);
@@ -94,7 +95,7 @@ export const OverviewPage: React.FC = () => {
return ;
}
- const noMonitorFound = monitorsLoaded && monitors?.length === 0;
+ const noMonitorFound = monitorsLoaded && overviewLoaded && monitors?.length === 0;
return (
<>
From 0a8c5f5363a32fc6398e9c78b970b0a073e5bbdc Mon Sep 17 00:00:00 2001
From: Christos Nasikas
Date: Tue, 21 Feb 2023 12:07:19 +0200
Subject: [PATCH 027/101] [RAM] Show Cases column on the alerts table (#150963)
## Summary
This PR adds the cases column to the alerts table. Assumptions:
- I will not change the label of the case column. I will do it on
another PR.
- The column will not be part of the default columns. The user has to
add it from the fields.
- If there are multiple cases they will be shown as a comma-separated
list. It will change later to include a "show more" button or similar to
show only the latest case in the column.
- Due to circular dependencies, Cases types and utility functions were
not imported. I duplicate the code. I opened two issues
(https://github.com/elastic/kibana/issues/151648,
https://github.com/elastic/kibana/issues/151649) to create packages that
will contain the case types and utility functions.
Issue: https://github.com/elastic/kibana/issues/146864
### Checklist
Delete any items that are not applicable to this PR.
- [x] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
### For maintainers
- [x] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
## Release notes
Adds the Cases column to the alerts table. The column shows, for each
alert, all cases the alert is attached to.
---
x-pack/plugins/cases/common/index.ts | 8 ++
.../application/components/test_utils.tsx | 36 -----
.../public/application/hooks/constants.ts | 13 ++
.../connector_form.test.tsx | 2 +-
.../connector_form_fields.test.tsx | 7 +-
.../connector_form_fields_global.test.tsx | 45 ++++---
.../create_connector_flyout/index.test.tsx | 2 +-
.../edit_connector_flyout/index.test.tsx | 2 +-
.../alerts_flyout/alerts_flyout.test.tsx | 5 +-
.../alerts_flyout/alerts_flyout.tsx | 5 +-
.../alerts_table/alerts_table.test.tsx | 102 ++++++++++----
.../sections/alerts_table/alerts_table.tsx | 47 +++----
.../alerts_table/alerts_table_state.test.tsx | 119 +++++++++++++----
.../alerts_table/alerts_table_state.tsx | 43 +++++-
.../bulk_actions/bulk_actions.test.tsx | 20 ++-
.../bulk_actions/components/toolbar.tsx | 9 +-
.../sections/alerts_table/cases/cell.test.tsx | 126 ++++++++++++++++++
.../sections/alerts_table/cases/cell.tsx | 62 +++++++++
.../sections/alerts_table/cases/index.mock.ts | 30 +++++
.../cases/use_case_view_navigation.test.ts | 44 ++++++
.../cases/use_case_view_navigation.ts | 39 ++++++
.../alert_lifecycle_status_cell.test.tsx | 83 ++++++++++++
.../cells/alert_lifecycle_status_cell.tsx | 39 ++++++
.../alerts_table/cells/default_cell.test.tsx | 61 +++++++++
.../alerts_table/cells/default_cell.tsx | 23 ++++
.../alerts_table/cells/index.test.tsx | 56 ++++++++
.../sections/alerts_table/cells/index.tsx | 34 +++++
.../sections/alerts_table/hooks/api.test.ts | 41 ++++++
.../sections/alerts_table/hooks/api.ts | 52 ++++++++
.../alerts_table/hooks/use_bulk_actions.ts | 4 +-
.../hooks/use_bulk_get_cases.test.tsx | 73 ++++++++++
.../alerts_table/hooks/use_bulk_get_cases.tsx | 58 ++++++++
.../alerts_table/hooks/use_fetch_alerts.tsx | 11 +-
.../use_fetch_browser_fields_capabilities.tsx | 4 +-
.../sections/alerts_table/query_client.ts | 10 ++
.../toolbar/toolbar_visibility.tsx | 5 +-
.../sections/alerts_table/types.ts | 23 +++-
.../application/sections/test_utils.tsx | 76 +++++++++++
.../triggers_actions_ui/public/types.ts | 11 +-
.../plugins/triggers_actions_ui/tsconfig.json | 1 +
40 files changed, 1254 insertions(+), 177 deletions(-)
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.test.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/index.mock.ts
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.test.ts
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.ts
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.test.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.test.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.test.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.test.ts
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.ts
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/query_client.ts
create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx
diff --git a/x-pack/plugins/cases/common/index.ts b/x-pack/plugins/cases/common/index.ts
index 489ee28a26cd6..8ca2c23c1eb8d 100644
--- a/x-pack/plugins/cases/common/index.ts
+++ b/x-pack/plugins/cases/common/index.ts
@@ -16,6 +16,7 @@
// See: https://docs.elastic.dev/kibana-dev-docs/key-concepts/platform-intro#public-plugin-api
export {
+ APP_ID,
CASES_URL,
SECURITY_SOLUTION_OWNER,
OBSERVABILITY_OWNER,
@@ -25,6 +26,7 @@ export {
PUSH_CASES_CAPABILITY,
READ_CASES_CAPABILITY,
UPDATE_CASES_CAPABILITY,
+ INTERNAL_BULK_GET_CASES_URL,
} from './constants';
export {
@@ -35,6 +37,12 @@ export {
ExternalReferenceStorageType,
} from './api';
+export type {
+ CaseResponse,
+ CasesBulkGetRequestCertainFields,
+ CasesBulkGetResponseCertainFields,
+} from './api';
+
export type {
Case,
Ecs,
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/test_utils.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/test_utils.tsx
index 39cff673908bd..e4ed6e02e2ac0 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/components/test_utils.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/components/test_utils.tsx
@@ -6,17 +6,11 @@
*/
import React, { useCallback } from 'react';
-import { of } from 'rxjs';
import { I18nProvider } from '@kbn/i18n-react';
import { EuiButton } from '@elastic/eui';
import { Form, useForm, FormData } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib';
-import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
-import { render as reactRender, RenderOptions, RenderResult } from '@testing-library/react';
-import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
import { ConnectorServices } from '../../types';
-import { TriggersAndActionsUiServices } from '../..';
-import { createStartServicesMock } from '../../common/lib/kibana/kibana_react.mock';
import { ConnectorProvider } from '../context/connector_context';
interface FormTestProviderProps {
@@ -54,33 +48,3 @@ const FormTestProviderComponent: React.FC = ({
FormTestProviderComponent.displayName = 'FormTestProvider';
export const FormTestProvider = React.memo(FormTestProviderComponent);
-
-type UiRender = (ui: React.ReactElement, options?: RenderOptions) => RenderResult;
-export interface AppMockRenderer {
- render: UiRender;
- coreStart: TriggersAndActionsUiServices;
-}
-
-export const createAppMockRenderer = (): AppMockRenderer => {
- const services = createStartServicesMock();
- const theme$ = of({ darkMode: false });
-
- const AppWrapper: React.FC<{ children: React.ReactElement }> = ({ children }) => (
-
-
- {children}
-
-
- );
- AppWrapper.displayName = 'AppWrapper';
- const render: UiRender = (ui, options) => {
- return reactRender(ui, {
- wrapper: AppWrapper,
- ...options,
- });
- };
- return {
- coreStart: services,
- render,
- };
-};
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts
new file mode 100644
index 0000000000000..90a0ba762937c
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts
@@ -0,0 +1,13 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+export const triggersActionsUiQueriesKeys = {
+ all: ['triggersActionsUi'] as const,
+ alertsTable: () => [...triggersActionsUiQueriesKeys.all, 'alertsTable'] as const,
+ cases: () => [...triggersActionsUiQueriesKeys.alertsTable(), 'cases'] as const,
+ casesBulkGet: () => [...triggersActionsUiQueriesKeys.cases(), 'bulkGet'] as const,
+};
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form.test.tsx
index 3f208b1fda39c..95e7b0c85ab55 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form.test.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form.test.tsx
@@ -6,12 +6,12 @@
*/
import React, { lazy } from 'react';
-import { AppMockRenderer, createAppMockRenderer } from '../../components/test_utils';
import { ConnectorForm } from './connector_form';
import { actionTypeRegistryMock } from '../../action_type_registry.mock';
import userEvent from '@testing-library/user-event';
import { waitFor } from '@testing-library/dom';
import { act } from '@testing-library/react';
+import { AppMockRenderer, createAppMockRenderer } from '../test_utils';
describe('ConnectorForm', () => {
let appMockRenderer: AppMockRenderer;
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields.test.tsx
index dd99bbdbabed5..c2a6a86bb446b 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields.test.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields.test.tsx
@@ -7,14 +7,11 @@
import React, { lazy } from 'react';
import { coreMock } from '@kbn/core/public/mocks';
-import {
- AppMockRenderer,
- createAppMockRenderer,
- FormTestProvider,
-} from '../../components/test_utils';
+import { FormTestProvider } from '../../components/test_utils';
import { ConnectorFormFields } from './connector_form_fields';
import { actionTypeRegistryMock } from '../../action_type_registry.mock';
import { waitFor } from '@testing-library/dom';
+import { AppMockRenderer, createAppMockRenderer } from '../test_utils';
describe('ConnectorFormFields', () => {
let appMockRenderer: AppMockRenderer;
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields_global.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields_global.test.tsx
index 04cbad726ead7..904244135df7e 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields_global.test.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields_global.test.tsx
@@ -7,7 +7,7 @@
import React from 'react';
import userEvent from '@testing-library/user-event';
-import { render, act } from '@testing-library/react';
+import { render, screen, waitFor } from '@testing-library/react';
import { FormTestProvider } from '../../components/test_utils';
import { ConnectorFormFieldsGlobal } from './connector_form_fields_global';
@@ -25,31 +25,31 @@ describe('ConnectorFormFieldsGlobal', () => {
});
it('submits correctly', async () => {
- const { getByTestId } = render(
+ render(
);
- expect(getByTestId('nameInput')).toBeInTheDocument();
+ expect(screen.getByTestId('nameInput')).toBeInTheDocument();
- await act(async () => {
- userEvent.click(getByTestId('form-test-provide-submit'));
- });
+ userEvent.click(screen.getByTestId('form-test-provide-submit'));
- expect(onSubmit).toHaveBeenCalledWith({
- data: {
- actionTypeId: '.test',
- id: 'test-id',
- isDeprecated: 'false',
- name: 'My test connector',
- },
- isValid: true,
+ await waitFor(() => {
+ expect(onSubmit).toHaveBeenCalledWith({
+ data: {
+ actionTypeId: '.test',
+ id: 'test-id',
+ isDeprecated: 'false',
+ name: 'My test connector',
+ },
+ isValid: true,
+ });
});
});
it('validates the name correctly', async () => {
- const { getByTestId, getByText } = render(
+ render(
/**
* By removing the default value we initiate the form
* with an empty state. Submitting the form
@@ -61,14 +61,15 @@ describe('ConnectorFormFieldsGlobal', () => {
);
- await act(async () => {
- userEvent.click(getByTestId('form-test-provide-submit'));
- });
+ userEvent.click(screen.getByTestId('form-test-provide-submit'));
+
+ expect(await screen.findByText('Name is required.')).toBeInTheDocument();
- expect(getByText('Name is required.')).toBeInTheDocument();
- expect(onSubmit).toHaveBeenCalledWith({
- data: {},
- isValid: false,
+ await waitFor(() => {
+ expect(onSubmit).toHaveBeenCalledWith({
+ data: {},
+ isValid: false,
+ });
});
});
});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/create_connector_flyout/index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/create_connector_flyout/index.test.tsx
index 6256ee29aee40..9cc4603025ff3 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/create_connector_flyout/index.test.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/create_connector_flyout/index.test.tsx
@@ -11,9 +11,9 @@ import { actionTypeRegistryMock } from '../../../action_type_registry.mock';
import userEvent from '@testing-library/user-event';
import { waitFor } from '@testing-library/dom';
import { act } from '@testing-library/react';
-import { AppMockRenderer, createAppMockRenderer } from '../../../components/test_utils';
import CreateConnectorFlyout from '.';
import { betaBadgeProps } from '../beta_badge_props';
+import { AppMockRenderer, createAppMockRenderer } from '../../test_utils';
jest.mock('../../../lib/action_connector_api', () => ({
...(jest.requireActual('../../../lib/action_connector_api') as any),
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx
index c2e25d9fe06a6..e13465b356f8e 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx
@@ -11,10 +11,10 @@ import { actionTypeRegistryMock } from '../../../action_type_registry.mock';
import userEvent from '@testing-library/user-event';
import { waitFor } from '@testing-library/dom';
import { act } from '@testing-library/react';
-import { AppMockRenderer, createAppMockRenderer } from '../../../components/test_utils';
import EditConnectorFlyout from '.';
import { ActionConnector, EditConnectorTabs, GenericValidationResult } from '../../../../types';
import { betaBadgeProps } from '../beta_badge_props';
+import { AppMockRenderer, createAppMockRenderer } from '../../test_utils';
const updateConnectorResponse = {
connector_type_id: 'test',
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.test.tsx
index ce5444c05f6e7..c40bfbf47f4a8 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.test.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.test.tsx
@@ -6,10 +6,9 @@
*/
import React from 'react';
import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers';
-import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy';
import { act } from 'react-dom/test-utils';
import { AlertsFlyout } from './alerts_flyout';
-import { AlertsField } from '../../../../types';
+import { Alert, AlertsField } from '../../../../types';
const onClose = jest.fn();
const onPaginate = jest.fn();
@@ -19,7 +18,7 @@ const props = {
[AlertsField.reason]: ['two'],
_id: '0123456789',
_index: '.alerts-default',
- } as unknown as EcsFieldsResponse,
+ } as unknown as Alert,
alertsTableConfiguration: {
id: 'test',
casesFeatureId: 'testCases',
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.tsx
index 3ddefe1c4cf68..92c4d107715e1 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.tsx
@@ -16,8 +16,7 @@ import {
EuiProgress,
EuiFlyoutSize,
} from '@elastic/eui';
-import type { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy';
-import { AlertsTableConfigurationRegistry } from '../../../../types';
+import type { Alert, AlertsTableConfigurationRegistry } from '../../../../types';
const AlertsFlyoutHeader = lazy(() => import('./alerts_flyout_header'));
const PAGINATION_LABEL = i18n.translate(
@@ -28,7 +27,7 @@ const PAGINATION_LABEL = i18n.translate(
);
interface AlertsFlyoutProps {
- alert: EcsFieldsResponse;
+ alert: Alert;
alertsTableConfiguration: AlertsTableConfigurationRegistry;
flyoutIndex: number;
flyoutSize?: EuiFlyoutSize;
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx
index 2f61c8d51996f..db7ff78290afb 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx
@@ -4,19 +4,25 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import React, { useReducer } from 'react';
+import React, { useMemo, useReducer } from 'react';
import { fireEvent, render, screen, within } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl';
-import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy';
-import { ALERT_RULE_NAME, ALERT_REASON, ALERT_FLAPPING, ALERT_STATUS } from '@kbn/rule-data-utils';
+import {
+ ALERT_RULE_NAME,
+ ALERT_REASON,
+ ALERT_FLAPPING,
+ ALERT_STATUS,
+ ALERT_CASE_IDS,
+} from '@kbn/rule-data-utils';
import { AlertsTable } from './alerts_table';
-import { AlertsTableProps, BulkActionsState, RowSelectionState } from '../../../types';
+import type { Alerts, AlertsTableProps, BulkActionsState, RowSelectionState } from '../../../types';
import { EuiButtonIcon, EuiFlexItem } from '@elastic/eui';
-import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
import { BulkActionsContext } from './bulk_actions/context';
import { bulkActionsReducer } from './bulk_actions/reducer';
+import { getCasesMockMap } from './cases/index.mock';
+import { createAppMockRenderer } from '../test_utils';
jest.mock('@kbn/data-plugin/public');
jest.mock('@kbn/kibana-react-plugin/public/ui_settings/use_ui_setting', () => ({
@@ -36,6 +42,10 @@ const columns = [
id: ALERT_STATUS,
displayAsText: 'Alert status',
},
+ {
+ id: ALERT_CASE_IDS,
+ displayAsText: 'Cases',
+ },
];
const alerts = [
@@ -44,12 +54,14 @@ const alerts = [
[ALERT_REASON]: ['two'],
[ALERT_STATUS]: ['active'],
[ALERT_FLAPPING]: [true],
+ [ALERT_CASE_IDS]: ['test-id'],
},
{
[ALERT_RULE_NAME]: ['three'],
[ALERT_REASON]: ['four'],
[ALERT_STATUS]: ['active'],
[ALERT_FLAPPING]: [false],
+ [ALERT_CASE_IDS]: ['test-id-2'],
},
{
[ALERT_RULE_NAME]: ['five'],
@@ -63,7 +75,7 @@ const alerts = [
[ALERT_STATUS]: ['recovered'],
[ALERT_FLAPPING]: [false],
},
-] as unknown as EcsFieldsResponse[];
+] as unknown as Alerts;
describe('AlertsTable', () => {
const fetchAlertsData = {
@@ -109,8 +121,11 @@ describe('AlertsTable', () => {
],
};
+ const casesMap = getCasesMockMap();
+
const tableProps = {
alertsTableConfiguration,
+ casesData: { cases: casesMap, isLoading: false },
columns,
bulkActions: [],
deletedEventIds: [],
@@ -139,26 +154,29 @@ describe('AlertsTable', () => {
rowCount: 2,
};
- const AlertsTableWithLocale: React.FunctionComponent<
+ const AlertsTableWithProviders: React.FunctionComponent<
AlertsTableProps & { initialBulkActionsState?: BulkActionsState }
> = (props) => {
+ const renderer = useMemo(() => createAppMockRenderer(), []);
+ const AppWrapper = renderer.AppWrapper;
+
const initialBulkActionsState = useReducer(
bulkActionsReducer,
props.initialBulkActionsState || defaultBulkActionsState
);
return (
-
+
-
+
);
};
describe('Alerts table UI', () => {
it('should support sorting', async () => {
- const renderResult = render();
+ const renderResult = render();
userEvent.click(renderResult.container.querySelector('.euiDataGridHeaderCell__button')!);
await waitForEuiPopoverOpen();
userEvent.click(renderResult.getByTestId(`dataGridHeaderCellActionGroup-${columns[0].id}`));
@@ -169,18 +187,18 @@ describe('AlertsTable', () => {
});
it('should support pagination', async () => {
- const renderResult = render();
+ const renderResult = render();
userEvent.click(renderResult.getByTestId('pagination-button-1'));
expect(fetchAlertsData.onPageChange).toHaveBeenCalledWith({ pageIndex: 1, pageSize: 1 });
});
it('should show when it was updated', () => {
- const { getByTestId } = render();
+ const { getByTestId } = render();
expect(getByTestId('toolbar-updated-at')).not.toBe(null);
});
it('should show alerts count', () => {
- const { getByTestId } = render();
+ const { getByTestId } = render();
expect(getByTestId('toolbar-alerts-count')).not.toBe(null);
});
@@ -195,7 +213,7 @@ describe('AlertsTable', () => {
},
};
- const { queryAllByTestId } = render();
+ const { queryAllByTestId } = render();
expect(queryAllByTestId('alertLifecycleStatusBadge')[0].textContent).toEqual('Flapping');
expect(queryAllByTestId('alertLifecycleStatusBadge')[1].textContent).toEqual('Active');
expect(queryAllByTestId('alertLifecycleStatusBadge')[2].textContent).toEqual('Recovered');
@@ -204,7 +222,7 @@ describe('AlertsTable', () => {
describe('leading control columns', () => {
it('should return at least the flyout action control', async () => {
- const wrapper = render();
+ const wrapper = render();
expect(wrapper.getByTestId('expandColumnHeaderLabel').textContent).toBe('Actions');
});
@@ -220,7 +238,7 @@ describe('AlertsTable', () => {
},
],
};
- const wrapper = render();
+ const wrapper = render();
expect(wrapper.queryByTestId('testHeader')).not.toBe(null);
expect(wrapper.queryByTestId('testCell')).not.toBe(null);
});
@@ -265,7 +283,7 @@ describe('AlertsTable', () => {
},
};
- const { queryByTestId } = render();
+ const { queryByTestId } = render();
expect(queryByTestId('testActionColumn')).not.toBe(null);
expect(queryByTestId('testActionColumn2')).not.toBe(null);
expect(queryByTestId('expandColumnCellOpenFlyoutButton-0')).not.toBe(null);
@@ -310,7 +328,7 @@ describe('AlertsTable', () => {
},
};
- const { queryByTestId } = render();
+ const { queryByTestId } = render();
expect(queryByTestId('testActionColumn')).not.toBe(null);
expect(queryByTestId('testActionColumn2')).not.toBe(null);
expect(queryByTestId('expandColumnCellOpenFlyoutButton-0')).toBe(null);
@@ -322,7 +340,7 @@ describe('AlertsTable', () => {
showExpandToDetails: false,
};
- const { queryByTestId } = render();
+ const { queryByTestId } = render();
expect(queryByTestId('expandColumnHeaderLabel')).toBe(null);
expect(queryByTestId('expandColumnCellOpenFlyoutButton')).toBe(null);
});
@@ -361,7 +379,7 @@ describe('AlertsTable', () => {
});
it('should show the row loader when callback triggered', async () => {
- render();
+ render();
fireEvent.click((await screen.findAllByTestId('testActionColumn'))[0]);
// the callback given to our clients to run when they want to update the loading state
@@ -375,8 +393,8 @@ describe('AlertsTable', () => {
expect(within(selectedOptions[0]).queryByRole('checkbox')).not.toBeInTheDocument();
// second row, first column
- expect(within(selectedOptions[5]).queryByLabelText('Loading')).not.toBeInTheDocument();
- expect(within(selectedOptions[5]).getByRole('checkbox')).toBeDefined();
+ expect(within(selectedOptions[6]).queryByLabelText('Loading')).not.toBeInTheDocument();
+ expect(within(selectedOptions[6]).getByRole('checkbox')).toBeDefined();
});
it('should show the row loader when callback triggered with false', async () => {
@@ -386,7 +404,7 @@ describe('AlertsTable', () => {
};
render(
-
@@ -400,5 +418,43 @@ describe('AlertsTable', () => {
});
});
});
+
+ describe('cases column', () => {
+ const props = {
+ ...tableProps,
+ pageSize: alerts.length,
+ };
+
+ it('should show the cases column', async () => {
+ render();
+ expect(await screen.findByText('Cases')).toBeInTheDocument();
+ });
+
+ it('should show the cases titles correctly', async () => {
+ render();
+ expect(await screen.findByText('Test case')).toBeInTheDocument();
+ expect(await screen.findByText('Test case 2')).toBeInTheDocument();
+ });
+
+ it('show loading skeleton if it loads cases', async () => {
+ render(
+
+ );
+
+ expect((await screen.findAllByTestId('cases-cell-loading')).length).toBe(2);
+ });
+
+ it('shows the cases tooltip', async () => {
+ render();
+ expect(await screen.findByText('Test case')).toBeInTheDocument();
+
+ userEvent.hover(screen.getByText('Test case'));
+
+ expect(await screen.findByTestId('cases-components-tooltip')).toBeInTheDocument();
+ });
+ });
});
});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx
index 6ffc9fa220ba3..baf451ea5e19e 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx
@@ -5,8 +5,7 @@
* 2.0.
*/
-import { ALERT_UUID, ALERT_STATUS, ALERT_FLAPPING } from '@kbn/rule-data-utils';
-import { AlertStatus } from '@kbn/rule-data-utils';
+import { ALERT_UUID } from '@kbn/rule-data-utils';
import React, { useState, Suspense, lazy, useCallback, useMemo, useEffect } from 'react';
import {
EuiDataGrid,
@@ -24,11 +23,12 @@ import {
ALERTS_TABLE_CONTROL_COLUMNS_ACTIONS_LABEL,
ALERTS_TABLE_CONTROL_COLUMNS_VIEW_DETAILS_LABEL,
} from './translations';
-import { AlertLifecycleStatusBadge } from '../../components/alert_lifecycle_status_badge';
import './alerts_table.scss';
import { getToolbarVisibility } from './toolbar';
import { InspectButtonContainer } from './toolbar/components/inspect';
+import { SystemCellId } from './types';
+import { SystemCellFactory, systemCells } from './cells';
export const ACTIVE_ROW_CLASS = 'alertsTableActiveRow';
@@ -53,24 +53,8 @@ const basicRenderCellValue = ({
return <>{value}>;
};
-const renderAlertLifecycleStatus = ({
- data,
- columnId,
-}: {
- data: Array<{ field: string; value: string[] }>;
- columnId: string;
-}) => {
- const alertStatus = data.find((d) => d.field === ALERT_STATUS)?.value ?? [];
- if (Array.isArray(alertStatus) && alertStatus.length) {
- const flapping = data.find((d) => d.field === ALERT_FLAPPING)?.value ?? [];
- return (
-
- );
- }
- return basicRenderCellValue({ data, columnId });
+const isSystemCell = (columnId: string): columnId is SystemCellId => {
+ return systemCells.includes(columnId as SystemCellId);
};
const AlertsTable: React.FunctionComponent = (props: AlertsTableProps) => {
@@ -86,6 +70,8 @@ const AlertsTable: React.FunctionComponent = (props: AlertsTab
sort: sortingFields,
getInspectQuery,
} = alertsData;
+ const { cases, isLoading: isLoadingCases } = props.casesData;
+
const { sortingColumns, onSort } = useSorting(onSortChange, sortingFields);
const { renderCustomActionsRow, actionsColumnWidth, getSetIsActionLoadingCallback } =
@@ -279,12 +265,19 @@ const AlertsTable: React.FunctionComponent = (props: AlertsTab
Object.entries(alert ?? {}).forEach(([key, value]) => {
data.push({ field: key, value: value as string[] });
});
- if (showAlertStatusWithFlapping && _props.columnId === ALERT_STATUS) {
- return renderAlertLifecycleStatus({
- ..._props,
- data,
- });
+
+ if (isSystemCell(_props.columnId)) {
+ return (
+
+ );
}
+
return renderCellValue({
..._props,
data,
@@ -296,7 +289,9 @@ const AlertsTable: React.FunctionComponent = (props: AlertsTab
},
[
alerts,
+ cases,
isLoading,
+ isLoadingCases,
pagination.pageIndex,
pagination.pageSize,
renderCellValue,
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx
index ad925533a5965..9af3f57792e86 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx
@@ -5,14 +5,15 @@
* 2.0.
*/
import React from 'react';
+import { BehaviorSubject } from 'rxjs';
import userEvent from '@testing-library/user-event';
import { get } from 'lodash';
import { fireEvent, render, waitFor, screen } from '@testing-library/react';
-import { AlertConsumers } from '@kbn/rule-data-utils';
-import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy';
+import { AlertConsumers, ALERT_CASE_IDS } from '@kbn/rule-data-utils';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import {
+ Alerts,
AlertsField,
AlertsTableConfigurationRegistry,
AlertsTableFlyoutBaseProps,
@@ -22,13 +23,20 @@ import { TypeRegistry } from '../../type_registry';
import AlertsTableState, { AlertsTableStateProps } from './alerts_table_state';
import { useFetchAlerts } from './hooks/use_fetch_alerts';
import { useFetchBrowserFieldCapabilities } from './hooks/use_fetch_browser_fields_capabilities';
+import { useBulkGetCases } from './hooks/use_bulk_get_cases';
import { DefaultSort } from './hooks';
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
import { BrowserFields } from '@kbn/rule-registry-plugin/common';
+import { getCasesMockMap } from './cases/index.mock';
jest.mock('./hooks/use_fetch_alerts');
jest.mock('./hooks/use_fetch_browser_fields_capabilities');
+jest.mock('./hooks/use_bulk_get_cases');
+
jest.mock('@kbn/kibana-utils-plugin/public');
+
+const mockCurrentAppId$ = new BehaviorSubject('testAppId');
+
jest.mock('@kbn/kibana-react-plugin/public', () => ({
useKibana: () => ({
services: {
@@ -42,6 +50,7 @@ jest.mock('@kbn/kibana-react-plugin/public', () => ({
push_cases: true,
},
},
+ currentAppId$: mockCurrentAppId$,
},
cases: {
ui: {
@@ -76,6 +85,10 @@ const columns = [
id: AlertsField.reason,
displayAsText: 'Reason',
},
+ {
+ id: ALERT_CASE_IDS,
+ displayAsText: 'Cases',
+ },
];
const alerts = [
@@ -83,13 +96,15 @@ const alerts = [
[AlertsField.name]: ['one'],
[AlertsField.reason]: ['two'],
[AlertsField.uuid]: ['1047d115-670d-469e-af7a-86fdd2b2f814'],
+ [ALERT_CASE_IDS]: ['test-id'],
},
{
[AlertsField.name]: ['three'],
[AlertsField.reason]: ['four'],
[AlertsField.uuid]: ['bf5f6d63-5afd-48e0-baf6-f28c2b68db46'],
+ [ALERT_CASE_IDS]: ['test-id-2'],
},
-] as unknown as EcsFieldsResponse[];
+] as unknown as Alerts;
const FlyoutBody = ({ alert }: AlertsTableFlyoutBaseProps) => (
@@ -104,6 +119,7 @@ const FlyoutBody = ({ alert }: AlertsTableFlyoutBaseProps) => (
const hasMock = jest.fn().mockImplementation((plugin: string) => {
return plugin === PLUGIN_ID;
});
+
const getMock = jest.fn().mockImplementation((plugin: string) => {
if (plugin === PLUGIN_ID) {
return {
@@ -134,22 +150,24 @@ storageMock.mockImplementation(() => {
return { get: jest.fn(), set: jest.fn() };
});
-const refecthMock = jest.fn();
+const refetchMock = jest.fn();
const hookUseFetchAlerts = useFetchAlerts as jest.Mock;
-hookUseFetchAlerts.mockImplementation(() => [
- false,
- {
- alerts,
- isInitializing: false,
- getInspectQuery: jest.fn(),
- refetch: refecthMock,
- totalAlerts: alerts.length,
- },
-]);
+const fetchAlertsResponse = {
+ alerts,
+ isInitializing: false,
+ getInspectQuery: jest.fn(),
+ refetch: refetchMock,
+ totalAlerts: alerts.length,
+};
+
+hookUseFetchAlerts.mockReturnValue([false, fetchAlertsResponse]);
const hookUseFetchBrowserFieldCapabilities = useFetchBrowserFieldCapabilities as jest.Mock;
hookUseFetchBrowserFieldCapabilities.mockImplementation(() => [false, {}]);
+const casesMap = getCasesMockMap();
+const useBulkGetCasesMock = useBulkGetCases as jest.Mock;
+
const AlertsTableWithLocale: React.FunctionComponent = (props) => (
@@ -176,10 +194,12 @@ describe('AlertsTableState', () => {
...customProps,
};
});
+
const alertsTableConfigurationRegistryWithPersistentControlsMock = {
has: hasMock,
get: getMockWithUsePersistentControls,
} as unknown as TypeRegistry;
+
return {
...tableProps,
alertsTableConfigurationRegistry: alertsTableConfigurationRegistryWithPersistentControlsMock,
@@ -187,9 +207,65 @@ describe('AlertsTableState', () => {
};
beforeEach(() => {
- hasMock.mockClear();
- getMock.mockClear();
- refecthMock.mockClear();
+ jest.clearAllMocks();
+
+ useBulkGetCasesMock.mockReturnValue({ data: casesMap, isLoading: false });
+ });
+
+ describe('cases column', () => {
+ it('should show the cases column', async () => {
+ render();
+ expect(await screen.findByText('Cases')).toBeInTheDocument();
+ });
+
+ it('should show the cases titles correctly', async () => {
+ render();
+ expect(await screen.findByText('Test case')).toBeInTheDocument();
+ expect(await screen.findByText('Test case 2')).toBeInTheDocument();
+ });
+
+ it('should pass the correct case ids to useBulkGetCases', async () => {
+ render();
+
+ await waitFor(() => {
+ expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id', 'test-id-2']);
+ });
+ });
+
+ it('remove duplicated case ids', async () => {
+ hookUseFetchAlerts.mockReturnValue([
+ false,
+ {
+ ...fetchAlertsResponse,
+ alerts: [...fetchAlertsResponse.alerts, ...fetchAlertsResponse.alerts],
+ },
+ ]);
+
+ render();
+
+ await waitFor(() => {
+ expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id', 'test-id-2']);
+ });
+ });
+
+ it('skips alerts with empty case ids', async () => {
+ hookUseFetchAlerts.mockReturnValue([
+ false,
+ {
+ ...fetchAlertsResponse,
+ alerts: [
+ { ...fetchAlertsResponse.alerts[0], 'kibana.alert.case_ids': [] },
+ fetchAlertsResponse.alerts[1],
+ ],
+ },
+ ]);
+
+ render();
+
+ await waitFor(() => {
+ expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id-2']);
+ });
+ });
});
describe('Alerts table configuration registry', () => {
@@ -207,9 +283,6 @@ describe('AlertsTableState', () => {
});
describe('flyout', () => {
- beforeEach(() => {
- hookUseFetchAlerts.mockClear();
- });
it('should show a flyout when selecting an alert', async () => {
const wrapper = render();
userEvent.click(wrapper.queryByTestId('expandColumnCellOpenFlyoutButton-0')!);
@@ -245,6 +318,7 @@ describe('AlertsTableState', () => {
expect(result.length).toBe(1);
hookUseFetchAlerts.mockClear();
+
userEvent.click(wrapper.queryAllByTestId('pagination-button-next')[0]);
expect(hookUseFetchAlerts).toHaveBeenCalledWith(
expect.objectContaining({
@@ -387,15 +461,14 @@ describe('AlertsTableState', () => {
describe('empty state', () => {
beforeEach(() => {
- refecthMock.mockClear();
- hookUseFetchAlerts.mockClear();
+ refetchMock.mockClear();
hookUseFetchAlerts.mockImplementation(() => [
false,
{
alerts: [],
isInitializing: false,
getInspectQuery: jest.fn(),
- refetch: refecthMock,
+ refetch: refetchMock,
totalAlerts: 0,
},
]);
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx
index 1257b1de2c95a..3ce4f1395c3a8 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx
@@ -22,11 +22,14 @@ import type {
QueryDslQueryContainer,
SortCombinations,
} from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
+import { QueryClientProvider } from '@tanstack/react-query';
import { useFetchAlerts } from './hooks/use_fetch_alerts';
import { AlertsTable } from './alerts_table';
import { BulkActionsContext } from './bulk_actions/context';
import { EmptyState } from './empty_state';
import {
+ Alert,
+ Alerts,
AlertsTableConfigurationRegistry,
AlertsTableProps,
BulkActionsReducerAction,
@@ -39,6 +42,8 @@ import { bulkActionsReducer } from './bulk_actions/reducer';
import { useGetUserCasesPermissions } from './hooks/use_get_user_cases_permissions';
import { useColumns } from './hooks/use_columns';
import { InspectButtonContainer } from './toolbar/components/inspect';
+import { alertsTableQueryClient } from './query_client';
+import { useBulkGetCases } from './hooks/use_bulk_get_cases';
const DefaultPagination = {
pageSize: 10,
@@ -89,7 +94,28 @@ const AlertsTableWithBulkActionsContextComponent: React.FunctionComponent<{
const AlertsTableWithBulkActionsContext = React.memo(AlertsTableWithBulkActionsContextComponent);
const EMPTY_FIELDS = [{ field: '*', include_unmapped: true }];
-const AlertsTableState = ({
+type AlertWithCaseIds = Alert & Required>;
+
+const getCaseIdsFromAlerts = (alerts: Alerts): Set =>
+ new Set(
+ alerts
+ .filter(
+ (alert): alert is AlertWithCaseIds =>
+ alert['kibana.alert.case_ids'] != null && alert['kibana.alert.case_ids'].length > 0
+ )
+ .map((alert) => alert['kibana.alert.case_ids'])
+ .flat()
+ );
+
+const AlertsTableState = (props: AlertsTableStateProps) => {
+ return (
+
+
+
+ );
+};
+
+const AlertsTableStateWithQueryProvider = ({
alertsTableConfigurationRegistry,
configurationId,
id,
@@ -100,10 +126,11 @@ const AlertsTableState = ({
showExpandToDetails,
showAlertStatusWithFlapping,
}: AlertsTableStateProps) => {
- const { cases } = useKibana<{ cases: CaseUi }>().services;
+ const { cases: casesService } = useKibana<{ cases: CaseUi }>().services;
const hasAlertsTableConfiguration =
alertsTableConfigurationRegistry?.has(configurationId) ?? false;
+
const alertsTableConfiguration = hasAlertsTableConfiguration
? alertsTableConfigurationRegistry.get(configurationId)
: EmptyConfiguration;
@@ -178,6 +205,9 @@ const AlertsTableState = ({
skip: false,
});
+ const caseIds = useMemo(() => getCaseIdsFromAlerts(alerts), [alerts]);
+ const { data: cases, isLoading: isLoadingCases } = useBulkGetCases(Array.from(caseIds.values()));
+
const onPageChange = useCallback((_pagination: RuleRegistrySearchRequestPagination) => {
setPagination(_pagination);
}, []);
@@ -240,6 +270,7 @@ const AlertsTableState = ({
const tableProps = useMemo(
() => ({
alertsTableConfiguration,
+ casesData: { cases: cases ?? new Map(), isLoading: isLoadingCases },
columns,
bulkActions: [],
deletedEventIds: [],
@@ -266,6 +297,8 @@ const AlertsTableState = ({
}),
[
alertsTableConfiguration,
+ cases,
+ isLoadingCases,
columns,
flyoutSize,
pagination.pageSize,
@@ -285,7 +318,7 @@ const AlertsTableState = ({
]
);
- const CasesContext = cases?.ui.getCasesContext();
+ const CasesContext = casesService?.ui.getCasesContext();
const userCasesPermissions = useGetUserCasesPermissions(alertsTableConfiguration.casesFeatureId);
return hasAlertsTableConfiguration ? (
@@ -302,7 +335,7 @@ const AlertsTableState = ({
{(isLoading || isBrowserFieldDataLoading) && (
)}
- {alertsCount !== 0 && CasesContext && cases && (
+ {alertsCount !== 0 && CasesContext && casesService && (
)}
- {alertsCount !== 0 && (!CasesContext || !cases) && (
+ {alertsCount !== 0 && (!CasesContext || !casesService) && (
({
@@ -53,7 +55,7 @@ describe('AlertsTable.BulkActions', () => {
_id: 'alert1',
_index: 'idx1',
},
- ] as unknown as EcsFieldsResponse[];
+ ] as unknown as Alerts;
const alertsData = {
activePage: 0,
@@ -85,8 +87,11 @@ describe('AlertsTable.BulkActions', () => {
}),
};
+ const casesMap = getCasesMockMap();
+
const tableProps = {
alertsTableConfiguration,
+ casesData: { cases: casesMap, isLoading: false },
columns,
deletedEventIds: [],
disabledCellActions: [],
@@ -134,17 +139,20 @@ describe('AlertsTable.BulkActions', () => {
const AlertsTableWithBulkActionsContext: React.FunctionComponent<
AlertsTableProps & { initialBulkActionsState?: BulkActionsState }
> = (props) => {
+ const renderer = useMemo(() => createAppMockRenderer(), []);
+ const AppWrapper = renderer.AppWrapper;
+
const initialBulkActionsState = useReducer(
bulkActionsReducer,
props.initialBulkActionsState || defaultBulkActionsState
);
return (
-
+
-
+
);
};
@@ -237,7 +245,7 @@ describe('AlertsTable.BulkActions', () => {
[AlertsField.reason]: ['six'],
_id: 'alert2',
},
- ] as unknown as EcsFieldsResponse[];
+ ] as unknown as Alerts;
const props = {
...tablePropsWithBulkActions,
alerts: secondPageAlerts,
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/components/toolbar.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/components/toolbar.tsx
index 33dbf73e20587..4203f7e73c180 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/components/toolbar.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/components/toolbar.tsx
@@ -9,16 +9,15 @@ import { EuiPopover, EuiButtonEmpty, EuiContextMenuPanel, EuiContextMenuItem } f
import numeral from '@elastic/numeral';
import React, { useState, useCallback, useMemo, useContext, useEffect } from 'react';
import { useUiSetting$ } from '@kbn/kibana-react-plugin/public';
-import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy';
import { ALERT_RULE_NAME, ALERT_RULE_UUID } from '@kbn/rule-data-utils';
-import { BulkActionsConfig, BulkActionsVerbs, RowSelection } from '../../../../../types';
+import { Alerts, BulkActionsConfig, BulkActionsVerbs, RowSelection } from '../../../../../types';
import * as i18n from '../translations';
import { BulkActionsContext } from '../context';
interface BulkActionsProps {
totalItems: number;
items: BulkActionsConfig[];
- alerts: EcsFieldsResponse[];
+ alerts: Alerts;
setIsBulkActionsLoading: (loading: boolean) => void;
}
@@ -40,7 +39,7 @@ const DEFAULT_NUMBER_FORMAT = 'format:number:defaultPattern';
const containerStyles = { display: 'inline-block', position: 'relative' } as const;
const selectedIdsToTimelineItemMapper = (
- alerts: EcsFieldsResponse[],
+ alerts: Alerts,
rowSelection: RowSelection
): TimelineItem[] => {
return Array.from(rowSelection.keys()).map((rowIndex: number) => {
@@ -62,7 +61,7 @@ const selectedIdsToTimelineItemMapper = (
const useBulkActionsToMenuItemMapper = (
items: BulkActionsConfig[],
- alerts: EcsFieldsResponse[],
+ alerts: Alerts,
setIsBulkActionsLoading: (loading: boolean) => void
) => {
const [{ isAllSelected, rowSelection }] = useContext(BulkActionsContext);
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.test.tsx
new file mode 100644
index 0000000000000..05f7194ebfce3
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.test.tsx
@@ -0,0 +1,126 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+import { screen } from '@testing-library/react';
+import { CasesCell } from './cell';
+import { CellComponentProps } from '../types';
+import { Alert } from '../../../../types';
+import { getCasesMockMap } from './index.mock';
+import userEvent from '@testing-library/user-event';
+import { AppMockRenderer, createAppMockRenderer } from '../../test_utils';
+import { useCaseViewNavigation } from './use_case_view_navigation';
+
+jest.mock('../../../../common/lib/kibana');
+jest.mock('./use_case_view_navigation');
+
+const useCaseViewNavigationMock = useCaseViewNavigation as jest.Mock;
+
+describe('CasesCell', () => {
+ const casesMap = getCasesMockMap();
+ const alert = {
+ _id: 'alert-id',
+ _index: 'alert-index',
+ 'kibana.alert.case_ids': ['test-id'],
+ } as Alert;
+
+ const props: CellComponentProps = {
+ isLoading: false,
+ alert,
+ cases: casesMap,
+ columnId: 'kibana.alert.case_ids',
+ showAlertStatusWithFlapping: false,
+ };
+
+ let appMockRender: AppMockRenderer;
+
+ const navigateToCaseView = jest.fn();
+ useCaseViewNavigationMock.mockReturnValue({ navigateToCaseView });
+
+ beforeEach(() => {
+ appMockRender = createAppMockRenderer();
+ });
+
+ it('renders the cases cell', async () => {
+ appMockRender.render();
+ expect(screen.getByText('Test case')).toBeInTheDocument();
+ });
+
+ it('renders the loading skeleton', async () => {
+ appMockRender.render();
+ expect(screen.getByTestId('cases-cell-loading')).toBeInTheDocument();
+ });
+
+ it('renders multiple cases correctly', async () => {
+ appMockRender.render(
+
+ );
+
+ expect(screen.getByText('Test case')).toBeInTheDocument();
+ expect(screen.getByText('Test case 2')).toBeInTheDocument();
+ });
+
+ it('does not render a case that it is in the map but not in the alerts data', async () => {
+ appMockRender.render();
+
+ expect(screen.getByText('Test case')).toBeInTheDocument();
+ expect(screen.queryByText('Test case 2')).not.toBeInTheDocument();
+ });
+
+ it('does not show any cases when the alert does not have any case ids', async () => {
+ appMockRender.render(
+
+ );
+
+ expect(screen.queryByText('Test case')).not.toBeInTheDocument();
+ expect(screen.queryByText('Test case 2')).not.toBeInTheDocument();
+ });
+
+ it('does show the default value when the alert does not have any case ids', async () => {
+ appMockRender.render(
+
+ );
+
+ expect(screen.getByText('--')).toBeInTheDocument();
+ });
+
+ it('does not show any cases when the alert has invalid case ids', async () => {
+ appMockRender.render(
+
+ );
+
+ expect(screen.queryByTestId('cases-cell-link')).not.toBeInTheDocument();
+ });
+
+ it('does show the default value when the alert has invalid case ids', async () => {
+ appMockRender.render(
+
+ );
+
+ expect(screen.getByText('--')).toBeInTheDocument();
+ });
+
+ it('shows the cases tooltip', async () => {
+ appMockRender.render();
+ expect(screen.getByText('Test case')).toBeInTheDocument();
+
+ userEvent.hover(screen.getByText('Test case'));
+
+ expect(await screen.findByTestId('cases-components-tooltip')).toBeInTheDocument();
+ });
+
+ it('navigates to the case correctly', async () => {
+ appMockRender.render();
+ expect(screen.getByText('Test case')).toBeInTheDocument();
+
+ userEvent.click(screen.getByText('Test case'));
+ expect(navigateToCaseView).toBeCalledWith({ caseId: 'test-id' });
+ });
+});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx
new file mode 100644
index 0000000000000..5fe9c7033e5d5
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx
@@ -0,0 +1,62 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React, { memo } from 'react';
+import { EuiLink, EuiSkeletonText } from '@elastic/eui';
+import { Tooltip as CaseTooltip } from '@kbn/cases-components';
+import type { CaseTooltipContentProps } from '@kbn/cases-components';
+import { ALERT_CASE_IDS } from '@kbn/rule-data-utils';
+import { CellComponentProps } from '../types';
+import { useCaseViewNavigation } from './use_case_view_navigation';
+import { Case } from '../hooks/api';
+
+const formatCase = (theCase: Case): CaseTooltipContentProps => ({
+ title: theCase.title,
+ description: theCase.description,
+ createdAt: theCase.created_at,
+ createdBy: {
+ username: theCase.created_by.username ?? undefined,
+ fullName: theCase.created_by.full_name ?? undefined,
+ },
+ status: theCase.status,
+ totalComments: theCase.totalComment,
+});
+
+const CasesCellComponent: React.FC = (props) => {
+ const { isLoading, alert, cases } = props;
+ const { navigateToCaseView } = useCaseViewNavigation();
+
+ const caseIds = alert[ALERT_CASE_IDS] ?? [];
+
+ const validCases = caseIds
+ .map((id) => cases.get(id))
+ .filter((theCase): theCase is Case => theCase != null);
+
+ if (validCases.length === 0) {
+ return <>{'--'}>;
+ }
+
+ return (
+
+ {validCases.map((theCase, index) => [
+ index > 0 && index < validCases.length && ', ',
+
+ navigateToCaseView({ caseId: theCase.id })}
+ data-test-subj="cases-cell-link"
+ >
+ {theCase.title}
+
+ ,
+ ])}
+
+ );
+};
+
+CasesCellComponent.displayName = 'CasesCell';
+
+export const CasesCell = memo(CasesCellComponent);
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/index.mock.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/index.mock.ts
new file mode 100644
index 0000000000000..032ede0c80afb
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/index.mock.ts
@@ -0,0 +1,30 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { CaseStatuses } from '@kbn/cases-components';
+import { Case } from '../hooks/api';
+
+export const theCase: Case = {
+ id: 'test-id',
+ created_at: '2023-02-16T18:13:37.058Z',
+ created_by: { full_name: 'Elastic', username: 'elastic', email: 'elastic@elastic.co' },
+ description: 'Test description',
+ status: CaseStatuses.open,
+ title: 'Test case',
+ totalComment: 1,
+ version: 'WzQ3LDFd',
+ owner: 'cases',
+};
+
+export const getCasesMockMap = (): Map => {
+ const casesMap = new Map();
+
+ casesMap.set(theCase.id, theCase);
+ casesMap.set('test-id-2', { ...theCase, id: 'test-id-2', title: 'Test case 2' });
+
+ return casesMap;
+};
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.test.ts
new file mode 100644
index 0000000000000..49cb26dbe9d97
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.test.ts
@@ -0,0 +1,44 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { BehaviorSubject } from 'rxjs';
+import { act, renderHook } from '@testing-library/react-hooks';
+import { useKibana } from '../../../../common/lib/kibana';
+import { AppMockRenderer, createAppMockRenderer } from '../../test_utils';
+import { useCaseViewNavigation } from './use_case_view_navigation';
+
+jest.mock('../../../../common/lib/kibana');
+
+const useKibanaMock = useKibana as jest.Mocked;
+
+describe('useCaseViewNavigation', () => {
+ let appMockRender: AppMockRenderer;
+ const navigateToApp = jest.fn();
+
+ beforeEach(() => {
+ appMockRender = createAppMockRenderer();
+ useKibanaMock().services.application.currentAppId$ = new BehaviorSubject('testAppId');
+ useKibanaMock().services.application.navigateToApp = navigateToApp;
+ });
+
+ it('calls navigateToApp with correct arguments', () => {
+ const { result, waitFor } = renderHook(() => useCaseViewNavigation(), {
+ wrapper: appMockRender.AppWrapper,
+ });
+
+ act(() => {
+ result.current.navigateToCaseView({ caseId: 'test-id' });
+ });
+
+ waitFor(() => {
+ expect(navigateToApp).toHaveBeenCalledWith('testAppId', {
+ deepLinkId: 'cases',
+ path: '/test-id',
+ });
+ });
+ });
+});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.ts
new file mode 100644
index 0000000000000..180b90448c90e
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.ts
@@ -0,0 +1,39 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { generatePath } from 'react-router-dom';
+import useObservable from 'react-use/lib/useObservable';
+import { useCallback } from 'react';
+
+import { useKibana } from '../../../../common/lib/kibana';
+
+type NavigateToCaseView = (pathParams: { caseId: string }) => void;
+
+const CASE_APP_ID = 'cases';
+
+const generateCaseViewPath = (caseId: string): string => {
+ return generatePath('/:caseId', { caseId });
+};
+
+export const useCaseViewNavigation = () => {
+ const {
+ application: { navigateToApp, currentAppId$ },
+ } = useKibana().services;
+
+ const appId = useObservable(currentAppId$);
+
+ const navigateToCaseView = useCallback(
+ (pathParams) =>
+ navigateToApp(appId ?? '', {
+ deepLinkId: CASE_APP_ID,
+ path: generateCaseViewPath(pathParams.caseId),
+ }),
+ [navigateToApp, appId]
+ );
+
+ return { navigateToCaseView };
+};
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.test.tsx
new file mode 100644
index 0000000000000..ca89b01c14548
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.test.tsx
@@ -0,0 +1,83 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+import { screen } from '@testing-library/react';
+import { AlertLifecycleStatusCell } from './alert_lifecycle_status_cell';
+import { CellComponentProps } from '../types';
+import { Alert } from '../../../../types';
+import { AppMockRenderer, createAppMockRenderer } from '../../test_utils';
+import { getCasesMockMap } from '../cases/index.mock';
+
+jest.mock('../../../../common/lib/kibana');
+
+describe('AlertLifecycleStatusCell', () => {
+ const casesMap = getCasesMockMap();
+ const alert = {
+ _id: 'alert-id',
+ _index: 'alert-index',
+ 'kibana.alert.status': ['active'],
+ } as Alert;
+
+ const props: CellComponentProps = {
+ isLoading: false,
+ alert,
+ cases: casesMap,
+ columnId: 'kibana.alert.status',
+ showAlertStatusWithFlapping: true,
+ };
+
+ let appMockRender: AppMockRenderer;
+
+ beforeEach(() => {
+ appMockRender = createAppMockRenderer();
+ });
+
+ it('shows the status', async () => {
+ appMockRender.render();
+ expect(screen.getByText('Active')).toBeInTheDocument();
+ });
+
+ it('does not shows the status if showAlertStatusWithFlapping=false', async () => {
+ appMockRender.render(
+
+ );
+ expect(screen.queryByText('Active')).not.toBeInTheDocument();
+ });
+
+ it('shows the status with flapping', async () => {
+ appMockRender.render(
+
+ );
+ expect(screen.getByText('Flapping')).toBeInTheDocument();
+ });
+
+ it('shows the status with multiple values', async () => {
+ appMockRender.render(
+
+ );
+
+ expect(screen.getByText('Active')).toBeInTheDocument();
+ });
+
+ it('shows the default cell if the status is empty', async () => {
+ appMockRender.render(
+
+ );
+
+ expect(screen.getByText('--')).toBeInTheDocument();
+ });
+});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.tsx
new file mode 100644
index 0000000000000..8df055184957e
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.tsx
@@ -0,0 +1,39 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { AlertStatus, ALERT_FLAPPING, ALERT_STATUS } from '@kbn/rule-data-utils';
+import React, { memo } from 'react';
+import { AlertLifecycleStatusBadge } from '../../../components/alert_lifecycle_status_badge';
+import { CellComponentProps } from '../types';
+import { DefaultCell } from './default_cell';
+
+const AlertLifecycleStatusCellComponent: React.FC = (props) => {
+ const { alert, showAlertStatusWithFlapping } = props;
+
+ if (!showAlertStatusWithFlapping) {
+ return null;
+ }
+
+ const alertStatus = alert[ALERT_STATUS] ?? [];
+
+ if (Array.isArray(alertStatus) && alertStatus.length) {
+ const flapping = alert[ALERT_FLAPPING] ?? [];
+
+ return (
+
+ );
+ }
+
+ return ;
+};
+
+AlertLifecycleStatusCellComponent.displayName = 'AlertLifecycleStatusCell';
+
+export const AlertLifecycleStatusCell = memo(AlertLifecycleStatusCellComponent);
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.test.tsx
new file mode 100644
index 0000000000000..6c4dbaf085c81
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.test.tsx
@@ -0,0 +1,61 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+import { screen } from '@testing-library/react';
+import { DefaultCell } from './default_cell';
+import { CellComponentProps } from '../types';
+import { Alert } from '../../../../types';
+import { AppMockRenderer, createAppMockRenderer } from '../../test_utils';
+import { getCasesMockMap } from '../cases/index.mock';
+
+jest.mock('../../../../common/lib/kibana');
+
+describe('DefaultCell', () => {
+ const casesMap = getCasesMockMap();
+ const alert = {
+ _id: 'alert-id',
+ _index: 'alert-index',
+ 'kibana.alert.status': ['active'],
+ } as Alert;
+
+ const props: CellComponentProps = {
+ isLoading: false,
+ alert,
+ cases: casesMap,
+ columnId: 'kibana.alert.status',
+ showAlertStatusWithFlapping: false,
+ };
+
+ let appMockRender: AppMockRenderer;
+
+ beforeEach(() => {
+ appMockRender = createAppMockRenderer();
+ });
+
+ it('shows the value', async () => {
+ appMockRender.render();
+ expect(screen.getByText('active')).toBeInTheDocument();
+ });
+
+ it('shows empty tag if the value is empty', async () => {
+ appMockRender.render(
+
+ );
+ expect(screen.getByText('--')).toBeInTheDocument();
+ });
+
+ it('shows multiple values', async () => {
+ appMockRender.render(
+
+ );
+ expect(screen.getByText('active, recovered')).toBeInTheDocument();
+ });
+});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.tsx
new file mode 100644
index 0000000000000..2ecd96c2e8bcd
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.tsx
@@ -0,0 +1,23 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React, { memo } from 'react';
+import { CellComponentProps } from '../types';
+
+const DefaultCellComponent: React.FC = ({ columnId, alert }) => {
+ const value = alert[columnId] ?? [];
+
+ if (Array.isArray(value)) {
+ return <>{value.length ? value.join(', ') : '--'}>;
+ }
+
+ return <>{value}>;
+};
+
+DefaultCellComponent.displayName = 'DefaultCell';
+
+export const DefaultCell = memo(DefaultCellComponent);
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.test.tsx
new file mode 100644
index 0000000000000..900093ba64103
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.test.tsx
@@ -0,0 +1,56 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+import { screen } from '@testing-library/react';
+import { SystemCellFactory } from '.';
+import { CellComponentProps } from '../types';
+import { Alert } from '../../../../types';
+import { AppMockRenderer, createAppMockRenderer } from '../../test_utils';
+import { getCasesMockMap } from '../cases/index.mock';
+
+jest.mock('../../../../common/lib/kibana');
+
+describe('SystemCellFactory', () => {
+ const casesMap = getCasesMockMap();
+ const alert = {
+ _id: 'alert-id',
+ _index: 'alert-index',
+ 'kibana.alert.status': ['active'],
+ 'kibana.alert.case_ids': ['test-id'],
+ } as Alert;
+
+ const props: CellComponentProps = {
+ isLoading: false,
+ alert,
+ cases: casesMap,
+ columnId: 'kibana.alert.status',
+ showAlertStatusWithFlapping: true,
+ };
+
+ let appMockRender: AppMockRenderer;
+
+ beforeEach(() => {
+ appMockRender = createAppMockRenderer();
+ });
+
+ it('shows the status cell', async () => {
+ appMockRender.render();
+ expect(screen.getByText('Active')).toBeInTheDocument();
+ });
+
+ it('shows the cases cell', async () => {
+ appMockRender.render();
+ expect(screen.getByText('Test case')).toBeInTheDocument();
+ });
+
+ it('shows the cell if the columnId is not registered to the map', async () => {
+ // @ts-expect-error: columnId is typed to accept only status & case_ids
+ appMockRender.render();
+ expect(screen.getByText('--')).toBeInTheDocument();
+ });
+});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.tsx
new file mode 100644
index 0000000000000..0ef9bc5e3f0c2
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.tsx
@@ -0,0 +1,34 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React, { memo, useMemo } from 'react';
+import { ALERT_STATUS, ALERT_CASE_IDS } from '@kbn/rule-data-utils';
+import { CellComponentProps, SystemCellComponentMap, SystemCellId } from '../types';
+import { DefaultCell } from './default_cell';
+import { AlertLifecycleStatusCell } from './alert_lifecycle_status_cell';
+import { CasesCell } from '../cases/cell';
+
+export const systemCells: SystemCellId[] = [ALERT_STATUS, ALERT_CASE_IDS];
+
+const SystemCellFactoryComponent: React.FC = (props) => {
+ const { columnId } = props;
+ const cellComponents: SystemCellComponentMap = useMemo(
+ () => ({ [ALERT_STATUS]: AlertLifecycleStatusCell, [ALERT_CASE_IDS]: CasesCell }),
+ []
+ );
+
+ if (cellComponents[columnId]) {
+ const CellComponent = cellComponents[columnId];
+ return ;
+ }
+
+ return ;
+};
+
+SystemCellFactoryComponent.displayName = 'SystemCellFactory';
+
+export const SystemCellFactory = memo(SystemCellFactoryComponent);
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.test.ts
new file mode 100644
index 0000000000000..684a16c40a0bc
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.test.ts
@@ -0,0 +1,41 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { bulkGetCases } from './api';
+import { coreMock } from '@kbn/core/public/mocks';
+
+describe('Alerts table APIs', () => {
+ const abortCtrl = new AbortController();
+ const mockCoreSetup = coreMock.createSetup();
+ const http = mockCoreSetup.http;
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+ http.post.mockResolvedValue({ cases: [], errors: [] });
+ });
+
+ describe('bulkGetCases', () => {
+ it('fetch cases correctly', async () => {
+ const res = await bulkGetCases(
+ http,
+ { ids: ['test-id'], fields: ['title'] },
+ abortCtrl.signal
+ );
+
+ expect(res).toEqual({ cases: [], errors: [] });
+ });
+
+ it('should call http with correct arguments', async () => {
+ await bulkGetCases(http, { ids: ['test-id'], fields: ['title'] }, abortCtrl.signal);
+
+ expect(http.post).toHaveBeenCalledWith('/internal/cases/_bulk_get', {
+ body: '{"ids":["test-id"],"fields":["title"]}',
+ signal: abortCtrl.signal,
+ });
+ });
+ });
+});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.ts
new file mode 100644
index 0000000000000..364c8480b8a2d
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.ts
@@ -0,0 +1,52 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { CaseStatuses } from '@kbn/cases-components';
+import { HttpStart } from '@kbn/core-http-browser';
+
+const INTERNAL_BULK_GET_CASES_URL = '/internal/cases/_bulk_get';
+
+export interface Case {
+ title: string;
+ description: string;
+ status: CaseStatuses;
+ totalComment: number;
+ created_at: string;
+ created_by: {
+ email: string | null | undefined;
+ full_name: string | null | undefined;
+ username: string | null | undefined;
+ };
+ id: string;
+ owner: string;
+ version: string;
+}
+
+export type Cases = Case[];
+
+export interface CasesBulkGetResponse {
+ cases: Cases;
+ errors: Array<{
+ caseId: string;
+ error: string;
+ message: string;
+ status?: number;
+ }>;
+}
+
+export const bulkGetCases = async (
+ http: HttpStart,
+ params: { ids: string[]; fields: string[] },
+ signal?: AbortSignal
+): Promise => {
+ const res = await http.post(INTERNAL_BULK_GET_CASES_URL, {
+ body: JSON.stringify({ ...params }),
+ signal,
+ });
+
+ return res;
+};
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts
index a6cdfe8af2249..7758143f9e584 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts
@@ -5,8 +5,8 @@
* 2.0.
*/
import { useContext, useEffect } from 'react';
-import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy';
import {
+ Alerts,
BulkActionsConfig,
BulkActionsState,
BulkActionsVerbs,
@@ -19,7 +19,7 @@ import {
} from '../bulk_actions/get_leading_control_column';
interface BulkActionsProps {
- alerts: EcsFieldsResponse[];
+ alerts: Alerts;
useBulkActionsConfig?: UseBulkActionsRegistry;
}
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx
new file mode 100644
index 0000000000000..28ed298ea7669
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx
@@ -0,0 +1,73 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { renderHook } from '@testing-library/react-hooks';
+import * as api from './api';
+import { waitFor } from '@testing-library/dom';
+import { useKibana } from '../../../../common/lib/kibana';
+import { useBulkGetCases } from './use_bulk_get_cases';
+import { AppMockRenderer, createAppMockRenderer } from '../../test_utils';
+
+jest.mock('./api');
+jest.mock('../../../../common/lib/kibana');
+
+const response = {
+ cases: [],
+ errors: [],
+};
+
+describe('useBulkGetCases', () => {
+ const addErrorMock = useKibana().services.notifications.toasts.addError as jest.Mock;
+
+ let appMockRender: AppMockRenderer;
+
+ beforeEach(() => {
+ appMockRender = createAppMockRenderer();
+ });
+
+ it('calls the api when invoked with the correct parameters', async () => {
+ const spy = jest.spyOn(api, 'bulkGetCases');
+ spy.mockResolvedValue(response);
+
+ const { waitForNextUpdate } = renderHook(() => useBulkGetCases(['case-1']), {
+ wrapper: appMockRender.AppWrapper,
+ });
+
+ await waitForNextUpdate();
+
+ expect(spy).toHaveBeenCalledWith(
+ expect.anything(),
+ {
+ ids: ['case-1'],
+ fields: ['title', 'description', 'status', 'totalComment', 'created_at', 'created_by'],
+ },
+ expect.any(AbortSignal)
+ );
+ });
+
+ it('shows a toast error when the api return an error', async () => {
+ const spy = jest.spyOn(api, 'bulkGetCases').mockRejectedValue(new Error('An error'));
+
+ const { waitForNextUpdate } = renderHook(() => useBulkGetCases(['case-1']), {
+ wrapper: appMockRender.AppWrapper,
+ });
+
+ await waitForNextUpdate();
+
+ await waitFor(() => {
+ expect(spy).toHaveBeenCalledWith(
+ expect.anything(),
+ {
+ ids: ['case-1'],
+ fields: ['title', 'description', 'status', 'totalComment', 'created_at', 'created_by'],
+ },
+ expect.any(AbortSignal)
+ );
+ expect(addErrorMock).toHaveBeenCalled();
+ });
+ });
+});
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx
new file mode 100644
index 0000000000000..deed7f5e62d50
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx
@@ -0,0 +1,58 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { i18n } from '@kbn/i18n';
+import { useQuery } from '@tanstack/react-query';
+import { useKibana } from '../../../../common';
+import { triggersActionsUiQueriesKeys } from '../../../hooks/constants';
+import { ServerError } from '../types';
+import { bulkGetCases, Case, CasesBulkGetResponse } from './api';
+
+const ERROR_TITLE = i18n.translate('xpack.triggersActionsUI.cases.api.bulkGet', {
+ defaultMessage: 'Error fetching cases data',
+});
+
+const caseFields = ['title', 'description', 'status', 'totalComment', 'created_at', 'created_by'];
+
+const transformCases = (data: CasesBulkGetResponse): Map => {
+ const casesMap = new Map();
+
+ for (const theCase of data?.cases ?? []) {
+ casesMap.set(theCase.id, { ...theCase });
+ }
+
+ return casesMap;
+};
+
+export const useBulkGetCases = (caseIds: string[]) => {
+ const {
+ http,
+ notifications: { toasts },
+ } = useKibana().services;
+
+ return useQuery(
+ triggersActionsUiQueriesKeys.casesBulkGet(),
+ () => {
+ const abortCtrlRef = new AbortController();
+ return bulkGetCases(http, { ids: caseIds, fields: caseFields }, abortCtrlRef.signal);
+ },
+ {
+ enabled: caseIds.length > 0,
+ select: transformCases,
+ onError: (error: ServerError) => {
+ if (error.name !== 'AbortError') {
+ toasts.addError(
+ error.body && error.body.message ? new Error(error.body.message) : error,
+ {
+ title: ERROR_TITLE,
+ }
+ );
+ }
+ },
+ }
+ );
+};
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx
index 3424ab761355a..b3f5c046bef28 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx
@@ -13,7 +13,6 @@ import { Subscription } from 'rxjs';
import { isCompleteResponse, isErrorResponse } from '@kbn/data-plugin/common';
import type {
- EcsFieldsResponse,
RuleRegistrySearchRequest,
RuleRegistrySearchResponse,
} from '@kbn/rule-registry-plugin/common/search_strategy';
@@ -22,7 +21,7 @@ import type {
QueryDslQueryContainer,
SortCombinations,
} from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
-import { GetInspectQuery, InspectQuery } from '../../../../types';
+import type { Alert, Alerts, GetInspectQuery, InspectQuery } from '../../../../types';
import { useKibana } from '../../../../common/lib/kibana';
import { DefaultSort } from './constants';
import * as i18n from './translations';
@@ -44,7 +43,7 @@ type AlertRequest = Omit;
type Refetch = () => void;
export interface FetchAlertResp {
- alerts: EcsFieldsResponse[];
+ alerts: Alerts;
isInitializing: boolean;
getInspectQuery: GetInspectQuery;
refetch: Refetch;
@@ -61,7 +60,7 @@ interface AlertStateReducer {
type AlertActions =
| { type: 'loading'; loading: boolean }
- | { type: 'response'; alerts: EcsFieldsResponse[]; totalAlerts: number }
+ | { type: 'response'; alerts: Alerts; totalAlerts: number }
| { type: 'resetPagination' }
| { type: 'request'; request: Omit };
@@ -193,13 +192,13 @@ const useFetchAlerts = ({
}
dispatch({
type: 'response',
- alerts: rawResponse.hits.hits.reduce((acc, hit) => {
+ alerts: rawResponse.hits.hits.reduce((acc, hit) => {
if (hit.fields) {
acc.push({
...hit.fields,
_id: hit._id,
_index: hit._index,
- } as EcsFieldsResponse);
+ } as Alert);
}
return acc;
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_browser_fields_capabilities.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_browser_fields_capabilities.tsx
index e1014057ab1d7..5f04421f5bc81 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_browser_fields_capabilities.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_browser_fields_capabilities.tsx
@@ -6,9 +6,9 @@
*/
import type { ValidFeatureId } from '@kbn/rule-data-utils';
-import type { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy';
import { BASE_RAC_ALERTS_API_PATH, BrowserFields } from '@kbn/rule-registry-plugin/common';
import { useCallback, useEffect, useState } from 'react';
+import type { Alerts } from '../../../../types';
import { useKibana } from '../../../../common/lib/kibana';
import { ERROR_FETCH_BROWSER_FIELDS } from './translations';
@@ -17,7 +17,7 @@ export interface FetchAlertsArgs {
}
export interface FetchAlertResp {
- alerts: EcsFieldsResponse[];
+ alerts: Alerts;
}
export type UseFetchAlerts = ({ featureIds }: FetchAlertsArgs) => [boolean, FetchAlertResp];
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/query_client.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/query_client.ts
new file mode 100644
index 0000000000000..133a6d5fbdd46
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/query_client.ts
@@ -0,0 +1,10 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { QueryClient } from '@tanstack/react-query';
+
+export const alertsTableQueryClient = new QueryClient();
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/toolbar/toolbar_visibility.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/toolbar/toolbar_visibility.tsx
index 214a6e21fc0a3..a515d308cf4b6 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/toolbar/toolbar_visibility.tsx
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/toolbar/toolbar_visibility.tsx
@@ -9,11 +9,10 @@ import {
EuiDataGridToolBarAdditionalControlsOptions,
EuiDataGridToolBarVisibilityOptions,
} from '@elastic/eui';
-import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy';
import React, { lazy, Suspense } from 'react';
import { BrowserFields } from '@kbn/rule-registry-plugin/common';
import { AlertsCount } from './components/alerts_count/alerts_count';
-import { BulkActionsConfig, GetInspectQuery, RowSelection } from '../../../../types';
+import type { Alerts, BulkActionsConfig, GetInspectQuery, RowSelection } from '../../../../types';
import { LastUpdatedAt } from './components/last_updated_at';
import { FieldBrowser } from '../../field_browser';
import { InspectButton } from './components/inspect';
@@ -109,7 +108,7 @@ export const getToolbarVisibility = ({
bulkActions: BulkActionsConfig[];
alertsCount: number;
rowSelection: RowSelection;
- alerts: EcsFieldsResponse[];
+ alerts: Alerts;
isLoading: boolean;
updatedAt: number;
columnIds: string[];
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts
index 9622477db3a30..ab6793745da30 100644
--- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts
@@ -4,9 +4,30 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
-import { AlertConsumers } from '@kbn/rule-data-utils';
+import { AlertConsumers, ALERT_CASE_IDS, ALERT_STATUS } from '@kbn/rule-data-utils';
+import { IHttpFetchError, ResponseErrorBody } from '@kbn/core-http-browser';
+import { Alert, AlertsTableProps } from '../../../types';
export interface Consumer {
id: AlertConsumers;
name: string;
}
+
+export type ServerError = IHttpFetchError;
+
+export interface CellComponentProps {
+ alert: Alert;
+ cases: AlertsTableProps['casesData']['cases'];
+ columnId: SystemCellId;
+ isLoading: boolean;
+ showAlertStatusWithFlapping: boolean;
+}
+
+export type CellComponent = React.FC;
+
+export interface SystemCellComponentMap {
+ [ALERT_STATUS]: CellComponent;
+ [ALERT_CASE_IDS]: CellComponent;
+}
+
+export type SystemCellId = keyof SystemCellComponentMap;
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx
new file mode 100644
index 0000000000000..4dd06217de0dc
--- /dev/null
+++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx
@@ -0,0 +1,76 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import React from 'react';
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
+import { of } from 'rxjs';
+import { I18nProvider } from '@kbn/i18n-react';
+import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
+import { render as reactRender, RenderOptions, RenderResult } from '@testing-library/react';
+import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public';
+
+import { TriggersAndActionsUiServices } from '../..';
+import { createStartServicesMock } from '../../common/lib/kibana/kibana_react.mock';
+
+/* eslint-disable no-console */
+
+type UiRender = (ui: React.ReactElement, options?: RenderOptions) => RenderResult;
+
+export interface AppMockRenderer {
+ render: UiRender;
+ coreStart: TriggersAndActionsUiServices;
+ queryClient: QueryClient;
+ AppWrapper: React.FC<{ children: React.ReactElement }>;
+}
+
+export const createAppMockRenderer = (): AppMockRenderer => {
+ const services = createStartServicesMock();
+ const theme$ = of({ darkMode: false });
+
+ const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ retry: false,
+ },
+ },
+ /**
+ * React query prints the errors in the console even though
+ * all tests are passings. We turn them off for testing.
+ */
+ logger: {
+ log: console.log,
+ warn: console.warn,
+ error: () => {},
+ },
+ });
+
+ const AppWrapper: React.FC<{ children: React.ReactElement }> = React.memo(({ children }) => (
+
+
+
+ {children}
+
+
+
+ ));
+
+ AppWrapper.displayName = 'AppWrapper';
+
+ const render: UiRender = (ui, options) => {
+ return reactRender(ui, {
+ wrapper: AppWrapper,
+ ...options,
+ });
+ };
+
+ return {
+ coreStart: services,
+ render,
+ queryClient,
+ AppWrapper,
+ };
+};
diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts
index f99573150faaf..2ed9c2c1c8994 100644
--- a/x-pack/plugins/triggers_actions_ui/public/types.ts
+++ b/x-pack/plugins/triggers_actions_ui/public/types.ts
@@ -81,6 +81,7 @@ import type {
import { RulesListVisibleColumns } from './application/sections/rules_list/components/rules_list_column_selector';
import { TimelineItem } from './application/sections/alerts_table/bulk_actions/components/toolbar';
import type { RulesListNotifyBadgePropsWithApi } from './application/sections/rules_list/components/notify_badge';
+import { Case } from './application/sections/alerts_table/hooks/api';
// In Triggers and Actions we treat all `Alert`s as `SanitizedRule`
// so the `Params` is a black-box of Record
@@ -458,9 +459,12 @@ export interface InspectQuery {
}
export type GetInspectQuery = () => InspectQuery;
+export type Alert = EcsFieldsResponse;
+export type Alerts = Alert[];
+
export interface FetchAlertData {
activePage: number;
- alerts: EcsFieldsResponse[];
+ alerts: Alerts;
alertsCount: number;
isInitializing: boolean;
isLoading: boolean;
@@ -473,6 +477,7 @@ export interface FetchAlertData {
export interface AlertsTableProps {
alertsTableConfiguration: AlertsTableConfigurationRegistry;
+ casesData: { cases: Map; isLoading: boolean };
columns: EuiDataGridColumn[];
// defaultCellActions: TGridCellAction[];
deletedEventIds: string[];
@@ -511,7 +516,7 @@ export type AlertTableFlyoutComponent =
| null;
export interface AlertsTableFlyoutBaseProps {
- alert: EcsFieldsResponse;
+ alert: Alert;
isLoading: boolean;
id?: string;
}
@@ -530,7 +535,7 @@ export interface BulkActionsConfig {
}
export interface RenderCustomActionsRowArgs {
- alert: EcsFieldsResponse;
+ alert: Alert;
setFlyoutAlert: (data: unknown) => void;
id?: string;
setIsActionLoading?: (isLoading: boolean) => void;
diff --git a/x-pack/plugins/triggers_actions_ui/tsconfig.json b/x-pack/plugins/triggers_actions_ui/tsconfig.json
index 96a7c05c91a01..a2bd70a08e6fa 100644
--- a/x-pack/plugins/triggers_actions_ui/tsconfig.json
+++ b/x-pack/plugins/triggers_actions_ui/tsconfig.json
@@ -47,6 +47,7 @@
"@kbn/shared-ux-router",
"@kbn/alerts-ui-shared",
"@kbn/safer-lodash-set",
+ "@kbn/cases-components"
],
"exclude": [
"target/**/*",
From c230c63f6c92ba47cad8e5268b758675082c4e7d Mon Sep 17 00:00:00 2001
From: Marco Liberati
Date: Tue, 21 Feb 2023 11:35:34 +0100
Subject: [PATCH 028/101] [Lens] Heatmap axis auto mode is applied correctly
(#151624)
## Summary
Fix #151108
This PR handles correctly the `none` => `auto` transition in the axis
title component to fallback to the dimension name on `Auto`.
![heatmap_axis_titles](https://user-images.githubusercontent.com/924948/220133022-28462f77-bdf4-4698-8540-a714172c80d6.gif)
There's an extra functional test which is skipped for now, waiting for
https://github.com/elastic/elastic-charts/pull/1970 to expose the axis
title in debug data.
### Checklist
Delete any items that are not applicable to this PR.
- [ ] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [ ] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [ ] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This renders correctly on smaller devices using a responsive
layout. (You can test this [in your
browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))
- [ ] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)
---
.../axis/title/axis_title_settings.test.tsx | 29 +++++++++++++++++++
.../axis/title/axis_title_settings.tsx | 2 +-
.../public/shared_components/vis_label.tsx | 15 +++++-----
.../heatmap/visualization.test.ts | 2 --
.../visualizations/heatmap/visualization.tsx | 4 +--
.../functional/apps/lens/group3/heatmap.ts | 14 +++++++++
6 files changed, 54 insertions(+), 12 deletions(-)
diff --git a/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.test.tsx b/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.test.tsx
index c5baced9bb4bf..b110b51575077 100644
--- a/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.test.tsx
+++ b/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.test.tsx
@@ -11,6 +11,15 @@ import { mountWithIntl as mount } from '@kbn/test-jest-helpers';
import { AxisTitleSettings, AxisTitleSettingsProps } from './axis_title_settings';
import { Label, VisLabel } from '../../vis_label';
+jest.mock('lodash', () => {
+ const original = jest.requireActual('lodash');
+
+ return {
+ ...original,
+ debounce: (fn: unknown) => fn,
+ };
+});
+
describe('Axes Title settings', () => {
let props: AxisTitleSettingsProps;
beforeEach(() => {
@@ -68,4 +77,24 @@ describe('Axes Title settings', () => {
);
expect(component.find('[data-test-subj="lnsxAxisTitle"]').last().prop('value')).toBe('');
});
+
+ it('should reset the label when moving from custom to auto', () => {
+ let component = mount(
+
+ );
+
+ // switch mode
+ // Perform the change down one level to check the actual value swap
+ act(() => {
+ component.find(VisLabel).find('EuiSelect').prop('onChange')!({
+ target: { value: 'auto' },
+ } as React.ChangeEvent);
+ });
+ component = component.update();
+ expect(component.find('[data-test-subj="lnsxAxisTitle-select"]').last().prop('value')).toBe(
+ 'auto'
+ );
+ expect(component.find('[data-test-subj="lnsxAxisTitle"]').last().prop('value')).toBe('');
+ expect(props.updateTitleState).toHaveBeenCalledWith({ title: undefined, visible: true }, 'x');
+ });
});
diff --git a/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.tsx b/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.tsx
index 8a7e203d65f99..d46b99cd817d5 100644
--- a/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.tsx
+++ b/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.tsx
@@ -83,7 +83,7 @@ export const AxisTitleSettings: React.FunctionComponent
defaultMessage: 'Axis title',
})}
dataTestSubj={`lns${axis}AxisTitle`}
- label={localAxisState.title || ''}
+ label={localAxisState.title}
mode={localAxisState.visibility}
placeholder={i18n.translate('xpack.lens.shared.overwriteAxisTitle', {
defaultMessage: 'Overwrite axis title',
diff --git a/x-pack/plugins/lens/public/shared_components/vis_label.tsx b/x-pack/plugins/lens/public/shared_components/vis_label.tsx
index 79bab27bbcb6f..6d54d1633d439 100644
--- a/x-pack/plugins/lens/public/shared_components/vis_label.tsx
+++ b/x-pack/plugins/lens/public/shared_components/vis_label.tsx
@@ -13,11 +13,11 @@ export type LabelMode = 'auto' | 'custom' | 'none';
export interface Label {
mode: LabelMode;
- label: string;
+ label: string | undefined;
}
export interface VisLabelProps {
- label: string;
+ label: string | undefined;
mode: LabelMode;
handleChange: (label: Label) => void;
placeholder?: string;
@@ -76,11 +76,12 @@ export function VisLabel({
data-test-subj={`${dataTestSubj}-select`}
aria-label="Label"
onChange={({ target }) => {
- if (target.value === 'custom') {
- handleChange({ label: '', mode: target.value as LabelMode });
- return;
- }
- handleChange({ label: '', mode: target.value as LabelMode });
+ const title =
+ target.value === 'custom' ? '' : target.value === 'auto' ? undefined : label;
+ handleChange({
+ label: title,
+ mode: target.value as LabelMode,
+ });
}}
options={hasAutoOption ? modeEnhancedOptions : modeDefaultOptions}
value={mode}
diff --git a/x-pack/plugins/lens/public/visualizations/heatmap/visualization.test.ts b/x-pack/plugins/lens/public/visualizations/heatmap/visualization.test.ts
index 2cb2869339697..596c334aeac9e 100644
--- a/x-pack/plugins/lens/public/visualizations/heatmap/visualization.test.ts
+++ b/x-pack/plugins/lens/public/visualizations/heatmap/visualization.test.ts
@@ -572,8 +572,6 @@ describe('heatmap', () => {
// X-axis
isXAxisLabelVisible: [false],
isXAxisTitleVisible: [false],
- xTitle: [''],
- yTitle: [''],
},
},
],
diff --git a/x-pack/plugins/lens/public/visualizations/heatmap/visualization.tsx b/x-pack/plugins/lens/public/visualizations/heatmap/visualization.tsx
index 4450ec558db8b..91c9e60f38d8f 100644
--- a/x-pack/plugins/lens/public/visualizations/heatmap/visualization.tsx
+++ b/x-pack/plugins/lens/public/visualizations/heatmap/visualization.tsx
@@ -406,11 +406,11 @@ export const getHeatmapVisualization = ({
// Y-axis
isYAxisLabelVisible: false,
isYAxisTitleVisible: false,
- yTitle: state.gridConfig.yTitle ?? '',
+ yTitle: state.gridConfig.yTitle,
// X-axis
isXAxisLabelVisible: false,
isXAxisTitleVisible: false,
- xTitle: state.gridConfig.xTitle ?? '',
+ xTitle: state.gridConfig.xTitle,
}
);
diff --git a/x-pack/test/functional/apps/lens/group3/heatmap.ts b/x-pack/test/functional/apps/lens/group3/heatmap.ts
index 2d51e9865cc5a..3e37ce65cc5bc 100644
--- a/x-pack/test/functional/apps/lens/group3/heatmap.ts
+++ b/x-pack/test/functional/apps/lens/group3/heatmap.ts
@@ -174,5 +174,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
{ key: '≥ 16,948.55', name: '≥ 16,948.55', color: '#cc5642' },
]);
});
+
+ // Skip for now as EC is not reporting title
+ it.skip('should display axis values when setting axis title mode to Auto', async () => {
+ await PageObjects.lens.closeDimensionEditor();
+
+ await PageObjects.lens.toggleToolbarPopover('lnsLeftAxisButton');
+ await testSubjects.selectValue('lnsLeftAxisTitle-select', 'Auto');
+
+ const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart');
+ if (!debugState) {
+ throw new Error('Debug state is not available');
+ }
+ expect(debugState?.axes?.y?.[0].title).to.eql('Average of bytes');
+ });
});
}
From a841cf86a3e2b942b507fa7b0dbb9339cc590bf2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Yulia=20=C4=8Cech?=
<6585477+yuliacech@users.noreply.github.com>
Date: Tue, 21 Feb 2023 11:39:58 +0100
Subject: [PATCH 029/101] [Fleet] Fix kubernetes filename typo (#151646)
## Summary
Fixes https://github.com/elastic/kibana/issues/151167
This PR fixes the filename extension for the kubernetes manifest file:
The commands in the UI assume the filename to be
`elastic-agent-managed-kubernetes.yml` or
`elastic-agent-standalone-kubernetes.yml`. The filename was previously
using `.yaml` extension.
Screenshots
---
x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts
index 505f5e1b89b0a..83e2600d1beb2 100644
--- a/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts
+++ b/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts
@@ -358,7 +358,7 @@ export const downloadFullAgentPolicy: FleetRequestHandler<
const body = fullAgentConfigMap;
const headers: ResponseHeaders = {
'content-type': 'text/x-yaml',
- 'content-disposition': `attachment; filename="elastic-agent-standalone-kubernetes.yaml"`,
+ 'content-disposition': `attachment; filename="elastic-agent-standalone-kubernetes.yml"`,
};
return response.ok({
body,
@@ -438,7 +438,7 @@ export const downloadK8sManifest: FleetRequestHandler<
const body = fullAgentManifest;
const headers: ResponseHeaders = {
'content-type': 'text/x-yaml',
- 'content-disposition': `attachment; filename="elastic-agent-managed-kubernetes.yaml"`,
+ 'content-disposition': `attachment; filename="elastic-agent-managed-kubernetes.yml"`,
};
return response.ok({
body,
From de97462358fb859590693b1cca43c20b23f30c20 Mon Sep 17 00:00:00 2001
From: Maxim Palenov
Date: Tue, 21 Feb 2023 11:48:03 +0100
Subject: [PATCH 030/101] [Security Solution] Get rid of rule description's
fade in/out effect (#150998)
**Addresses:** https://github.com/elastic/kibana/issues/150997
## Summary
It removed rule details description's fade in and out effect which was added by scrolling EUI styles.
*Before:*
![Screenshot 2023-02-13 at 13 30 02](https://user-images.githubusercontent.com/3775283/218459498-28dd50ce-94eb-427f-865c-279f611b4049.png)
![Screenshot 2023-02-13 at 13 30 11](https://user-images.githubusercontent.com/3775283/218459532-56072024-8e8b-4ee1-89be-ffece60d31a7.png)
*After:*
![Screenshot 2023-02-13 at 13 27 49](https://user-images.githubusercontent.com/3775283/218459699-8da6f5c3-e05d-4c9f-8122-392f3bfd6846.png)
![Screenshot 2023-02-13 at 13 28 00](https://user-images.githubusercontent.com/3775283/218459735-1c522e19-573f-47c4-9490-5828373ac5ac.png)
---
.../rules/step_about_rule_details/index.tsx | 100 +++++++++++-------
.../rules/step_about_rule_details/styles.ts | 12 +++
2 files changed, 74 insertions(+), 38 deletions(-)
create mode 100644 x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/styles.ts
diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx
index ac5e6c559d0d9..4d9c23240a9b2 100644
--- a/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx
+++ b/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx
@@ -17,9 +17,10 @@ import {
EuiResizeObserver,
} from '@elastic/eui';
import { isEmpty } from 'lodash';
+import type { PropsWithChildren } from 'react';
import React, { memo, useCallback, useMemo, useState } from 'react';
-import styled from 'styled-components';
+import { css } from '@emotion/react';
import { HeaderSection } from '../../../../common/components/header_section';
import { MarkdownRenderer } from '../../../../common/components/markdown_editor';
import type {
@@ -28,28 +29,7 @@ import type {
} from '../../../pages/detection_engine/rules/types';
import * as i18n from './translations';
import { StepAboutRule } from '../step_about_rule';
-
-const MyPanel = styled(EuiPanel)`
- position: relative;
-`;
-
-const FlexGroupFullHeight = styled(EuiFlexGroup)`
- height: 100%;
-`;
-
-const VerticalOverflowContainer = styled.div((props: { maxHeight: number }) => ({
- 'max-height': `${props.maxHeight}px`,
- 'overflow-y': 'hidden',
- 'word-break': 'break-word',
-}));
-
-const VerticalOverflowContent = styled.div((props: { maxHeight: number }) => ({
- 'max-height': `${props.maxHeight}px`,
-}));
-
-const AboutContent = styled.div`
- height: 100%;
-`;
+import { fullHeight } from './styles';
const detailsOption: EuiButtonGroupOptionProps = {
id: 'details',
@@ -99,7 +79,12 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({
}, [stepDataDetails]);
return (
-
+
{loading && (
<>
@@ -107,7 +92,7 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({
>
)}
{stepData != null && stepDataDetails != null && (
-
+
{toggleOptions.length > 0 && (
@@ -127,9 +112,9 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({
{selectedToggleOption === 'details' && (
{(resizeRef) => (
-
+