diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index d6ca99493ec5..62ca848819d1 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -341,6 +341,7 @@ enabled: - x-pack/test/observability_onboarding_api_integration/basic/config.ts - x-pack/test/observability_onboarding_api_integration/cloud/config.ts - x-pack/test/observability_ai_assistant_api_integration/enterprise/config.ts + - x-pack/test/observability_ai_assistant_functional/enterprise/config.ts - x-pack/test/plugin_api_integration/config.ts - x-pack/test/plugin_functional/config.ts - x-pack/test/reporting_api_integration/reporting_and_security.config.ts diff --git a/.buildkite/scripts/steps/artifacts/trigger.sh b/.buildkite/scripts/steps/artifacts/trigger.sh index aac0c7166bf9..15c93c4c68a0 100755 --- a/.buildkite/scripts/steps/artifacts/trigger.sh +++ b/.buildkite/scripts/steps/artifacts/trigger.sh @@ -12,9 +12,5 @@ echo "--- Trigger artifact builds" if [ "$BEATS_MANIFEST_LATEST_URL" = "$KIBANA_BEATS_MANIFEST_URL" ]; then echo "Kibana has the latest version of beats, skipping trigger" else - # Staging builds are not necessary on main - if [[ "$BUILDKITE_BRANCH" != "main" ]]; then - ts-node .buildkite/scripts/steps/trigger_pipeline.ts kibana-artifacts-staging "$BUILDKITE_BRANCH" - fi - ts-node .buildkite/scripts/steps/trigger_pipeline.ts kibana-artifacts-snapshot "$BUILDKITE_BRANCH" + ts-node .buildkite/scripts/steps/trigger_pipeline.ts kibana-artifacts-staging "$BUILDKITE_BRANCH" fi diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index fac258fd6424..9ec0cc7fab0a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -694,7 +694,7 @@ packages/kbn-securitysolution-rules @elastic/security-detection-engine packages/kbn-securitysolution-t-grid @elastic/security-detection-engine packages/kbn-securitysolution-utils @elastic/security-detection-engine packages/kbn-server-http-tools @elastic/kibana-core -packages/kbn-server-route-repository @elastic/obs-knowledge-team @elastic/obs-ux-management-team +packages/kbn-server-route-repository @elastic/obs-knowledge-team x-pack/plugins/serverless @elastic/appex-sharedux packages/serverless/settings/common @elastic/appex-sharedux @elastic/platform-deployment-management x-pack/plugins/serverless_observability @elastic/appex-sharedux @elastic/obs-ux-management-team diff --git a/.github/workflows/skip-failed-test.yml b/.github/workflows/skip-failed-test.yml index 9ac9485709bd..039d0ab8aa8b 100644 --- a/.github/workflows/skip-failed-test.yml +++ b/.github/workflows/skip-failed-test.yml @@ -26,7 +26,7 @@ jobs: uses: ./actions/permission-check with: permission: admin - teams: appex-qa + teams: appex-qa, security-solution-test-skippers token: ${{secrets.KIBANAMACHINE_TOKEN}} - name: Checkout kibana-operations diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index d1449bb4f544..0d548cad85ab 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-12-18 +date: 2023-12-20 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 e063bf6df426..26b4be196935 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index 2c3f3fe8ad82..2039c9ac564b 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index cf78bd1b05f4..edcf581deb96 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.devdocs.json b/api_docs/aiops.devdocs.json index 6649c83b16df..6a4ad90613be 100644 --- a/api_docs/aiops.devdocs.json +++ b/api_docs/aiops.devdocs.json @@ -434,8 +434,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" } ], "path": "x-pack/plugins/aiops/public/hooks/use_aiops_app_context.ts", @@ -587,8 +587,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" }, " | undefined" ], diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index fdf70ee45490..32f08c6a0e78 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index b18468b7545f..15f5fd2f156b 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3675,8 +3675,8 @@ "pluginId": "share", "scope": "server", "docId": "kibSharePluginApi", - "section": "def-server.SharePluginStart", - "text": "SharePluginStart" + "section": "def-server.SharePublicStart", + "text": "SharePublicStart" } ], "path": "x-pack/plugins/alerting/server/types.ts", @@ -4800,6 +4800,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-server.RULE_SAVED_OBJECT_TYPE", + "type": "string", + "tags": [], + "label": "RULE_SAVED_OBJECT_TYPE", + "description": [], + "signature": [ + "\"alert\"" + ], + "path": "x-pack/plugins/alerting/server/saved_objects/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-server.RuleActionParams", diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index d40ce5a71c17..adc70de11450 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 822 | 1 | 791 | 51 | +| 823 | 1 | 792 | 51 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index bf2e4195bbde..245012914fc8 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 3492827c5f16..9a120eebe3ed 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index b99e057c430c..0ac5809fbca3 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 45ef7d3af1b4..e9816c6447a1 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-12-18 +date: 2023-12-20 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 34c44f5a72c8..93201fe17984 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-12-18 +date: 2023-12-20 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 54443dab0bb1..cac829ab7930 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-12-18 +date: 2023-12-20 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 f6ed79fed21c..de2829ce93f0 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-12-18 +date: 2023-12-20 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 5922ea4676ff..5196545d7539 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-12-18 +date: 2023-12-20 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 56e061837c34..5867d5b82570 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index dfab273f2a8a..c169145b714b 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-12-18 +date: 2023-12-20 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 6c2e123b2daa..deac1416f138 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-12-18 +date: 2023-12-20 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 02a383a8bd04..b60f92510930 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-12-18 +date: 2023-12-20 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 fd3451cd8b25..d8dac36a8e49 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-12-18 +date: 2023-12-20 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 0a88f9c0d6bb..ba0a1ca7370a 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index 20b386f71265..f997d267fc3c 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 51d15d378ee8..e28e0be933f7 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-12-18 +date: 2023-12-20 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 bcf15e3402ff..e1cd80030b4e 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-12-18 +date: 2023-12-20 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 9f59b08b3f38..4ab19494bc12 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.devdocs.json b/api_docs/dashboard_enhanced.devdocs.json index 96cce4041b2b..56c455e6df7a 100644 --- a/api_docs/dashboard_enhanced.devdocs.json +++ b/api_docs/dashboard_enhanced.devdocs.json @@ -910,8 +910,8 @@ "pluginId": "uiActionsEnhanced", "scope": "server", "docId": "kibUiActionsEnhancedPluginApi", - "section": "def-server.SetupContract", - "text": "SetupContract" + "section": "def-server.UiActionsEnhancedServerSetup", + "text": "UiActionsEnhancedServerSetup" } ], "path": "x-pack/plugins/dashboard_enhanced/server/plugin.ts", diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index b7a5d18a76ff..c408255e9e43 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-12-18 +date: 2023-12-20 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 02c66c81bc71..8de976a26740 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-12-18 +date: 2023-12-20 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 86f96ae96012..cbae12b08c27 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 632c5c0c65c9..cfa083d446c5 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -39838,7 +39838,7 @@ "section": "def-common.Filter", "text": "Filter" }, - "[]; type: \"kibana_context\"; query?: ", + "[]; type: \"kibana_context\"; now?: number | undefined; query?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -40181,7 +40181,7 @@ "section": "def-common.Filter", "text": "Filter" }, - "[]; type: \"kibana_context\"; query?: ", + "[]; type: \"kibana_context\"; now?: number | undefined; query?: ", { "pluginId": "@kbn/es-query", "scope": "common", diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index dcd50dc9f7f3..fb8259e59b2a 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-12-18 +date: 2023-12-20 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 22d26ca448f3..e26826340650 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-12-18 +date: 2023-12-20 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 958f49dd1b01..dfa448a4bf5c 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-12-18 +date: 2023-12-20 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 3fcd74bf2db2..4c1454ea6e64 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-12-18 +date: 2023-12-20 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 39ed6985bfed..64dfa575555f 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-12-18 +date: 2023-12-20 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 239072819697..74551d06871f 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.devdocs.json b/api_docs/dataset_quality.devdocs.json index 70ddd3bed113..0d7e9842ff93 100644 --- a/api_docs/dataset_quality.devdocs.json +++ b/api_docs/dataset_quality.devdocs.json @@ -113,18 +113,8 @@ "; }>, ", "PartialC", "<{ type: ", - "UnionC", - "<[", - "LiteralC", - "<\"logs\">, ", - "LiteralC", - "<\"metrics\">, ", - "LiteralC", - "<\"traces\">, ", - "LiteralC", - "<\"synthetics\">, ", - "LiteralC", - "<\"profiling\">]>; }>, ", + "KeyofC", + "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", "PartialC", "<{ datasetQuery: ", "StringC", @@ -139,28 +129,14 @@ "<[", "PartialC", "<{ type: ", - "UnionC", - "<[", - "LiteralC", - "<\"logs\">, ", - "LiteralC", - "<\"metrics\">, ", - "LiteralC", - "<\"traces\">, ", - "LiteralC", - "<\"synthetics\">, ", - "LiteralC", - "<\"profiling\">]>; }>, ", + "KeyofC", + "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", "PartialC", "<{ datasetQuery: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ", - "DataStreamStat", - "[]; integrations: ", - "Integration", - "[]; }>; } & ", + " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ({ name: string; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; })[]; integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ path: string; src: string; } & { title?: string | undefined; size?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: infer TRouteParamsRT | undefined; handler: ({}: any) => Promise; } & ", "ServerRouteCreateOptions", @@ -200,18 +176,8 @@ "; }>, ", "PartialC", "<{ type: ", - "UnionC", - "<[", - "LiteralC", - "<\"logs\">, ", - "LiteralC", - "<\"metrics\">, ", - "LiteralC", - "<\"traces\">, ", - "LiteralC", - "<\"synthetics\">, ", - "LiteralC", - "<\"profiling\">]>; }>, ", + "KeyofC", + "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", "PartialC", "<{ datasetQuery: ", "StringC", @@ -226,28 +192,14 @@ "<[", "PartialC", "<{ type: ", - "UnionC", - "<[", - "LiteralC", - "<\"logs\">, ", - "LiteralC", - "<\"metrics\">, ", - "LiteralC", - "<\"traces\">, ", - "LiteralC", - "<\"synthetics\">, ", - "LiteralC", - "<\"profiling\">]>; }>, ", + "KeyofC", + "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", "PartialC", "<{ datasetQuery: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ", - "DataStreamStat", - "[]; integrations: ", - "Integration", - "[]; }>; } & ", + " & { params: { query: { type?: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ dataStreamsStats: ({ name: string; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; })[]; integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ path: string; src: string; } & { title?: string | undefined; size?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", "ServerRouteCreateOptions", diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 81cc0ab9b84f..309a3527d395 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 8 | 0 | 8 | 4 | +| 8 | 0 | 8 | 2 | ## Client diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index f4bea6a1ef33..b2a7f60ba614 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index a11224493d68..1f71eaa96d1b 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index ab3591dba257..d01634d94f30 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index eeda4c2b542e..05a42dfee4f9 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index ee434fed5783..d21ac3589526 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -133,11 +133,11 @@ ], "signature": [ { - "pluginId": "@kbn/unified-data-table", + "pluginId": "savedSearch", "scope": "common", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-common.UnifiedDataTableSettings", - "text": "UnifiedDataTableSettings" + "docId": "kibSavedSearchPluginApi", + "section": "def-common.DiscoverGridSettings", + "text": "DiscoverGridSettings" }, " | undefined" ], @@ -883,99 +883,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "discover", - "id": "def-public.FlyoutContentActions", - "type": "Interface", - "tags": [], - "label": "FlyoutContentActions", - "description": [], - "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "discover", - "id": "def-public.FlyoutContentActions.addFilter", - "type": "Function", - "tags": [], - "label": "addFilter", - "description": [], - "signature": [ - "DocViewFilterFn", - " | undefined" - ], - "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.FlyoutContentActions.addColumn", - "type": "Function", - "tags": [], - "label": "addColumn", - "description": [], - "signature": [ - "(column: string) => void" - ], - "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "discover", - "id": "def-public.FlyoutContentActions.addColumn.$1", - "type": "string", - "tags": [], - "label": "column", - "description": [], - "signature": [ - "string" - ], - "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "discover", - "id": "def-public.FlyoutContentActions.removeColumn", - "type": "Function", - "tags": [], - "label": "removeColumn", - "description": [], - "signature": [ - "(column: string) => void" - ], - "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "discover", - "id": "def-public.FlyoutContentActions.removeColumn.$1", - "type": "string", - "tags": [], - "label": "column", - "description": [], - "signature": [ - "string" - ], - "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, { "parentPluginId": "discover", "id": "def-public.FlyoutContentProps", @@ -995,13 +902,9 @@ "label": "actions", "description": [], "signature": [ - { - "pluginId": "discover", - "scope": "public", - "docId": "kibDiscoverPluginApi", - "section": "def-public.FlyoutContentActions", - "text": "FlyoutContentActions" - } + "{ filter?: ", + "DocViewFilterFn", + " | undefined; onAddColumn?: ((columnName: string) => void) | undefined; onRemoveColumn?: ((columnName: string) => void) | undefined; }" ], "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", "deprecated": false, @@ -1133,6 +1036,43 @@ "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "discover", + "id": "def-public.FlyoutCustomization.docViewsRegistry", + "type": "CompoundType", + "tags": [], + "label": "docViewsRegistry", + "description": [], + "signature": [ + { + "pluginId": "@kbn/unified-doc-viewer", + "scope": "common", + "docId": "kibKbnUnifiedDocViewerPluginApi", + "section": "def-common.DocViewsRegistry", + "text": "DocViewsRegistry" + }, + " | ((prevRegistry: ", + { + "pluginId": "@kbn/unified-doc-viewer", + "scope": "common", + "docId": "kibKbnUnifiedDocViewerPluginApi", + "section": "def-common.DocViewsRegistry", + "text": "DocViewsRegistry" + }, + ") => ", + { + "pluginId": "@kbn/unified-doc-viewer", + "scope": "common", + "docId": "kibKbnUnifiedDocViewerPluginApi", + "section": "def-common.DocViewsRegistry", + "text": "DocViewsRegistry" + }, + ") | undefined" + ], + "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -1243,8 +1183,8 @@ "pluginId": "share", "scope": "public", "docId": "kibSharePluginApi", - "section": "def-public.SharePluginStart", - "text": "SharePluginStart" + "section": "def-public.SharePublicStart", + "text": "SharePublicStart" }, " | undefined; }" ], @@ -2666,6 +2606,29 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "discover", + "id": "def-common.DiscoverAppLocatorParams.grid", + "type": "Object", + "tags": [], + "label": "grid", + "description": [ + "\nData Grid related state" + ], + "signature": [ + { + "pluginId": "savedSearch", + "scope": "common", + "docId": "kibSavedSearchPluginApi", + "section": "def-common.DiscoverGridSettings", + "text": "DiscoverGridSettings" + }, + " | undefined" + ], + "path": "src/plugins/discover/common/locator.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "discover", "id": "def-common.DiscoverAppLocatorParams.interval", diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 50ed757f8e75..1623ea1ab919 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 141 | 0 | 96 | 21 | +| 137 | 0 | 91 | 21 | ## Client diff --git a/api_docs/discover_enhanced.devdocs.json b/api_docs/discover_enhanced.devdocs.json index f0194c72301a..080bcfd52756 100644 --- a/api_docs/discover_enhanced.devdocs.json +++ b/api_docs/discover_enhanced.devdocs.json @@ -622,8 +622,8 @@ "pluginId": "share", "scope": "public", "docId": "kibSharePluginApi", - "section": "def-public.SharePluginSetup", - "text": "SharePluginSetup" + "section": "def-public.SharePublicSetup", + "text": "SharePublicSetup" }, " | undefined" ], @@ -743,8 +743,8 @@ "pluginId": "share", "scope": "public", "docId": "kibSharePluginApi", - "section": "def-public.SharePluginStart", - "text": "SharePluginStart" + "section": "def-public.SharePublicStart", + "text": "SharePublicStart" }, " | undefined" ], diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 338829c6ed47..24a9c9bc9a03 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-12-18 +date: 2023-12-20 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 8479686b3104..ee97616a9a10 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index a2c2b504dfbe..1df64189eba3 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index 426bbd6909c6..c840f13b2782 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -1774,8 +1774,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" } ], "path": "src/plugins/embeddable/public/embeddable_panel/panel_actions/customize_panel_action/customize_panel_action.tsx", diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 8389a899ba22..466683e75428 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-12-18 +date: 2023-12-20 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 ff1e67822fa7..05c1f0c349e0 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-12-18 +date: 2023-12-20 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 a47111610dcd..caace4728e9d 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-12-18 +date: 2023-12-20 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 7fd3eaca41e5..42daa2becb86 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-12-18 +date: 2023-12-20 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 c2624f82921b..654b46b0c5e4 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-12-18 +date: 2023-12-20 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 f571e4f8740f..8b2e0bcb53fb 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 15e6be951ac7..25a74bf46d0e 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index e40a78ff7525..a9b9113640bc 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.devdocs.json b/api_docs/exploratory_view.devdocs.json index 9c86024cc4f6..5e286318a034 100644 --- a/api_docs/exploratory_view.devdocs.json +++ b/api_docs/exploratory_view.devdocs.json @@ -460,10 +460,10 @@ "pluginId": "exploratoryView", "scope": "public", "docId": "kibExploratoryViewPluginApi", - "section": "def-public.AllSeries", - "text": "AllSeries" + "section": "def-public.SeriesUrl", + "text": "SeriesUrl" }, - " | undefined" + "[]" ], "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", "deprecated": false, @@ -525,20 +525,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "exploratoryView", - "id": "def-public.ExploratoryEmbeddableProps.customLensAttrs", - "type": "Any", - "tags": [], - "label": "customLensAttrs", - "description": [], - "signature": [ - "any" - ], - "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "exploratoryView", "id": "def-public.ExploratoryEmbeddableProps.customTimeRange", diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index bfe5801abe7b..a52100f992de 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 131 | 1 | 131 | 14 | +| 130 | 0 | 130 | 14 | ## Client diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index e4ef7e053a2e..a9e936abeddf 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-12-18 +date: 2023-12-20 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 f0ede837beaf..4cca71abe079 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-12-18 +date: 2023-12-20 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 a5d6315c6626..6b5b21f4fb20 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-12-18 +date: 2023-12-20 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 90059d8cff95..c77f8c64853d 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-12-18 +date: 2023-12-20 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 168f800a0081..0430d47a37ba 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-12-18 +date: 2023-12-20 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 c56f4fa9d8e1..a255b5561126 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-12-18 +date: 2023-12-20 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 98177c030081..5a123ab07f33 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-12-18 +date: 2023-12-20 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 904f4cc1bce6..a856a46b6481 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-12-18 +date: 2023-12-20 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 298193a1737a..278599d9f356 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-12-18 +date: 2023-12-20 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 1e74209d0d39..158fcfa11750 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-12-18 +date: 2023-12-20 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 fa44f87fa5b2..2935d4c8b714 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-12-18 +date: 2023-12-20 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 5108fc980834..d2a4a1381c97 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-12-18 +date: 2023-12-20 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 d3c7f84749c5..232a524194c7 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index d3440d35400c..93beda5bfdfb 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -9020,6 +9020,67 @@ "path": "src/plugins/expressions/common/expression_functions/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "expressions", + "id": "def-public.ExpressionFunctionDefinitions.math_column", + "type": "Object", + "tags": [], + "label": "math_column", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExpressionFunctionDefinition", + "text": "ExpressionFunctionDefinition" + }, + "<\"mathColumn\", ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.Datatable", + "text": "Datatable" + }, + ", ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.MathColumnArguments", + "text": "MathColumnArguments" + }, + ", Promise<", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.Datatable", + "text": "Datatable" + }, + ">, ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExecutionContext", + "text": "ExecutionContext" + }, + "<", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Adapters", + "text": "Adapters" + }, + ">>" + ], + "path": "src/plugins/expressions/common/expression_functions/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -20315,6 +20376,67 @@ "path": "src/plugins/expressions/common/expression_functions/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "expressions", + "id": "def-server.ExpressionFunctionDefinitions.math_column", + "type": "Object", + "tags": [], + "label": "math_column", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExpressionFunctionDefinition", + "text": "ExpressionFunctionDefinition" + }, + "<\"mathColumn\", ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.Datatable", + "text": "Datatable" + }, + ", ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.MathColumnArguments", + "text": "MathColumnArguments" + }, + ", Promise<", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.Datatable", + "text": "Datatable" + }, + ">, ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExecutionContext", + "text": "ExecutionContext" + }, + "<", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Adapters", + "text": "Adapters" + }, + ">>" + ], + "path": "src/plugins/expressions/common/expression_functions/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -33114,6 +33236,67 @@ "path": "src/plugins/expressions/common/expression_functions/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "expressions", + "id": "def-common.ExpressionFunctionDefinitions.math_column", + "type": "Object", + "tags": [], + "label": "math_column", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExpressionFunctionDefinition", + "text": "ExpressionFunctionDefinition" + }, + "<\"mathColumn\", ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.Datatable", + "text": "Datatable" + }, + ", ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.MathColumnArguments", + "text": "MathColumnArguments" + }, + ", Promise<", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.Datatable", + "text": "Datatable" + }, + ">, ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExecutionContext", + "text": "ExecutionContext" + }, + "<", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Adapters", + "text": "Adapters" + }, + ">>" + ], + "path": "src/plugins/expressions/common/expression_functions/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index b98eb7026244..032e5d0349a1 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2208 | 17 | 1749 | 5 | +| 2211 | 17 | 1752 | 5 | ## Client diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 454c8f03367d..37a7f280f7a6 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-12-18 +date: 2023-12-20 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 9dd0b97e64ec..a2cd495db106 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-12-18 +date: 2023-12-20 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 4021ba58c7f2..4b9eaff4fd17 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.devdocs.json b/api_docs/files.devdocs.json index 12fa5d46818a..691ce183b498 100644 --- a/api_docs/files.devdocs.json +++ b/api_docs/files.devdocs.json @@ -524,10 +524,10 @@ "objects": [], "setup": { "parentPluginId": "files", - "id": "def-public.FilesSetup", + "id": "def-public.FilesPublicSetup", "type": "Interface", "tags": [], - "label": "FilesSetup", + "label": "FilesPublicSetup", "description": [ "\nPublic setup-phase contract" ], @@ -537,7 +537,7 @@ "children": [ { "parentPluginId": "files", - "id": "def-public.FilesSetup.filesClientFactory", + "id": "def-public.FilesPublicSetup.filesClientFactory", "type": "Object", "tags": [ "track-adoption" @@ -597,7 +597,7 @@ }, { "parentPluginId": "files", - "id": "def-public.FilesSetup.registerFileKind", + "id": "def-public.FilesPublicSetup.registerFileKind", "type": "Function", "tags": [], "label": "registerFileKind", @@ -621,7 +621,7 @@ "children": [ { "parentPluginId": "files", - "id": "def-public.FilesSetup.registerFileKind.$1", + "id": "def-public.FilesPublicSetup.registerFileKind.$1", "type": "Object", "tags": [], "label": "fileKind", @@ -651,10 +651,10 @@ }, "start": { "parentPluginId": "files", - "id": "def-public.FilesStart", + "id": "def-public.FilesPublicStart", "type": "Type", "tags": [], - "label": "FilesStart", + "label": "FilesPublicStart", "description": [], "signature": [ "Pick<", @@ -662,8 +662,8 @@ "pluginId": "files", "scope": "public", "docId": "kibFilesPluginApi", - "section": "def-public.FilesSetup", - "text": "FilesSetup" + "section": "def-public.FilesPublicSetup", + "text": "FilesPublicSetup" }, ", \"filesClientFactory\"> & { getFileKindDefinition: (id: string) => ", { @@ -5317,10 +5317,10 @@ "objects": [], "setup": { "parentPluginId": "files", - "id": "def-server.FilesSetup", + "id": "def-server.FilesServerSetup", "type": "Interface", "tags": [], - "label": "FilesSetup", + "label": "FilesServerSetup", "description": [ "\nFiles plugin setup contract" ], @@ -5330,7 +5330,7 @@ "children": [ { "parentPluginId": "files", - "id": "def-server.FilesSetup.registerFileKind", + "id": "def-server.FilesServerSetup.registerFileKind", "type": "Function", "tags": [ "track-adoption" @@ -5398,7 +5398,7 @@ "children": [ { "parentPluginId": "files", - "id": "def-server.FilesSetup.registerFileKind.$1", + "id": "def-server.FilesServerSetup.registerFileKind.$1", "type": "Object", "tags": [], "label": "fileKind", @@ -5428,10 +5428,10 @@ }, "start": { "parentPluginId": "files", - "id": "def-server.FilesStart", + "id": "def-server.FilesServerStart", "type": "Interface", "tags": [], - "label": "FilesStart", + "label": "FilesServerStart", "description": [ "\nFiles plugin start contract" ], @@ -5441,7 +5441,7 @@ "children": [ { "parentPluginId": "files", - "id": "def-server.FilesStart.fileServiceFactory", + "id": "def-server.FilesServerStart.fileServiceFactory", "type": "Object", "tags": [ "track-adoption" diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 6c07fffc51ff..c21eec2cbe5b 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-12-18 +date: 2023-12-20 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 68987d9cd7ac..d578eacf9ffe 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-12-18 +date: 2023-12-20 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 73c4dee2f127..056dc4d6fb60 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-12-18 +date: 2023-12-20 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 f1c3f3cc1a91..a19c4362e84b 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-12-18 +date: 2023-12-20 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 c042e6144fe7..61902a7030a9 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-12-18 +date: 2023-12-20 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 a9abb45c37c8..87256269da45 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-12-18 +date: 2023-12-20 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 674b8f7effdd..1baf60cb540e 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-12-18 +date: 2023-12-20 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 b778b3382f0b..06a730d0ba9f 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-12-18 +date: 2023-12-20 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 c684d47e6b02..1a450bb87e9b 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-12-18 +date: 2023-12-20 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 a919b307e682..8216c86f9bab 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-12-18 +date: 2023-12-20 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 8fa62f4d2d67..b4632bcd58c0 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-12-18 +date: 2023-12-20 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 ac5f555034a9..73b04a3df72e 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-12-18 +date: 2023-12-20 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 74dbf76765b6..1cbd11dfd0d0 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 171a14fb69ef..f51172b1a406 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index e1f95801b346..121f39152fd0 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-12-18 +date: 2023-12-20 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 c0c27ef3e91f..8f1195e363d7 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index bb2aedd617e1..7fb9322954dd 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 056a90759df2..e6904e0c59ff 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 42af610a54bf..31ec9aeb7e85 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 55e03d25df5e..1fb4cd71832a 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 22e5f87e5d94..5c12f240b701 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-12-18 +date: 2023-12-20 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 e0fb45d2a34e..59e01e8711ac 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 2ae989f1fbf2..19f35f51788c 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -731,12 +731,12 @@ "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" }, { - "plugin": "observabilityAIAssistant", - "path": "x-pack/plugins/observability_ai_assistant/public/analytics/index.ts" + "plugin": "fleet", + "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" }, { "plugin": "observabilityAIAssistant", - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx" + "path": "x-pack/plugins/observability_ai_assistant/public/analytics/index.ts" }, { "plugin": "apm", diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 27fad748961d..1af704771620 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index b332ba2f1507..52d45c656ac9 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.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 4c05abf6d906..2f3eccb35f7a 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-12-18 +date: 2023-12-20 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 b43c90a0540a..8f05e511bcac 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-12-18 +date: 2023-12-20 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 8ce9b7942e34..16e2cbff3383 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-12-18 +date: 2023-12-20 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 2c4f25586b71..5ef08bb07042 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-12-18 +date: 2023-12-20 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 9c2c36886a07..d9fbce1b7091 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-12-18 +date: 2023-12-20 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 35a46cc2c1e4..7fd594402e9a 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-12-18 +date: 2023-12-20 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 b34e7d0b790f..bbf5c2e0afd8 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-12-18 +date: 2023-12-20 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.devdocs.json b/api_docs/kbn_apm_synthtrace_client.devdocs.json index c3d0a4f306d8..ed09a5e431a2 100644 --- a/api_docs/kbn_apm_synthtrace_client.devdocs.json +++ b/api_docs/kbn_apm_synthtrace_client.devdocs.json @@ -2510,9 +2510,11 @@ "signature": [ "{ '@timestamp'?: number | undefined; } & Partial<{ meta: { 'metricset.id': string; }; }> & Partial<{ 'timestamp.us'?: number | undefined; 'agent.name': string; 'agent.version': string; 'client.geo.city_name': string; 'client.geo.continent_name': string; 'client.geo.country_iso_code': string; 'client.geo.country_name': string; 'client.geo.location': ", "GeoLocation", - "; 'client.geo.region_iso_code': string; 'client.geo.region_name': string; 'client.ip': string; 'cloud.account.id': string; 'cloud.account.name': string; 'cloud.availability_zone': string; 'cloud.machine.type': string; 'cloud.project.id': string; 'cloud.project.name': string; 'cloud.provider': string; 'cloud.region': string; 'cloud.service.name': string; 'container.id': string; 'destination.address': string; 'destination.port': number; 'device.id': string; 'device.manufacturer': string; 'device.model.identifier': string; 'device.model.name': string; 'ecs.version': string; 'error.exception': ", + "; 'client.geo.region_iso_code': string; 'client.geo.region_name': string; 'client.ip': string; 'cloud.account.id': string; 'cloud.account.name': string; 'cloud.availability_zone': string; 'cloud.machine.type': string; 'cloud.project.id': string; 'cloud.project.name': string; 'cloud.provider': string; 'cloud.region': string; 'cloud.service.name': string; 'code.stacktrace': string; 'container.id': string; 'destination.address': string; 'destination.port': number; 'device.id': string; 'device.manufacturer': string; 'device.model.identifier': string; 'device.model.name': string; 'ecs.version': string; 'error.exception': ", "ApmException", - "[]; 'error.grouping_key': string; 'error.grouping_name': string; 'error.id': string; 'error.type': string; 'event.ingested': number; 'event.name': string; 'event.action': string; 'event.outcome': string; 'event.outcome_numeric': number | { sum: number; value_count: number; }; 'faas.coldstart': boolean; 'faas.execution': string; 'faas.id': string; 'faas.name': string; 'faas.trigger.type': string; 'faas.version': string; 'host.architecture': string; 'host.hostname': string; 'host.name': string; 'host.os.full': string; 'host.os.name': string; 'host.os.platform': string; 'host.os.type': string; 'host.os.version': string; 'http.request.method': string; 'http.response.status_code': number; 'kubernetes.pod.name': string; 'kubernetes.pod.uid': string; 'labels.name': string; 'labels.telemetry_auto_version': string; 'labels.lifecycle_state': string; 'metricset.name': string; 'network.carrier.icc': string; 'network.carrier.mcc': string; 'network.carrier.mnc': string; 'network.carrier.name': string; 'network.connection.subtype': string; 'network.connection.type': string; 'observer.type': string; 'observer.version_major': number; 'observer.version': string; 'parent.id': string; 'processor.event': string; 'processor.name': string; 'session.id': string; 'trace.id': string; 'transaction.aggregation.overflow_count': number; 'transaction.duration.us': number; 'transaction.id': string; 'transaction.name': string; 'transaction.type': string; 'transaction.duration.histogram': { values: number[]; counts: number[]; }; 'transaction.result': string; 'transaction.sampled': boolean; 'service.environment': string; 'service.framework.name': string; 'service.framework.version': string; 'service.language.name': string; 'service.language.version': string; 'service.name': string; 'service.node.name': string; 'service.runtime.name': string; 'service.runtime.version': string; 'service.target.name': string; 'service.target.type': string; 'service.version': string; 'span.action': string; 'span.destination.service.resource': string; 'span.destination.service.response_time.count': number; 'span.destination.service.response_time.sum.us': number; 'span.duration.us': number; 'span.id': string; 'span.name': string; 'span.self_time.count': number; 'span.self_time.sum.us': number; 'span.subtype': string; 'span.type': string; 'span.links': { trace: { id: string; }; span: { id: string; }; }[]; 'url.original': string; }> & Partial<{ 'system.process.memory.size': number; 'system.memory.actual.free': number; 'system.memory.total': number; 'system.process.cgroup.memory.mem.limit.bytes': number; 'system.process.cgroup.memory.mem.usage.bytes': number; 'system.cpu.total.norm.pct': number; 'system.process.memory.rss.bytes': number; 'system.process.cpu.total.norm.pct': number; 'jvm.memory.heap.used': number; 'jvm.memory.non_heap.used': number; 'jvm.thread.count': number; 'faas.billed_duration': number; 'faas.timeout': number; 'faas.coldstart_duration': number; 'faas.duration': number; 'application.launch.time': number; }> & Partial<{ 'metricset.interval': string; 'transaction.duration.summary': string; }>" + "[]; 'error.grouping_key': string; 'error.grouping_name': string; 'error.id': string; 'error.type': string; 'event.ingested': number; 'event.name': string; 'event.action': string; 'event.outcome': string; 'event.outcome_numeric': number | { sum: number; value_count: number; }; 'faas.coldstart': boolean; 'faas.execution': string; 'faas.id': string; 'faas.name': string; 'faas.trigger.type': string; 'faas.version': string; 'host.architecture': string; 'host.hostname': string; 'host.name': string; 'host.os.full': string; 'host.os.name': string; 'host.os.platform': string; 'host.os.type': string; 'host.os.version': string; 'http.request.method': string; 'http.response.status_code': number; 'kubernetes.pod.name': string; 'kubernetes.pod.uid': string; 'labels.name': string; 'labels.telemetry_auto_version': string; 'labels.lifecycle_state': string; 'metricset.name': string; 'network.carrier.icc': string; 'network.carrier.mcc': string; 'network.carrier.mnc': string; 'network.carrier.name': string; 'network.connection.subtype': string; 'network.connection.type': string; 'observer.type': string; 'observer.version_major': number; 'observer.version': string; 'parent.id': string; 'processor.event': string; 'processor.name': string; 'session.id': string; 'trace.id': string; 'transaction.aggregation.overflow_count': number; 'transaction.duration.us': number; 'transaction.id': string; 'transaction.name': string; 'transaction.type': string; 'transaction.duration.histogram': { values: number[]; counts: number[]; }; 'transaction.result': string; 'transaction.sampled': boolean; 'service.environment': string; 'service.framework.name': string; 'service.framework.version': string; 'service.language.name': string; 'service.language.version': string; 'service.name': string; 'service.node.name': string; 'service.runtime.name': string; 'service.runtime.version': string; 'service.target.name': string; 'service.target.type': string; 'service.version': string; 'span.action': string; 'span.destination.service.resource': string; 'span.destination.service.response_time.count': number; 'span.destination.service.response_time.sum.us': number; 'span.duration.us': number; 'span.id': string; 'span.name': string; 'span.stacktrace': ", + "APMStacktrace", + "[]; 'span.self_time.count': number; 'span.self_time.sum.us': number; 'span.subtype': string; 'span.type': string; 'span.links': { trace: { id: string; }; span: { id: string; }; }[]; 'url.original': string; }> & Partial<{ 'system.process.memory.size': number; 'system.memory.actual.free': number; 'system.memory.total': number; 'system.process.cgroup.memory.mem.limit.bytes': number; 'system.process.cgroup.memory.mem.usage.bytes': number; 'system.cpu.total.norm.pct': number; 'system.process.memory.rss.bytes': number; 'system.process.cpu.total.norm.pct': number; 'jvm.memory.heap.used': number; 'jvm.memory.non_heap.used': number; 'jvm.thread.count': number; 'faas.billed_duration': number; 'faas.timeout': number; 'faas.coldstart_duration': number; 'faas.duration': number; 'application.launch.time': number; }> & Partial<{ 'metricset.interval': string; 'transaction.duration.summary': string; }>" ], "path": "packages/kbn-apm-synthtrace-client/src/lib/apm/apm_fields.ts", "deprecated": false, diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 340463576183..0a1418a7d31b 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 188 | 0 | 188 | 27 | +| 188 | 0 | 188 | 28 | ## Common diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 2573d0417601..d564479d022d 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-12-18 +date: 2023-12-20 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 a91a5a8d1dff..ea5defb14a6d 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 5d767b8ca8bc..e825eb91fee4 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index fdba00611b81..9370ac0707dd 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 5fdfc3d8a1f3..6faa4c4037ef 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 6089f4a18146..0f935c59087f 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-12-18 +date: 2023-12-20 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 d69636b052b3..a60ae4b0cedd 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-12-18 +date: 2023-12-20 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 0aa94786c7d4..82f2b5d6cd2d 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-12-18 +date: 2023-12-20 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 a40509d45243..2e5e7e969b6c 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-12-18 +date: 2023-12-20 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 ca41d4b5ed87..3a28582b7012 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-12-18 +date: 2023-12-20 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 a34f052404c5..51d84b583247 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-12-18 +date: 2023-12-20 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 fcd17b60f9a7..9b4cc2cba02f 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-12-18 +date: 2023-12-20 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 5d4387186d93..dfda59935359 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-12-18 +date: 2023-12-20 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 c98e62ee39b2..eda7e1137287 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_owners.devdocs.json b/api_docs/kbn_code_owners.devdocs.json new file mode 100644 index 000000000000..f36c55150282 --- /dev/null +++ b/api_docs/kbn_code_owners.devdocs.json @@ -0,0 +1,175 @@ +{ + "id": "@kbn/code-owners", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/code-owners", + "id": "def-common.getCodeOwnersForFile", + "type": "Function", + "tags": [], + "label": "getCodeOwnersForFile", + "description": [ + "\nGet the GitHub CODEOWNERS for a file in the repository" + ], + "signature": [ + "(filePath: string, reversedCodeowners: ", + { + "pluginId": "@kbn/code-owners", + "scope": "common", + "docId": "kibKbnCodeOwnersPluginApi", + "section": "def-common.PathWithOwners", + "text": "PathWithOwners" + }, + "[] | undefined) => string | undefined" + ], + "path": "packages/kbn-code-owners/src/file_code_owner.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/code-owners", + "id": "def-common.getCodeOwnersForFile.$1", + "type": "string", + "tags": [], + "label": "filePath", + "description": [ + "the file to get code owners for" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-code-owners/src/file_code_owner.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/code-owners", + "id": "def-common.getCodeOwnersForFile.$2", + "type": "Array", + "tags": [], + "label": "reversedCodeowners", + "description": [ + "a cached reversed code owners list, use to speed up multiple requests" + ], + "signature": [ + { + "pluginId": "@kbn/code-owners", + "scope": "common", + "docId": "kibKbnCodeOwnersPluginApi", + "section": "def-common.PathWithOwners", + "text": "PathWithOwners" + }, + "[] | undefined" + ], + "path": "packages/kbn-code-owners/src/file_code_owner.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/code-owners", + "id": "def-common.getPathsWithOwnersReversed", + "type": "Function", + "tags": [], + "label": "getPathsWithOwnersReversed", + "description": [ + "\nGet the .github/CODEOWNERS entries, prepared for path matching.\nThe last matching CODEOWNERS entry has highest precedence:\nhttps://help.github.com/articles/about-codeowners/\nso entries are returned in reversed order to later search for the first match." + ], + "signature": [ + "() => ", + { + "pluginId": "@kbn/code-owners", + "scope": "common", + "docId": "kibKbnCodeOwnersPluginApi", + "section": "def-common.PathWithOwners", + "text": "PathWithOwners" + }, + "[]" + ], + "path": "packages/kbn-code-owners/src/file_code_owner.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/code-owners", + "id": "def-common.PathWithOwners", + "type": "Interface", + "tags": [], + "label": "PathWithOwners", + "description": [], + "path": "packages/kbn-code-owners/src/file_code_owner.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/code-owners", + "id": "def-common.PathWithOwners.path", + "type": "string", + "tags": [], + "label": "path", + "description": [], + "path": "packages/kbn-code-owners/src/file_code_owner.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/code-owners", + "id": "def-common.PathWithOwners.teams", + "type": "string", + "tags": [], + "label": "teams", + "description": [], + "path": "packages/kbn-code-owners/src/file_code_owner.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/code-owners", + "id": "def-common.PathWithOwners.ignorePattern", + "type": "Object", + "tags": [], + "label": "ignorePattern", + "description": [], + "signature": [ + "Ignore" + ], + "path": "packages/kbn-code-owners/src/file_code_owner.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx new file mode 100644 index 000000000000..8f40b76f1516 --- /dev/null +++ b/api_docs/kbn_code_owners.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnCodeOwnersPluginApi +slug: /kibana-dev-docs/api/kbn-code-owners +title: "@kbn/code-owners" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/code-owners plugin +date: 2023-12-20 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] +--- +import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; + + + +Contact [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 8 | 0 | 4 | 0 | + +## Common + +### Functions + + +### Interfaces + + diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index b2bc50ba2d72..eea5fdc3b63a 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-12-18 +date: 2023-12-20 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 6e9701c063df..1d61d5261d95 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-12-18 +date: 2023-12-20 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 c0b12cb8c73b..ffee5680dff6 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-12-18 +date: 2023-12-20 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 b23dc53cac32..1dd83bb9e919 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-12-18 +date: 2023-12-20 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 0057ac674e79..7d26d795cc0b 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-12-18 +date: 2023-12-20 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_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index f7fc00555cde..c6160456ba0c 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 648a85570a45..7a08374bcf7b 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 077c1616ec58..13da50f3da45 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 9706c5a4ff2a..b734c8d7a18f 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 5b682e687b1c..548bf253a4c2 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 0cd7d25af093..646ac64e92f5 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-12-18 +date: 2023-12-20 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 6bbcf077f9ae..a7879e4d3d8b 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-12-18 +date: 2023-12-20 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 cdc49dcfff3d..25289bfe400a 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-12-18 +date: 2023-12-20 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 490bb46e56b1..0f6cb5412bab 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-12-18 +date: 2023-12-20 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 bc499fc8a783..56784937c528 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-12-18 +date: 2023-12-20 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 72b74fc3326a..f6fb22ca1369 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-12-18 +date: 2023-12-20 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 af44f2a45a21..d87a0916ddaa 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-12-18 +date: 2023-12-20 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 193c703933d0..ca7e995b042d 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-12-18 +date: 2023-12-20 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 79eeb4850503..170a694892e3 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-12-18 +date: 2023-12-20 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 3a854a2871a0..8ee8a76549cb 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-12-18 +date: 2023-12-20 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 eeda2267135a..5b78000d8d91 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-12-18 +date: 2023-12-20 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 fa553f51684a..31762b4cb59b 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-12-18 +date: 2023-12-20 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 589c052b12b2..fb1b3ffddcd9 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-12-18 +date: 2023-12-20 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 51d1b3d091b1..7094d688d58d 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-12-18 +date: 2023-12-20 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 ba6bf377dee2..08dd066890f3 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-12-18 +date: 2023-12-20 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 be3ddc0ee739..e6b8399a6fb2 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-12-18 +date: 2023-12-20 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 fbd2ae126893..298111aa0fed 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-12-18 +date: 2023-12-20 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 3c38a19d6ed7..dbb476c98bb8 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-12-18 +date: 2023-12-20 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 10e5c6401695..ebfa6afcb88c 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-12-18 +date: 2023-12-20 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 f3a196140ad0..f1e5c2d4985c 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-12-18 +date: 2023-12-20 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 2e0c62f61d63..4170ccd2b6a6 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-12-18 +date: 2023-12-20 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 d6db51de343f..f0b86d810938 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-12-18 +date: 2023-12-20 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 534948735f57..34236f3571df 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-12-18 +date: 2023-12-20 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 27dcb84c32c5..c51fc1b3c8b8 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-12-18 +date: 2023-12-20 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 0962de3f4313..395a13be812f 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-12-18 +date: 2023-12-20 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 adbb81c1fdfc..3567c91b2750 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-12-18 +date: 2023-12-20 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 50fab91fc636..c82dbdfcda4b 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-12-18 +date: 2023-12-20 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 f1fa152c1c9b..ea3c4459c636 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-12-18 +date: 2023-12-20 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 0bae8ebbb61d..2936975bb78c 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-12-18 +date: 2023-12-20 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 d80f5a1af49a..a77dedb859eb 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-12-18 +date: 2023-12-20 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 fcd2d84585c9..05866c562bb4 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-12-18 +date: 2023-12-20 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 8a403979234e..630a23a542d7 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-12-18 +date: 2023-12-20 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 8caccd3ae268..ada0b777ba4f 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-12-18 +date: 2023-12-20 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 a756035b0284..4eb744e8a258 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-12-18 +date: 2023-12-20 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 23095669443b..78c7b425cd39 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-12-18 +date: 2023-12-20 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 646df9276fe7..cb208e9c0433 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-12-18 +date: 2023-12-20 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 94771e15fac5..ecc04327dc53 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-12-18 +date: 2023-12-20 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 2dba4fea20d0..30f5741da71e 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-12-18 +date: 2023-12-20 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 58e32b924d3c..edebce616150 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-12-18 +date: 2023-12-20 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 db09a6a8c823..9b3b9769fd65 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-12-18 +date: 2023-12-20 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 c8cce322ea43..69f2a57657f4 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-12-18 +date: 2023-12-20 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 b9be5fd3e75e..d7175588a43e 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-12-18 +date: 2023-12-20 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 199212f8e920..9a0d5e597f86 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-12-18 +date: 2023-12-20 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 635b004bdc96..42854703b4af 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-12-18 +date: 2023-12-20 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 a6eaea88dff2..095a92a32b5c 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-12-18 +date: 2023-12-20 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 ee7dd336667c..f15aee88a3db 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-12-18 +date: 2023-12-20 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 2c8b091f7856..d9fe32a1d613 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-12-18 +date: 2023-12-20 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 b7be1fb84e52..82abcf651274 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-12-18 +date: 2023-12-20 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 ed95ed6f07e6..b4b558068186 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-12-18 +date: 2023-12-20 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 dc11b4273af3..e7ad84e90c8e 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-12-18 +date: 2023-12-20 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 d09ace31b27b..4a6b4bfed4e5 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-12-18 +date: 2023-12-20 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 06bc8e23c4ad..6a5f735f86a2 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-12-18 +date: 2023-12-20 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 f383ae942024..3a7991dbf5f4 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-12-18 +date: 2023-12-20 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 a3df7b87884c..51c751beed41 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-12-18 +date: 2023-12-20 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 fe9c0e057426..65cbfab2036a 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-12-18 +date: 2023-12-20 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 fb847974f362..4c6a0b6bf418 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-12-18 +date: 2023-12-20 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 61673518293a..108457965b7b 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-12-18 +date: 2023-12-20 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 84e3cfe7e45b..b0ce16df0323 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-12-18 +date: 2023-12-20 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 72f4da59ee09..75cc5baef38d 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-12-18 +date: 2023-12-20 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 da9605c46a1a..7787852fd47b 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-12-18 +date: 2023-12-20 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 a8b7284092e9..ba79a9400352 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-12-18 +date: 2023-12-20 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 777c1d21ff36..073f3cd3d3d6 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-12-18 +date: 2023-12-20 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 b32d6bbe4f13..3d2d1b3cf603 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-12-18 +date: 2023-12-20 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 97c584d234d8..34383de09320 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-12-18 +date: 2023-12-20 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 cdd0ce8b821a..bf4a485ef597 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-12-18 +date: 2023-12-20 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 c8d46b9066da..1baff418e668 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-12-18 +date: 2023-12-20 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 abc7ff90c58f..bf19251f9852 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-12-18 +date: 2023-12-20 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 26407c48aa55..c75f43c9091a 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-12-18 +date: 2023-12-20 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 00beedd62a1a..c9ac829505fd 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-12-18 +date: 2023-12-20 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.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 975a532fe4dc..9f2a3a12bdd5 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -14695,6 +14695,10 @@ "plugin": "canvas", "path": "x-pack/plugins/canvas/server/routes/workpad/import.ts" }, + { + "plugin": "cloudSecurityPosture", + "path": "x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts" + }, { "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 3f7cb307cc32..efb5ca9a8627 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-12-18 +date: 2023-12-20 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 e04e7d002b67..916f9228d6bc 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-12-18 +date: 2023-12-20 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 80b40ed18e0b..b0002eac4cde 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-12-18 +date: 2023-12-20 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 550bd8fda45d..2f480eac3697 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-12-18 +date: 2023-12-20 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 ad9ca0992b1b..3c9c19fbe0ab 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-12-18 +date: 2023-12-20 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 cb9f63f13b1a..c3efefc42e35 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-12-18 +date: 2023-12-20 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 76f8bd811d59..524fc3c56027 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-12-18 +date: 2023-12-20 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 6f10cbde93a1..fd742237c616 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-12-18 +date: 2023-12-20 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 0727e0bd484c..049cf5508ab0 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-12-18 +date: 2023-12-20 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 9e684933823f..ff3398960d53 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-12-18 +date: 2023-12-20 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 658d527d3064..bb7904f1a7e2 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-12-18 +date: 2023-12-20 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.devdocs.json b/api_docs/kbn_core_lifecycle_browser.devdocs.json index 9dea3ef5f788..f3489db3d9e6 100644 --- a/api_docs/kbn_core_lifecycle_browser.devdocs.json +++ b/api_docs/kbn_core_lifecycle_browser.devdocs.json @@ -807,8 +807,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" } ], "path": "packages/core/lifecycle/core-lifecycle-browser/src/core_start.ts", diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 91627cd13655..3359ce214df0 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-12-18 +date: 2023-12-20 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.devdocs.json b/api_docs/kbn_core_lifecycle_browser_mocks.devdocs.json index 62c07b0d498b..9c0e60e2cd94 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.devdocs.json +++ b/api_docs/kbn_core_lifecycle_browser_mocks.devdocs.json @@ -233,8 +233,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" }, ">; fatalErrors: jest.Mocked<", { @@ -478,8 +478,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" }, ">; fatalErrors: jest.Mocked<", { diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 60b9a1750481..92e2cf6d02c5 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-12-18 +date: 2023-12-20 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 e2a82ec07098..57f23b619747 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-12-18 +date: 2023-12-20 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 8b0f6a3397f9..427d68cd9ea4 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-12-18 +date: 2023-12-20 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 76685a5bbbee..7585d0d2c23c 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-12-18 +date: 2023-12-20 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 f13047197f08..31a4b6325096 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-12-18 +date: 2023-12-20 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 fe1ee0320fd2..c6c149b4a599 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-12-18 +date: 2023-12-20 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 966a11662230..3a893ec3a250 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-12-18 +date: 2023-12-20 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 2f22f46f5504..c2898a671ce2 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-12-18 +date: 2023-12-20 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 7da73dd887ea..4a370c82f909 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-12-18 +date: 2023-12-20 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 7c56b28aaa11..3823aebb76ab 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-12-18 +date: 2023-12-20 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 fea60539d020..970d898d0d8c 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-12-18 +date: 2023-12-20 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 9636268421d9..ef230c858a64 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-12-18 +date: 2023-12-20 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 cbbc6f79e0a7..0738dc8f8c3d 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-12-18 +date: 2023-12-20 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 249a9f243ad2..448876b7c249 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-12-18 +date: 2023-12-20 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 d3517d28baf7..1a2e017640ca 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-12-18 +date: 2023-12-20 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 2df4d8f0c36f..56aa30dba4c5 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-12-18 +date: 2023-12-20 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 6b4d7ab555b1..34fafde085c1 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-12-18 +date: 2023-12-20 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 d426d8d96cf4..e09fba5618dd 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-12-18 +date: 2023-12-20 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 95720f993310..a0349c9b53ed 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-12-18 +date: 2023-12-20 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 fda3e7897a30..d3bfa4169e5b 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-12-18 +date: 2023-12-20 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 a20f89ef876d..d4fb8e133a88 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-12-18 +date: 2023-12-20 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 482aac37947f..e881c62aacd1 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-12-18 +date: 2023-12-20 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 667b3de586bb..8f16e6f81448 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-12-18 +date: 2023-12-20 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 b3c306763223..4b0c81a1c504 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-12-18 +date: 2023-12-20 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 9096726f6f87..8c0dd9c9fe83 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-12-18 +date: 2023-12-20 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_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index eca2061e1244..6dc965a446f0 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index b30994cf53e7..1681c5f47a9b 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 69a197d40973..0d978818515f 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-12-18 +date: 2023-12-20 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 2e5120783968..9064da09b362 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-12-18 +date: 2023-12-20 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 e6e45078e109..7f88a8586bbb 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-12-18 +date: 2023-12-20 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 2b9c468a11b5..71706e6fcfbe 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-12-18 +date: 2023-12-20 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 b469f1091e43..e7ff92d28e49 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-12-18 +date: 2023-12-20 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 cb5397b159ba..3babef55d371 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-12-18 +date: 2023-12-20 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 b121cde27c77..3de72e8ff411 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-12-18 +date: 2023-12-20 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 911005fcaf80..d315bee07fc0 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-12-18 +date: 2023-12-20 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 38f164f47aa3..99238dd4fd2a 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-12-18 +date: 2023-12-20 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.devdocs.json b/api_docs/kbn_core_saved_objects_api_server.devdocs.json index 3756940fe551..cba6a38ce795 100644 --- a/api_docs/kbn_core_saved_objects_api_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_server.devdocs.json @@ -2716,11 +2716,11 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" + "path": "x-pack/plugins/alerting/server/types.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" + "path": "x-pack/plugins/alerting/server/types.ts" }, { "plugin": "alerting", @@ -2748,11 +2748,11 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/types.ts" + "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/types.ts" + "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" }, { "plugin": "savedSearch", diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index f85b2c9b20a4..2f8b013711db 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-12-18 +date: 2023-12-20 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_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 0526d4a6500e..62b278170c19 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-12-18 +date: 2023-12-20 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 317849626b5a..4747c7f8fc14 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-12-18 +date: 2023-12-20 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 e2c07fc6e5fe..ae394f1cf332 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-12-18 +date: 2023-12-20 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 3ceaa17b078a..8f9a96801704 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-12-18 +date: 2023-12-20 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 c09d453c23e5..ff35430ad040 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-12-18 +date: 2023-12-20 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 6525aa51019d..74942dc0b4db 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-12-18 +date: 2023-12-20 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 97a402c613fb..d91a51016a03 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-12-18 +date: 2023-12-20 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 161858bc9135..237e39632690 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-12-18 +date: 2023-12-20 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 a2e247ae7f0e..8cefa52d203b 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-12-18 +date: 2023-12-20 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 bf9bae4fcd9f..82f4839ece5e 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-12-18 +date: 2023-12-20 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 d61def8d8ba8..b43e84a8491a 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-12-18 +date: 2023-12-20 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.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json index 1f1ab10773d0..4625cbdfa68f 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -6181,11 +6181,11 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" + "path": "x-pack/plugins/alerting/server/types.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" + "path": "x-pack/plugins/alerting/server/types.ts" }, { "plugin": "alerting", @@ -6213,11 +6213,11 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/types.ts" + "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/types.ts" + "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" }, { "plugin": "savedSearch", diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 517653f19d05..4e47164ec80c 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-12-18 +date: 2023-12-20 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 e4a0a9b0f9f0..061fa4404dee 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-12-18 +date: 2023-12-20 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 fb8e03f629b7..1f39a2340d61 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-12-18 +date: 2023-12-20 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 39e153de04d6..6af81fdd6371 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-12-18 +date: 2023-12-20 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 a6551b34dd11..0be162fcd236 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-12-18 +date: 2023-12-20 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 af785c9dcbae..44e10756806e 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-12-18 +date: 2023-12-20 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 cbc30a36bffe..aa3e08fc99c6 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-12-18 +date: 2023-12-20 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 7e47b960a041..d129c2e9699e 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-12-18 +date: 2023-12-20 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 0497b2a43ec0..a4156eb3580d 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-12-18 +date: 2023-12-20 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 9b3bf4185168..dfd0ff5f563f 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-12-18 +date: 2023-12-20 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 7a440fac8f33..15efb3c0dfb0 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-12-18 +date: 2023-12-20 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 2eb7b79dbbeb..8a2bd0d4eef0 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-12-18 +date: 2023-12-20 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_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index bae058c2a2c5..903efb2d2116 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.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 b7fd7a7a19f5..5272b17ba6b5 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-12-18 +date: 2023-12-20 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 1d6dc02915b7..ae85352065c8 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-12-18 +date: 2023-12-20 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.devdocs.json b/api_docs/kbn_core_theme_browser.devdocs.json index 5df9c41bed59..0986187fd6c1 100644 --- a/api_docs/kbn_core_theme_browser.devdocs.json +++ b/api_docs/kbn_core_theme_browser.devdocs.json @@ -66,7 +66,9 @@ "type": "Object", "tags": [], "label": "theme$", - "description": [], + "description": [ + "\nAn observable of the currently active theme.\nNote that the observable has a replay effect, so it will emit once during subscriptions." + ], "signature": [ "Observable", "<", @@ -82,50 +84,60 @@ "path": "packages/core/theme/core-theme-browser/src/types.ts", "deprecated": false, "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-theme-browser", - "id": "def-common.ThemeServiceStart", - "type": "Interface", - "tags": [], - "label": "ThemeServiceStart", - "description": [], - "path": "packages/core/theme/core-theme-browser/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/core-theme-browser", - "id": "def-common.ThemeServiceStart.theme$", - "type": "Object", + "id": "def-common.ThemeServiceSetup.getTheme", + "type": "Function", "tags": [], - "label": "theme$", - "description": [], + "label": "getTheme", + "description": [ + "\nReturns the theme currently in use.\nNote that when possible, using the `theme$` observable instead is strongly encouraged, as\nit will allow to react to dynamic theme switch (even if those are not implemented at the moment)" + ], "signature": [ - "Observable", - "<", + "() => ", { "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", "section": "def-common.CoreTheme", "text": "CoreTheme" - }, - ">" + } ], "path": "packages/core/theme/core-theme-browser/src/types.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false } ], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "@kbn/core-theme-browser", + "id": "def-common.ThemeServiceStart", + "type": "Type", + "tags": [], + "label": "ThemeServiceStart", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" + } + ], + "path": "packages/core/theme/core-theme-browser/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index dcc9095057db..c403fd047b5c 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 6 | 0 | 4 | 0 | +| 6 | 0 | 2 | 0 | ## Common ### Interfaces +### Consts, variables and types + + diff --git a/api_docs/kbn_core_theme_browser_mocks.devdocs.json b/api_docs/kbn_core_theme_browser_mocks.devdocs.json index 016a004c920b..fff0ee16833a 100644 --- a/api_docs/kbn_core_theme_browser_mocks.devdocs.json +++ b/api_docs/kbn_core_theme_browser_mocks.devdocs.json @@ -58,7 +58,15 @@ "label": "createSetupContract", "description": [], "signature": [ - "() => jest.Mocked<", + "(theme?: ", + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.CoreTheme", + "text": "CoreTheme" + }, + ") => jest.Mocked<", { "pluginId": "@kbn/core-theme-browser", "scope": "common", @@ -72,7 +80,28 @@ "deprecated": false, "trackAdoption": false, "returnComment": [], - "children": [] + "children": [ + { + "parentPluginId": "@kbn/core-theme-browser-mocks", + "id": "def-common.themeServiceMock.createSetupContract.$1", + "type": "Object", + "tags": [], + "label": "theme", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.CoreTheme", + "text": "CoreTheme" + } + ], + "path": "packages/core/theme/core-theme-browser-mocks/src/theme_service.mock.ts", + "deprecated": false, + "trackAdoption": false + } + ] }, { "parentPluginId": "@kbn/core-theme-browser-mocks", @@ -82,13 +111,21 @@ "label": "createStartContract", "description": [], "signature": [ - "() => jest.Mocked<", + "(theme?: ", { "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.CoreTheme", + "text": "CoreTheme" + }, + ") => jest.Mocked<", + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" }, ">" ], @@ -96,7 +133,28 @@ "deprecated": false, "trackAdoption": false, "returnComment": [], - "children": [] + "children": [ + { + "parentPluginId": "@kbn/core-theme-browser-mocks", + "id": "def-common.themeServiceMock.createStartContract.$1", + "type": "Object", + "tags": [], + "label": "theme", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.CoreTheme", + "text": "CoreTheme" + } + ], + "path": "packages/core/theme/core-theme-browser-mocks/src/theme_service.mock.ts", + "deprecated": false, + "trackAdoption": false + } + ] }, { "parentPluginId": "@kbn/core-theme-browser-mocks", @@ -129,7 +187,15 @@ "label": "createTheme$", "description": [], "signature": [ - "() => ", + "(theme?: ", + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.CoreTheme", + "text": "CoreTheme" + }, + ") => ", "Observable", "<", { @@ -145,7 +211,28 @@ "deprecated": false, "trackAdoption": false, "returnComment": [], - "children": [] + "children": [ + { + "parentPluginId": "@kbn/core-theme-browser-mocks", + "id": "def-common.themeServiceMock.createTheme$.$1", + "type": "Object", + "tags": [], + "label": "theme", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-theme-browser", + "scope": "common", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-common.CoreTheme", + "text": "CoreTheme" + } + ], + "path": "packages/core/theme/core-theme-browser-mocks/src/theme_service.mock.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index ccdbc6c90818..de950736bfaf 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 6 | 0 | 6 | 0 | +| 9 | 0 | 9 | 0 | ## Common diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index a89ca998f7e1..4f1d61590ae6 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-12-18 +date: 2023-12-20 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 97c2a7d1c4f6..231f464db3db 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-12-18 +date: 2023-12-20 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 796fa4641bfb..3cf1536c2d9c 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-12-18 +date: 2023-12-20 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 90261b6029ec..edaaacb4887d 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-12-18 +date: 2023-12-20 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 2e78bd4ecb95..4ba5a4f944dd 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-12-18 +date: 2023-12-20 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 b787fb372d07..f0fad67938c8 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-12-18 +date: 2023-12-20 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 f6ad6aeb00c6..ac2b99490fca 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-12-18 +date: 2023-12-20 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 5dc95c55c2e2..657d10ba32d6 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-12-18 +date: 2023-12-20 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 74e8ecc50a85..dacb1a60213f 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-12-18 +date: 2023-12-20 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 401a6558c3cf..c5c5a1863251 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-12-18 +date: 2023-12-20 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_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index a870f8df64b5..9e0664a60a6b 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index 12f52963f12d..fbd7b533a17a 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 76ead1f6cad7..82fde9834b40 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 1f49fc788d80..832838b23cd6 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-12-18 +date: 2023-12-20 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 5de3db071191..32487c868527 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 5db137898b87..209439442737 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index d722b995af19..fdc7d2b471a5 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index f92815983f17..a7a7b42edc5f 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 21da5176decd..6851c44cd8d3 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 92377b2c836f..168dac22f1c7 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index 4b5d42f73f0f..e93f9eb98e7d 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index b2bb609a9164..dcbb1e7e72b1 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 0a855d60325a..855973318b3b 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index edb1f6c1ef12..0dbf25860143 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 5c408500376d..18e70293bd50 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 6be47aad55d2..a9a7f53acc31 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index ed09ca48b930..d3f6dd79f3df 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 6a63269e6303..90300109368c 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index 095e294b197e..e687ca4a1b4c 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 92e47c1e80ee..0542a938ccff 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index b7821b359a6e..80cafa7dbbd6 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-12-18 +date: 2023-12-20 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 eb2197b02a7e..c9838a7a6fa4 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-12-18 +date: 2023-12-20 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 e36223ee58a1..5ecdf8cb813a 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-12-18 +date: 2023-12-20 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 94c9efb39c80..da8379cb1b7b 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index ed78fcf43194..6568e5067460 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index 0120336a220e..6db8a4679d6c 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -644,7 +644,7 @@ "label": "apis", "description": [], "signature": [ - "{ readonly bulkIndexAlias: string; readonly indexStats: string; readonly byteSizeUnits: string; readonly createAutoFollowPattern: string; readonly createFollower: string; readonly createIndex: string; readonly createSnapshotLifecyclePolicy: string; readonly createRoleMapping: string; readonly createRoleMappingTemplates: string; readonly createRollupJobsRequest: string; readonly createApiKey: string; readonly createPipeline: string; readonly createTransformRequest: string; readonly cronExpressions: string; readonly executeWatchActionModes: string; readonly indexExists: string; readonly multiSearch: string; readonly openIndex: string; readonly putComponentTemplate: string; readonly painlessExecute: string; readonly painlessExecuteAPIContexts: string; readonly putComponentTemplateMetadata: string; readonly putSnapshotLifecyclePolicy: string; readonly putIndexTemplateV1: string; readonly putWatch: string; readonly restApis: string; readonly searchPreference: string; readonly securityApis: string; readonly simulatePipeline: string; readonly tasks: string; readonly timeUnits: string; readonly unfreezeIndex: string; readonly updateTransform: string; }" + "{ readonly bulkIndexAlias: string; readonly indexStats: string; readonly byteSizeUnits: string; readonly createAutoFollowPattern: string; readonly createFollower: string; readonly createIndex: string; readonly createSnapshotLifecyclePolicy: string; readonly createRoleMapping: string; readonly createRoleMappingTemplates: string; readonly createRollupJobsRequest: string; readonly createApiKey: string; readonly createPipeline: string; readonly createTransformRequest: string; readonly cronExpressions: string; readonly executeWatchActionModes: string; readonly indexExists: string; readonly inferTrainedModel: string; readonly multiSearch: string; readonly openIndex: string; readonly putComponentTemplate: string; readonly painlessExecute: string; readonly painlessExecuteAPIContexts: string; readonly putComponentTemplateMetadata: string; readonly putSnapshotLifecyclePolicy: string; readonly putIndexTemplateV1: string; readonly putWatch: string; readonly restApis: string; readonly searchPreference: string; readonly securityApis: string; readonly simulatePipeline: string; readonly tasks: string; readonly timeUnits: string; readonly unfreezeIndex: string; readonly updateTransform: string; }" ], "path": "packages/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index f257a84ee9df..3774d8c765fe 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-12-18 +date: 2023-12-20 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 fc140091aa73..840cc94a4c2d 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 001bcabce306..91490fd580eb 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 8d0379b73bff..6bb9f301e847 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-12-18 +date: 2023-12-20 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 448c81776b53..2f466de40d44 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-12-18 +date: 2023-12-20 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 6b514df2f6ad..848e461f325c 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-12-18 +date: 2023-12-20 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_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index d8736fe7fdbc..1c109848d555 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 0615538ed8ae..ece431c0f2d5 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index e9628df7b871..a95c465a0d76 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index b01bcd77a072..78bc34211c64 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-12-18 +date: 2023-12-20 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 716f5c753935..da64a933321d 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-12-18 +date: 2023-12-20 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 f592656e15c5..1052a1a5c7e4 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.devdocs.json b/api_docs/kbn_es_query.devdocs.json index 60ee58badf7c..f8c36e7dbc2b 100644 --- a/api_docs/kbn_es_query.devdocs.json +++ b/api_docs/kbn_es_query.devdocs.json @@ -5405,6 +5405,20 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.ExecutionContextSearch.now", + "type": "number", + "tags": [], + "label": "now", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-es-query/src/expressions/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/es-query", "id": "def-common.ExecutionContextSearch.filters", diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 033e3da68c8f..7a560bdee786 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 266 | 1 | 206 | 15 | +| 267 | 1 | 207 | 15 | ## Common diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 9679981a4ad5..442cd2ca9b29 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-12-18 +date: 2023-12-20 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 80a5bb8c8d59..a6fcc77473dc 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 6047999634fa..d25b7bef1bef 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 7b0110c1da11..7a32fcc4327f 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 4a53c6bc1be0..42a76bc1e64e 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 57ee7f914069..de2220fb4f75 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index b391dff8f787..433dd6f2d93d 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 981f39a78518..accdfc8e7091 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-12-18 +date: 2023-12-20 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 36ae97691ed4..b14b6e2ff39d 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-12-18 +date: 2023-12-20 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_ftr_common_functional_ui_services.devdocs.json b/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json new file mode 100644 index 000000000000..79a57d84974d --- /dev/null +++ b/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json @@ -0,0 +1,143 @@ +{ + "id": "@kbn/ftr-common-functional-ui-services", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/ftr-common-functional-ui-services", + "id": "def-common.FtrProviderContext", + "type": "Type", + "tags": [], + "label": "FtrProviderContext", + "description": [], + "signature": [ + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.GenericFtrProviderContext", + "text": "GenericFtrProviderContext" + }, + "<{ retryOnStale: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-ui-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { (fn: () => Promise): Promise; wrap(fn: (...args: Args) => Promise): (...args: Args) => Promise; }; }, {}, ProvidedTypeMap<{ retryOnStale: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-ui-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { (fn: () => Promise): Promise; wrap(fn: (...args: Args) => Promise): (...args: Args) => Promise; }; }>, ProvidedTypeMap<{}>>" + ], + "path": "packages/kbn-ftr-common-functional-ui-services/services/ftr_provider_context.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/ftr-common-functional-ui-services", + "id": "def-common.services", + "type": "Object", + "tags": [], + "label": "services", + "description": [], + "path": "packages/kbn-ftr-common-functional-ui-services/services/all.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ftr-common-functional-ui-services", + "id": "def-common.services.retryOnStale", + "type": "Function", + "tags": [], + "label": "retryOnStale", + "description": [], + "signature": [ + "({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-ui-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { (fn: () => Promise): Promise; wrap(fn: (...args: Args) => Promise): (...args: Args) => Promise; }" + ], + "path": "packages/kbn-ftr-common-functional-ui-services/services/all.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/ftr-common-functional-ui-services", + "id": "def-common.services.retryOnStale.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.GenericFtrProviderContext", + "text": "GenericFtrProviderContext" + }, + "<{ retryOnStale: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-ui-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { (fn: () => Promise): Promise; wrap(fn: (...args: Args) => Promise): (...args: Args) => Promise; }; }, {}, ProvidedTypeMap<{ retryOnStale: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-ui-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { (fn: () => Promise): Promise; wrap(fn: (...args: Args) => Promise): (...args: Args) => Promise; }; }>, ProvidedTypeMap<{}>>" + ], + "path": "packages/kbn-ftr-common-functional-ui-services/services/retry_on_stale.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "initialIsOpen": false + } + ] + } +} \ No newline at end of file diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx new file mode 100644 index 000000000000..b1dda159d955 --- /dev/null +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnFtrCommonFunctionalUiServicesPluginApi +slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services +title: "@kbn/ftr-common-functional-ui-services" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/ftr-common-functional-ui-services plugin +date: 2023-12-20 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] +--- +import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; + + + +Contact [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 4 | 0 | 4 | 0 | + +## Common + +### Objects + + +### Consts, variables and types + + diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index bd5b0e7bd90d..ef0c710ee842 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index 3cc35fb60e45..b1336050fd6b 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index fb10b807484c..19bc6d526e10 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index f03fe4ef061f..2730ec77cb85 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-12-18 +date: 2023-12-20 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 3b4f833c4efb..582082df34a8 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-12-18 +date: 2023-12-20 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 4cd9e8e01d40..e7d10d605587 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-12-18 +date: 2023-12-20 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 949665759bd5..ef80f3ee46dc 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-12-18 +date: 2023-12-20 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 1a7d7f457eef..3c12656bb148 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-12-18 +date: 2023-12-20 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 253477e5882e..c0ac5fba635d 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-12-18 +date: 2023-12-20 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 a6338ecff062..658352b07965 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-12-18 +date: 2023-12-20 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 97671be1549a..8e6eb9761b12 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-12-18 +date: 2023-12-20 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 48fddec56fc1..2f50f11de3f4 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 87ebdbf2a77a..80d0a8339770 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 168779660e4b..8a2fd89d07a8 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-12-18 +date: 2023-12-20 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 641cf8d9596a..c500d50f9970 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-12-18 +date: 2023-12-20 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 e10faf6fa36f..f3ed34ef974f 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-12-18 +date: 2023-12-20 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 6706a41f7f85..8ca3b4cc686b 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-12-18 +date: 2023-12-20 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 ea53f8abcf64..14175629d0de 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-12-18 +date: 2023-12-20 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 71abef9698b9..3de7135caca5 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-12-18 +date: 2023-12-20 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 b241fec416b9..e29346003100 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 3e4e05f01392..c328a9523f7f 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 29fa1180055e..d67369e99fb7 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-12-18 +date: 2023-12-20 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 85cc8998c837..2deb751440b9 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-12-18 +date: 2023-12-20 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 bd9ea8ea8054..db808a83e129 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 068f2d5f52f0..cf8d4712ab85 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 92b0090dce58..025e2e2ac4ac 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 2bbd29832872..9d66ef487abd 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index b92019369c1f..e27fb8fde6ad 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index cef98e218627..2587916d3eca 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index e094de228e61..e2e351e44a7a 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index e9cf3555aba3..03888667463b 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 6188476a963c..84a9ff0460b6 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 90340644d4c7..7de2c8af8f74 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index c8b6f4b77fa8..581101683f9d 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 6a8e81ee1afd..6f45cd582b1d 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 88d4e50eb426..c0a82642b3e9 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 4abeebd551b2..b87a7f92012c 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index b13324dd0e5f..7e6eeabac504 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index e2be7f0976c3..eca8ce4c0ed5 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-12-18 +date: 2023-12-20 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_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 3627f26f72e3..e52b8338d535 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index bb670665d482..96a8c10ce122 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index a0994c8ba1d7..4d8fe635e120 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 4fe327028ec1..1ac479cc9ad0 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index b2b874671037..eb54b16550b2 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.devdocs.json b/api_docs/kbn_ml_date_picker.devdocs.json index 333b007030ad..fbe34158d29d 100644 --- a/api_docs/kbn_ml_date_picker.devdocs.json +++ b/api_docs/kbn_ml_date_picker.devdocs.json @@ -476,8 +476,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" } ], "path": "x-pack/packages/ml/date_picker/src/hooks/use_date_picker_context.tsx", diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index c75f23a379ef..4b38a91390f3 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-12-18 +date: 2023-12-20 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_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 2098fdb2090e..c4e3ad459a8b 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index a4873cc57aea..8c5ab1329e5c 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 279c4fc6dc82..33548ea5b09b 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index dc298e02da94..07e67b30d3ec 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-12-18 +date: 2023-12-20 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 c6cf6204e875..0b743eae485b 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-12-18 +date: 2023-12-20 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_kibana_theme.devdocs.json b/api_docs/kbn_ml_kibana_theme.devdocs.json index 56668eebb202..f8b71d98e195 100644 --- a/api_docs/kbn_ml_kibana_theme.devdocs.json +++ b/api_docs/kbn_ml_kibana_theme.devdocs.json @@ -34,8 +34,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" }, ") => { euiTheme: { euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; }; }" ], @@ -55,8 +55,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" } ], "path": "x-pack/packages/ml/kibana_theme/src/hooks.ts", @@ -85,8 +85,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" }, ") => boolean" ], @@ -106,8 +106,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" } ], "path": "x-pack/packages/ml/kibana_theme/src/hooks.ts", diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 7ee4dfda97a3..9939154aa79f 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index c6d7b9dce8d4..87746d0d4e80 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-12-18 +date: 2023-12-20 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 57cddb7fd0ec..554649dde094 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-12-18 +date: 2023-12-20 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_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index 69c56d1eb05c..da82e1a0bb31 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index efd1a6d6f880..6f150ba5c262 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-12-18 +date: 2023-12-20 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_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 1dc71b8d2ef8..cf0c6b27a830 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 7939ad7cd1cf..1ef538818c10 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index f709af3ccb7a..37f6d28a5e54 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 7e5eaa5d7622..ce095c3cb18b 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-12-18 +date: 2023-12-20 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_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 236d4a4b2f22..7945bcea8513 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 23e90604f982..abf54b6acfab 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 8d13454cb9a6..d4cbe6dde603 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-12-18 +date: 2023-12-20 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 e5d7b0aa67eb..d5878e4c69cd 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 4d9378269c2a..fb0d42a4954e 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 99a52143d600..f86fdb41710a 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 22fa9c9b32fb..fe5a6ce52bee 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 33c0d3eed420..c468bf71c06a 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 113433523f14..0b9989f5e6ee 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 263e013d08d6..f4063c9da35d 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 720494699fe7..f8493369a76d 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-12-18 +date: 2023-12-20 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 952a3340af2b..c5200492fde1 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-12-18 +date: 2023-12-20 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 83dbb0c4a7a7..fe239e48b1bb 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-12-18 +date: 2023-12-20 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_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index e16600d18d7b..4f69417afdb4 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 7553359315d6..684b35cc7914 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-12-18 +date: 2023-12-20 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 36f37f53d14e..780791e8fb99 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-12-18 +date: 2023-12-20 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 61c3e5d26ada..a738b8145a3d 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 249bfc33eca4..cfeceaa90b0f 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index c4b75d055001..1f04d4321119 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 84afd18b9252..463cefa369ca 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index ba6ba45c02e7..31f7c73d6d9f 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index ac88554558b2..5f62263cf9ab 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 5b3aca108bdf..e730837d0614 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index ceb1bae3f5e4..94f4da60f029 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index eef506749eff..219366b71df2 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 3d8430dacd6a..53845e86f97a 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index b1e50a15e7ce..c40beda979a8 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-12-18 +date: 2023-12-20 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 5c87c85b8cac..5155ff296239 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-12-18 +date: 2023-12-20 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 36f750b73a82..ce1dc3c64960 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-12-18 +date: 2023-12-20 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 d6e8e3d8460e..cdd494995f0d 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 9bc687cb25d0..6dc4b9176db7 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index f9e334f8d409..2afa6b59c815 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 442aad29a0c5..dad198468838 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 74f62c3d1148..bc95c41a58d0 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index b9c1335e9a66..719d55649c8b 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 7ecfba370b97..06b238b11b93 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index eaa2a48ba19c..6e4772df950b 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index f8367a9d6364..57ed195534fe 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 24a3960a1c0a..c6089a997ac4 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 3c93dadb1bf7..084a03b76449 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 513169c265ec..ab6066ff0814 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index f14474a85f18..65e8bd6973fa 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.devdocs.json b/api_docs/kbn_router_utils.devdocs.json new file mode 100644 index 000000000000..a0649c6bc1ea --- /dev/null +++ b/api_docs/kbn_router_utils.devdocs.json @@ -0,0 +1,65 @@ +{ + "id": "@kbn/router-utils", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/router-utils", + "id": "def-common.getRouterLinkProps", + "type": "Function", + "tags": [], + "label": "getRouterLinkProps", + "description": [ + "\n\ngetRouterLinkProps is an util that enable HTML elements, such buttons, to\nbehave as links." + ], + "signature": [ + "({ href, onClick }: GetRouterLinkPropsDeps) => { href: string | undefined; onClick: (event: React.MouseEvent) => void; }" + ], + "path": "packages/kbn-router-utils/src/get_router_link_props/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/router-utils", + "id": "def-common.getRouterLinkProps.$1", + "type": "Object", + "tags": [], + "label": "{ href, onClick }", + "description": [], + "signature": [ + "GetRouterLinkPropsDeps" + ], + "path": "packages/kbn-router-utils/src/get_router_link_props/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "An object that contains an href and a guardedClick handler that will\nmanage behaviours such as leftClickEvent and event with modifiers (Ctrl, Shift, etc)" + ], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx new file mode 100644 index 000000000000..2bbf09bde925 --- /dev/null +++ b/api_docs/kbn_router_utils.mdx @@ -0,0 +1,30 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnRouterUtilsPluginApi +slug: /kibana-dev-docs/api/kbn-router-utils +title: "@kbn/router-utils" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/router-utils plugin +date: 2023-12-20 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] +--- +import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; + + + +Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 2 | 0 | 1 | 0 | + +## Common + +### Functions + + diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 3180c43267a1..7cec1b9b998b 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index cb60c7dd094c..2b1e0683f309 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 38f097fe924f..26de1a1841cb 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index d41c0802256a..732f1c5da93a 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 4233d24ba2e1..b5de70f4790a 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 2a3033823dc9..28044c354967 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 51f9271840cd..4e80f1e09ae4 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index e305b135925a..872d1241f4c7 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index b104851d38d0..7df39a20835e 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 565460d330f8..0311d655af61 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 862232dddb45..07bf3b3b1d05 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index f941c95b5492..2bb23757570c 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index f8e4514621e0..f27682147670 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 8d88f8f76614..f7419335104c 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index 558a321b34c4..daae2d1b00ee 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index f81cff1580b3..e919e16c4fb9 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 0734c7895794..c10215d400df 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 1ddaf187b940..a1619d922877 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-12-18 +date: 2023-12-20 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 232cabc415b3..2e9e3fda3bd7 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-12-18 +date: 2023-12-20 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 f4ce5b2c3342..2504bf49c085 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-12-18 +date: 2023-12-20 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_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index b34092f1299d..c8566604b272 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 2d709d970aab..d55216dc82dc 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-12-18 +date: 2023-12-20 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 794f6994a43d..aa9796b5717a 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-12-18 +date: 2023-12-20 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 47e4d3d1698f..b3ef203a1a3c 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-12-18 +date: 2023-12-20 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 5eeea34474fa..60abe223e006 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-12-18 +date: 2023-12-20 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 16b9039f1591..9b45eb5442f0 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-12-18 +date: 2023-12-20 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 e629a0f6eba7..9a894c867b64 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-12-18 +date: 2023-12-20 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 80b230c8d46e..696893d05623 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-12-18 +date: 2023-12-20 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 152a29347baf..386155424148 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-12-18 +date: 2023-12-20 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 ce858771df56..67d118226936 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-12-18 +date: 2023-12-20 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 886d2450e6e8..e2c786980f7b 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-12-18 +date: 2023-12-20 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 9a1683a04c3f..731f71bba126 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-12-18 +date: 2023-12-20 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 b46bd21aa7cb..80a6ecd78109 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-12-18 +date: 2023-12-20 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 a73d0f0c940f..f56737b1185d 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-12-18 +date: 2023-12-20 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 64b0c05e696e..92366c91ca28 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index c0ed52337a80..fba7e624924c 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index 826f6bbd1378..bb8191722909 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index c18a6016926a..d19c30dda087 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 8e71bae2f10c..d269700c68f4 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 713af7177d26..69fdcced5a23 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 8a06726da63a..d10b95719787 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 33d60f338abf..0ac8433ce61c 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-12-18 +date: 2023-12-20 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 9d37c94515ba..49f1e02ff5c1 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-12-18 +date: 2023-12-20 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_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 6796d67826db..f65e8e2cbf41 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-12-18 +date: 2023-12-20 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_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 3cfcbfe1cf56..39fc25055313 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-12-18 +date: 2023-12-20 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 7b82f8bf7a12..e71e76571b82 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-12-18 +date: 2023-12-20 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 73d5bd9822f4..ffaa19fe356c 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-12-18 +date: 2023-12-20 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_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 13b0593b32f7..171e417021a5 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 770188c461e6..c50aae83d82f 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index b6f213e2b889..172e010a4c1d 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-12-18 +date: 2023-12-20 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 62d8c13116cf..0900aa85d540 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-12-18 +date: 2023-12-20 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 20a8cd1a7304..ef67141bccf4 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-12-18 +date: 2023-12-20 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 dda277828c55..6b43a7bfaa4f 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-12-18 +date: 2023-12-20 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 16303365d02d..b43071a29b92 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-12-18 +date: 2023-12-20 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_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 4971654e8995..4cd8dafad758 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 5a42c087ad81..46eb79de5c2e 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-12-18 +date: 2023-12-20 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 5d839db1ae2d..e4edf827ef2c 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-12-18 +date: 2023-12-20 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 851638927b34..983664d389a8 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-12-18 +date: 2023-12-20 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 1531e216ee8f..d62e92b1a1e0 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-12-18 +date: 2023-12-20 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 056c8cfc8fe4..5ae9195fabe1 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-12-18 +date: 2023-12-20 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 cd973e58175c..48375e038a4a 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-12-18 +date: 2023-12-20 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 d28204f8e0ef..796aeae4062e 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-12-18 +date: 2023-12-20 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 bf1d71aac218..6d352e3966d9 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-12-18 +date: 2023-12-20 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 76f5d2e4a7b8..beb7f0bcab78 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-12-18 +date: 2023-12-20 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 c96a252daac2..a82ba4392883 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-12-18 +date: 2023-12-20 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 d6942b6e883e..51be93e9e9f2 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-12-18 +date: 2023-12-20 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 06b8260282c9..c61ba39a5739 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-12-18 +date: 2023-12-20 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 d8fb3c8e668f..720dba137db8 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-12-18 +date: 2023-12-20 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 d5811ca35d96..537dff4ff66e 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-12-18 +date: 2023-12-20 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 ec1df21af75f..2288c1079c75 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-12-18 +date: 2023-12-20 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 4c1ae63ef23d..6c0ebc1013fa 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-12-18 +date: 2023-12-20 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 1d60efdc319e..725618eba932 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-12-18 +date: 2023-12-20 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 d53224c0c6dd..d72ca3b1a540 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-12-18 +date: 2023-12-20 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 2ebfc1cab9d6..b1361b01291e 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-12-18 +date: 2023-12-20 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 1d3d99307f26..4c3e1c497c69 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-12-18 +date: 2023-12-20 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 0a0fbb25be8c..e2c9d2f9413c 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-12-18 +date: 2023-12-20 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 3318844c7774..ee8b10c4ce75 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-12-18 +date: 2023-12-20 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 16d54f2874c7..9db659968e67 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-12-18 +date: 2023-12-20 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 22d6951ee70d..c089cd897f9b 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-12-18 +date: 2023-12-20 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 5e8b55c98b51..74b36dd06f45 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-12-18 +date: 2023-12-20 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 2a4c1f6a65b6..2230d89183b5 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-12-18 +date: 2023-12-20 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 4091ee447146..d3f8fb78d0d6 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-12-18 +date: 2023-12-20 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 cbfc7c80261a..768a8cd40f2e 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-12-18 +date: 2023-12-20 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 effc39ee2bb8..b93e19928995 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-12-18 +date: 2023-12-20 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 7182df0229b5..bec40b1c04f3 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-12-18 +date: 2023-12-20 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 fc6aae98b33a..0ac88141ae1e 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.devdocs.json b/api_docs/kbn_test.devdocs.json index a5c463ee362e..5b01c5762fe4 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -2548,6 +2548,23 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/test", + "id": "def-common.runCheckFtrCodeOwnersCli", + "type": "Function", + "tags": [], + "label": "runCheckFtrCodeOwnersCli", + "description": [], + "signature": [ + "() => Promise" + ], + "path": "packages/kbn-test/src/functional_test_runner/run_check_ftr_code_owners.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/test", "id": "def-common.runCheckFtrConfigsCli", diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 9333f4c683f6..b31ff349267d 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 310 | 4 | 262 | 12 | +| 311 | 4 | 263 | 12 | ## Common diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index e7c4f9bf8301..06f466e44a82 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-12-18 +date: 2023-12-20 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 46748c575ba1..1181ce81c9fe 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 63832380c8af..7f126ebb94d9 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index b1fa1491dc3d..0965a33c7bdd 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 3bde02022c6e..09935c9dec33 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index c11843d57cfe..6f51d5f3a7c4 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-12-18 +date: 2023-12-20 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 dfaa593b0ad1..df3bf00edb00 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-12-18 +date: 2023-12-20 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 5f14bcb010a0..1311abc8cb33 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-12-18 +date: 2023-12-20 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 b636b1ac6363..9623a6b3c92f 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-12-18 +date: 2023-12-20 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 fc6d26b343b0..4fbced2ccff1 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index c787f2b04a6c..869008aef7bb 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.devdocs.json b/api_docs/kbn_unified_doc_viewer.devdocs.json index da1c2b438bd7..297fa3033699 100644 --- a/api_docs/kbn_unified_doc_viewer.devdocs.json +++ b/api_docs/kbn_unified_doc_viewer.devdocs.json @@ -31,18 +31,75 @@ "children": [ { "parentPluginId": "@kbn/unified-doc-viewer", - "id": "def-common.DocViewsRegistry.addDocView", + "id": "def-common.DocViewsRegistry.Unnamed", "type": "Function", "tags": [], - "label": "addDocView", - "description": [ - "\nExtends and adds the given doc view to the registry array" + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/unified-doc-viewer", + "id": "def-common.DocViewsRegistry.Unnamed.$1", + "type": "CompoundType", + "tags": [], + "label": "initialValue", + "description": [], + "signature": [ + { + "pluginId": "@kbn/unified-doc-viewer", + "scope": "common", + "docId": "kibKbnUnifiedDocViewerPluginApi", + "section": "def-common.DocViewsRegistry", + "text": "DocViewsRegistry" + }, + " | ", + "DocView", + "[] | undefined" + ], + "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/unified-doc-viewer", + "id": "def-common.DocViewsRegistry.getAll", + "type": "Function", + "tags": [], + "label": "getAll", + "description": [], + "signature": [ + "() => ", + "DocView", + "[]" + ], + "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/unified-doc-viewer", + "id": "def-common.DocViewsRegistry.add", + "type": "Function", + "tags": [], + "label": "add", + "description": [], "signature": [ "(docViewRaw: ", - "DocViewInput", + "DocView", " | ", - "DocViewInputFn", + "DocViewFactory", ") => void" ], "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", @@ -51,15 +108,15 @@ "children": [ { "parentPluginId": "@kbn/unified-doc-viewer", - "id": "def-common.DocViewsRegistry.addDocView.$1", + "id": "def-common.DocViewsRegistry.add.$1", "type": "CompoundType", "tags": [], "label": "docViewRaw", "description": [], "signature": [ - "DocViewInput", + "DocView", " | ", - "DocViewInputFn" + "DocViewFactory" ], "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", "deprecated": false, @@ -71,19 +128,13 @@ }, { "parentPluginId": "@kbn/unified-doc-viewer", - "id": "def-common.DocViewsRegistry.getDocViewsSorted", + "id": "def-common.DocViewsRegistry.removeById", "type": "Function", "tags": [], - "label": "getDocViewsSorted", - "description": [ - "\nReturns a sorted array of doc_views for rendering tabs" - ], + "label": "removeById", + "description": [], "signature": [ - "(hit: ", - "DataTableRecord", - ") => ", - "DocView", - "[]" + "(id: string) => void" ], "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", "deprecated": false, @@ -91,13 +142,13 @@ "children": [ { "parentPluginId": "@kbn/unified-doc-viewer", - "id": "def-common.DocViewsRegistry.getDocViewsSorted.$1", - "type": "Object", + "id": "def-common.DocViewsRegistry.removeById.$1", + "type": "string", "tags": [], - "label": "hit", + "label": "id", "description": [], "signature": [ - "DataTableRecord" + "string" ], "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", "deprecated": false, @@ -106,6 +157,29 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "@kbn/unified-doc-viewer", + "id": "def-common.DocViewsRegistry.clone", + "type": "Function", + "tags": [], + "label": "clone", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/unified-doc-viewer", + "scope": "common", + "docId": "kibKbnUnifiedDocViewerPluginApi", + "section": "def-common.DocViewsRegistry", + "text": "DocViewsRegistry" + } + ], + "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 9f077fa04a2e..02c1582cafe7 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 10 | 0 | 7 | 7 | +| 14 | 0 | 13 | 6 | ## Common diff --git a/api_docs/kbn_unified_field_list.devdocs.json b/api_docs/kbn_unified_field_list.devdocs.json index 35da28a598da..541b20f210c1 100644 --- a/api_docs/kbn_unified_field_list.devdocs.json +++ b/api_docs/kbn_unified_field_list.devdocs.json @@ -648,8 +648,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" }, ", field: ", { @@ -701,8 +701,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" } ], "path": "packages/kbn-unified-field-list/src/components/field_visualize_button/visualize_trigger_utils.ts", @@ -979,8 +979,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" }, ", field: ", { @@ -1016,8 +1016,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" } ], "path": "packages/kbn-unified-field-list/src/components/field_visualize_button/visualize_trigger_utils.ts", @@ -1115,8 +1115,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" }, ", contextualFields: string[], originatingApp: string, dataView: ", { @@ -1152,8 +1152,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" } ], "path": "packages/kbn-unified-field-list/src/components/field_visualize_button/visualize_trigger_utils.ts", @@ -1270,8 +1270,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" }, " | undefined; } & { dataViewFieldEditor?: ", { @@ -5419,8 +5419,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" }, " | undefined; } & { dataViewFieldEditor?: ", { diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index fa90e68b0eee..f70078f4c1cb 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 800253d53a2a..49242071d22c 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 328404b2c8a8..375f32cca1a6 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index a732165ddef1..0e3f645e97af 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.devdocs.json b/api_docs/kbn_user_profile_components.devdocs.json index e3e687653910..4ba06b83b325 100644 --- a/api_docs/kbn_user_profile_components.devdocs.json +++ b/api_docs/kbn_user_profile_components.devdocs.json @@ -875,8 +875,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" }, "; }" ], diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 5ab3bb80c3ab..eb981a467633 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-12-18 +date: 2023-12-20 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 502f2daeb8a4..70a7d2a2a36f 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-12-18 +date: 2023-12-20 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 ee0c0b15f830..e865b4aa1aca 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-12-18 +date: 2023-12-20 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 817bbbbb7354..6cb0c354c7e4 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index b019dbd181e3..d5892e8d2500 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index ea803dbe4808..db9bce5caa52 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 16f190685441..0322596c1aa4 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 74399577dc23..c937220df66e 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index ddffd9447c90..bf8661b5e7b4 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 4678f399d55f..515a302398ce 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-12-18 +date: 2023-12-20 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 e23a4fb2f578..8d7cb865d9f3 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -5010,8 +5010,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" }, " | undefined; plugins?: ", { diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index a342e8b7d404..0b959dc7f193 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.devdocs.json b/api_docs/kibana_utils.devdocs.json index a0c1a249a615..936391892cf5 100644 --- a/api_docs/kibana_utils.devdocs.json +++ b/api_docs/kibana_utils.devdocs.json @@ -3350,8 +3350,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" }, "; }) => (error: ", { @@ -3568,8 +3568,8 @@ "pluginId": "@kbn/core-theme-browser", "scope": "common", "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceStart", - "text": "ThemeServiceStart" + "section": "def-common.ThemeServiceSetup", + "text": "ThemeServiceSetup" } ], "path": "src/plugins/kibana_utils/public/history/redirect_when_missing.tsx", @@ -6943,10 +6943,10 @@ ], "setup": { "parentPluginId": "kibanaUtils", - "id": "def-public.KibanaUtilsSetup", + "id": "def-public.KibanaUtilsPublicSetup", "type": "Interface", "tags": [], - "label": "KibanaUtilsSetup", + "label": "KibanaUtilsPublicSetup", "description": [], "path": "src/plugins/kibana_utils/public/plugin.ts", "deprecated": false, @@ -6954,7 +6954,7 @@ "children": [ { "parentPluginId": "kibanaUtils", - "id": "def-public.KibanaUtilsSetup.setVersion", + "id": "def-public.KibanaUtilsPublicSetup.setVersion", "type": "Function", "tags": [], "label": "setVersion", @@ -6970,7 +6970,7 @@ "children": [ { "parentPluginId": "kibanaUtils", - "id": "def-public.KibanaUtilsSetup.setVersion.$1", + "id": "def-public.KibanaUtilsPublicSetup.setVersion.$1", "type": "Object", "tags": [], "label": "history", @@ -6991,6 +6991,22 @@ ], "lifecycle": "setup", "initialIsOpen": true + }, + "start": { + "parentPluginId": "kibanaUtils", + "id": "def-public.KibanaUtilsPublicStart", + "type": "Type", + "tags": [], + "label": "KibanaUtilsPublicStart", + "description": [], + "signature": [ + "undefined" + ], + "path": "src/plugins/kibana_utils/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "lifecycle": "start", + "initialIsOpen": true } }, "server": { diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 75a7a3908353..c5f2f8fc2ee4 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; @@ -21,13 +21,16 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 610 | 3 | 417 | 9 | +| 611 | 3 | 418 | 9 | ## Client ### Setup +### Start + + ### Objects diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index bde43df0d53e..328849485743 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-12-18 +date: 2023-12-20 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 11acbc519f43..dee02d6eee01 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-12-18 +date: 2023-12-20 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 024969d0aafd..65406175b377 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-12-18 +date: 2023-12-20 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 1b665d40c71b..028dc38a5a86 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-12-18 +date: 2023-12-20 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 c6171915c0fd..c63f1231b414 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 727d5b321ebd..5a61455b54f8 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 1271ee5b3b8b..9d0c651ee081 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.devdocs.json b/api_docs/log_explorer.devdocs.json index 3ee4d7802eef..2157d8b4abaf 100644 --- a/api_docs/log_explorer.devdocs.json +++ b/api_docs/log_explorer.devdocs.json @@ -50,6 +50,80 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "logExplorer", + "id": "def-public.getDiscoverFiltersFromState", + "type": "Function", + "tags": [], + "label": "getDiscoverFiltersFromState", + "description": [], + "signature": [ + "(filters?: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[], controls?: ", + "ControlOptions", + " | undefined) => ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[]" + ], + "path": "x-pack/plugins/log_explorer/public/utils/convert_discover_app_state.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-public.getDiscoverFiltersFromState.$1", + "type": "Array", + "tags": [], + "label": "filters", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[]" + ], + "path": "x-pack/plugins/log_explorer/public/utils/convert_discover_app_state.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "logExplorer", + "id": "def-public.getDiscoverFiltersFromState.$2", + "type": "Object", + "tags": [], + "label": "controls", + "description": [], + "signature": [ + "ControlOptions", + " | undefined" + ], + "path": "x-pack/plugins/log_explorer/public/utils/convert_discover_app_state.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "logExplorer", "id": "def-public.getDiscoverGridFromDisplayOptions", @@ -68,11 +142,11 @@ }, ") => ", { - "pluginId": "@kbn/unified-data-table", + "pluginId": "savedSearch", "scope": "common", - "docId": "kibKbnUnifiedDataTablePluginApi", - "section": "def-common.UnifiedDataTableSettings", - "text": "UnifiedDataTableSettings" + "docId": "kibSavedSearchPluginApi", + "section": "def-common.DiscoverGridSettings", + "text": "DiscoverGridSettings" }, " | undefined" ], @@ -470,27 +544,26 @@ "tags": [], "label": "LogExplorerFlyoutContentProps", "description": [], - "signature": [ - { - "pluginId": "logExplorer", - "scope": "public", - "docId": "kibLogExplorerPluginApi", - "section": "def-public.LogExplorerFlyoutContentProps", - "text": "LogExplorerFlyoutContentProps" - }, - " extends ", - { - "pluginId": "discover", - "scope": "public", - "docId": "kibDiscoverPluginApi", - "section": "def-public.FlyoutContentProps", - "text": "FlyoutContentProps" - } - ], "path": "x-pack/plugins/log_explorer/public/controller/controller_customizations.ts", "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "logExplorer", + "id": "def-public.LogExplorerFlyoutContentProps.actions", + "type": "Object", + "tags": [], + "label": "actions", + "description": [], + "signature": [ + "{ addFilter: ", + "DocViewFilterFn", + " | undefined; addColumn: ((columnName: string) => void) | undefined; removeColumn: ((columnName: string) => void) | undefined; }" + ], + "path": "x-pack/plugins/log_explorer/public/controller/controller_customizations.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "logExplorer", "id": "def-public.LogExplorerFlyoutContentProps.dataView", diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 62b3f02d1a52..5ec0351c769a 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 83 | 0 | 83 | 16 | +| 87 | 0 | 87 | 16 | ## Client diff --git a/api_docs/logs_shared.devdocs.json b/api_docs/logs_shared.devdocs.json index 61da0f6f1007..ee2ec077ebe0 100644 --- a/api_docs/logs_shared.devdocs.json +++ b/api_docs/logs_shared.devdocs.json @@ -2631,6 +2631,26 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "logsShared", + "id": "def-public.LogAIAssistantProps.observabilityAIAssistant", + "type": "Object", + "tags": [], + "label": "observabilityAIAssistant", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantPluginStart", + "text": "ObservabilityAIAssistantPluginStart" + } + ], + "path": "x-pack/plugins/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "logsShared", "id": "def-public.LogAIAssistantProps.doc", @@ -3315,24 +3335,50 @@ { "parentPluginId": "logsShared", "id": "def-public.LogsSharedClientStartExports.LogAIAssistant", - "type": "CompoundType", + "type": "Function", "tags": [], "label": "LogAIAssistant", "description": [], "signature": [ - "React.ComponentClass<", - "Optional", - "<", - "LogAIAssistantDeps", - ", \"observabilityAIAssistant\">, any> | React.FunctionComponent<", - "Optional", - "<", - "LogAIAssistantDeps", - ", \"observabilityAIAssistant\">>" + "(props: Omit<", + { + "pluginId": "logsShared", + "scope": "public", + "docId": "kibLogsSharedPluginApi", + "section": "def-public.LogAIAssistantProps", + "text": "LogAIAssistantProps" + }, + ", \"observabilityAIAssistant\">) => JSX.Element" ], "path": "x-pack/plugins/logs_shared/public/types.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "logsShared", + "id": "def-public.LogsSharedClientStartExports.LogAIAssistant.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "logsShared", + "scope": "public", + "docId": "kibLogsSharedPluginApi", + "section": "def-public.LogAIAssistantProps", + "text": "LogAIAssistantProps" + }, + ", \"observabilityAIAssistant\">" + ], + "path": "x-pack/plugins/logs_shared/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "lifecycle": "start", diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 73a6f09dbe7b..abc6f480bf76 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 289 | 11 | 274 | 27 | +| 291 | 11 | 276 | 26 | ## Client diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 0e7a46b2926c..ce0aac83f4b2 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-12-18 +date: 2023-12-20 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 7708bef15b7d..c90b38e41ad5 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-12-18 +date: 2023-12-20 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 27824a7e12d0..3be1cb138f69 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 02a467b414ac..b447b5fee0d2 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 56b3df8851f4..62bd3e5f384e 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 3ce4cf69e8a8..e1fe1f71f6d7 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 9e618b572418..f3f50e0bce9d 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-12-18 +date: 2023-12-20 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 e7ea0c1dd72f..b6f63e843feb 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.devdocs.json b/api_docs/navigation.devdocs.json index 85f8e5da18cc..245711ed0a0e 100644 --- a/api_docs/navigation.devdocs.json +++ b/api_docs/navigation.devdocs.json @@ -30,18 +30,22 @@ "pluginId": "navigation", "scope": "public", "docId": "kibNavigationPluginApi", - "section": "def-public.NavigationPublicPluginSetup", - "text": "NavigationPublicPluginSetup" + "section": "def-public.NavigationPublicSetup", + "text": "NavigationPublicSetup" }, ", ", { "pluginId": "navigation", "scope": "public", "docId": "kibNavigationPluginApi", - "section": "def-public.NavigationPublicPluginStart", - "text": "NavigationPublicPluginStart" + "section": "def-public.NavigationPublicStart", + "text": "NavigationPublicStart" }, - ", object, object>" + ", ", + "NavigationPublicSetupDependencies", + ", ", + "NavigationPublicStartDependencies", + ">" ], "path": "src/plugins/navigation/public/plugin.ts", "deprecated": false, @@ -66,7 +70,7 @@ "id": "def-public.NavigationPublicPlugin.Unnamed.$1", "type": "Object", "tags": [], - "label": "initializerContext", + "label": "_initializerContext", "description": [], "signature": [ { @@ -94,7 +98,7 @@ "label": "setup", "description": [], "signature": [ - "(core: ", + "(_core: ", { "pluginId": "@kbn/core-lifecycle-browser", "scope": "common", @@ -107,8 +111,8 @@ "pluginId": "navigation", "scope": "public", "docId": "kibNavigationPluginApi", - "section": "def-public.NavigationPublicPluginSetup", - "text": "NavigationPublicPluginSetup" + "section": "def-public.NavigationPublicSetup", + "text": "NavigationPublicSetup" } ], "path": "src/plugins/navigation/public/plugin.ts", @@ -120,7 +124,7 @@ "id": "def-public.NavigationPublicPlugin.setup.$1", "type": "Object", "tags": [], - "label": "core", + "label": "_core", "description": [], "signature": [ { @@ -148,7 +152,7 @@ "label": "start", "description": [], "signature": [ - "(core: ", + "(_core: ", { "pluginId": "@kbn/core-lifecycle-browser", "scope": "common", @@ -157,14 +161,14 @@ "text": "CoreStart" }, ", { unifiedSearch }: ", - "NavigationPluginStartDependencies", + "NavigationPublicStartDependencies", ") => ", { "pluginId": "navigation", "scope": "public", "docId": "kibNavigationPluginApi", - "section": "def-public.NavigationPublicPluginStart", - "text": "NavigationPublicPluginStart" + "section": "def-public.NavigationPublicStart", + "text": "NavigationPublicStart" } ], "path": "src/plugins/navigation/public/plugin.ts", @@ -176,7 +180,7 @@ "id": "def-public.NavigationPublicPlugin.start.$1", "type": "Object", "tags": [], - "label": "core", + "label": "_core", "description": [], "signature": [ { @@ -200,7 +204,7 @@ "label": "{ unifiedSearch }", "description": [], "signature": [ - "NavigationPluginStartDependencies" + "NavigationPublicStartDependencies" ], "path": "src/plugins/navigation/public/plugin.ts", "deprecated": false, @@ -883,10 +887,10 @@ "objects": [], "setup": { "parentPluginId": "navigation", - "id": "def-public.NavigationPublicPluginSetup", + "id": "def-public.NavigationPublicSetup", "type": "Interface", "tags": [], - "label": "NavigationPublicPluginSetup", + "label": "NavigationPublicSetup", "description": [], "path": "src/plugins/navigation/public/types.ts", "deprecated": false, @@ -894,7 +898,7 @@ "children": [ { "parentPluginId": "navigation", - "id": "def-public.NavigationPublicPluginSetup.registerMenuItem", + "id": "def-public.NavigationPublicSetup.registerMenuItem", "type": "Function", "tags": [], "label": "registerMenuItem", @@ -911,7 +915,7 @@ "children": [ { "parentPluginId": "navigation", - "id": "def-public.NavigationPublicPluginSetup.registerMenuItem.$1", + "id": "def-public.NavigationPublicSetup.registerMenuItem.$1", "type": "Object", "tags": [], "label": "menuItem", @@ -931,10 +935,10 @@ }, "start": { "parentPluginId": "navigation", - "id": "def-public.NavigationPublicPluginStart", + "id": "def-public.NavigationPublicStart", "type": "Interface", "tags": [], - "label": "NavigationPublicPluginStart", + "label": "NavigationPublicStart", "description": [], "path": "src/plugins/navigation/public/types.ts", "deprecated": false, @@ -942,7 +946,7 @@ "children": [ { "parentPluginId": "navigation", - "id": "def-public.NavigationPublicPluginStart.ui", + "id": "def-public.NavigationPublicStart.ui", "type": "Object", "tags": [], "label": "ui", diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index ab2a77788ac6..3dd539ffa14b 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.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 | 2 | +| 42 | 0 | 42 | 3 | ## Client diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index ed8e5d9b0f23..80236314935b 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.devdocs.json b/api_docs/no_data_page.devdocs.json index 0bbeb2e20def..6820a673cb7a 100644 --- a/api_docs/no_data_page.devdocs.json +++ b/api_docs/no_data_page.devdocs.json @@ -7,26 +7,26 @@ "enums": [], "misc": [], "objects": [], - "setup": { + "start": { "parentPluginId": "noDataPage", - "id": "def-public.NoDataPagePluginStart", + "id": "def-public.NoDataPagePublicStart", "type": "Type", "tags": [], - "label": "NoDataPagePluginStart", + "label": "NoDataPagePublicStart", "description": [], "signature": [ { "pluginId": "noDataPage", "scope": "public", "docId": "kibNoDataPagePluginApi", - "section": "def-public.NoDataPagePluginSetup", - "text": "NoDataPagePluginSetup" + "section": "def-public.NoDataPagePublicSetup", + "text": "NoDataPagePublicSetup" } ], "path": "src/plugins/no_data_page/public/types.ts", "deprecated": false, "trackAdoption": false, - "lifecycle": "setup", + "lifecycle": "start", "initialIsOpen": true } }, diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 9d2d22a9d3d8..eb47ec2711c6 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; @@ -25,6 +25,6 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh ## Client -### Setup - +### Start + diff --git a/api_docs/notifications.devdocs.json b/api_docs/notifications.devdocs.json index f7508b16dcdb..0e4333782707 100644 --- a/api_docs/notifications.devdocs.json +++ b/api_docs/notifications.devdocs.json @@ -17,10 +17,10 @@ "objects": [], "start": { "parentPluginId": "notifications", - "id": "def-server.NotificationsPluginStart", + "id": "def-server.NotificationsServerStart", "type": "Type", "tags": [], - "label": "NotificationsPluginStart", + "label": "NotificationsServerStart", "description": [], "signature": [ "EmailServiceStart" diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 889a602b716e..adcdf6542133 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 10fc931bda74..deb64ecc9534 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -2693,6 +2693,27 @@ "path": "x-pack/plugins/observability/public/plugin.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-public.ObservabilityPublicPluginsSetup.presentationUtil", + "type": "Object", + "tags": [], + "label": "presentationUtil", + "description": [], + "signature": [ + { + "pluginId": "presentationUtil", + "scope": "public", + "docId": "kibPresentationUtilPluginApi", + "section": "def-public.PresentationUtilPluginStart", + "text": "PresentationUtilPluginStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/observability/public/plugin.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -3455,6 +3476,27 @@ "path": "x-pack/plugins/observability/public/plugin.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-public.ObservabilityPublicPluginsStart.presentationUtil", + "type": "Object", + "tags": [], + "label": "presentationUtil", + "description": [], + "signature": [ + { + "pluginId": "presentationUtil", + "scope": "public", + "docId": "kibPresentationUtilPluginApi", + "section": "def-public.PresentationUtilPluginStart", + "text": "PresentationUtilPluginStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/observability/public/plugin.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -8156,7 +8198,7 @@ "label": "config", "description": [], "signature": [ - "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly createO11yGenericFeatureId: boolean; }" + "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly createO11yGenericFeatureId: boolean; readonly sloOrphanSummaryCleanUpTaskEnabled: boolean; }" ], "path": "x-pack/plugins/observability/server/routes/types.ts", "deprecated": false, @@ -9956,7 +9998,7 @@ "label": "ObservabilityConfig", "description": [], "signature": [ - "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly createO11yGenericFeatureId: boolean; }" + "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly createO11yGenericFeatureId: boolean; readonly sloOrphanSummaryCleanUpTaskEnabled: boolean; }" ], "path": "x-pack/plugins/observability/server/index.ts", "deprecated": false, @@ -12905,6 +12947,90 @@ } ] }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.enableInfrastructureProfilingIntegration", + "type": "Object", + "tags": [], + "label": "[enableInfrastructureProfilingIntegration]", + "description": [], + "path": "x-pack/plugins/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.enableInfrastructureProfilingIntegration.category", + "type": "Array", + "tags": [], + "label": "category", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.enableInfrastructureProfilingIntegration.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.enableInfrastructureProfilingIntegration.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "true" + ], + "path": "x-pack/plugins/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.enableInfrastructureProfilingIntegration.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "x-pack/plugins/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-server.uiSettings.enableInfrastructureProfilingIntegration.schema", + "type": "Object", + "tags": [], + "label": "schema", + "description": [], + "signature": [ + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.Type", + "text": "Type" + }, + "" + ], + "path": "x-pack/plugins/observability/server/ui_settings.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "observability", "id": "def-server.uiSettings.enableAwsLambdaMetrics", @@ -15905,6 +16031,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-common.enableInfrastructureProfilingIntegration", + "type": "string", + "tags": [], + "label": "enableInfrastructureProfilingIntegration", + "description": [], + "signature": [ + "\"observability:enableInfrastructureProfilingIntegration\"" + ], + "path": "x-pack/plugins/observability/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-common.enableInspectEsQueries", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 9f09249d454a..f27da99a8627 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 600 | 2 | 591 | 17 | +| 609 | 2 | 600 | 17 | ## Client diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json index bde01c0fbede..9d3e36465047 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -2,185 +2,7 @@ "id": "observabilityAIAssistant", "client": { "classes": [], - "functions": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ContextualInsight", - "type": "Function", - "tags": [], - "label": "ContextualInsight", - "description": [], - "signature": [ - "React.ForwardRefExoticComponent<{ messages: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - "[]; title: string; dataTestSubj?: string | undefined; } & ", - { - "pluginId": "@kbn/shared-ux-utility", - "scope": "common", - "docId": "kibKbnSharedUxUtilityPluginApi", - "section": "def-common.WithSuspenseExtendedDeps", - "text": "WithSuspenseExtendedDeps" - }, - " & React.RefAttributes<{}>>" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/index.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ContextualInsight.$1", - "type": "Uncategorized", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P" - ], - "path": "node_modules/@types/react/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantActionMenuItem", - "type": "Function", - "tags": [], - "label": "ObservabilityAIAssistantActionMenuItem", - "description": [], - "signature": [ - "React.ForwardRefExoticComponent<", - { - "pluginId": "@kbn/shared-ux-utility", - "scope": "common", - "docId": "kibKbnSharedUxUtilityPluginApi", - "section": "def-common.WithSuspenseExtendedDeps", - "text": "WithSuspenseExtendedDeps" - }, - " & React.RefAttributes<{}>>" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/index.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantActionMenuItem.$1", - "type": "Uncategorized", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P" - ], - "path": "node_modules/@types/react/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantProvider", - "type": "Function", - "tags": [], - "label": "ObservabilityAIAssistantProvider", - "description": [], - "signature": [ - "React.ProviderExoticComponent>" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/context/observability_ai_assistant_provider.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantProvider.$1", - "type": "Uncategorized", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P" - ], - "path": "node_modules/@types/react/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.useObservabilityAIAssistant", - "type": "Function", - "tags": [], - "label": "useObservabilityAIAssistant", - "description": [], - "signature": [ - "() => ", - { - "pluginId": "observabilityAIAssistant", - "scope": "public", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-public.ObservabilityAIAssistantService", - "text": "ObservabilityAIAssistantService" - } - ], - "path": "x-pack/plugins/observability_ai_assistant/public/hooks/use_observability_ai_assistant.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.useObservabilityAIAssistantOptional", - "type": "Function", - "tags": [], - "label": "useObservabilityAIAssistantOptional", - "description": [], - "signature": [ - "() => ", - { - "pluginId": "observabilityAIAssistant", - "scope": "public", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-public.ObservabilityAIAssistantService", - "text": "ObservabilityAIAssistantService" - }, - " | undefined" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/hooks/use_observability_ai_assistant.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [], - "initialIsOpen": false - } - ], + "functions": [], "interfaces": [ { "parentPluginId": "observabilityAIAssistant", @@ -1671,8 +1493,8 @@ "pluginId": "share", "scope": "public", "docId": "kibSharePluginApi", - "section": "def-public.SharePluginStart", - "text": "SharePluginStart" + "section": "def-public.SharePublicStart", + "text": "SharePublicStart" } ], "path": "x-pack/plugins/observability_ai_assistant/public/types.ts", @@ -2846,1221 +2668,7 @@ "initialIsOpen": false } ], - "objects": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService", - "type": "Object", - "tags": [], - "label": "mockService", - "description": [], - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.isEnabled", - "type": "Function", - "tags": [], - "label": "isEnabled", - "description": [], - "signature": [ - "() => true" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.start", - "type": "Function", - "tags": [], - "label": "start", - "description": [], - "signature": [ - "() => Promise<", - "ObservabilityAIAssistantChatService", - ">" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.callApi", - "type": "Function", - "tags": [], - "label": "callApi", - "description": [], - "signature": [ - "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", - { - "pluginId": "@kbn/server-route-repository", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryPluginApi", - "section": "def-common.ClientRequestParamsOf", - "text": "ClientRequestParamsOf" - }, - "<{ \"DELETE /internal/observability_ai_assistant/kb/entries/{entryId}\": { endpoint: \"DELETE /internal/observability_ai_assistant/kb/entries/{entryId}\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ entryId: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { entryId: string; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/kb/entries/save\": { endpoint: \"POST /internal/observability_ai_assistant/kb/entries/save\"; params?: ", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ id: ", - "StringC", - "; text: ", - "BrandC", - "<", - "StringC", - ", ", - { - "pluginId": "@kbn/io-ts-utils", - "scope": "common", - "docId": "kibKbnIoTsUtilsPluginApi", - "section": "def-common.NonEmptyStringBrand", - "text": "NonEmptyStringBrand" - }, - ">; }>, ", - "PartialC", - "<{ confidence: ", - "UnionC", - "<[", - "LiteralC", - "<\"low\">, ", - "LiteralC", - "<\"medium\">, ", - "LiteralC", - "<\"high\">]>; is_correction: ", - "Type", - "; public: ", - "Type", - "; labels: ", - "RecordC", - "<", - "StringC", - ", ", - "StringC", - ">; role: ", - "UnionC", - "<[", - "LiteralC", - "<\"assistant_summarization\">, ", - "LiteralC", - "<\"user_entry\">, ", - "LiteralC", - "<\"elastic\">]>; }>]>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { id: string; text: ", - "Branded", - "; } & { confidence?: \"medium\" | \"high\" | \"low\" | undefined; is_correction?: boolean | undefined; public?: boolean | undefined; labels?: { [x: string]: string; } | undefined; role?: \"elastic\" | \"assistant_summarization\" | \"user_entry\" | undefined; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/kb/entries/import\": { endpoint: \"POST /internal/observability_ai_assistant/kb/entries/import\"; params?: ", - "TypeC", - "<{ body: ", - "TypeC", - "<{ entries: ", - "ArrayC", - "<", - "TypeC", - "<{ id: ", - "StringC", - "; text: ", - "BrandC", - "<", - "StringC", - ", ", - { - "pluginId": "@kbn/io-ts-utils", - "scope": "common", - "docId": "kibKbnIoTsUtilsPluginApi", - "section": "def-common.NonEmptyStringBrand", - "text": "NonEmptyStringBrand" - }, - ">; }>>; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { entries: { id: string; text: ", - "Branded", - "; }[]; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/kb/entries\": { endpoint: \"GET /internal/observability_ai_assistant/kb/entries\"; params?: ", - "TypeC", - "<{ query: ", - "TypeC", - "<{ query: ", - "StringC", - "; sortBy: ", - "StringC", - "; sortDirection: ", - "UnionC", - "<[", - "LiteralC", - "<\"asc\">, ", - "LiteralC", - "<\"desc\">]>; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { query: { query: string; sortBy: string; sortDirection: \"asc\" | \"desc\"; }; }; }) => Promise<{ entries: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.KnowledgeBaseEntry", - "text": "KnowledgeBaseEntry" - }, - "[]; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/kb/status\": { endpoint: \"GET /internal/observability_ai_assistant/kb/status\"; params?: undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - ") => Promise<{ ready: boolean; error?: any; deployment_state?: ", - "MlDeploymentState", - " | undefined; allocation_state?: ", - "MlDeploymentAllocationState", - " | undefined; model_name?: string | undefined; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/kb/setup\": { endpoint: \"POST /internal/observability_ai_assistant/kb/setup\"; params?: undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - ") => Promise<{}>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/functions/summarize\": { endpoint: \"POST /internal/observability_ai_assistant/functions/summarize\"; params?: ", - "TypeC", - "<{ body: ", - "TypeC", - "<{ id: ", - "StringC", - "; text: ", - "BrandC", - "<", - "StringC", - ", ", - { - "pluginId": "@kbn/io-ts-utils", - "scope": "common", - "docId": "kibKbnIoTsUtilsPluginApi", - "section": "def-common.NonEmptyStringBrand", - "text": "NonEmptyStringBrand" - }, - ">; confidence: ", - "UnionC", - "<[", - "LiteralC", - "<\"low\">, ", - "LiteralC", - "<\"medium\">, ", - "LiteralC", - "<\"high\">]>; is_correction: ", - "Type", - "; public: ", - "Type", - "; labels: ", - "RecordC", - "<", - "StringC", - ", ", - "StringC", - ">; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { id: string; text: ", - "Branded", - "; confidence: \"medium\" | \"high\" | \"low\"; is_correction: boolean; public: boolean; labels: { [x: string]: string; }; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/functions/recall\": { endpoint: \"POST /internal/observability_ai_assistant/functions/recall\"; params?: ", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ queries: ", - "ArrayC", - "<", - "BrandC", - "<", - "StringC", - ", ", - { - "pluginId": "@kbn/io-ts-utils", - "scope": "common", - "docId": "kibKbnIoTsUtilsPluginApi", - "section": "def-common.NonEmptyStringBrand", - "text": "NonEmptyStringBrand" - }, - ">>; }>, ", - "PartialC", - "<{ contexts: ", - "ArrayC", - "<", - "StringC", - ">; }>]>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { queries: ", - "Branded", - "[]; } & { contexts?: string[] | undefined; }; }; }) => Promise<{ entries: ", - "RecalledEntry", - "[]; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - ") => Promise<{ functionDefinitions: ", - "FunctionDefinition", - "<", - "CompatibleJSONSchema", - ">[]; contextDefinitions: ", - "ContextDefinition", - "[]; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/connectors\": { endpoint: \"GET /internal/observability_ai_assistant/connectors\"; params?: undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - ") => Promise<", - { - "pluginId": "actions", - "scope": "server", - "docId": "kibActionsPluginApi", - "section": "def-server.ConnectorWithExtraFindData", - "text": "ConnectorWithExtraFindData" - }, - "[]>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\": { endpoint: \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ conversationId: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"PUT /internal/observability_ai_assistant/conversation/{conversationId}/title\": { endpoint: \"PUT /internal/observability_ai_assistant/conversation/{conversationId}/title\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ conversationId: ", - "StringC", - "; }>; body: ", - "TypeC", - "<{ title: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; body: { title: string; }; }; }) => Promise<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"PUT /internal/observability_ai_assistant/conversation/{conversationId}\": { endpoint: \"PUT /internal/observability_ai_assistant/conversation/{conversationId}\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ conversationId: ", - "StringC", - "; }>; body: ", - "TypeC", - "<{ conversation: ", - "Type", - "<", - "ConversationUpdateRequest", - ", ", - "ConversationUpdateRequest", - ", unknown>; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; body: { conversation: ", - "ConversationUpdateRequest", - "; }; }; }) => Promise<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/conversation\": { endpoint: \"POST /internal/observability_ai_assistant/conversation\"; params?: ", - "TypeC", - "<{ body: ", - "TypeC", - "<{ conversation: ", - "Type", - "<", - "ConversationRequestBase", - ", ", - "ConversationRequestBase", - ", unknown>; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { conversation: ", - "ConversationRequestBase", - "; }; }; }) => Promise<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/conversations\": { endpoint: \"POST /internal/observability_ai_assistant/conversations\"; params?: ", - "PartialC", - "<{ body: ", - "PartialC", - "<{ query: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params?: { body?: { query?: string | undefined; } | undefined; } | undefined; }) => Promise<{ conversations: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - "[]; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/conversation/{conversationId}\": { endpoint: \"GET /internal/observability_ai_assistant/conversation/{conversationId}\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ conversationId: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; }; }) => Promise<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ messages: ", - "ArrayC", - "<", - "Type", - "<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - ", ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - ", unknown>>; connectorId: ", - "StringC", - "; persist: ", - "Type", - "; }>, ", - "PartialC", - "<{ conversationId: ", - "StringC", - "; title: ", - "StringC", - "; }>]>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { messages: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; }; }; }) => Promise<", - "Readable", - " | ", - "CreateChatCompletionResponse", - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", - "IntersectionC", - "<[", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ messages: ", - "ArrayC", - "<", - "Type", - "<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - ", ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - ", unknown>>; connectorId: ", - "StringC", - "; functions: ", - "ArrayC", - "<", - "TypeC", - "<{ name: ", - "StringC", - "; description: ", - "StringC", - "; parameters: ", - "AnyC", - "; }>>; }>, ", - "PartialC", - "<{ functionCall: ", - "StringC", - "; }>]>; }>, ", - "PartialC", - "<{ query: ", - "TypeC", - "<{ stream: ", - "Type", - "; }>; }>]> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { messages: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", - "Readable", - " | ", - "CreateChatCompletionResponse", - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; }, TEndpoint> & Omit & { signal: AbortSignal | null; }>) => Promise<", - { - "pluginId": "@kbn/server-route-repository", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryPluginApi", - "section": "def-common.ReturnOf", - "text": "ReturnOf" - }, - "<{ \"DELETE /internal/observability_ai_assistant/kb/entries/{entryId}\": { endpoint: \"DELETE /internal/observability_ai_assistant/kb/entries/{entryId}\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ entryId: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { entryId: string; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/kb/entries/save\": { endpoint: \"POST /internal/observability_ai_assistant/kb/entries/save\"; params?: ", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ id: ", - "StringC", - "; text: ", - "BrandC", - "<", - "StringC", - ", ", - { - "pluginId": "@kbn/io-ts-utils", - "scope": "common", - "docId": "kibKbnIoTsUtilsPluginApi", - "section": "def-common.NonEmptyStringBrand", - "text": "NonEmptyStringBrand" - }, - ">; }>, ", - "PartialC", - "<{ confidence: ", - "UnionC", - "<[", - "LiteralC", - "<\"low\">, ", - "LiteralC", - "<\"medium\">, ", - "LiteralC", - "<\"high\">]>; is_correction: ", - "Type", - "; public: ", - "Type", - "; labels: ", - "RecordC", - "<", - "StringC", - ", ", - "StringC", - ">; role: ", - "UnionC", - "<[", - "LiteralC", - "<\"assistant_summarization\">, ", - "LiteralC", - "<\"user_entry\">, ", - "LiteralC", - "<\"elastic\">]>; }>]>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { id: string; text: ", - "Branded", - "; } & { confidence?: \"medium\" | \"high\" | \"low\" | undefined; is_correction?: boolean | undefined; public?: boolean | undefined; labels?: { [x: string]: string; } | undefined; role?: \"elastic\" | \"assistant_summarization\" | \"user_entry\" | undefined; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/kb/entries/import\": { endpoint: \"POST /internal/observability_ai_assistant/kb/entries/import\"; params?: ", - "TypeC", - "<{ body: ", - "TypeC", - "<{ entries: ", - "ArrayC", - "<", - "TypeC", - "<{ id: ", - "StringC", - "; text: ", - "BrandC", - "<", - "StringC", - ", ", - { - "pluginId": "@kbn/io-ts-utils", - "scope": "common", - "docId": "kibKbnIoTsUtilsPluginApi", - "section": "def-common.NonEmptyStringBrand", - "text": "NonEmptyStringBrand" - }, - ">; }>>; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { entries: { id: string; text: ", - "Branded", - "; }[]; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/kb/entries\": { endpoint: \"GET /internal/observability_ai_assistant/kb/entries\"; params?: ", - "TypeC", - "<{ query: ", - "TypeC", - "<{ query: ", - "StringC", - "; sortBy: ", - "StringC", - "; sortDirection: ", - "UnionC", - "<[", - "LiteralC", - "<\"asc\">, ", - "LiteralC", - "<\"desc\">]>; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { query: { query: string; sortBy: string; sortDirection: \"asc\" | \"desc\"; }; }; }) => Promise<{ entries: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.KnowledgeBaseEntry", - "text": "KnowledgeBaseEntry" - }, - "[]; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/kb/status\": { endpoint: \"GET /internal/observability_ai_assistant/kb/status\"; params?: undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - ") => Promise<{ ready: boolean; error?: any; deployment_state?: ", - "MlDeploymentState", - " | undefined; allocation_state?: ", - "MlDeploymentAllocationState", - " | undefined; model_name?: string | undefined; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/kb/setup\": { endpoint: \"POST /internal/observability_ai_assistant/kb/setup\"; params?: undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - ") => Promise<{}>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/functions/summarize\": { endpoint: \"POST /internal/observability_ai_assistant/functions/summarize\"; params?: ", - "TypeC", - "<{ body: ", - "TypeC", - "<{ id: ", - "StringC", - "; text: ", - "BrandC", - "<", - "StringC", - ", ", - { - "pluginId": "@kbn/io-ts-utils", - "scope": "common", - "docId": "kibKbnIoTsUtilsPluginApi", - "section": "def-common.NonEmptyStringBrand", - "text": "NonEmptyStringBrand" - }, - ">; confidence: ", - "UnionC", - "<[", - "LiteralC", - "<\"low\">, ", - "LiteralC", - "<\"medium\">, ", - "LiteralC", - "<\"high\">]>; is_correction: ", - "Type", - "; public: ", - "Type", - "; labels: ", - "RecordC", - "<", - "StringC", - ", ", - "StringC", - ">; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { id: string; text: ", - "Branded", - "; confidence: \"medium\" | \"high\" | \"low\"; is_correction: boolean; public: boolean; labels: { [x: string]: string; }; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/functions/recall\": { endpoint: \"POST /internal/observability_ai_assistant/functions/recall\"; params?: ", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ queries: ", - "ArrayC", - "<", - "BrandC", - "<", - "StringC", - ", ", - { - "pluginId": "@kbn/io-ts-utils", - "scope": "common", - "docId": "kibKbnIoTsUtilsPluginApi", - "section": "def-common.NonEmptyStringBrand", - "text": "NonEmptyStringBrand" - }, - ">>; }>, ", - "PartialC", - "<{ contexts: ", - "ArrayC", - "<", - "StringC", - ">; }>]>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { queries: ", - "Branded", - "[]; } & { contexts?: string[] | undefined; }; }; }) => Promise<{ entries: ", - "RecalledEntry", - "[]; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - ") => Promise<{ functionDefinitions: ", - "FunctionDefinition", - "<", - "CompatibleJSONSchema", - ">[]; contextDefinitions: ", - "ContextDefinition", - "[]; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/connectors\": { endpoint: \"GET /internal/observability_ai_assistant/connectors\"; params?: undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - ") => Promise<", - { - "pluginId": "actions", - "scope": "server", - "docId": "kibActionsPluginApi", - "section": "def-server.ConnectorWithExtraFindData", - "text": "ConnectorWithExtraFindData" - }, - "[]>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\": { endpoint: \"DELETE /internal/observability_ai_assistant/conversation/{conversationId}\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ conversationId: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; }; }) => Promise; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"PUT /internal/observability_ai_assistant/conversation/{conversationId}/title\": { endpoint: \"PUT /internal/observability_ai_assistant/conversation/{conversationId}/title\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ conversationId: ", - "StringC", - "; }>; body: ", - "TypeC", - "<{ title: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; body: { title: string; }; }; }) => Promise<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"PUT /internal/observability_ai_assistant/conversation/{conversationId}\": { endpoint: \"PUT /internal/observability_ai_assistant/conversation/{conversationId}\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ conversationId: ", - "StringC", - "; }>; body: ", - "TypeC", - "<{ conversation: ", - "Type", - "<", - "ConversationUpdateRequest", - ", ", - "ConversationUpdateRequest", - ", unknown>; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; body: { conversation: ", - "ConversationUpdateRequest", - "; }; }; }) => Promise<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/conversation\": { endpoint: \"POST /internal/observability_ai_assistant/conversation\"; params?: ", - "TypeC", - "<{ body: ", - "TypeC", - "<{ conversation: ", - "Type", - "<", - "ConversationRequestBase", - ", ", - "ConversationRequestBase", - ", unknown>; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { conversation: ", - "ConversationRequestBase", - "; }; }; }) => Promise<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/conversations\": { endpoint: \"POST /internal/observability_ai_assistant/conversations\"; params?: ", - "PartialC", - "<{ body: ", - "PartialC", - "<{ query: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params?: { body?: { query?: string | undefined; } | undefined; } | undefined; }) => Promise<{ conversations: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - "[]; }>; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"GET /internal/observability_ai_assistant/conversation/{conversationId}\": { endpoint: \"GET /internal/observability_ai_assistant/conversation/{conversationId}\"; params?: ", - "TypeC", - "<{ path: ", - "TypeC", - "<{ conversationId: ", - "StringC", - "; }>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { path: { conversationId: string; }; }; }) => Promise<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Conversation", - "text": "Conversation" - }, - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat/complete\": { endpoint: \"POST /internal/observability_ai_assistant/chat/complete\"; params?: ", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ messages: ", - "ArrayC", - "<", - "Type", - "<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - ", ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - ", unknown>>; connectorId: ", - "StringC", - "; persist: ", - "Type", - "; }>, ", - "PartialC", - "<{ conversationId: ", - "StringC", - "; title: ", - "StringC", - "; }>]>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { messages: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - "[]; connectorId: string; persist: boolean; } & { conversationId?: string | undefined; title?: string | undefined; }; }; }) => Promise<", - "Readable", - " | ", - "CreateChatCompletionResponse", - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", - "IntersectionC", - "<[", - "TypeC", - "<{ body: ", - "IntersectionC", - "<[", - "TypeC", - "<{ messages: ", - "ArrayC", - "<", - "Type", - "<", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - ", ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - ", unknown>>; connectorId: ", - "StringC", - "; functions: ", - "ArrayC", - "<", - "TypeC", - "<{ name: ", - "StringC", - "; description: ", - "StringC", - "; parameters: ", - "AnyC", - "; }>>; }>, ", - "PartialC", - "<{ functionCall: ", - "StringC", - "; }>]>; }>, ", - "PartialC", - "<{ query: ", - "TypeC", - "<{ stream: ", - "Type", - "; }>; }>]> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { messages: ", - { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" - }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", - "Readable", - " | ", - "CreateChatCompletionResponse", - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; }, TEndpoint>>" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.callApi.$1", - "type": "Uncategorized", - "tags": [], - "label": "endpoint", - "description": [], - "signature": [ - "TEndpoint" - ], - "path": "packages/kbn-server-route-repository/src/typings.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.callApi.$2", - "type": "Uncategorized", - "tags": [], - "label": "args", - "description": [], - "signature": [ - "RequiredKeys", - "<", - { - "pluginId": "@kbn/server-route-repository", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryPluginApi", - "section": "def-common.ClientRequestParamsOf", - "text": "ClientRequestParamsOf" - }, - " & TAdditionalClientOptions> extends never ? [] | [", - { - "pluginId": "@kbn/server-route-repository", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryPluginApi", - "section": "def-common.ClientRequestParamsOf", - "text": "ClientRequestParamsOf" - }, - " & TAdditionalClientOptions] : [", - { - "pluginId": "@kbn/server-route-repository", - "scope": "common", - "docId": "kibKbnServerRouteRepositoryPluginApi", - "section": "def-common.ClientRequestParamsOf", - "text": "ClientRequestParamsOf" - }, - " & TAdditionalClientOptions]" - ], - "path": "packages/kbn-server-route-repository/src/typings.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.getCurrentUser", - "type": "Function", - "tags": [], - "label": "getCurrentUser", - "description": [], - "signature": [ - "() => Promise<", - { - "pluginId": "@kbn/security-plugin-types-common", - "scope": "common", - "docId": "kibKbnSecurityPluginTypesCommonPluginApi", - "section": "def-common.AuthenticatedUser", - "text": "AuthenticatedUser" - }, - ">" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.getLicense", - "type": "Function", - "tags": [], - "label": "getLicense", - "description": [], - "signature": [ - "() => ", - "Observable", - "<", - "ILicense", - ">" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.getLicenseManagementLocator", - "type": "Function", - "tags": [], - "label": "getLicenseManagementLocator", - "description": [], - "signature": [ - "() => ", - { - "pluginId": "share", - "scope": "public", - "docId": "kibSharePluginApi", - "section": "def-public.SharePluginStart", - "text": "SharePluginStart" - } - ], - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.mockService.register", - "type": "Function", - "tags": [], - "label": "register", - "description": [], - "signature": [ - "() => void" - ], - "path": "x-pack/plugins/observability_ai_assistant/public/utils/storybook_decorator.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - } - ], - "initialIsOpen": false - } - ], + "objects": [], "setup": { "parentPluginId": "observabilityAIAssistant", "id": "def-public.ObservabilityAIAssistantPluginSetup", @@ -4106,6 +2714,44 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.ObservabilityAIAssistantContextualInsight", + "type": "CompoundType", + "tags": [], + "label": "ObservabilityAIAssistantContextualInsight", + "description": [], + "signature": [ + "React.ForwardRefExoticComponent<", + "InsightProps", + "> | null" + ], + "path": "x-pack/plugins/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPluginStart.ObservabilityAIAssistantActionMenuItem", + "type": "CompoundType", + "tags": [], + "label": "ObservabilityAIAssistantActionMenuItem", + "description": [], + "signature": [ + "React.ForwardRefExoticComponent & ", + { + "pluginId": "@kbn/shared-ux-utility", + "scope": "common", + "docId": "kibKbnSharedUxUtilityPluginApi", + "section": "def-common.WithSuspenseExtendedDeps", + "text": "WithSuspenseExtendedDeps" + }, + ", \"key\" | \"css\" | \"analytics\"> & React.RefAttributes<{}>> | null" + ], + "path": "x-pack/plugins/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-public.ObservabilityAIAssistantPluginStart.useGenAIConnectors", diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 5fdf528c1314..c32c8a3b28b8 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 91 | 0 | 86 | 12 | +| 75 | 0 | 73 | 13 | ## Client @@ -31,12 +31,6 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- ### Start -### Objects - - -### Functions - - ### Interfaces diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index 00ffdc1bb040..9f33390c3e3f 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index a68cc0e1298d..aba1582e714b 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index 5c0c77dba50b..a347d6029067 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -461,8 +461,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" }, "; triggerId: ", { diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 58f3c99e86bf..1cb30444ed91 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 833d6ba89b40..7c844e7c2089 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index f947ef7c1432..f402851a0375 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index d830e5d207c8..17f08e2dbc88 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 735 | 625 | 40 | +| 738 | 628 | 41 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 77928 | 235 | 66650 | 1632 | +| 77948 | 234 | 66667 | 1632 | ## Plugin Directory @@ -32,7 +32,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 70 | 1 | 4 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 822 | 1 | 791 | 51 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 823 | 1 | 792 | 51 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 125 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Asset manager plugin for entity assets (inventory, topology, etc) | 9 | 0 | 9 | 2 | @@ -64,9 +64,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 922 | 0 | 257 | 4 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 1 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of dataset quality, where users can easily get an overview on the datasets they have. | 8 | 0 | 8 | 4 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of dataset quality, where users can easily get an overview on the datasets they have. | 8 | 0 | 8 | 2 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 12 | 0 | 10 | 3 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 141 | 0 | 96 | 21 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 137 | 0 | 91 | 21 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Server APIs for the Elastic AI Assistant | 36 | 0 | 28 | 0 | @@ -78,7 +78,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 201 | 0 | 201 | 6 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The listing page for event annotations. | 15 | 0 | 15 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 111 | 0 | 111 | 11 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 131 | 1 | 131 | 14 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 130 | 0 | 130 | 14 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'error' renderer to expressions | 17 | 0 | 15 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Gauge plugin adds a `gauge` renderer and function to the expression plugin. The renderer will display the `gauge` chart. | 59 | 0 | 59 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Heatmap plugin adds a `heatmap` renderer and function to the expression plugin. The renderer will display the `heatmap` chart. | 112 | 0 | 108 | 2 | @@ -92,7 +92,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'shape' function and renderer to expressions | 148 | 0 | 146 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Tagcloud plugin adds a `tagcloud` renderer and function to the expression plugin. The renderer will display the `Wordcloud` chart. | 6 | 0 | 6 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart. | 177 | 0 | 167 | 13 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Adds expression runtime to Kibana | 2208 | 17 | 1749 | 5 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Adds expression runtime to Kibana | 2211 | 17 | 1752 | 5 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 235 | 0 | 99 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Index pattern fields and ambiguous values formatters | 292 | 5 | 253 | 3 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 59 | 0 | 59 | 2 | @@ -118,7 +118,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 161 | 0 | 127 | 3 | | kibanaUsageCollection | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 610 | 3 | 417 | 9 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 611 | 3 | 418 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 642 | 0 | 543 | 60 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 8 | 0 | 8 | 0 | @@ -126,8 +126,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | A dashboard panel for creating links to dashboards or external links. | 57 | 0 | 57 | 6 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 224 | 0 | 96 | 51 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 83 | 0 | 83 | 16 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 289 | 11 | 274 | 27 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin provides a LogExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. | 87 | 0 | 87 | 16 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 291 | 11 | 276 | 26 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 45 | 0 | 45 | 7 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 260 | 0 | 259 | 28 | @@ -137,12 +137,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 25 | 0 | 19 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 15 | 3 | 13 | 1 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 9 | 0 | 9 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 42 | 0 | 42 | 2 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 42 | 0 | 42 | 3 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 600 | 2 | 591 | 17 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 91 | 0 | 86 | 12 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 609 | 2 | 600 | 17 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 75 | 0 | 73 | 13 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 18 | 0 | 18 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 14 | 0 | 14 | 0 | | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 307 | 1 | 303 | 15 | @@ -191,8 +191,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 592 | 1 | 566 | 58 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 135 | 0 | 93 | 9 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 212 | 0 | 145 | 10 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains services reliant on the plugin lifecycle for the unified doc viewer component (see @kbn/unified-doc-viewer). | 12 | 0 | 9 | 2 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 212 | 0 | 145 | 11 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains services reliant on the plugin lifecycle for the unified doc viewer component (see @kbn/unified-doc-viewer). | 10 | 0 | 7 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | The `unifiedHistogram` plugin provides UI components to create a layout including a resizable histogram and a main display. | 55 | 0 | 23 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 148 | 2 | 110 | 23 | | upgradeAssistant | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | @@ -240,7 +240,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 18 | 0 | 2 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 34 | 0 | 34 | 8 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 188 | 0 | 188 | 27 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 188 | 0 | 188 | 28 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 11 | 0 | 11 | 0 | | | [@elastic/kibana-qa](https://github.com/orgs/elastic/teams/kibana-qa) | - | 12 | 0 | 12 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 4 | 0 | 1 | 0 | @@ -255,6 +255,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 62 | 0 | 17 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 26 | 0 | 9 | 0 | +| | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 8 | 0 | 4 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 206 | 0 | 169 | 8 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 76 | 0 | 47 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | @@ -409,8 +410,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 29 | 0 | 4 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 15 | 0 | 14 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 4 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 2 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 33 | 2 | 20 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 11 | 1 | 11 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 0 | @@ -458,7 +459,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 48 | 0 | 33 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 27 | 0 | 14 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 3 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 266 | 1 | 206 | 15 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 267 | 1 | 207 | 15 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 39 | 0 | 39 | 0 | @@ -468,6 +469,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 29 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 0 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 29 | 0 | 29 | 1 | +| | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 4 | 0 | 4 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 0 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 10 | 1 | @@ -569,6 +571,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 78 | 0 | 77 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A component for creating resizable layouts containing a fixed width panel and a flexible panel, with support for horizontal and vertical layouts. | 18 | 0 | 5 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 2 | 0 | 1 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 16 | 1 | | | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 119 | 0 | 116 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | @@ -655,7 +658,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 21 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 5 | 1 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 310 | 4 | 262 | 12 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 311 | 4 | 263 | 12 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 137 | 5 | 105 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 25 | 0 | 10 | 0 | @@ -667,7 +670,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 54 | 0 | 45 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 7 | 0 | 6 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 109 | 0 | 49 | 1 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 10 | 0 | 7 | 7 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 14 | 0 | 13 | 6 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 285 | 0 | 261 | 9 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 13 | 0 | 9 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 3 | 0 | 0 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 56d411f372a8..82c72d0602be 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-12-18 +date: 2023-12-20 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 cd5f9aef0613..d86926dbc612 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 82f2fba2ab65..a4dfcf9221f7 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 843201c2c9bd..0e3fc6069c67 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-12-18 +date: 2023-12-20 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 aadfbb683504..f777f625117c 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-12-18 +date: 2023-12-20 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 ab6692138298..02240413d619 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-12-18 +date: 2023-12-20 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 187729bd86d6..20f9ca21e639 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-12-18 +date: 2023-12-20 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 792383846db5..79e5feb5fdcf 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-12-18 +date: 2023-12-20 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 ad12abf48f4e..23c28ea73493 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-12-18 +date: 2023-12-20 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 eaccbc443819..a0b3d295f060 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-12-18 +date: 2023-12-20 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 f4977b8f1182..ac7ac641a56a 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-12-18 +date: 2023-12-20 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 b1618e20483a..10b8f4ef1b30 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-12-18 +date: 2023-12-20 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 7d9a91de7914..2d2c31c35d6d 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.devdocs.json b/api_docs/saved_search.devdocs.json index 1268c90a7f33..776e14b13ce0 100644 --- a/api_docs/saved_search.devdocs.json +++ b/api_docs/saved_search.devdocs.json @@ -928,6 +928,23 @@ "tags": [], "label": "DiscoverGridSettings", "description": [], + "signature": [ + { + "pluginId": "savedSearch", + "scope": "common", + "docId": "kibSavedSearchPluginApi", + "section": "def-common.DiscoverGridSettings", + "text": "DiscoverGridSettings" + }, + " extends ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + } + ], "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false, @@ -964,6 +981,23 @@ "tags": [], "label": "DiscoverGridSettingsColumn", "description": [], + "signature": [ + { + "pluginId": "savedSearch", + "scope": "common", + "docId": "kibSavedSearchPluginApi", + "section": "def-common.DiscoverGridSettingsColumn", + "text": "DiscoverGridSettingsColumn" + }, + " extends ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + } + ], "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false, @@ -1331,15 +1365,14 @@ "label": "grid", "description": [], "signature": [ - "{ columns?: Record | undefined; } | undefined" + " | undefined" ], "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 36f043d93a37..080da486d665 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.devdocs.json b/api_docs/screenshot_mode.devdocs.json index 322f5e1d7313..d5c687d0c57e 100644 --- a/api_docs/screenshot_mode.devdocs.json +++ b/api_docs/screenshot_mode.devdocs.json @@ -55,26 +55,26 @@ } ], "objects": [], - "setup": { + "start": { "parentPluginId": "screenshotMode", - "id": "def-public.ScreenshotModePluginStart", + "id": "def-public.ScreenshotModePublicStart", "type": "Type", "tags": [], - "label": "ScreenshotModePluginStart", + "label": "ScreenshotModePublicStart", "description": [], "signature": [ { "pluginId": "screenshotMode", "scope": "public", "docId": "kibScreenshotModePluginApi", - "section": "def-public.ScreenshotModePluginSetup", - "text": "ScreenshotModePluginSetup" + "section": "def-public.ScreenshotModePublicSetup", + "text": "ScreenshotModePublicSetup" } ], "path": "src/plugins/screenshot_mode/public/types.ts", "deprecated": false, "trackAdoption": false, - "lifecycle": "setup", + "lifecycle": "start", "initialIsOpen": true } }, @@ -157,26 +157,26 @@ "objects": [], "setup": { "parentPluginId": "screenshotMode", - "id": "def-server.ScreenshotModePluginSetup", + "id": "def-server.ScreenshotModeServerSetup", "type": "Interface", "tags": [], - "label": "ScreenshotModePluginSetup", + "label": "ScreenshotModeServerSetup", "description": [], "signature": [ { "pluginId": "screenshotMode", "scope": "server", "docId": "kibScreenshotModePluginApi", - "section": "def-server.ScreenshotModePluginSetup", - "text": "ScreenshotModePluginSetup" + "section": "def-server.ScreenshotModeServerSetup", + "text": "ScreenshotModeServerSetup" }, " extends ", { "pluginId": "screenshotMode", "scope": "server", "docId": "kibScreenshotModePluginApi", - "section": "def-server.ScreenshotModePluginStart", - "text": "ScreenshotModePluginStart" + "section": "def-server.ScreenshotModeServerStart", + "text": "ScreenshotModeServerStart" } ], "path": "src/plugins/screenshot_mode/server/types.ts", @@ -185,7 +185,7 @@ "children": [ { "parentPluginId": "screenshotMode", - "id": "def-server.ScreenshotModePluginSetup.setScreenshotContext", + "id": "def-server.ScreenshotModeServerSetup.setScreenshotContext", "type": "Function", "tags": [], "label": "setScreenshotContext", @@ -201,7 +201,7 @@ "children": [ { "parentPluginId": "screenshotMode", - "id": "def-server.ScreenshotModePluginSetup.setScreenshotContext.$1", + "id": "def-server.ScreenshotModeServerSetup.setScreenshotContext.$1", "type": "string", "tags": [], "label": "key", @@ -218,7 +218,7 @@ }, { "parentPluginId": "screenshotMode", - "id": "def-server.ScreenshotModePluginSetup.setScreenshotContext.$2", + "id": "def-server.ScreenshotModeServerSetup.setScreenshotContext.$2", "type": "Uncategorized", "tags": [], "label": "value", @@ -238,7 +238,7 @@ }, { "parentPluginId": "screenshotMode", - "id": "def-server.ScreenshotModePluginSetup.setScreenshotModeEnabled", + "id": "def-server.ScreenshotModeServerSetup.setScreenshotModeEnabled", "type": "Function", "tags": [], "label": "setScreenshotModeEnabled", @@ -260,10 +260,10 @@ }, "start": { "parentPluginId": "screenshotMode", - "id": "def-server.ScreenshotModePluginStart", + "id": "def-server.ScreenshotModeServerStart", "type": "Interface", "tags": [], - "label": "ScreenshotModePluginStart", + "label": "ScreenshotModeServerStart", "description": [], "path": "src/plugins/screenshot_mode/server/types.ts", "deprecated": false, @@ -271,7 +271,7 @@ "children": [ { "parentPluginId": "screenshotMode", - "id": "def-server.ScreenshotModePluginStart.isScreenshotMode", + "id": "def-server.ScreenshotModeServerStart.isScreenshotMode", "type": "Function", "tags": [], "label": "isScreenshotMode", @@ -295,7 +295,7 @@ "children": [ { "parentPluginId": "screenshotMode", - "id": "def-server.ScreenshotModePluginStart.isScreenshotMode.$1", + "id": "def-server.ScreenshotModeServerStart.isScreenshotMode.$1", "type": "Object", "tags": [], "label": "request", diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 7628d91c6364..78133a696a99 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; @@ -25,8 +25,8 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh ## Client -### Setup - +### Start + ### Functions diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 89ff7204e4f8..dc5de4e95bdc 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-12-18 +date: 2023-12-20 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 640d6981eec0..d89c9efeeed0 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 945b6393db34..a709f1d21762 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -881,7 +881,7 @@ "tags": [], "label": "TimelineModel", "description": [], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -897,7 +897,7 @@ "signature": [ "TimelineTabs" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -911,7 +911,7 @@ "signature": [ "TimelineTabs" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -928,7 +928,7 @@ "ScrollToTopEvent", " | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -944,7 +944,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -957,7 +957,7 @@ "description": [ "A summary of the events and notes in this timeline" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -977,7 +977,7 @@ "text": "EqlOptionsSelected" } ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -994,7 +994,7 @@ "TimelineEventsType", " | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1010,7 +1010,7 @@ "signature": [ "{ [x: string]: string[]; }" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1026,7 +1026,7 @@ "signature": [ "string[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1039,7 +1039,7 @@ "description": [ "The chronological history of actions related to this timeline" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1052,7 +1052,7 @@ "description": [ "When true, this timeline was marked as \"favorite\" by the user" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1065,7 +1065,7 @@ "description": [ "When true, the timeline will update as new data arrives" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1081,7 +1081,7 @@ "signature": [ "\"search\" | \"filter\"" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1094,7 +1094,7 @@ "description": [ "Title" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1110,7 +1110,7 @@ "signature": [ "TimelineType" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1126,7 +1126,7 @@ "signature": [ "string | null" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1142,7 +1142,7 @@ "signature": [ "number | null" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1158,7 +1158,7 @@ "signature": [ "string[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1174,7 +1174,7 @@ "signature": [ "{ [x: string]: boolean; }" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1190,7 +1190,7 @@ "PinnedEvent", "; }" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1205,7 +1205,7 @@ "ResolveTimelineConfig", " | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1219,7 +1219,7 @@ "signature": [ "boolean | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1233,7 +1233,7 @@ "signature": [ "string | null | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1248,7 +1248,7 @@ "SessionViewConfig", " | null" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1261,7 +1261,7 @@ "description": [ "When true, show the timeline flyover" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1277,7 +1277,7 @@ "signature": [ "TimelineStatus" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1293,7 +1293,7 @@ "signature": [ "number | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1309,7 +1309,7 @@ "signature": [ "string | null | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1322,7 +1322,7 @@ "description": [ "timeline is saving" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1336,7 +1336,7 @@ "signature": [ "string | null" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1350,7 +1350,7 @@ "signature": [ "boolean | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1364,7 +1364,7 @@ "signature": [ "string | null" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1381,7 +1381,7 @@ "SortColumnTimeline", "[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1398,7 +1398,7 @@ "ColumnHeaderOptions", "[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1413,7 +1413,7 @@ "ColumnHeaderOptions", "[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1436,7 +1436,7 @@ }, "[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1452,7 +1452,7 @@ "signature": [ "string | null" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1468,7 +1468,7 @@ "signature": [ "string[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1479,7 +1479,7 @@ "tags": [], "label": "documentType", "description": [], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1494,7 +1494,7 @@ "RowRendererId", "[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1515,7 +1515,7 @@ }, " | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1529,7 +1529,7 @@ "signature": [ "boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1543,7 +1543,7 @@ "signature": [ "boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1557,7 +1557,7 @@ "signature": [ "string[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1589,7 +1589,7 @@ "ExpandedDetailType", " | undefined; }" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1605,7 +1605,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1619,7 +1619,7 @@ "signature": [ "string[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1632,7 +1632,7 @@ "description": [ "The number of items to show in a single page of results" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1648,7 +1648,7 @@ "signature": [ "number[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1666,7 +1666,7 @@ "SerializedFilterQuery", " | null; }" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1682,7 +1682,7 @@ "signature": [ "string[]" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1698,7 +1698,7 @@ "signature": [ "{ start: string; end: string; }" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1711,7 +1711,7 @@ "description": [ "Uniquely identifies the timeline" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1732,7 +1732,7 @@ }, "[] | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1754,7 +1754,7 @@ }, "[]; }" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1767,7 +1767,7 @@ "description": [ "If selectAll checkbox in header is checked" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1778,7 +1778,7 @@ "tags": [], "label": "isLoading", "description": [], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1789,7 +1789,7 @@ "tags": [], "label": "selectAll", "description": [], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1803,7 +1803,7 @@ "signature": [ "string | null" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1824,7 +1824,7 @@ }, " | null" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1838,7 +1838,7 @@ "signature": [ "boolean | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1849,7 +1849,7 @@ "tags": [], "label": "isDataProviderVisible", "description": [], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false }, @@ -1865,7 +1865,7 @@ "signature": [ "boolean | undefined" ], - "path": "x-pack/plugins/security_solution/public/timelines/store/timeline/model.ts", + "path": "x-pack/plugins/security_solution/public/timelines/store/model.ts", "deprecated": false, "trackAdoption": false } diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index ff60d373990a..067110037637 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 825eda774887..dc8561d3b52e 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 3b7b945f26c6..5a65ce9ac788 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.devdocs.json b/api_docs/serverless.devdocs.json index a3e8cfec129a..53843f88f7fd 100644 --- a/api_docs/serverless.devdocs.json +++ b/api_docs/serverless.devdocs.json @@ -290,10 +290,10 @@ "objects": [], "setup": { "parentPluginId": "serverless", - "id": "def-server.ServerlessPluginSetup", + "id": "def-server.ServerlessServerSetup", "type": "Interface", "tags": [], - "label": "ServerlessPluginSetup", + "label": "ServerlessServerSetup", "description": [], "path": "x-pack/plugins/serverless/server/types.ts", "deprecated": false, @@ -301,7 +301,7 @@ "children": [ { "parentPluginId": "serverless", - "id": "def-server.ServerlessPluginSetup.setupProjectSettings", + "id": "def-server.ServerlessServerSetup.setupProjectSettings", "type": "Function", "tags": [], "label": "setupProjectSettings", @@ -315,7 +315,7 @@ "children": [ { "parentPluginId": "serverless", - "id": "def-server.ServerlessPluginSetup.setupProjectSettings.$1", + "id": "def-server.ServerlessServerSetup.setupProjectSettings.$1", "type": "Array", "tags": [], "label": "keys", @@ -337,10 +337,10 @@ }, "start": { "parentPluginId": "serverless", - "id": "def-server.ServerlessPluginStart", + "id": "def-server.ServerlessServerStart", "type": "Interface", "tags": [], - "label": "ServerlessPluginStart", + "label": "ServerlessServerStart", "description": [], "path": "x-pack/plugins/serverless/server/types.ts", "deprecated": false, diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 685489e4d6fa..79c8072a32a1 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.devdocs.json b/api_docs/serverless_observability.devdocs.json index caecd1a34bae..27cfb7e4ed1a 100644 --- a/api_docs/serverless_observability.devdocs.json +++ b/api_docs/serverless_observability.devdocs.json @@ -9,10 +9,10 @@ "objects": [], "setup": { "parentPluginId": "serverlessObservability", - "id": "def-public.ServerlessObservabilityPluginSetup", + "id": "def-public.ServerlessObservabilityPublicSetup", "type": "Interface", "tags": [], - "label": "ServerlessObservabilityPluginSetup", + "label": "ServerlessObservabilityPublicSetup", "description": [], "path": "x-pack/plugins/serverless_observability/public/types.ts", "deprecated": false, @@ -23,10 +23,10 @@ }, "start": { "parentPluginId": "serverlessObservability", - "id": "def-public.ServerlessObservabilityPluginStart", + "id": "def-public.ServerlessObservabilityPublicStart", "type": "Interface", "tags": [], - "label": "ServerlessObservabilityPluginStart", + "label": "ServerlessObservabilityPublicStart", "description": [], "path": "x-pack/plugins/serverless_observability/public/types.ts", "deprecated": false, diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 7c49f7f5e65b..7968fb6705e8 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index fa626da1593e..000e66ee1ef3 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index d5c6cdc62f49..7c69e1e15258 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.devdocs.json b/api_docs/share.devdocs.json index 53e4bd286a6a..3446a1bec058 100644 --- a/api_docs/share.devdocs.json +++ b/api_docs/share.devdocs.json @@ -1379,10 +1379,10 @@ "objects": [], "setup": { "parentPluginId": "share", - "id": "def-public.SharePluginSetup", + "id": "def-public.SharePublicSetup", "type": "Type", "tags": [], - "label": "SharePluginSetup", + "label": "SharePublicSetup", "description": [], "signature": [ "{ register: (shareMenuProvider: ", @@ -1429,10 +1429,10 @@ }, "start": { "parentPluginId": "share", - "id": "def-public.SharePluginStart", + "id": "def-public.SharePublicStart", "type": "Type", "tags": [], - "label": "SharePluginStart", + "label": "SharePublicStart", "description": [], "signature": [ "{ toggleShareContextMenu: (options: ", @@ -1510,10 +1510,10 @@ "objects": [], "setup": { "parentPluginId": "share", - "id": "def-server.SharePluginSetup", + "id": "def-server.SharePublicSetup", "type": "Interface", "tags": [], - "label": "SharePluginSetup", + "label": "SharePublicSetup", "description": [], "path": "src/plugins/share/server/plugin.ts", "deprecated": false, @@ -1521,7 +1521,7 @@ "children": [ { "parentPluginId": "share", - "id": "def-server.SharePluginSetup.url", + "id": "def-server.SharePublicSetup.url", "type": "Object", "tags": [], "label": "url", @@ -1544,10 +1544,10 @@ }, "start": { "parentPluginId": "share", - "id": "def-server.SharePluginStart", + "id": "def-server.SharePublicStart", "type": "Interface", "tags": [], - "label": "SharePluginStart", + "label": "SharePublicStart", "description": [], "path": "src/plugins/share/server/plugin.ts", "deprecated": false, @@ -1555,7 +1555,7 @@ "children": [ { "parentPluginId": "share", - "id": "def-server.SharePluginStart.url", + "id": "def-server.SharePublicStart.url", "type": "Object", "tags": [], "label": "url", diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 23d7dc5446c3..42447b167842 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-12-18 +date: 2023-12-20 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 5fcf16314ab2..95286a9e8219 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-12-18 +date: 2023-12-20 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 f8b794b4fd47..01cd1d29fd4e 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-12-18 +date: 2023-12-20 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 4ad95ad4213e..c1c347c643df 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-12-18 +date: 2023-12-20 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 cdb64355fe08..ebbce17be89c 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-12-18 +date: 2023-12-20 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 3ecebb2ca3ab..f5720acb909f 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-12-18 +date: 2023-12-20 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 11b9cacaf47c..2c7e34966b67 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-12-18 +date: 2023-12-20 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 96056c8d8523..b3ece3658ff6 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-12-18 +date: 2023-12-20 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 cdb82ee2be71..a249b1bc0d57 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-12-18 +date: 2023-12-20 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 e208be503303..93af855b77f7 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 0bcece016430..1b843089f136 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index d2f28f942061..63e264031d36 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-12-18 +date: 2023-12-20 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 9278473f3cea..8bda84c44e80 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-12-18 +date: 2023-12-20 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 215cdbb85daf..964343655f03 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-12-18 +date: 2023-12-20 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 eaa39b0f255e..0050e9ce95a4 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.devdocs.json b/api_docs/ui_actions.devdocs.json index bf583998fc74..95d88333a2d2 100644 --- a/api_docs/ui_actions.devdocs.json +++ b/api_docs/ui_actions.devdocs.json @@ -2517,10 +2517,10 @@ ], "setup": { "parentPluginId": "uiActions", - "id": "def-public.UiActionsSetup", + "id": "def-public.UiActionsPublicSetup", "type": "Type", "tags": [], - "label": "UiActionsSetup", + "label": "UiActionsPublicSetup", "description": [], "signature": [ "{ readonly registerTrigger: (trigger: ", @@ -2565,10 +2565,10 @@ }, "start": { "parentPluginId": "uiActions", - "id": "def-public.UiActionsStart", + "id": "def-public.UiActionsPublicStart", "type": "Type", "tags": [], - "label": "UiActionsStart", + "label": "UiActionsPublicStart", "description": [], "signature": [ "{ readonly registerTrigger: (trigger: ", diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index ee1e01cb9cd1..6214a4ddeaef 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.devdocs.json b/api_docs/ui_actions_enhanced.devdocs.json index 83c71b1e3e65..7eeb5a7446ab 100644 --- a/api_docs/ui_actions_enhanced.devdocs.json +++ b/api_docs/ui_actions_enhanced.devdocs.json @@ -3698,8 +3698,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsSetup", - "text": "UiActionsSetup" + "section": "def-public.UiActionsPublicSetup", + "text": "UiActionsPublicSetup" }, ",Pick<", "UiActionsServiceEnhancements", @@ -3732,8 +3732,8 @@ "pluginId": "uiActions", "scope": "public", "docId": "kibUiActionsPluginApi", - "section": "def-public.UiActionsStart", - "text": "UiActionsStart" + "section": "def-public.UiActionsPublicStart", + "text": "UiActionsPublicStart" }, ",Pick<", "UiActionsServiceEnhancements", @@ -3825,10 +3825,12 @@ "pluginId": "uiActionsEnhanced", "scope": "server", "docId": "kibUiActionsEnhancedPluginApi", - "section": "def-server.SetupContract", - "text": "SetupContract" + "section": "def-server.UiActionsEnhancedServerSetup", + "text": "UiActionsEnhancedServerSetup" }, - ", void, SetupDependencies, object>" + ", void, UiActionsEnhancedServerSetupDependencies, ", + "UiActionsEnhancedServerStartDependencies", + ">" ], "path": "src/plugins/ui_actions_enhanced/server/plugin.ts", "deprecated": false, @@ -3888,7 +3890,7 @@ "label": "setup", "description": [], "signature": [ - "(core: ", + "(_core: ", { "pluginId": "@kbn/core-lifecycle-server", "scope": "common", @@ -3896,7 +3898,7 @@ "section": "def-common.CoreSetup", "text": "CoreSetup" }, - ", { embeddable }: SetupDependencies) => { registerActionFactory: (definition: ", + ", { embeddable }: UiActionsEnhancedServerSetupDependencies) => { registerActionFactory: (definition: ", { "pluginId": "uiActionsEnhanced", "scope": "server", @@ -3923,7 +3925,7 @@ "id": "def-server.AdvancedUiActionsServerPlugin.setup.$1", "type": "Object", "tags": [], - "label": "core", + "label": "_core", "description": [], "signature": [ { @@ -3948,7 +3950,7 @@ "label": "{ embeddable }", "description": [], "signature": [ - "SetupDependencies" + "UiActionsEnhancedServerSetupDependencies" ], "path": "src/plugins/ui_actions_enhanced/server/plugin.ts", "deprecated": false, @@ -4246,10 +4248,10 @@ "objects": [], "setup": { "parentPluginId": "uiActionsEnhanced", - "id": "def-server.SetupContract", + "id": "def-server.UiActionsEnhancedServerSetup", "type": "Interface", "tags": [], - "label": "SetupContract", + "label": "UiActionsEnhancedServerSetup", "description": [], "path": "src/plugins/ui_actions_enhanced/server/plugin.ts", "deprecated": false, @@ -4257,7 +4259,7 @@ "children": [ { "parentPluginId": "uiActionsEnhanced", - "id": "def-server.SetupContract.registerActionFactory", + "id": "def-server.UiActionsEnhancedServerSetup.registerActionFactory", "type": "Function", "tags": [], "label": "registerActionFactory", @@ -4287,7 +4289,7 @@ "children": [ { "parentPluginId": "uiActionsEnhanced", - "id": "def-server.SetupContract.registerActionFactory.$1", + "id": "def-server.UiActionsEnhancedServerSetup.registerActionFactory.$1", "type": "Object", "tags": [], "label": "definition", @@ -4324,10 +4326,10 @@ }, "start": { "parentPluginId": "uiActionsEnhanced", - "id": "def-server.StartContract", + "id": "def-server.UiActionsEnhancedServerStart", "type": "Type", "tags": [], - "label": "StartContract", + "label": "UiActionsEnhancedServerStart", "description": [], "signature": [ "void" diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 4eb814550346..45c4c1d21ffe 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.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 | |-------------------|-----------|------------------------|-----------------| -| 212 | 0 | 145 | 10 | +| 212 | 0 | 145 | 11 | ## Client diff --git a/api_docs/unified_doc_viewer.devdocs.json b/api_docs/unified_doc_viewer.devdocs.json index 28e674ad5844..a72cb5053802 100644 --- a/api_docs/unified_doc_viewer.devdocs.json +++ b/api_docs/unified_doc_viewer.devdocs.json @@ -152,40 +152,23 @@ "children": [ { "parentPluginId": "unifiedDocViewer", - "id": "def-public.UnifiedDocViewerSetup.addDocView", - "type": "Function", + "id": "def-public.UnifiedDocViewerSetup.registry", + "type": "Object", "tags": [], - "label": "addDocView", + "label": "registry", "description": [], "signature": [ - "(docViewRaw: ", - "DocViewInput", - " | ", - "DocViewInputFn", - ") => void" + { + "pluginId": "@kbn/unified-doc-viewer", + "scope": "common", + "docId": "kibKbnUnifiedDocViewerPluginApi", + "section": "def-common.DocViewsRegistry", + "text": "DocViewsRegistry" + } ], "path": "src/plugins/unified_doc_viewer/public/plugin.tsx", "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "unifiedDocViewer", - "id": "def-public.UnifiedDocViewerSetup.addDocView.$1", - "type": "CompoundType", - "tags": [], - "label": "docViewRaw", - "description": [], - "signature": [ - "DocViewInput", - " | ", - "DocViewInputFn" - ], - "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "trackAdoption": false } ], "lifecycle": "setup", @@ -204,38 +187,23 @@ "children": [ { "parentPluginId": "unifiedDocViewer", - "id": "def-public.UnifiedDocViewerStart.getDocViews", - "type": "Function", + "id": "def-public.UnifiedDocViewerStart.registry", + "type": "Object", "tags": [], - "label": "getDocViews", + "label": "registry", "description": [], "signature": [ - "(hit: ", - "DataTableRecord", - ") => ", - "DocView", - "[]" + { + "pluginId": "@kbn/unified-doc-viewer", + "scope": "common", + "docId": "kibKbnUnifiedDocViewerPluginApi", + "section": "def-common.DocViewsRegistry", + "text": "DocViewsRegistry" + } ], "path": "src/plugins/unified_doc_viewer/public/plugin.tsx", "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "unifiedDocViewer", - "id": "def-public.UnifiedDocViewerStart.getDocViews.$1", - "type": "Object", - "tags": [], - "label": "hit", - "description": [], - "signature": [ - "DataTableRecord" - ], - "path": "packages/kbn-unified-doc-viewer/src/services/doc_views_registry.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "trackAdoption": false } ], "lifecycle": "start", diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index ae96e33156eb..2e786d70f2f7 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 12 | 0 | 9 | 2 | +| 10 | 0 | 7 | 2 | ## Client diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 0e29b844faa7..b7dfd2a6c836 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-12-18 +date: 2023-12-20 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 4f447ab053d2..39c379405560 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-12-18 +date: 2023-12-20 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 0047bfc6cabd..19d4782ec7d6 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 09abfa73cbb7..4c3129b13347 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2023-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 51e9fadf1012..5fcc62642813 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-12-18 +date: 2023-12-20 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 fe81d5d23f5c..f71b562a6221 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-12-18 +date: 2023-12-20 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 77f941dd5a72..8a6ba03021b0 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-12-18 +date: 2023-12-20 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 6e291caca1dc..f24bee0440e9 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-12-18 +date: 2023-12-20 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 cb9aa5567950..4c67dd85451a 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-12-18 +date: 2023-12-20 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 f7c8606da386..74cfe13aba58 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-12-18 +date: 2023-12-20 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 07f993dba7cb..750aaaf624e5 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-12-18 +date: 2023-12-20 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 57c3308879c8..93db8c2d945c 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-12-18 +date: 2023-12-20 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 500d2dbfbcf4..56292f6063c3 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-12-18 +date: 2023-12-20 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 e65f58f5a38b..7902ca810314 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-12-18 +date: 2023-12-20 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 0c3aabf3cf03..5b0bd3b1753a 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-12-18 +date: 2023-12-20 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 dc9b21c52fa7..333d3ec33541 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-12-18 +date: 2023-12-20 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 bf0c5ff50627..12a82eb484d4 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-12-18 +date: 2023-12-20 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 3b7a0e17af6b..e10f38319337 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-12-18 +date: 2023-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/management/advanced-options.asciidoc b/docs/management/advanced-options.asciidoc index 03a85d319cf5..c0307253a720 100644 --- a/docs/management/advanced-options.asciidoc +++ b/docs/management/advanced-options.asciidoc @@ -451,6 +451,9 @@ preview:[] When enabled, allows users to create Service Groups from the APM Serv [[observability-apm-trace-explorer-tab]]`observability:apmTraceExplorerTab`:: preview:[] Enable the APM Trace Explorer feature, that allows you to search and inspect traces with KQL or EQL. +[[observability-infrastructure-profiling-integration]]`observability:enableInfrastructureProfilingIntegration`:: +preview:[] Enables the Profiling view in Host details within Infrastructure. + [float] [[kibana-reporting-settings]] ==== Reporting diff --git a/docs/management/connectors/action-types/tines.asciidoc b/docs/management/connectors/action-types/tines.asciidoc index cdaf56912d0f..c9888ab7b908 100644 --- a/docs/management/connectors/action-types/tines.asciidoc +++ b/docs/management/connectors/action-types/tines.asciidoc @@ -19,6 +19,7 @@ or as needed when you're creating a rule. For example: [role="screenshot"] image::management/connectors/images/tines-connector.png[Tines connector] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. [float] [[tines-connector-configuration]] @@ -34,23 +35,14 @@ API Token:: A Tines API token created by the user. For more information, refer [[tines-action-parameters]] === Test connectors -Tines actions have the following parameters. - -Story:: The Story to send the events to. -Webhook:: The Webhook action from the previous story that will receive the events, it is the data entry point. - You can test connectors with the <> or as you're creating or editing the connector in {kib}. For example: [role="screenshot"] image::management/connectors/images/tines-params-test.png[Tines params test] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. -Once the Tines connector has been configured in an alerting rule: - -[role="screenshot"] -image::management/connectors/images/tines-alerting.png[Tines rule alert] - -It will send a POST request to the Tines webhook action on every action that runs with at least one result. +If you create a rule action that uses the Tines connector, you can likewise configure the POST request that is sent to the Tines webhook action when the rule conditions are met. [float] [[webhookUrlFallback-tines-configuration]] diff --git a/docs/management/connectors/images/tines-alerting.png b/docs/management/connectors/images/tines-alerting.png deleted file mode 100644 index 765cd95abb10..000000000000 Binary files a/docs/management/connectors/images/tines-alerting.png and /dev/null differ diff --git a/docs/management/connectors/images/tines-connector.png b/docs/management/connectors/images/tines-connector.png index b4a1b12a83f0..b63b1b33041c 100644 Binary files a/docs/management/connectors/images/tines-connector.png and b/docs/management/connectors/images/tines-connector.png differ diff --git a/docs/management/connectors/images/tines-params-test.png b/docs/management/connectors/images/tines-params-test.png index a7211b62ad95..ecc736aa0ba1 100644 Binary files a/docs/management/connectors/images/tines-params-test.png and b/docs/management/connectors/images/tines-params-test.png differ diff --git a/package.json b/package.json index 0f1a3a328e00..f2446fc5c27a 100644 --- a/package.json +++ b/package.json @@ -906,7 +906,7 @@ "compare-versions": "3.5.1", "constate": "^3.3.2", "copy-to-clipboard": "^3.0.8", - "core-js": "^3.31.0", + "core-js": "^3.34.0", "cronstrue": "^1.51.0", "css-box-model": "^1.2.1", "css.escape": "^1.5.1", diff --git a/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/__snapshots__/fatal_errors_service.test.ts.snap b/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/__snapshots__/fatal_errors_service.test.ts.snap index c88e342110c1..755095d444dc 100644 --- a/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/__snapshots__/fatal_errors_service.test.ts.snap +++ b/packages/core/fatal-errors/core-fatal-errors-browser-internal/src/__snapshots__/fatal_errors_service.test.ts.snap @@ -19,6 +19,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Rx.Observable, } } diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/toasts_service.test.tsx.snap b/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/toasts_service.test.tsx.snap index a86cd8f38df5..f21c83f02652 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/toasts_service.test.tsx.snap +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/toasts_service.test.tsx.snap @@ -25,6 +25,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, diff --git a/packages/core/overlays/core-overlays-browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap b/packages/core/overlays/core-overlays-browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap index 6908a64f6644..bb50e7397a72 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap +++ b/packages/core/overlays/core-overlays-browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap @@ -33,6 +33,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -147,6 +148,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -254,6 +256,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, diff --git a/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap b/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap index a3b098adbbd8..c93fae64cf36 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap +++ b/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap @@ -100,6 +100,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -361,6 +362,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -677,6 +679,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -914,6 +917,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -1156,6 +1160,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -1393,6 +1398,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -1438,6 +1444,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -1581,6 +1588,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -1688,6 +1696,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -1800,6 +1809,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, @@ -1907,6 +1917,7 @@ Array [ } theme={ Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, diff --git a/packages/core/theme/core-theme-browser-internal/src/theme_service.test.ts b/packages/core/theme/core-theme-browser-internal/src/theme_service.test.ts index 9bc01dc3af26..e9b58ca12cee 100644 --- a/packages/core/theme/core-theme-browser-internal/src/theme_service.test.ts +++ b/packages/core/theme/core-theme-browser-internal/src/theme_service.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { take } from 'rxjs/operators'; +import { firstValueFrom } from 'rxjs'; import { injectedMetadataServiceMock } from '@kbn/core-injected-metadata-browser-mocks'; import { ThemeService } from './theme_service'; @@ -23,7 +23,16 @@ describe('ThemeService', () => { it('exposes a `theme$` observable with the values provided by the injected metadata', async () => { injectedMetadata.getTheme.mockReturnValue({ version: 'v8', darkMode: true }); const { theme$ } = themeService.setup({ injectedMetadata }); - const theme = await theme$.pipe(take(1)).toPromise(); + const theme = await firstValueFrom(theme$); + expect(theme).toEqual({ + darkMode: true, + }); + }); + + it('#getTheme() returns the current theme', async () => { + injectedMetadata.getTheme.mockReturnValue({ version: 'v8', darkMode: true }); + const setup = themeService.setup({ injectedMetadata }); + const theme = setup.getTheme(); expect(theme).toEqual({ darkMode: true, }); @@ -41,7 +50,17 @@ describe('ThemeService', () => { injectedMetadata.getTheme.mockReturnValue({ version: 'v8', darkMode: true }); themeService.setup({ injectedMetadata }); const { theme$ } = themeService.start(); - const theme = await theme$.pipe(take(1)).toPromise(); + const theme = await firstValueFrom(theme$); + expect(theme).toEqual({ + darkMode: true, + }); + }); + + it('#getTheme() returns the current theme', async () => { + injectedMetadata.getTheme.mockReturnValue({ version: 'v8', darkMode: true }); + themeService.setup({ injectedMetadata }); + const start = themeService.start(); + const theme = start.getTheme(); expect(theme).toEqual({ darkMode: true, }); diff --git a/packages/core/theme/core-theme-browser-internal/src/theme_service.ts b/packages/core/theme/core-theme-browser-internal/src/theme_service.ts index 58ff963c387f..b4768ec05e55 100644 --- a/packages/core/theme/core-theme-browser-internal/src/theme_service.ts +++ b/packages/core/theme/core-theme-browser-internal/src/theme_service.ts @@ -6,8 +6,7 @@ * Side Public License, v 1. */ -import { Subject, Observable, of } from 'rxjs'; -import { shareReplay, takeUntil } from 'rxjs/operators'; +import { Subject, of } from 'rxjs'; import type { InternalInjectedMetadataSetup } from '@kbn/core-injected-metadata-browser-internal'; import type { CoreTheme, ThemeServiceSetup, ThemeServiceStart } from '@kbn/core-theme-browser'; @@ -18,26 +17,27 @@ export interface ThemeServiceSetupDeps { /** @internal */ export class ThemeService { - private theme$?: Observable; + private contract?: ThemeServiceSetup; private stop$ = new Subject(); public setup({ injectedMetadata }: ThemeServiceSetupDeps): ThemeServiceSetup { - const theme = injectedMetadata.getTheme(); - this.theme$ = of({ darkMode: theme.darkMode }); + const themeMeta = injectedMetadata.getTheme(); + const theme: CoreTheme = { darkMode: themeMeta.darkMode }; - return { - theme$: this.theme$.pipe(takeUntil(this.stop$), shareReplay(1)), + this.contract = { + theme$: of(theme), + getTheme: () => theme, }; + + return this.contract; } public start(): ThemeServiceStart { - if (!this.theme$) { + if (!this.contract) { throw new Error('setup must be called before start'); } - return { - theme$: this.theme$.pipe(takeUntil(this.stop$), shareReplay(1)), - }; + return this.contract; } public stop() { diff --git a/packages/core/theme/core-theme-browser-mocks/src/theme_service.mock.ts b/packages/core/theme/core-theme-browser-mocks/src/theme_service.mock.ts index a4f2321e874a..3c1ef5fb6747 100644 --- a/packages/core/theme/core-theme-browser-mocks/src/theme_service.mock.ts +++ b/packages/core/theme/core-theme-browser-mocks/src/theme_service.mock.ts @@ -8,7 +8,7 @@ import { of } from 'rxjs'; import type { PublicMethodsOf } from '@kbn/utility-types'; -import type { ThemeServiceSetup, ThemeServiceStart, CoreTheme } from '@kbn/core-theme-browser'; +import type { ThemeServiceSetup, CoreTheme } from '@kbn/core-theme-browser'; import type { ThemeService } from '@kbn/core-theme-browser-internal'; const mockTheme: CoreTheme = { @@ -19,22 +19,16 @@ const createThemeMock = (): CoreTheme => { return { ...mockTheme }; }; -const createTheme$Mock = () => { - return of(createThemeMock()); +const createTheme$Mock = (theme: CoreTheme = createThemeMock()) => { + return of(theme); }; -const createThemeSetupMock = () => { - const setupMock: jest.Mocked = { - theme$: createTheme$Mock(), +const createThemeContractMock = (theme: CoreTheme = createThemeMock()) => { + const themeMock: jest.Mocked = { + theme$: createTheme$Mock(theme), + getTheme: jest.fn().mockReturnValue(theme), }; - return setupMock; -}; - -const createThemeStartMock = () => { - const startMock: jest.Mocked = { - theme$: createTheme$Mock(), - }; - return startMock; + return themeMock; }; type ThemeServiceContract = PublicMethodsOf; @@ -46,16 +40,16 @@ const createServiceMock = () => { stop: jest.fn(), }; - mocked.setup.mockReturnValue(createThemeSetupMock()); - mocked.start.mockReturnValue(createThemeStartMock()); + mocked.setup.mockReturnValue(createThemeContractMock()); + mocked.start.mockReturnValue(createThemeContractMock()); return mocked; }; export const themeServiceMock = { create: createServiceMock, - createSetupContract: createThemeSetupMock, - createStartContract: createThemeStartMock, + createSetupContract: createThemeContractMock, + createStartContract: createThemeContractMock, createTheme: createThemeMock, createTheme$: createTheme$Mock, }; diff --git a/packages/core/theme/core-theme-browser/src/types.ts b/packages/core/theme/core-theme-browser/src/types.ts index 5f8672f3c902..c3299dbd7b91 100644 --- a/packages/core/theme/core-theme-browser/src/types.ts +++ b/packages/core/theme/core-theme-browser/src/types.ts @@ -22,12 +22,21 @@ export interface CoreTheme { * @public */ export interface ThemeServiceSetup { + /** + * An observable of the currently active theme. + * Note that the observable has a replay effect, so it will emit once during subscriptions. + */ theme$: Observable; + + /** + * Returns the theme currently in use. + * Note that when possible, using the `theme$` observable instead is strongly encouraged, as + * it will allow to react to dynamic theme switch (even if those are not implemented at the moment) + */ + getTheme(): CoreTheme; } /** * @public */ -export interface ThemeServiceStart { - theme$: Observable; -} +export type ThemeServiceStart = ThemeServiceSetup; diff --git a/packages/kbn-analytics/package.json b/packages/kbn-analytics/package.json index 128870ecff50..840ae04e9c32 100644 --- a/packages/kbn-analytics/package.json +++ b/packages/kbn-analytics/package.json @@ -4,5 +4,6 @@ "version": "1.0.0", "description": "Kibana Analytics tool", "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-babel-preset/node_preset.js b/packages/kbn-babel-preset/node_preset.js index 6cd89bdcdecb..a0c5a0114873 100644 --- a/packages/kbn-babel-preset/node_preset.js +++ b/packages/kbn-babel-preset/node_preset.js @@ -31,7 +31,7 @@ module.exports = (_, options = {}) => { // Because of that we should use for that value the same version we install // in the package.json in order to have the same polyfills between the environment // and the tests - corejs: '3.31.0', + corejs: '3.34.0', bugfixes: true, ...(options['@babel/preset-env'] || {}), diff --git a/packages/kbn-babel-preset/webpack_preset.js b/packages/kbn-babel-preset/webpack_preset.js index 75dd1b642c29..84f3771816df 100644 --- a/packages/kbn-babel-preset/webpack_preset.js +++ b/packages/kbn-babel-preset/webpack_preset.js @@ -19,7 +19,7 @@ module.exports = (api, options = {}) => { modules: false, // Please read the explanation for this // in node_preset.js - corejs: '3.31.0', + corejs: '3.34.0', bugfixes: true, browserslistEnv: api.env('production') ? 'production' : 'dev', }, diff --git a/packages/kbn-config-schema/src/internals/index.ts b/packages/kbn-config-schema/src/internals/index.ts index 5ab5bd6a9ef0..4de64ab7fdd8 100644 --- a/packages/kbn-config-schema/src/internals/index.ts +++ b/packages/kbn-config-schema/src/internals/index.ts @@ -153,6 +153,46 @@ export const internals: JoiRoot = Joi.extend( } return { value }; }, + rules: { + min: { + args: [ + { + name: 'limit', + assert: Joi.alternatives([Joi.number(), Joi.string()]).required(), + }, + ], + method(limit) { + return this.$_addRule({ name: 'min', args: { limit } }); + }, + validate(value, { error }, args) { + const limit = ensureDuration(args.limit); + if (value.asMilliseconds() < limit.asMilliseconds()) { + return error('duration.min', { value, limit }); + } + + return value; + }, + }, + max: { + args: [ + { + name: 'limit', + assert: Joi.alternatives([Joi.number(), Joi.string()]).required(), + }, + ], + method(limit) { + return this.$_addRule({ name: 'max', args: { limit } }); + }, + validate(value, { error }, args) { + const limit = ensureDuration(args.limit); + if (value.asMilliseconds() > limit.asMilliseconds()) { + return error('duration.max', { value, limit }); + } + + return value; + }, + }, + }, }, { type: 'number', diff --git a/packages/kbn-config-schema/src/types/duration_type.test.ts b/packages/kbn-config-schema/src/types/duration_type.test.ts index ef52e36c6799..18327b65cd1f 100644 --- a/packages/kbn-config-schema/src/types/duration_type.test.ts +++ b/packages/kbn-config-schema/src/types/duration_type.test.ts @@ -8,6 +8,7 @@ import { duration as momentDuration } from 'moment'; import { schema } from '../..'; +import { ensureDuration } from '../duration'; const { duration, object, contextRef, siblingRef } = schema; @@ -135,6 +136,28 @@ describe('#defaultValue', () => { }); }); +describe('#min', () => { + it('returns the value when larger', () => { + expect(duration({ min: '5m' }).validate('7m')).toEqual(ensureDuration('7m')); + }); + it('throws error when value is smaller', () => { + expect(() => duration({ min: '5m' }).validate('3m')).toThrowErrorMatchingInlineSnapshot( + `"Value must be equal to or greater than [PT5M]"` + ); + }); +}); + +describe('#max', () => { + it('returns the value when smaller', () => { + expect(duration({ max: '10d' }).validate('7d')).toEqual(ensureDuration('7d')); + }); + it('throws error when value is greater', () => { + expect(() => duration({ max: '10h' }).validate('17h')).toThrowErrorMatchingInlineSnapshot( + `"Value must be equal to or less than [PT10H]"` + ); + }); +}); + test('returns error when not valid string or non-safe positive integer', () => { expect(() => duration().validate(-123)).toThrowErrorMatchingInlineSnapshot( `"Value in milliseconds is expected to be a safe positive integer."` diff --git a/packages/kbn-config-schema/src/types/duration_type.ts b/packages/kbn-config-schema/src/types/duration_type.ts index 2d469f0ca6ac..561ac9cfa90a 100644 --- a/packages/kbn-config-schema/src/types/duration_type.ts +++ b/packages/kbn-config-schema/src/types/duration_type.ts @@ -13,12 +13,14 @@ import { internals } from '../internals'; import { Reference } from '../references'; import { Type } from './type'; -type DurationValueType = Duration | string | number; +export type DurationValueType = Duration | string | number; export interface DurationOptions { // we need to special-case defaultValue as we want to handle string inputs too defaultValue?: DurationValueType | Reference | (() => DurationValueType); validate?: (value: Duration) => string | void; + min?: DurationValueType; + max?: DurationValueType; } export class DurationType extends Type { @@ -36,16 +38,32 @@ export class DurationType extends Type { defaultValue = options.defaultValue; } - super(internals.duration(), { ...options, defaultValue }); + let schema = internals.duration(); + if (options.min) { + schema = schema.min(options.min); + } + if (options.max) { + schema = schema.max(options.max); + } + + super(schema, { validate: options.validate, defaultValue }); } - protected handleError(type: string, { message, value }: Record, path: string[]) { + protected handleError( + type: string, + { message, value, limit }: Record, + path: string[] + ) { switch (type) { case 'any.required': case 'duration.base': return `expected value of type [moment.Duration] but got [${typeDetect(value)}]`; case 'duration.parse': return new SchemaTypeError(message, path); + case 'duration.min': + return `Value must be equal to or greater than [${limit.toString()}]`; + case 'duration.max': + return `Value must be equal to or less than [${limit.toString()}]`; } } } diff --git a/packages/kbn-config-schema/types/joi.d.ts b/packages/kbn-config-schema/types/joi.d.ts index 5dd695cb05e8..f6e14fdea5dc 100644 --- a/packages/kbn-config-schema/types/joi.d.ts +++ b/packages/kbn-config-schema/types/joi.d.ts @@ -7,7 +7,8 @@ */ import * as Joi from 'joi'; -import { ByteSizeValue } from '../src/byte_size_value'; +import type { ByteSizeValue } from '../src/byte_size_value'; +import type { DurationValueType } from '../src/types/duration_type'; declare module 'joi' { interface BytesSchema extends AnySchema { @@ -16,6 +17,12 @@ declare module 'joi' { max(limit: number | string | ByteSizeValue): this; } + interface DurationSchema extends AnySchema { + min(limit: DurationValueType): this; + + max(limit: DurationValueType): this; + } + interface MapSchema extends AnySchema { entries(key: AnySchema, value: AnySchema): this; } @@ -34,7 +41,7 @@ declare module 'joi' { export type JoiRoot = Joi.Root & { bytes: () => BytesSchema; - duration: () => AnySchema; + duration: () => DurationSchema; map: () => MapSchema; record: () => RecordSchema; stream: () => AnySchema; diff --git a/packages/kbn-crypto-browser/package.json b/packages/kbn-crypto-browser/package.json index 6838d31a7a6b..682e2f99a2b9 100644 --- a/packages/kbn-crypto-browser/package.json +++ b/packages/kbn-crypto-browser/package.json @@ -2,5 +2,6 @@ "name": "@kbn/crypto-browser", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-custom-integrations/package.json b/packages/kbn-custom-integrations/package.json index 80b3bc267e5a..bc653a7c3de0 100644 --- a/packages/kbn-custom-integrations/package.json +++ b/packages/kbn-custom-integrations/package.json @@ -2,5 +2,6 @@ "name": "@kbn/custom-integrations", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index a697000bbebb..a259d76c6aff 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -39,6 +39,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D const SERVERLESS_DOCS = `${DOCS_WEBSITE_URL}serverless/`; const SERVERLESS_ELASTICSEARCH_DOCS = `${SERVERLESS_DOCS}elasticsearch/`; const SEARCH_LABS_REPO = `${ELASTIC_GITHUB}elasticsearch-labs/`; + const isServerless = buildFlavor === 'serverless'; return deepFreeze({ settings: `${ELASTIC_WEBSITE_URL}guide/en/kibana/${DOC_LINK_VERSION}/settings.html`, @@ -316,7 +317,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D luceneExpressions: `${ELASTICSEARCH_DOCS}modules-scripting-expression.html`, }, indexPatterns: { - introduction: `${KIBANA_DOCS}data-views.html`, + introduction: isServerless ? `${SERVERLESS_DOCS}data-views` : `${KIBANA_DOCS}data-views.html`, fieldFormattersNumber: `${KIBANA_DOCS}numeral.html`, fieldFormattersString: `${KIBANA_DOCS}managing-data-views.html#string-field-formatters`, runtimeFields: `${KIBANA_DOCS}managing-data-views.html#runtime-fields`, @@ -486,7 +487,9 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D }, management: { dashboardSettings: `${KIBANA_DOCS}advanced-options.html#kibana-dashboard-settings`, - indexManagement: `${ELASTICSEARCH_DOCS}index-mgmt.html`, + indexManagement: isServerless + ? `${SERVERLESS_DOCS}index-management` + : `${ELASTICSEARCH_DOCS}index-mgmt.html`, kibanaSearchSettings: `${KIBANA_DOCS}advanced-options.html#kibana-search-settings`, discoverSettings: `${KIBANA_DOCS}advanced-options.html#kibana-discover-settings`, visualizationSettings: `${KIBANA_DOCS}advanced-options.html#kibana-visualization-settings`, @@ -529,7 +532,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D nlpImportModel: `${MACHINE_LEARNING_DOCS}ml-nlp-import-model.html`, }, transforms: { - guide: `${ELASTICSEARCH_DOCS}transforms.html`, + guide: isServerless ? `${SERVERLESS_DOCS}transforms` : `${ELASTICSEARCH_DOCS}transforms.html`, alertingRules: `${ELASTICSEARCH_DOCS}transform-alerts.html`, }, visualize: { @@ -562,8 +565,12 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D sloBurnRateRule: `${ELASTIC_WEBSITE_URL}guide/en/observability/${DOC_LINK_VERSION}/slo-burn-rate-alert.html`, }, alerting: { - guide: `${KIBANA_DOCS}create-and-manage-rules.html`, - actionTypes: `${KIBANA_DOCS}action-types.html`, + guide: isServerless + ? `${SERVERLESS_DOCS}rules` + : `${KIBANA_DOCS}create-and-manage-rules.html`, + actionTypes: isServerless + ? `${SERVERLESS_DOCS}action-connectors` + : `${KIBANA_DOCS}action-types.html`, apmRules: `${KIBANA_DOCS}apm-alerts.html`, emailAction: `${KIBANA_DOCS}email-action-type.html`, emailActionConfig: `${KIBANA_DOCS}email-action-type.html`, @@ -573,7 +580,9 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D indexAction: `${KIBANA_DOCS}index-action-type.html`, esQuery: `${KIBANA_DOCS}rule-type-es-query.html`, indexThreshold: `${KIBANA_DOCS}rule-type-index-threshold.html`, - maintenanceWindows: `${KIBANA_DOCS}maintenance-windows.html`, + maintenanceWindows: isServerless + ? `${SERVERLESS_DOCS}maintenance-windows` + : `${KIBANA_DOCS}maintenance-windows.html`, pagerDutyAction: `${KIBANA_DOCS}pagerduty-action-type.html`, preconfiguredConnectors: `${KIBANA_DOCS}pre-configured-connectors.html`, preconfiguredAlertHistoryConnector: `${KIBANA_DOCS}pre-configured-connectors.html#preconfigured-connector-alert-history`, @@ -590,7 +599,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D }, maps: { connectToEms: `${KIBANA_DOCS}maps-connect-to-ems.html`, - guide: `${KIBANA_DOCS}maps.html`, + guide: isServerless ? `${SERVERLESS_DOCS}maps` : `${KIBANA_DOCS}maps.html`, importGeospatialPrivileges: `${KIBANA_DOCS}import-geospatial-data.html#import-geospatial-privileges`, gdalTutorial: `${ELASTIC_WEBSITE_URL}blog/how-to-ingest-geospatial-data-into-elasticsearch-with-gdal`, termJoinsExample: `${KIBANA_DOCS}terms-join.html#_example_term_join`, @@ -662,6 +671,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D cronExpressions: `${ELASTICSEARCH_DOCS}cron-expressions.html`, executeWatchActionModes: `${ELASTICSEARCH_DOCS}watcher-api-execute-watch.html#watcher-api-execute-watch-action-mode`, indexExists: `${ELASTICSEARCH_DOCS}indices-exists.html`, + inferTrainedModel: `${ELASTICSEARCH_DOCS}infer-trained-model.html`, multiSearch: `${ELASTICSEARCH_DOCS}search-multi-search.html`, openIndex: `${ELASTICSEARCH_DOCS}indices-open-close.html`, putComponentTemplate: `${ELASTICSEARCH_DOCS}indices-component-template.html`, @@ -730,7 +740,9 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D kv: `${ELASTICSEARCH_DOCS}kv-processor.html`, lowercase: `${ELASTICSEARCH_DOCS}lowercase-processor.html`, pipeline: `${ELASTICSEARCH_DOCS}pipeline-processor.html`, - pipelines: `${ELASTICSEARCH_DOCS}ingest.html`, + pipelines: isServerless + ? `${SERVERLESS_DOCS}ingest-pipelines` + : `${ELASTICSEARCH_DOCS}ingest.html`, csvPipelines: `${ELASTIC_WEBSITE_URL}guide/en/ecs/${DOC_LINK_VERSION}/ecs-converting.html`, pipelineFailure: `${ELASTICSEARCH_DOCS}ingest.html#handling-pipeline-failures`, processors: `${ELASTICSEARCH_DOCS}processors.html`, @@ -770,7 +782,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D installElasticAgentStandalone: `${FLEET_DOCS}install-standalone-elastic-agent.html`, upgradeElasticAgent: `${FLEET_DOCS}upgrade-elastic-agent.html`, learnMoreBlog: `${ELASTIC_WEBSITE_URL}blog/elastic-agent-and-fleet-make-it-easier-to-integrate-your-systems-with-elastic`, - apiKeysLearnMore: `${KIBANA_DOCS}api-keys.html`, + apiKeysLearnMore: isServerless ? `${SERVERLESS_DOCS}api-keys` : `${KIBANA_DOCS}api-keys.html`, onPremRegistry: `${FLEET_DOCS}air-gapped.html`, packageSignatures: `${FLEET_DOCS}package-signatures.html`, secureLogstash: `${FLEET_DOCS}secure-logstash-connections.html`, diff --git a/packages/kbn-doc-links/src/types.ts b/packages/kbn-doc-links/src/types.ts index 3b6d22a19024..910c0c218dcc 100644 --- a/packages/kbn-doc-links/src/types.ts +++ b/packages/kbn-doc-links/src/types.ts @@ -391,6 +391,7 @@ export interface DocLinks { cronExpressions: string; executeWatchActionModes: string; indexExists: string; + inferTrainedModel: string; multiSearch: string; openIndex: string; putComponentTemplate: string; diff --git a/packages/kbn-dom-drag-drop/package.json b/packages/kbn-dom-drag-drop/package.json index 13248a11ab05..b69bca91c0c1 100644 --- a/packages/kbn-dom-drag-drop/package.json +++ b/packages/kbn-dom-drag-drop/package.json @@ -2,5 +2,8 @@ "name": "@kbn/dom-drag-drop", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": [ + "*.scss" + ] } \ No newline at end of file diff --git a/packages/kbn-es-query/package.json b/packages/kbn-es-query/package.json index 7894764af2d8..15d903f7d605 100644 --- a/packages/kbn-es-query/package.json +++ b/packages/kbn-es-query/package.json @@ -2,5 +2,6 @@ "name": "@kbn/es-query", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true + "private": true, + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-es-query/src/expressions/types.ts b/packages/kbn-es-query/src/expressions/types.ts index 42dc021c9b75..ed367adc7973 100644 --- a/packages/kbn-es-query/src/expressions/types.ts +++ b/packages/kbn-es-query/src/expressions/types.ts @@ -9,6 +9,7 @@ import { Filter, Query, TimeRange } from '../filters'; export interface ExecutionContextSearch { + now?: number; filters?: Filter[]; query?: Query | Query[]; timeRange?: TimeRange; diff --git a/packages/kbn-expandable-flyout/package.json b/packages/kbn-expandable-flyout/package.json index a2e826c04284..1dbae79ed993 100644 --- a/packages/kbn-expandable-flyout/package.json +++ b/packages/kbn-expandable-flyout/package.json @@ -2,5 +2,6 @@ "name": "@kbn/expandable-flyout", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-guided-onboarding/package.json b/packages/kbn-guided-onboarding/package.json index d25b7c04bc4a..ce4f8ebcff41 100644 --- a/packages/kbn-guided-onboarding/package.json +++ b/packages/kbn-guided-onboarding/package.json @@ -2,5 +2,6 @@ "name": "@kbn/guided-onboarding", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-io-ts-utils/package.json b/packages/kbn-io-ts-utils/package.json index d62960217f94..9e402254c368 100644 --- a/packages/kbn-io-ts-utils/package.json +++ b/packages/kbn-io-ts-utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/io-ts-utils", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true + "private": true, + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-language-documentation-popover/package.json b/packages/kbn-language-documentation-popover/package.json index dfa1e7e4fd37..63060b46c2c1 100644 --- a/packages/kbn-language-documentation-popover/package.json +++ b/packages/kbn-language-documentation-popover/package.json @@ -2,5 +2,6 @@ "name": "@kbn/language-documentation-popover", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true + "private": true, + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-logging/package.json b/packages/kbn-logging/package.json index 7ffb4903932d..0a10bfa905af 100644 --- a/packages/kbn-logging/package.json +++ b/packages/kbn-logging/package.json @@ -3,5 +3,6 @@ "version": "1.0.0", "private": true, "author": "Kibana Core", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 764fe35dd759..d38e1399ed3a 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -23,7 +23,7 @@ pageLoadAssetSize: cloudSecurityPosture: 19109 console: 46091 contentManagement: 16254 - controls: 40000 + controls: 55082 core: 435325 crossClusterReplication: 65408 customIntegrations: 22034 @@ -86,7 +86,7 @@ pageLoadAssetSize: kibanaUsageCollection: 16463 kibanaUtils: 79713 kubernetesSecurity: 77234 - lens: 39000 + lens: 41000 licenseManagement: 41817 licensing: 29004 links: 44490 diff --git a/packages/kbn-profiling-utils/package.json b/packages/kbn-profiling-utils/package.json index 984883e07897..c8ba64aa958c 100644 --- a/packages/kbn-profiling-utils/package.json +++ b/packages/kbn-profiling-utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/profiling-utils", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-resizable-layout/package.json b/packages/kbn-resizable-layout/package.json index 4f925688a84b..3963d28c52cc 100644 --- a/packages/kbn-resizable-layout/package.json +++ b/packages/kbn-resizable-layout/package.json @@ -2,5 +2,6 @@ "name": "@kbn/resizable-layout", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-rule-data-utils/package.json b/packages/kbn-rule-data-utils/package.json index bf1c9795a367..2c7ca5f90f73 100644 --- a/packages/kbn-rule-data-utils/package.json +++ b/packages/kbn-rule-data-utils/package.json @@ -2,5 +2,6 @@ "name": "@kbn/rule-data-utils", "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "private": true + "private": true, + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-search-connectors/components/configuration/connector_configuration_form.tsx b/packages/kbn-search-connectors/components/configuration/connector_configuration_form.tsx index f52add9bce02..af258a807788 100644 --- a/packages/kbn-search-connectors/components/configuration/connector_configuration_form.tsx +++ b/packages/kbn-search-connectors/components/configuration/connector_configuration_form.tsx @@ -66,12 +66,12 @@ export const ConnectorConfigurationForm: React.FC = ); useEffect(() => { - setConfigView(sortAndFilterConnectorConfiguration(localConfig, isNative)); - }, [localConfig, isNative]); + setLocalConfig((localConf) => ({ ...configuration, ...localConf })); + }, [configuration]); useEffect(() => { - setLocalConfig(configuration); - }, [configuration]); + setConfigView(sortAndFilterConnectorConfiguration(localConfig, isNative)); + }, [localConfig, isNative]); return ( { return { diff --git a/packages/kbn-shared-ux-utility/package.json b/packages/kbn-shared-ux-utility/package.json index 302da6f03a81..16e37be9fae1 100644 --- a/packages/kbn-shared-ux-utility/package.json +++ b/packages/kbn-shared-ux-utility/package.json @@ -2,5 +2,6 @@ "name": "@kbn/shared-ux-utility", "private": true, "version": "1.0.0", - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-std/package.json b/packages/kbn-std/package.json index d8317ac361f5..66c58e27c0c0 100644 --- a/packages/kbn-std/package.json +++ b/packages/kbn-std/package.json @@ -3,5 +3,6 @@ "version": "1.0.0", "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false, "private": true } \ No newline at end of file diff --git a/packages/kbn-unified-data-table/__mocks__/services.ts b/packages/kbn-unified-data-table/__mocks__/services.ts index 2c7466864449..40f626a335cf 100644 --- a/packages/kbn-unified-data-table/__mocks__/services.ts +++ b/packages/kbn-unified-data-table/__mocks__/services.ts @@ -8,7 +8,7 @@ import { of } from 'rxjs'; import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; import { expressionsPluginMock } from '@kbn/expressions-plugin/public/mocks'; -import { chromeServiceMock, coreMock } from '@kbn/core/public/mocks'; +import { chromeServiceMock, coreMock, themeServiceMock } from '@kbn/core/public/mocks'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { fieldFormatsMock } from '@kbn/field-formats-plugin/common/mocks'; import { IUiSettingsClient, ToastsStart } from '@kbn/core/public'; @@ -41,10 +41,7 @@ export function createServicesMock() { ...uiSettingsMock, }; - const theme = { - theme$: of({ darkMode: false }), - }; - + const theme = themeServiceMock.createSetupContract({ darkMode: false }); corePluginMock.theme = theme; const dataPlugin = dataPluginMock.createStartContract(); diff --git a/packages/kbn-user-profile-components/package.json b/packages/kbn-user-profile-components/package.json index a4f8db277f5a..96c776c30188 100644 --- a/packages/kbn-user-profile-components/package.json +++ b/packages/kbn-user-profile-components/package.json @@ -2,5 +2,6 @@ "name": "@kbn/user-profile-components", "version": "1.0.0", "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0" + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false } \ No newline at end of file diff --git a/packages/kbn-zod-helpers/package.json b/packages/kbn-zod-helpers/package.json index 6d27a7e70f85..7ddaa8641395 100644 --- a/packages/kbn-zod-helpers/package.json +++ b/packages/kbn-zod-helpers/package.json @@ -3,5 +3,6 @@ "license": "SSPL-1.0 OR Elastic License 2.0", "name": "@kbn/zod-helpers", "private": true, - "version": "1.0.0" + "version": "1.0.0", + "sideEffects": false } \ No newline at end of file diff --git a/src/plugins/ai_assistant_management/observability/public/helpers/test_helper.tsx b/src/plugins/ai_assistant_management/observability/public/helpers/test_helper.tsx index 2e1b8e0def9b..b03b1fd8a37d 100644 --- a/src/plugins/ai_assistant_management/observability/public/helpers/test_helper.tsx +++ b/src/plugins/ai_assistant_management/observability/public/helpers/test_helper.tsx @@ -13,8 +13,7 @@ import { render as testLibRender } from '@testing-library/react'; import { coreMock } from '@kbn/core/public/mocks'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import translations from '@kbn/translations-plugin/translations/ja-JP.json'; - -import { mockObservabilityAIAssistantService } from '@kbn/observability-ai-assistant-plugin/public'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { RouterProvider } from '@kbn/typed-react-router-config'; import { AppContextProvider } from '../context/app_context'; import { RedirectToHomeIfUnauthorized } from '../routes/components/redirect_to_home_if_unauthorized'; @@ -62,14 +61,7 @@ export const render = (component: React.ReactNode, params?: { show: boolean }) = http: coreStart.http, application: coreStart.application, notifications: coreStart.notifications, - observabilityAIAssistant: { - service: mockObservabilityAIAssistantService, - useGenAIConnectors: () => ({ - loading: false, - selectConnector: () => {}, - reloadConnectors: () => {}, - }), - }, + observabilityAIAssistant: observabilityAIAssistantPluginMock.createStartContract(), uiSettings: coreStart.uiSettings, setBreadcrumbs: () => {}, }} diff --git a/src/plugins/chart_expressions/expression_partition_vis/public/__mocks__/theme.ts b/src/plugins/chart_expressions/expression_partition_vis/public/__mocks__/theme.ts index c66cd26fed71..7d141f15f5c7 100644 --- a/src/plugins/chart_expressions/expression_partition_vis/public/__mocks__/theme.ts +++ b/src/plugins/chart_expressions/expression_partition_vis/public/__mocks__/theme.ts @@ -5,12 +5,11 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { from } from 'rxjs'; + +import { themeServiceMock } from '@kbn/core/public/mocks'; import { ThemeService } from '@kbn/charts-plugin/public/services'; const theme = new ThemeService(); -theme.init({ - theme$: from([{ darkMode: false }]), -}); +theme.init(themeServiceMock.createSetupContract({ darkMode: false })); export { theme }; diff --git a/src/plugins/content_management/server/plugin.ts b/src/plugins/content_management/server/plugin.ts index 4913c5cac08f..6a276147687c 100755 --- a/src/plugins/content_management/server/plugin.ts +++ b/src/plugins/content_management/server/plugin.ts @@ -19,13 +19,20 @@ import type { Context as RpcContext } from './rpc'; import { ContentManagementServerSetup, ContentManagementServerStart, - SetupDependencies, + ContentManagementServerSetupDependencies, + ContentManagementServerStartDependencies, } from './types'; import { EventStreamService } from './event_stream'; import { procedureNames } from '../common/rpc'; export class ContentManagementPlugin - implements Plugin + implements + Plugin< + ContentManagementServerSetup, + ContentManagementServerStart, + ContentManagementServerSetupDependencies, + ContentManagementServerStartDependencies + > { private readonly logger: Logger; private readonly core: Core; diff --git a/src/plugins/content_management/server/types.ts b/src/plugins/content_management/server/types.ts index 3d11f487fbe7..79251838b1a5 100644 --- a/src/plugins/content_management/server/types.ts +++ b/src/plugins/content_management/server/types.ts @@ -9,7 +9,10 @@ import { CoreApi } from './core'; // eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface SetupDependencies {} +export interface ContentManagementServerSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ContentManagementServerStartDependencies {} // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface ContentManagementServerSetup extends CoreApi {} diff --git a/src/plugins/controls/common/options_list/ip_search.ts b/src/plugins/controls/common/options_list/ip_search.ts index f371fbb1f650..565c2ed2a1df 100644 --- a/src/plugins/controls/common/options_list/ip_search.ts +++ b/src/plugins/controls/common/options_list/ip_search.ts @@ -17,6 +17,10 @@ interface IpSegments { type: 'ipv4' | 'ipv6' | 'unknown'; } +export const getIsValidFullIp = (searchString: string) => { + return ipaddr.IPv4.isValidFourPartDecimal(searchString) || ipaddr.IPv6.isValid(searchString); +}; + export const getIpSegments = (searchString: string): IpSegments => { if (searchString.indexOf('.') !== -1) { // ipv4 takes priority - so if search string contains both `.` and `:` then it will just be an invalid ipv4 search diff --git a/src/plugins/controls/common/options_list/is_valid_search.test.ts b/src/plugins/controls/common/options_list/is_valid_search.test.ts new file mode 100644 index 000000000000..0334e1eb809e --- /dev/null +++ b/src/plugins/controls/common/options_list/is_valid_search.test.ts @@ -0,0 +1,118 @@ +/* + * 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 { isValidSearch } from './is_valid_search'; + +describe('test validity of search strings', () => { + describe('number field', () => { + it('valid search - basic integer', () => { + expect(isValidSearch({ searchString: '123', fieldType: 'number' })).toBe(true); + }); + + it('valid search - floating point number', () => { + expect(isValidSearch({ searchString: '12.34', fieldType: 'number' })).toBe(true); + }); + + it('valid search - negative number', () => { + expect(isValidSearch({ searchString: '-42', fieldType: 'number' })).toBe(true); + }); + + it('invalid search - invalid character search string', () => { + expect(isValidSearch({ searchString: '1!a23', fieldType: 'number' })).toBe(false); + }); + }); + + // we do not currently support searching date fields, so they will always be invalid + describe('date field', () => { + it('invalid search - formatted date', () => { + expect(isValidSearch({ searchString: 'December 12, 2023', fieldType: 'date' })).toBe(false); + }); + + it('invalid search - invalid character search string', () => { + expect(isValidSearch({ searchString: '!!12/12/23?', fieldType: 'date' })).toBe(false); + }); + }); + + // only testing exact match validity here - the remainder of testing is covered by ./ip_search.test.ts + describe('ip field', () => { + it('valid search - ipv4', () => { + expect( + isValidSearch({ + searchString: '1.2.3.4', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(true); + }); + + it('valid search - full ipv6', () => { + expect( + isValidSearch({ + searchString: 'fbbe:a363:9e14:987c:49cf:d4d0:d8c8:bc42', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(true); + }); + + it('valid search - partial ipv6', () => { + expect( + isValidSearch({ + searchString: 'fbbe:a363::', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(true); + }); + + it('invalid search - invalid character search string', () => { + expect( + isValidSearch({ + searchString: '!!123.abc?', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(false); + }); + + it('invalid search - ipv4', () => { + expect( + isValidSearch({ + searchString: '1.2.3.256', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(false); + }); + + it('invalid search - ipv6', () => { + expect( + isValidSearch({ + searchString: '::fbbe:a363::', + fieldType: 'ip', + searchTechnique: 'exact', + }) + ).toBe(false); + }); + }); + + // string field searches can never be invalid + describe('string field', () => { + it('valid search - basic search string', () => { + expect(isValidSearch({ searchString: 'abc', fieldType: 'string' })).toBe(true); + }); + + it('valid search - numeric search string', () => { + expect(isValidSearch({ searchString: '123', fieldType: 'string' })).toBe(true); + }); + + it('valid search - complex search string', () => { + expect(isValidSearch({ searchString: '!+@abc*&[]', fieldType: 'string' })).toBe(true); + }); + }); +}); diff --git a/src/plugins/controls/common/options_list/is_valid_search.ts b/src/plugins/controls/common/options_list/is_valid_search.ts new file mode 100644 index 000000000000..2d69271f991f --- /dev/null +++ b/src/plugins/controls/common/options_list/is_valid_search.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 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 { getIpRangeQuery, getIsValidFullIp } from './ip_search'; +import { OptionsListSearchTechnique } from './suggestions_searching'; + +/** + * ipaddr is a fairly large library - therefore, this function needs to be separate from + * the `suggestions_searching` file (which is used in the OptionsListEditorOptions component, + * which is in the factory and not async imported) + */ + +export const isValidSearch = ({ + searchString, + fieldType, + searchTechnique, +}: { + searchString?: string; + fieldType?: string; + searchTechnique?: OptionsListSearchTechnique; +}): boolean => { + if (!searchString || searchString.length === 0) return true; + + switch (fieldType) { + case 'number': { + return !isNaN(Number(searchString)); + } + case 'date': { + /** searching is not currently supported for date fields */ + return false; + } + case 'ip': { + if (searchTechnique === 'exact') { + /** + * exact match searching will throw an error if the search string isn't a **full** IP, + * so we need a slightly different validity check here than for other search techniques + */ + return getIsValidFullIp(searchString); + } + return getIpRangeQuery(searchString).validSearch; + } + default: { + /** string searches are always considered to be valid */ + return true; + } + } +}; diff --git a/src/plugins/controls/common/options_list/suggestions_searching.ts b/src/plugins/controls/common/options_list/suggestions_searching.ts new file mode 100644 index 000000000000..a68788bba322 --- /dev/null +++ b/src/plugins/controls/common/options_list/suggestions_searching.ts @@ -0,0 +1,31 @@ +/* + * 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 type OptionsListSearchTechnique = 'prefix' | 'wildcard' | 'exact'; + +export const getDefaultSearchTechnique = (type: string): OptionsListSearchTechnique | undefined => { + const compatibleSearchTechniques = getCompatibleSearchTechniques(type); + return compatibleSearchTechniques.length > 0 ? compatibleSearchTechniques[0] : undefined; +}; + +export const getCompatibleSearchTechniques = (type?: string): OptionsListSearchTechnique[] => { + switch (type) { + case 'string': { + return ['prefix', 'wildcard', 'exact']; + } + case 'ip': { + return ['prefix', 'exact']; + } + case 'number': { + return ['exact']; + } + default: { + return []; + } + } +}; diff --git a/src/plugins/controls/common/options_list/types.ts b/src/plugins/controls/common/options_list/types.ts index 460f7df080a8..d7f75d5c268c 100644 --- a/src/plugins/controls/common/options_list/types.ts +++ b/src/plugins/controls/common/options_list/types.ts @@ -6,17 +6,15 @@ * Side Public License, v 1. */ -import { FieldSpec, DataView, RuntimeFieldSpec } from '@kbn/data-views-plugin/common'; -import type { Filter, Query, BoolQuery, TimeRange } from '@kbn/es-query'; +import { DataView, FieldSpec, RuntimeFieldSpec } from '@kbn/data-views-plugin/common'; +import type { BoolQuery, Filter, Query, TimeRange } from '@kbn/es-query'; -import type { OptionsListSortingType } from './suggestions_sorting'; import type { DataControlInput } from '../types'; +import { OptionsListSearchTechnique } from './suggestions_searching'; +import type { OptionsListSortingType } from './suggestions_sorting'; export const OPTIONS_LIST_CONTROL = 'optionsListControl'; -export type OptionsListSearchTechnique = 'prefix' | 'wildcard'; -export const OPTIONS_LIST_DEFAULT_SEARCH_TECHNIQUE: OptionsListSearchTechnique = 'prefix'; - export interface OptionsListEmbeddableInput extends DataControlInput { searchTechnique?: OptionsListSearchTechnique; sort?: OptionsListSortingType; diff --git a/src/plugins/controls/common/range_slider/mocks.tsx b/src/plugins/controls/common/range_slider/mocks.tsx index 049e882a3268..d656102c26cf 100644 --- a/src/plugins/controls/common/range_slider/mocks.tsx +++ b/src/plugins/controls/common/range_slider/mocks.tsx @@ -5,8 +5,15 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - import { RangeSliderEmbeddableInput } from '..'; +import { + ControlFactory, + ControlOutput, + RangeSliderEmbeddable, + RangeSliderEmbeddableFactory, +} from '../../public'; +import * as rangeSliderStateModule from '../../public/range_slider/range_slider_reducers'; +import { RangeSliderComponentState } from '../../public/range_slider/types'; export const mockRangeSliderEmbeddableInput = { id: 'sample options list', @@ -14,3 +21,40 @@ export const mockRangeSliderEmbeddableInput = { dataViewId: 'sample id', value: ['0', '10'], } as RangeSliderEmbeddableInput; + +const mockRangeSliderComponentState = { + field: { name: 'bytes', type: 'number', aggregatable: true }, + min: undefined, + max: undefined, + error: undefined, + isInvalid: false, +} as RangeSliderComponentState; + +const mockRangeSliderOutput = { + loading: false, +} as ControlOutput; + +export const mockRangeSliderEmbeddable = async (partialState?: { + explicitInput?: Partial; + componentState?: Partial; +}) => { + const rangeSliderFactoryStub = new RangeSliderEmbeddableFactory(); + const rangeSliderControlFactory = rangeSliderFactoryStub as unknown as ControlFactory; + rangeSliderControlFactory.getDefaultInput = () => ({}); + + // initial component state can be provided by overriding the defaults. + const initialComponentState = { + ...mockRangeSliderComponentState, + ...partialState?.componentState, + }; + jest + .spyOn(rangeSliderStateModule, 'getDefaultComponentState') + .mockImplementation(() => initialComponentState); + + const mockEmbeddable = (await rangeSliderControlFactory.create({ + ...mockRangeSliderEmbeddableInput, + ...partialState?.explicitInput, + })) as RangeSliderEmbeddable; + mockEmbeddable.getOutput = jest.fn().mockReturnValue(mockRangeSliderOutput); + return mockEmbeddable; +}; diff --git a/src/plugins/controls/public/components/control_setting_tooltip_label.tsx b/src/plugins/controls/public/components/control_setting_tooltip_label.tsx new file mode 100644 index 000000000000..91b40e6a95e6 --- /dev/null +++ b/src/plugins/controls/public/components/control_setting_tooltip_label.tsx @@ -0,0 +1,32 @@ +/* + * 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 React from 'react'; + +import { EuiFlexGroup, EuiFlexItem, EuiIconTip } from '@elastic/eui'; +import { css } from '@emotion/react'; + +export const ControlSettingTooltipLabel = ({ + label, + tooltip, +}: { + label: string; + tooltip: string; +}) => ( + + {label} + + + + +); diff --git a/src/plugins/controls/public/control_group/control_group_strings.ts b/src/plugins/controls/public/control_group/control_group_strings.ts index 6de3797b2e9c..996d86f7d676 100644 --- a/src/plugins/controls/public/control_group/control_group_strings.ts +++ b/src/plugins/controls/public/control_group/control_group_strings.ts @@ -7,6 +7,7 @@ */ import { i18n } from '@kbn/i18n'; +import { RANGE_SLIDER_CONTROL } from '../range_slider'; export const ControlGroupStrings = { manageControl: { @@ -35,10 +36,6 @@ export const ControlGroupStrings = { i18n.translate('controls.controlGroup.manageControl.dataSource.dataViewTitle', { defaultMessage: 'Data view', }), - noControlTypeMessage: () => - i18n.translate('controls.controlGroup.manageControl.dataSource.noControlTypeMessage', { - defaultMessage: 'No field selected yet', - }), getFieldTitle: () => i18n.translate('controls.controlGroup.manageControl.dataSource.fieldTitle', { defaultMessage: 'Field', @@ -47,6 +44,46 @@ export const ControlGroupStrings = { i18n.translate('controls.controlGroup.manageControl.dataSource.controlTypesTitle', { defaultMessage: 'Control type', }), + getControlTypeErrorMessage: ({ + fieldSelected, + controlType, + }: { + fieldSelected?: boolean; + controlType?: string; + }) => { + if (!fieldSelected) { + return i18n.translate( + 'controls.controlGroup.manageControl.dataSource.controlTypErrorMessage.noField', + { + defaultMessage: 'Select a field first.', + } + ); + } + + switch (controlType) { + /** + * Note that options list controls are currently compatible with every field type; so, there is no + * need to have a special error message for these. + */ + case RANGE_SLIDER_CONTROL: { + return i18n.translate( + 'controls.controlGroup.manageControl.dataSource.controlTypeErrorMessage.rangeSlider', + { + defaultMessage: 'Range sliders are only compatible with number fields.', + } + ); + } + default: { + /** This shouldn't ever happen - but, adding just in case as a fallback. */ + return i18n.translate( + 'controls.controlGroup.manageControl.dataSource.controlTypeErrorMessage.default', + { + defaultMessage: 'Select a compatible control type.', + } + ); + } + } + }, }, displaySettings: { getFormGroupTitle: () => @@ -209,53 +246,46 @@ export const ControlGroupStrings = { defaultMessage: 'Cancel', }), }, - validateSelections: { - getValidateSelectionsTitle: () => - i18n.translate('controls.controlGroup.management.validate.title', { - defaultMessage: 'Validate user selections', - }), - getValidateSelectionsSubTitle: () => - i18n.translate('controls.controlGroup.management.validate.subtitle', { - defaultMessage: - 'Automatically ignore any control selection that would result in no data.', - }), - }, - controlChaining: { - getHierarchyTitle: () => - i18n.translate('controls.controlGroup.management.hierarchy.title', { - defaultMessage: 'Chain controls', - }), - getHierarchySubTitle: () => - i18n.translate('controls.controlGroup.management.hierarchy.subtitle', { - defaultMessage: - 'Selections in one control narrow down available options in the next. Controls are chained from left to right.', - }), + selectionSettings: { + getSelectionSettingsTitle: () => + i18n.translate('controls.controlGroup.management.selectionSettings', { + defaultMessage: 'Selections', + }), + validateSelections: { + getValidateSelectionsTitle: () => + i18n.translate('controls.controlGroup.management.validate.title', { + defaultMessage: 'Validate user selections', + }), + getValidateSelectionsSubTitle: () => + i18n.translate('controls.controlGroup.management.validate.subtitle', { + defaultMessage: + 'Automatically ignore any control selection that would result in no data.', + }), + }, + controlChaining: { + getHierarchyTitle: () => + i18n.translate('controls.controlGroup.management.hierarchy.title', { + defaultMessage: 'Chain controls', + }), + getHierarchySubTitle: () => + i18n.translate('controls.controlGroup.management.hierarchy.subtitle', { + defaultMessage: + 'Selections in one control narrow down available options in the next. Controls are chained from left to right.', + }), + }, }, - querySync: { - getQuerySettingsTitle: () => - i18n.translate('controls.controlGroup.management.query.searchSettingsTitle', { - defaultMessage: 'Sync with query bar', - }), - getQuerySettingsSubtitle: () => - i18n.translate('controls.controlGroup.management.query.useAllSearchSettingsTitle', { - defaultMessage: - 'Keeps the control group in sync with the query bar by applying time range, filter pills, and queries from the query bar', - }), - getAdvancedSettingsTitle: () => - i18n.translate('controls.controlGroup.management.query.advancedSettings', { - defaultMessage: 'Advanced', - }), - getIgnoreTimerangeTitle: () => - i18n.translate('controls.controlGroup.management.query.ignoreTimerange', { - defaultMessage: 'Ignore timerange', - }), - getIgnoreQueryTitle: () => - i18n.translate('controls.controlGroup.management.query.ignoreQuery', { - defaultMessage: 'Ignore query bar', - }), - getIgnoreFilterPillsTitle: () => - i18n.translate('controls.controlGroup.management.query.ignoreFilterPills', { - defaultMessage: 'Ignore filter pills', + filteringSettings: { + getFilteringSettingsTitle: () => + i18n.translate('controls.controlGroup.management.filteringSettings', { + defaultMessage: 'Filtering', + }), + getUseGlobalFiltersTitle: () => + i18n.translate('controls.controlGroup.management.filtering.useGlobalFilters', { + defaultMessage: 'Apply global filters to controls', + }), + getUseGlobalTimeRangeTitle: () => + i18n.translate('controls.controlGroup.management.filtering.useGlobalTimeRange', { + defaultMessage: 'Apply global time range to controls', }), }, }, diff --git a/src/plugins/controls/public/control_group/editor/control_editor.test.tsx b/src/plugins/controls/public/control_group/editor/control_editor.test.tsx index 33c627df2046..d6e079261e18 100644 --- a/src/plugins/controls/public/control_group/editor/control_editor.test.tsx +++ b/src/plugins/controls/public/control_group/editor/control_editor.test.tsx @@ -6,29 +6,33 @@ * Side Public License, v 1. */ -import React from 'react'; import { ReactWrapper } from 'enzyme'; +import React from 'react'; import { act } from 'react-dom/test-utils'; -import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { stubDataView } from '@kbn/data-views-plugin/common/data_view.stub'; +import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; -import { ControlGroupInput } from '../types'; -import { pluginServices } from '../../services'; -import { ControlEditor, EditControlProps } from './control_editor'; import { OptionsListEmbeddableFactory } from '../..'; +import { + OptionsListEmbeddableInput, + OPTIONS_LIST_CONTROL, + RANGE_SLIDER_CONTROL, +} from '../../../common'; import { DEFAULT_CONTROL_GROW, DEFAULT_CONTROL_WIDTH, } from '../../../common/control_group/control_group_constants'; -import { mockControlGroupContainer, mockOptionsListEmbeddable } from '../../../common/mocks'; +import { + mockControlGroupContainer, + mockOptionsListEmbeddable, + mockRangeSliderEmbeddable, +} from '../../../common/mocks'; import { RangeSliderEmbeddableFactory } from '../../range_slider'; +import { pluginServices } from '../../services'; import { ControlGroupContainerContext } from '../embeddable/control_group_container'; -import { - OptionsListEmbeddableInput, - OPTIONS_LIST_CONTROL, - RANGE_SLIDER_CONTROL, -} from '../../../common'; +import { ControlGroupInput } from '../types'; +import { ControlEditor, EditControlProps } from './control_editor'; describe('Data control editor', () => { interface MountOptions { @@ -96,10 +100,13 @@ describe('Data control editor', () => { await selectField('machine.os.raw'); }); - test('creates an options list control', async () => { - expect(findTestSubject(controlEditor, 'control-editor-type').text()).toEqual( - 'Options list' - ); + test('can only create an options list control', async () => { + expect( + findTestSubject(controlEditor, 'create__optionsListControl').instance() + ).toBeEnabled(); + expect( + findTestSubject(controlEditor, 'create__rangeSliderControl').instance() + ).not.toBeEnabled(); }); test('has custom settings', async () => { @@ -113,6 +120,8 @@ describe('Data control editor', () => { 'optionsListControl__searchOptionsRadioGroup' ); expect(searchOptions.exists()).toBe(true); + const options = searchOptions.find('div.euiRadioGroup__item'); + expect(options.length).toBe(3); }); }); @@ -122,18 +131,23 @@ describe('Data control editor', () => { await selectField('clientip'); }); - test('creates an options list control', async () => { - expect(findTestSubject(controlEditor, 'control-editor-type').text()).toEqual( - 'Options list' - ); + test('can only create an options list control', async () => { + expect( + findTestSubject(controlEditor, 'create__optionsListControl').instance() + ).toBeEnabled(); + expect( + findTestSubject(controlEditor, 'create__rangeSliderControl').instance() + ).not.toBeEnabled(); }); - test('does not have custom search options', async () => { + test('has custom search options', async () => { const searchOptions = findTestSubject( controlEditor, 'optionsListControl__searchOptionsRadioGroup' ); - expect(searchOptions.exists()).toBe(false); + expect(searchOptions.exists()).toBe(true); + const options = searchOptions.find('div.euiRadioGroup__item'); + expect(options.length).toBe(2); }); }); @@ -143,13 +157,38 @@ describe('Data control editor', () => { await selectField('bytes'); }); - test('creates a range slider control', async () => { - expect(findTestSubject(controlEditor, 'control-editor-type').text()).toEqual( - 'Range slider' + test('can create an options list or range slider control', async () => { + expect( + findTestSubject(controlEditor, 'create__optionsListControl').instance() + ).toBeEnabled(); + expect( + findTestSubject(controlEditor, 'create__rangeSliderControl').instance() + ).toBeEnabled(); + }); + + test('defaults to options list creation', async () => { + expect( + findTestSubject(controlEditor, 'create__optionsListControl').prop('aria-pressed') + ).toBe(true); + }); + + test('when creating options list, has custom settings', async () => { + findTestSubject(controlEditor, 'create__optionsListControl').simulate('click'); + const customSettings = findTestSubject(controlEditor, 'control-editor-custom-settings'); + expect(customSettings.exists()).toBe(true); + }); + + test('when creating options list, does not have custom search options', async () => { + findTestSubject(controlEditor, 'create__optionsListControl').simulate('click'); + const searchOptions = findTestSubject( + controlEditor, + 'optionsListControl__searchOptionsRadioGroup' ); + expect(searchOptions.exists()).toBe(false); }); - test('does not have any custom settings', async () => { + test('when creating range slider, does not have custom settings', async () => { + findTestSubject(controlEditor, 'create__rangeSliderControl').simulate('click'); const searchOptions = findTestSubject(controlEditor, 'control-editor-custom-settings'); expect(searchOptions.exists()).toBe(false); }); @@ -174,15 +213,28 @@ describe('Data control editor', () => { }); describe('editing existing options list control', () => { - const openOptionsListEditor = async (explicitInput?: Partial) => { - const control = await mockOptionsListEmbeddable({ - explicitInput: { - title: 'machine.os.raw', - dataViewId: stubDataView.id, - fieldName: 'machine.os.raw', - ...explicitInput, - }, - }); + const openEditor = async ( + type: string, + explicitInput?: Partial + ) => { + const control = + type === 'optionsList' + ? await mockOptionsListEmbeddable({ + explicitInput: { + title: 'machine.os.raw', + dataViewId: stubDataView.id, + fieldName: 'machine.os.raw', + ...explicitInput, + }, + }) + : await mockRangeSliderEmbeddable({ + explicitInput: { + title: 'bytes', + dataViewId: stubDataView.id, + fieldName: 'bytes', + ...explicitInput, + }, + }); await mountComponent({ componentOptions: { isCreate: false, embeddable: control }, }); @@ -190,23 +242,45 @@ describe('Data control editor', () => { describe('control title', () => { test('auto-fills default', async () => { - await openOptionsListEditor(); + await openEditor('optionsList'); const titleInput = findTestSubject(controlEditor, 'control-editor-title-input'); expect(titleInput.prop('value')).toBe('machine.os.raw'); expect(titleInput.prop('placeholder')).toBe('machine.os.raw'); }); test('auto-fills custom title', async () => { - await openOptionsListEditor({ title: 'Custom Title' }); + await openEditor('optionsList', { title: 'Custom Title' }); const titleInput = findTestSubject(controlEditor, 'control-editor-title-input'); expect(titleInput.prop('value')).toBe('Custom Title'); expect(titleInput.prop('placeholder')).toBe('machine.os.raw'); }); }); + describe('control type', () => { + test('selects the default control type', async () => { + await openEditor('optionsList', { fieldName: 'bytes' }); + expect( + findTestSubject(controlEditor, 'create__optionsListControl').prop('aria-pressed') + ).toBe(true); + expect( + findTestSubject(controlEditor, 'create__rangeSliderControl').prop('aria-pressed') + ).toBe(false); + }); + + test('selects the given, non-default control type', async () => { + await openEditor('rangeSlider', { fieldName: 'bytes' }); + expect( + findTestSubject(controlEditor, 'create__optionsListControl').prop('aria-pressed') + ).toBe(false); + expect( + findTestSubject(controlEditor, 'create__rangeSliderControl').prop('aria-pressed') + ).toBe(true); + }); + }); + describe('selection options', () => { test('selects default', async () => { - await openOptionsListEditor(); + await openEditor('optionsList'); const radioGroup = findTestSubject( controlEditor, 'optionsListControl__selectionOptionsRadioGroup' @@ -216,7 +290,7 @@ describe('Data control editor', () => { }); test('selects given', async () => { - await openOptionsListEditor({ singleSelect: true }); + await openEditor('optionsList', { singleSelect: true }); const radioGroup = findTestSubject( controlEditor, 'optionsListControl__selectionOptionsRadioGroup' @@ -228,7 +302,7 @@ describe('Data control editor', () => { describe('search techniques', () => { test('selects default', async () => { - await openOptionsListEditor(); + await openEditor('optionsList'); const radioGroup = findTestSubject( controlEditor, 'optionsListControl__searchOptionsRadioGroup' @@ -238,7 +312,7 @@ describe('Data control editor', () => { }); test('selects given', async () => { - await openOptionsListEditor({ searchTechnique: 'wildcard' }); + await openEditor('optionsList', { searchTechnique: 'wildcard' }); const radioGroup = findTestSubject( controlEditor, 'optionsListControl__searchOptionsRadioGroup' diff --git a/src/plugins/controls/public/control_group/editor/control_editor.tsx b/src/plugins/controls/public/control_group/editor/control_editor.tsx index 0860f19e506e..aa9f50507542 100644 --- a/src/plugins/controls/public/control_group/editor/control_editor.tsx +++ b/src/plugins/controls/public/control_group/editor/control_editor.tsx @@ -14,29 +14,31 @@ * Side Public License, v 1. */ +import deepEqual from 'fast-deep-equal'; import React, { useEffect, useMemo, useRef, useState } from 'react'; -import useMount from 'react-use/lib/useMount'; import useAsync from 'react-use/lib/useAsync'; -import deepEqual from 'fast-deep-equal'; +import useMount from 'react-use/lib/useMount'; import { - EuiFlyoutHeader, + EuiButton, + EuiButtonEmpty, EuiButtonGroup, - EuiFlyoutBody, + EuiDescribedFormGroup, + EuiFieldText, EuiFlexGroup, EuiFlexItem, - EuiTitle, - EuiFieldText, + EuiFlyoutBody, EuiFlyoutFooter, - EuiButton, - EuiFormRow, + EuiFlyoutHeader, EuiForm, - EuiButtonEmpty, - EuiSpacer, + EuiFormRow, EuiIcon, + EuiKeyPadMenu, + EuiKeyPadMenuItem, + EuiSpacer, EuiSwitch, - EuiTextColor, - EuiDescribedFormGroup, + EuiTitle, + EuiToolTip, } from '@elastic/eui'; import { DataViewField } from '@kbn/data-views-plugin/common'; import { @@ -45,7 +47,8 @@ import { withSuspense, } from '@kbn/presentation-util-plugin/public'; -import { ControlGroupStrings } from '../control_group_strings'; +import { TIME_SLIDER_CONTROL } from '../../../common'; +import { pluginServices } from '../../services'; import { ControlEmbeddable, ControlInput, @@ -54,10 +57,10 @@ import { DataControlInput, IEditableControlFactory, } from '../../types'; -import { CONTROL_WIDTH_OPTIONS } from './editor_constants'; -import { pluginServices } from '../../services'; -import { getDataControlFieldRegistry } from './data_control_editor_tools'; +import { ControlGroupStrings } from '../control_group_strings'; import { useControlGroupContainer } from '../embeddable/control_group_container'; +import { getDataControlFieldRegistry } from './data_control_editor_tools'; +import { CONTROL_WIDTH_OPTIONS } from './editor_constants'; export interface EditControlProps { embeddable?: ControlEmbeddable; @@ -87,7 +90,7 @@ export const ControlEditor = ({ }: EditControlProps) => { const { dataViews: { getIdsWithTitle, getDefaultId, get }, - controls: { getControlFactory }, + controls: { getControlFactory, getControlTypes }, } = pluginServices.getServices(); const controlGroup = useControlGroupContainer(); @@ -102,6 +105,9 @@ export const ControlEditor = ({ const [selectedField, setSelectedField] = useState( embeddable ? embeddable.getInput().fieldName : undefined ); + const [selectedControlType, setSelectedControlType] = useState( + embeddable ? embeddable.type : undefined + ); const [customSettings, setCustomSettings] = useState>(); const currentInput: Partial = useMemo( @@ -157,15 +163,93 @@ export const ControlEditor = ({ }, [selectedDataViewId]); useEffect( - () => setControlEditorValid(Boolean(selectedField) && Boolean(selectedDataView)), - [selectedField, setControlEditorValid, selectedDataView] + () => + setControlEditorValid( + Boolean(selectedField) && Boolean(selectedDataView) && Boolean(selectedControlType) + ), + [selectedField, setControlEditorValid, selectedDataView, selectedControlType] ); - const controlType = - selectedField && fieldRegistry && fieldRegistry[selectedField].compatibleControlTypes[0]; - const factory = controlType && getControlFactory(controlType); - const CustomSettings = - factory && (factory as IEditableControlFactory).controlEditorOptionsComponent; + const CompatibleControlTypesComponent = useMemo(() => { + const allDataControlTypes = getControlTypes().filter((type) => type !== TIME_SLIDER_CONTROL); + return ( + + {allDataControlTypes.map((controlType) => { + const factory = getControlFactory(controlType); + + const disabled = + fieldRegistry && selectedField + ? !fieldRegistry[selectedField].compatibleControlTypes.includes(controlType) + : true; + const keyPadMenuItem = ( + setSelectedControlType(controlType)} + label={factory.getDisplayName()} + > + + + ); + + return disabled ? ( + + {keyPadMenuItem} + + ) : ( + keyPadMenuItem + ); + })} + + ); + }, [selectedField, fieldRegistry, getControlFactory, getControlTypes, selectedControlType]); + + const CustomSettingsComponent = useMemo(() => { + if (!selectedControlType || !selectedField || !fieldRegistry) return; + + const controlFactory = getControlFactory(selectedControlType); + const CustomSettings = (controlFactory as IEditableControlFactory) + .controlEditorOptionsComponent; + + if (!CustomSettings) return; + + return ( + + {ControlGroupStrings.manageControl.controlTypeSettings.getFormGroupTitle( + controlFactory.getDisplayName() + )} + + } + description={ControlGroupStrings.manageControl.controlTypeSettings.getFormGroupDescription( + controlFactory.getDisplayName() + )} + data-test-subj="control-editor-custom-settings" + > + setCustomSettings(settings)} + initialInput={embeddable?.getInput()} + fieldType={fieldRegistry[selectedField].field.type} + /> + + ); + }, [selectedControlType, selectedField, getControlFactory, fieldRegistry, embeddable]); + return ( <> @@ -216,6 +300,9 @@ export const ControlEditor = ({ const newDefaultTitle = field.displayName ?? field.name; setDefaultTitle(newDefaultTitle); setSelectedField(field.name); + setSelectedControlType( + fieldRegistry?.[field.displayName].compatibleControlTypes[0] + ); if (!currentTitle || currentTitle === defaultTitle) { setCurrentTitle(newDefaultTitle); } @@ -224,20 +311,7 @@ export const ControlEditor = ({ /> - {factory ? ( - - - - - - {factory.getDisplayName()} - - - ) : ( - - {ControlGroupStrings.manageControl.dataSource.noControlTypeMessage()} - - )} + {CompatibleControlTypesComponent} )} - {!editorConfig?.hideAdditionalSettings && - CustomSettings && - (factory as IEditableControlFactory).controlEditorOptionsComponent && ( - - {ControlGroupStrings.manageControl.controlTypeSettings.getFormGroupTitle( - factory.getDisplayName() - )} - - } - description={ControlGroupStrings.manageControl.controlTypeSettings.getFormGroupDescription( - factory.getDisplayName() - )} - data-test-subj="control-editor-custom-settings" - > - setCustomSettings(settings)} - initialInput={embeddable?.getInput()} - fieldType={fieldRegistry?.[selectedField].field.type} - /> - - )} + {!editorConfig?.hideAdditionalSettings ? CustomSettingsComponent : null} {removeControl && ( <> @@ -350,7 +401,10 @@ export const ControlEditor = ({ color="primary" disabled={!controlEditorValid} onClick={() => - onSave({ input: currentInput, grow: currentGrow, width: currentWidth }, controlType) + onSave( + { input: currentInput, grow: currentGrow, width: currentWidth }, + selectedControlType + ) } > {ControlGroupStrings.manageControl.getSaveChangesTitle()} diff --git a/src/plugins/controls/public/control_group/editor/control_group_editor.tsx b/src/plugins/controls/public/control_group/editor/control_group_editor.tsx index 957b97ea15e4..70abc8ee86e7 100644 --- a/src/plugins/controls/public/control_group/editor/control_group_editor.tsx +++ b/src/plugins/controls/public/control_group/editor/control_group_editor.tsx @@ -16,30 +16,31 @@ import fastIsEqual from 'fast-deep-equal'; import React, { useCallback, useState } from 'react'; + import { - EuiFlyoutHeader, + EuiButton, + EuiButtonEmpty, EuiButtonGroup, - EuiFlyoutBody, EuiFlexGroup, EuiFlexItem, - EuiTitle, + EuiFlyoutBody, EuiFlyoutFooter, - EuiButton, + EuiFlyoutHeader, + EuiForm, EuiFormRow, - EuiButtonEmpty, + EuiHorizontalRule, EuiSpacer, - EuiForm, EuiSwitch, - EuiText, - EuiHorizontalRule, + EuiTitle, } from '@elastic/eui'; -import { CONTROL_LAYOUT_OPTIONS } from './editor_constants'; -import { ControlGroupStrings } from '../control_group_strings'; -import { ControlStyle } from '../../types'; -import { ParentIgnoreSettings } from '../..'; import { ControlGroupInput } from '..'; +import { ParentIgnoreSettings } from '../..'; import { getDefaultControlGroupInput } from '../../../common'; +import { ControlSettingTooltipLabel } from '../../components/control_setting_tooltip_label'; +import { ControlStyle } from '../../types'; +import { ControlGroupStrings } from '../control_group_strings'; +import { CONTROL_LAYOUT_OPTIONS } from './editor_constants'; interface EditControlGroupProps { initialInput: ControlGroupInput; @@ -102,7 +103,7 @@ export const ControlGroupEditor = ({ - + { // The UI copy calls this setting labelPosition, but to avoid an unnecessary migration it will be left as controlStyle in the state. - updateControlGroupEditorSetting({ controlStyle: newControlStyle as ControlStyle }); + updateControlGroupEditorSetting({ + controlStyle: newControlStyle as ControlStyle, + }); }} /> - - - - + + +
+ updateIgnoreSetting({ + ignoreFilters: !e.target.checked, + ignoreQuery: !e.target.checked, + }) + } + checked={ + !Boolean(controlGroupEditorState.ignoreParentSettings?.ignoreFilters) || + !Boolean(controlGroupEditorState.ignoreParentSettings?.ignoreQuery) + } + /> + + updateIgnoreSetting({ ignoreTimerange: !e.target.checked })} + checked={!Boolean(controlGroupEditorState.ignoreParentSettings?.ignoreTimerange)} + /> +
+
+ + +
+ + } checked={!Boolean(controlGroupEditorState.ignoreParentSettings?.ignoreValidations)} onChange={(e) => updateIgnoreSetting({ ignoreValidations: !e.target.checked })} /> - - - -

- {ControlGroupStrings.management.validateSelections.getValidateSelectionsTitle()} -

-
- -

- {ControlGroupStrings.management.validateSelections.getValidateSelectionsSubTitle()} -

-
-
- - - - - + + } checked={controlGroupEditorState.chainingSystem === 'HIERARCHICAL'} onChange={(e) => updateControlGroupEditorSetting({ @@ -156,31 +183,25 @@ export const ControlGroupEditor = ({ }) } /> - - - -

{ControlGroupStrings.management.controlChaining.getHierarchyTitle()}

-
- -

{ControlGroupStrings.management.controlChaining.getHierarchySubTitle()}

-
-
-
+
+
+ {controlCount > 0 && ( <> - - - {ControlGroupStrings.management.getDeleteAllButtonTitle()} - + + + {ControlGroupStrings.management.getDeleteAllButtonTitle()} + + )}
diff --git a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx index 403a2b941a58..0c72daac8991 100644 --- a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx @@ -6,47 +6,24 @@ * Side Public License, v 1. */ +import React, { useEffect, useMemo, useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; -import React, { useEffect, useState } from 'react'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiIconTip, - EuiSwitch, - Direction, - EuiRadioGroup, - EuiLoadingSpinner, -} from '@elastic/eui'; -import { css } from '@emotion/react'; +import { Direction, EuiFormRow, EuiLoadingSpinner, EuiRadioGroup, EuiSwitch } from '@elastic/eui'; -import { pluginServices } from '../../services'; +import { ControlEditorProps, OptionsListEmbeddableInput } from '../..'; +import { + getCompatibleSearchTechniques, + OptionsListSearchTechnique, +} from '../../../common/options_list/suggestions_searching'; import { - OptionsListSortBy, getCompatibleSortingTypes, + OptionsListSortBy, OPTIONS_LIST_DEFAULT_SORT, } from '../../../common/options_list/suggestions_sorting'; +import { pluginServices } from '../../services'; import { OptionsListStrings } from './options_list_strings'; -import { ControlEditorProps, OptionsListEmbeddableInput } from '../..'; -import { - OptionsListSearchTechnique, - OPTIONS_LIST_DEFAULT_SEARCH_TECHNIQUE, -} from '../../../common/options_list/types'; - -const TooltipText = ({ label, tooltip }: { label: string; tooltip: string }) => ( - - {label} - - - - -); +import { ControlSettingTooltipLabel } from '../../components/control_setting_tooltip_label'; const selectionOptions = [ { @@ -61,11 +38,11 @@ const selectionOptions = [ }, ]; -const searchOptions = [ +const allSearchOptions = [ { id: 'prefix', label: ( - @@ -75,13 +52,23 @@ const searchOptions = [ { id: 'wildcard', label: ( - ), 'data-test-subj': 'optionsListControl__wildcardSearchOptionAdditionalSetting', }, + { + id: 'exact', + label: ( + + ), + 'data-test-subj': 'optionsListControl__exactSearchOptionAdditionalSetting', + }, ]; interface OptionsListEditorState { @@ -117,6 +104,17 @@ export const OptionsListEditorOptions = ({ return optionsListService.getAllowExpensiveQueries(); }, []); + const compatibleSearchTechniques = useMemo( + () => getCompatibleSearchTechniques(fieldType), + [fieldType] + ); + + const searchOptions = useMemo(() => { + return allSearchOptions.filter((searchOption) => { + return compatibleSearchTechniques.includes(searchOption.id as OptionsListSearchTechnique); + }); + }, [compatibleSearchTechniques]); + useEffect(() => { // when field type changes, ensure that the selected sort type is still valid if (!getCompatibleSortingTypes(fieldType).includes(state.sortBy)) { @@ -129,6 +127,21 @@ export const OptionsListEditorOptions = ({ } }, [fieldType, onChange, state.sortBy]); + useEffect(() => { + // when field type changes, ensure that the selected search technique is still valid; + // if the selected search technique **isn't** valid, reset to the default + const searchTechnique = + initialInput?.searchTechnique && + compatibleSearchTechniques.includes(initialInput.searchTechnique) + ? initialInput.searchTechnique + : compatibleSearchTechniques[0]; + onChange({ searchTechnique }); + setState((s) => ({ + ...s, + searchTechnique, + })); + }, [compatibleSearchTechniques, onChange, initialInput]); + return ( <> ) : ( allowExpensiveQueries && - !['ip', 'date'].includes(fieldType) && ( + compatibleSearchTechniques.length > 1 && ( { const searchTechnique = id as OptionsListSearchTechnique; onChange({ searchTechnique }); @@ -171,7 +184,7 @@ export const OptionsListEditorOptions = ({ diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx index e9af654ac75e..59f1c9f2b058 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx @@ -67,241 +67,269 @@ describe('Options list popover', () => { expect(noOptionsDiv.exists()).toBeTruthy(); }); - test('display error message when the show only selected toggle is true but there are no selections', async () => { - const popover = await mountComponent(); - clickShowOnlySelections(popover); - const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); - const noSelectionsDiv = findTestSubject( - availableOptionsDiv, - 'optionsList-control-selectionsEmptyMessage' - ); - expect(noSelectionsDiv.exists()).toBeTruthy(); - }); - - test('show only selected options', async () => { - const selections = ['woof', 'bark']; - const popover = await mountComponent({ - explicitInput: { selectedOptions: selections }, + describe('show only selected', () => { + test('display error message when the show only selected toggle is true but there are no selections', async () => { + const popover = await mountComponent(); + clickShowOnlySelections(popover); + const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + const noSelectionsDiv = findTestSubject( + availableOptionsDiv, + 'optionsList-control-selectionsEmptyMessage' + ); + expect(noSelectionsDiv.exists()).toBeTruthy(); }); - clickShowOnlySelections(popover); - const availableOptions = popover.find( - '[data-test-subj="optionsList-control-available-options"] ul' - ); - availableOptions.children().forEach((child, i) => { - expect(child.text()).toBe(`${selections[i]}. Checked option.`); - }); - }); - test('disable search and sort when show only selected toggle is true', async () => { - const selections = ['woof', 'bark']; - const popover = await mountComponent({ - explicitInput: { selectedOptions: selections }, + test('show only selected options', async () => { + const selections = ['woof', 'bark']; + const popover = await mountComponent({ + explicitInput: { selectedOptions: selections }, + }); + clickShowOnlySelections(popover); + const availableOptions = popover.find( + '[data-test-subj="optionsList-control-available-options"] ul' + ); + availableOptions.children().forEach((child, i) => { + expect(child.text()).toBe(`${selections[i]}. Checked option.`); + }); }); - let searchBox = findTestSubject(popover, 'optionsList-control-search-input'); - let sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); - expect(searchBox.prop('disabled')).toBeFalsy(); - expect(sortButton.prop('disabled')).toBeFalsy(); - - clickShowOnlySelections(popover); - searchBox = findTestSubject(popover, 'optionsList-control-search-input'); - sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); - expect(searchBox.prop('disabled')).toBe(true); - expect(sortButton.prop('disabled')).toBe(true); - }); - test('test single invalid selection', async () => { - const popover = await mountComponent({ - explicitInput: { - selectedOptions: ['bark', 'woof'], - }, - componentState: { - availableOptions: [{ value: 'bark', docCount: 75 }], - validSelections: ['bark'], - invalidSelections: ['woof'], - }, + test('disable search and sort when show only selected toggle is true', async () => { + const selections = ['woof', 'bark']; + const popover = await mountComponent({ + explicitInput: { selectedOptions: selections }, + componentState: { field: { type: 'string' } as any as FieldSpec }, + }); + let searchBox = findTestSubject(popover, 'optionsList-control-search-input'); + let sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); + expect(searchBox.prop('disabled')).toBeFalsy(); + expect(sortButton.prop('disabled')).toBeFalsy(); + + clickShowOnlySelections(popover); + searchBox = findTestSubject(popover, 'optionsList-control-search-input'); + sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); + expect(searchBox.prop('disabled')).toBe(true); + expect(sortButton.prop('disabled')).toBe(true); }); - const validSelection = findTestSubject(popover, 'optionsList-control-selection-bark'); - expect(validSelection.find('.euiSelectableListItem__text').text()).toEqual( - 'bark. Checked option.' - ); - expect( - validSelection.find('div[data-test-subj="optionsList-document-count-badge"]').text().trim() - ).toEqual('75'); - const title = findTestSubject(popover, 'optionList__ignoredSelectionLabel').text(); - expect(title).toEqual('Ignored selection'); - const invalidSelection = findTestSubject(popover, 'optionsList-control-ignored-selection-woof'); - expect(invalidSelection.find('.euiSelectableListItem__text').text()).toEqual( - 'woof. Checked option.' - ); - expect(invalidSelection.hasClass('optionsList__selectionInvalid')).toBe(true); }); - test('test title when multiple invalid selections', async () => { - const popover = await mountComponent({ - explicitInput: { selectedOptions: ['bark', 'woof', 'meow'] }, - componentState: { - availableOptions: [{ value: 'bark', docCount: 75 }], - validSelections: ['bark'], - invalidSelections: ['woof', 'meow'], - }, + describe('invalid selections', () => { + test('test single invalid selection', async () => { + const popover = await mountComponent({ + explicitInput: { + selectedOptions: ['bark', 'woof'], + }, + componentState: { + availableOptions: [{ value: 'bark', docCount: 75 }], + validSelections: ['bark'], + invalidSelections: ['woof'], + }, + }); + const validSelection = findTestSubject(popover, 'optionsList-control-selection-bark'); + expect(validSelection.find('.euiSelectableListItem__text').text()).toEqual( + 'bark. Checked option.' + ); + expect( + validSelection.find('div[data-test-subj="optionsList-document-count-badge"]').text().trim() + ).toEqual('75'); + const title = findTestSubject(popover, 'optionList__ignoredSelectionLabel').text(); + expect(title).toEqual('Ignored selection'); + const invalidSelection = findTestSubject( + popover, + 'optionsList-control-ignored-selection-woof' + ); + expect(invalidSelection.find('.euiSelectableListItem__text').text()).toEqual( + 'woof. Checked option.' + ); + expect(invalidSelection.hasClass('optionsList__selectionInvalid')).toBe(true); }); - const title = findTestSubject(popover, 'optionList__ignoredSelectionLabel').text(); - expect(title).toEqual('Ignored selections'); - }); - test('should default to exclude = false', async () => { - const popover = await mountComponent(); - const includeButton = findTestSubject(popover, 'optionsList__includeResults'); - const excludeButton = findTestSubject(popover, 'optionsList__excludeResults'); - expect(includeButton.prop('aria-pressed')).toBe(true); - expect(excludeButton.prop('aria-pressed')).toBe(false); - }); - - test('if exclude = true, select appropriate button in button group', async () => { - const popover = await mountComponent({ - explicitInput: { exclude: true }, + test('test title when multiple invalid selections', async () => { + const popover = await mountComponent({ + explicitInput: { selectedOptions: ['bark', 'woof', 'meow'] }, + componentState: { + availableOptions: [{ value: 'bark', docCount: 75 }], + validSelections: ['bark'], + invalidSelections: ['woof', 'meow'], + }, + }); + const title = findTestSubject(popover, 'optionList__ignoredSelectionLabel').text(); + expect(title).toEqual('Ignored selections'); }); - const includeButton = findTestSubject(popover, 'optionsList__includeResults'); - const excludeButton = findTestSubject(popover, 'optionsList__excludeResults'); - expect(includeButton.prop('aria-pressed')).toBe(false); - expect(excludeButton.prop('aria-pressed')).toBe(true); }); - test('clicking another option unselects "Exists"', async () => { - const popover = await mountComponent({ - explicitInput: { existsSelected: true }, + describe('include/exclude toggle', () => { + test('should default to exclude = false', async () => { + const popover = await mountComponent(); + const includeButton = findTestSubject(popover, 'optionsList__includeResults'); + const excludeButton = findTestSubject(popover, 'optionsList__excludeResults'); + expect(includeButton.prop('aria-pressed')).toBe(true); + expect(excludeButton.prop('aria-pressed')).toBe(false); }); - const woofOption = findTestSubject(popover, 'optionsList-control-selection-woof'); - woofOption.simulate('click'); - const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); - availableOptionsDiv.children().forEach((child, i) => { - if (child.text() === 'woof') expect(child.prop('aria-pressed')).toBe(true); - else expect(child.prop('aria-pressed')).toBeFalsy(); + test('if exclude = true, select appropriate button in button group', async () => { + const popover = await mountComponent({ + explicitInput: { exclude: true }, + }); + const includeButton = findTestSubject(popover, 'optionsList__includeResults'); + const excludeButton = findTestSubject(popover, 'optionsList__excludeResults'); + expect(includeButton.prop('aria-pressed')).toBe(false); + expect(excludeButton.prop('aria-pressed')).toBe(true); }); }); - test('clicking "Exists" unselects all other selections', async () => { - const selections = ['woof', 'bark']; - const popover = await mountComponent({ - explicitInput: { existsSelected: false, selectedOptions: selections }, - }); - const existsOption = findTestSubject(popover, 'optionsList-control-selection-exists'); - let availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); - availableOptionsDiv.children().forEach((child, i) => { - if (selections.includes(child.text())) expect(child.prop('aria-pressed')).toBe(true); - else expect(child.prop('aria-pressed')).toBeFalsy(); + describe('"Exists" option', () => { + test('clicking another option unselects "Exists"', async () => { + const popover = await mountComponent({ + explicitInput: { existsSelected: true }, + }); + const woofOption = findTestSubject(popover, 'optionsList-control-selection-woof'); + woofOption.simulate('click'); + + const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + availableOptionsDiv.children().forEach((child, i) => { + if (child.text() === 'woof') expect(child.prop('aria-pressed')).toBe(true); + else expect(child.prop('aria-pressed')).toBeFalsy(); + }); }); - existsOption.simulate('click'); - availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); - availableOptionsDiv.children().forEach((child, i) => { - if (child.text() === 'Exists (*)') expect(child.prop('aria-pressed')).toBe(true); - else expect(child.prop('aria-pressed')).toBeFalsy(); + test('clicking "Exists" unselects all other selections', async () => { + const selections = ['woof', 'bark']; + const popover = await mountComponent({ + explicitInput: { existsSelected: false, selectedOptions: selections }, + }); + const existsOption = findTestSubject(popover, 'optionsList-control-selection-exists'); + let availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + availableOptionsDiv.children().forEach((child, i) => { + if (selections.includes(child.text())) expect(child.prop('aria-pressed')).toBe(true); + else expect(child.prop('aria-pressed')).toBeFalsy(); + }); + + existsOption.simulate('click'); + availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + availableOptionsDiv.children().forEach((child, i) => { + if (child.text() === 'Exists (*)') expect(child.prop('aria-pressed')).toBe(true); + else expect(child.prop('aria-pressed')).toBeFalsy(); + }); }); - }); - test('if existsSelected = false and no suggestions, then "Exists" does not show up', async () => { - const popover = await mountComponent({ - componentState: { availableOptions: [] }, - explicitInput: { existsSelected: false }, + test('if existsSelected = false and no suggestions, then "Exists" does not show up', async () => { + const popover = await mountComponent({ + componentState: { availableOptions: [] }, + explicitInput: { existsSelected: false }, + }); + const existsOption = findTestSubject(popover, 'optionsList-control-selection-exists'); + expect(existsOption.exists()).toBeFalsy(); }); - const existsOption = findTestSubject(popover, 'optionsList-control-selection-exists'); - expect(existsOption.exists()).toBeFalsy(); - }); - test('if existsSelected = true, "Exists" is the only option when "Show only selected options" is toggled', async () => { - const popover = await mountComponent({ - explicitInput: { existsSelected: true }, + test('if existsSelected = true, "Exists" is the only option when "Show only selected options" is toggled', async () => { + const popover = await mountComponent({ + explicitInput: { existsSelected: true }, + }); + clickShowOnlySelections(popover); + const availableOptions = popover.find( + '[data-test-subj="optionsList-control-available-options"] ul' + ); + expect(availableOptions.text()).toBe('Exists. Checked option.'); }); - clickShowOnlySelections(popover); - const availableOptions = popover.find( - '[data-test-subj="optionsList-control-available-options"] ul' - ); - expect(availableOptions.text()).toBe('Exists. Checked option.'); }); - test('when sorting suggestions, show both sorting types for keyword field', async () => { - const popover = await mountComponent({ - componentState: { - field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec, - }, + describe('sorting suggestions', () => { + test('when sorting suggestions, show both sorting types for keyword field', async () => { + const popover = await mountComponent({ + componentState: { + field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec, + }, + }); + const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); + sortButton.simulate('click'); + + const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); + const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); + expect(optionsText).toEqual(['By document count. Checked option.', 'Alphabetically']); }); - const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); - sortButton.simulate('click'); - const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); - const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); - expect(optionsText).toEqual(['By document count. Checked option.', 'Alphabetically']); - }); + test('sorting popover selects appropriate sorting type on load', async () => { + const popover = await mountComponent({ + explicitInput: { sort: { by: '_key', direction: 'asc' } }, + componentState: { + field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec, + }, + }); + const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); + sortButton.simulate('click'); - test('sorting popover selects appropriate sorting type on load', async () => { - const popover = await mountComponent({ - explicitInput: { sort: { by: '_key', direction: 'asc' } }, - componentState: { - field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec, - }, - }); - const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); - sortButton.simulate('click'); + const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); + const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); + expect(optionsText).toEqual(['By document count', 'Alphabetically. Checked option.']); - const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); - const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); - expect(optionsText).toEqual(['By document count', 'Alphabetically. Checked option.']); + const ascendingButton = findTestSubject(popover, 'optionsList__sortOrder_asc').instance(); + expect(ascendingButton).toHaveClass('euiButtonGroupButton-isSelected'); + const descendingButton = findTestSubject(popover, 'optionsList__sortOrder_desc').instance(); + expect(descendingButton).not.toHaveClass('euiButtonGroupButton-isSelected'); + }); - const ascendingButton = findTestSubject(popover, 'optionsList__sortOrder_asc').instance(); - expect(ascendingButton).toHaveClass('euiButtonGroupButton-isSelected'); - const descendingButton = findTestSubject(popover, 'optionsList__sortOrder_desc').instance(); - expect(descendingButton).not.toHaveClass('euiButtonGroupButton-isSelected'); - }); + test('when sorting suggestions, only show document count sorting for IP fields', async () => { + const popover = await mountComponent({ + componentState: { field: { name: 'Test IP field', type: 'ip' } as FieldSpec }, + }); + const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); + sortButton.simulate('click'); - test('when sorting suggestions, only show document count sorting for IP fields', async () => { - const popover = await mountComponent({ - componentState: { field: { name: 'Test IP field', type: 'ip' } as FieldSpec }, + const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); + const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); + expect(optionsText).toEqual(['By document count. Checked option.']); }); - const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); - sortButton.simulate('click'); - const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); - const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); - expect(optionsText).toEqual(['By document count. Checked option.']); - }); + test('when sorting suggestions, show "By date" sorting option for date fields', async () => { + const popover = await mountComponent({ + componentState: { field: { name: 'Test date field', type: 'date' } as FieldSpec }, + }); + const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); + sortButton.simulate('click'); - test('when sorting suggestions, show "By date" sorting option for date fields', async () => { - const popover = await mountComponent({ - componentState: { field: { name: 'Test date field', type: 'date' } as FieldSpec }, + const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); + const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); + expect(optionsText).toEqual(['By document count. Checked option.', 'By date']); }); - const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); - sortButton.simulate('click'); - const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); - const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); - expect(optionsText).toEqual(['By document count. Checked option.', 'By date']); - }); + test('when sorting suggestions, show "Numerically" sorting option for number fields', async () => { + const popover = await mountComponent({ + componentState: { field: { name: 'Test number field', type: 'number' } as FieldSpec }, + }); + const sortButton = findTestSubject(popover, 'optionsListControl__sortingOptionsButton'); + sortButton.simulate('click'); - test('ensure warning icon does not show up when testAllowExpensiveQueries = true/undefined', async () => { - const popover = await mountComponent({ - componentState: { field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec }, + const sortingOptionsDiv = findTestSubject(popover, 'optionsListControl__sortingOptions'); + const optionsText = sortingOptionsDiv.find('ul li').map((element) => element.text().trim()); + expect(optionsText).toEqual(['By document count. Checked option.', 'Numerically']); }); - const warning = findTestSubject(popover, 'optionsList-allow-expensive-queries-warning'); - expect(warning).toEqual({}); }); - test('ensure warning icon shows up when testAllowExpensiveQueries = false', async () => { - pluginServices.getServices().optionsList.getAllowExpensiveQueries = jest.fn(() => - Promise.resolve(false) - ); - const popover = await mountComponent({ - componentState: { - field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec, - allowExpensiveQueries: false, - }, + describe('allow expensive queries warning', () => { + test('ensure warning icon does not show up when testAllowExpensiveQueries = true/undefined', async () => { + const popover = await mountComponent({ + componentState: { field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec }, + }); + const warning = findTestSubject(popover, 'optionsList-allow-expensive-queries-warning'); + expect(warning).toEqual({}); + }); + + test('ensure warning icon shows up when testAllowExpensiveQueries = false', async () => { + pluginServices.getServices().optionsList.getAllowExpensiveQueries = jest.fn(() => + Promise.resolve(false) + ); + const popover = await mountComponent({ + componentState: { + field: { name: 'Test keyword field', type: 'keyword' } as FieldSpec, + allowExpensiveQueries: false, + }, + }); + const warning = findTestSubject(popover, 'optionsList-allow-expensive-queries-warning'); + expect(warning.getDOMNode()).toBeInstanceOf(HTMLDivElement); }); - const warning = findTestSubject(popover, 'optionsList-allow-expensive-queries-warning'); - expect(warning.getDOMNode()).toBeInstanceOf(HTMLDivElement); }); - describe('Test advanced settings', () => { + describe('advanced settings', () => { const ensureComponentIsHidden = async ({ explicitInput, testSubject, diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx index 8e890350f4d4..a6754a50ecaf 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx @@ -6,22 +6,22 @@ * Side Public License, v 1. */ -import React from 'react'; +import React, { useMemo } from 'react'; import { - EuiFieldSearch, EuiButtonIcon, + EuiFieldSearch, EuiFlexGroup, EuiFlexItem, EuiFormRow, - EuiToolTip, EuiText, + EuiToolTip, } from '@elastic/eui'; -import { OptionsListStrings } from './options_list_strings'; +import { getCompatibleSearchTechniques } from '../../../common/options_list/suggestions_searching'; import { useOptionsList } from '../embeddable/options_list_embeddable'; import { OptionsListPopoverSortingButton } from './options_list_popover_sorting_button'; -import { OPTIONS_LIST_DEFAULT_SEARCH_TECHNIQUE } from '../../../common/options_list/types'; +import { OptionsListStrings } from './options_list_strings'; interface OptionsListPopoverProps { showOnlySelected: boolean; @@ -38,20 +38,29 @@ export const OptionsListPopoverActionBar = ({ const totalCardinality = optionsList.select((state) => state.componentState.totalCardinality) ?? 0; - const searchString = optionsList.select((state) => state.componentState.searchString); const fieldSpec = optionsList.select((state) => state.componentState.field); + const searchString = optionsList.select((state) => state.componentState.searchString); const invalidSelections = optionsList.select((state) => state.componentState.invalidSelections); + const allowExpensiveQueries = optionsList.select( + (state) => state.componentState.allowExpensiveQueries + ); const hideSort = optionsList.select((state) => state.explicitInput.hideSort); const searchTechnique = optionsList.select((state) => state.explicitInput.searchTechnique); - const allowExpensiveQueries = optionsList.select( - (state) => state.componentState.allowExpensiveQueries + const compatibleSearchTechniques = useMemo(() => { + if (!fieldSpec) return []; + return getCompatibleSearchTechniques(fieldSpec.type); + }, [fieldSpec]); + + const defaultSearchTechnique = useMemo( + () => searchTechnique ?? compatibleSearchTechniques[0], + [searchTechnique, compatibleSearchTechniques] ); return (
- {fieldSpec?.type !== 'date' && ( + {compatibleSearchTechniques.length > 0 && ( updateSearchString(event.target.value)} value={searchString.value} data-test-subj="optionsList-control-search-input" - placeholder={OptionsListStrings.popover.searchPlaceholder[ - searchTechnique ?? OPTIONS_LIST_DEFAULT_SEARCH_TECHNIQUE - ].getPlaceholderText()} + placeholder={OptionsListStrings.popover.getSearchPlaceholder( + allowExpensiveQueries ? defaultSearchTechnique : 'exact' + )} /> )} diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_empty_message.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_empty_message.tsx index 379a8da7040b..c4e4918f9771 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_empty_message.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_empty_message.tsx @@ -6,9 +6,11 @@ * Side Public License, v 1. */ -import React from 'react'; -import { EuiSelectableMessage, EuiIcon, EuiSpacer } from '@elastic/eui'; +import React, { useMemo } from 'react'; +import { EuiIcon, EuiSelectableMessage, EuiSpacer } from '@elastic/eui'; + +import { useOptionsList } from '../embeddable/options_list_embeddable'; import { OptionsListStrings } from './options_list_strings'; export const OptionsListPopoverEmptyMessage = ({ @@ -16,17 +18,35 @@ export const OptionsListPopoverEmptyMessage = ({ }: { showOnlySelected: boolean; }) => { + const optionsList = useOptionsList(); + + const searchString = optionsList.select((state) => state.componentState.searchString); + const fieldSpec = optionsList.select((state) => state.componentState.field); + const searchTechnique = optionsList.select((state) => state.explicitInput.searchTechnique); + + const noResultsMessage = useMemo(() => { + if (showOnlySelected) { + return OptionsListStrings.popover.getSelectionsEmptyMessage(); + } + if (!searchString.valid && fieldSpec && searchTechnique) { + return OptionsListStrings.popover.getInvalidSearchMessage(fieldSpec.type); + } + return OptionsListStrings.popover.getEmptyMessage(); + }, [showOnlySelected, fieldSpec, searchString.valid, searchTechnique]); + return ( - + - {showOnlySelected - ? OptionsListStrings.popover.getSelectionsEmptyMessage() - : OptionsListStrings.popover.getEmptyMessage()} + {noResultsMessage} ); }; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx index 2b6dbdc3b950..7ff64482b2c6 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx @@ -77,7 +77,7 @@ export const OptionsListPopoverInvalidSelections = () => { listProps={{ onFocusBadge: false, isVirtualized: false }} onChange={(newSuggestions, _, changedOption) => { setSelectableOptions(newSuggestions); - optionsList.dispatch.deselectOption(changedOption.label); + optionsList.dispatch.deselectOption(changedOption.key ?? changedOption.label); }} > {(list) => list} diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx index a7efc79825b8..097660a55a54 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx @@ -30,17 +30,21 @@ export const OptionsListPopoverSuggestions = ({ }: OptionsListPopoverSuggestionsProps) => { const optionsList = useOptionsList(); + const fieldSpec = optionsList.select((state) => state.componentState.field); const searchString = optionsList.select((state) => state.componentState.searchString); const availableOptions = optionsList.select((state) => state.componentState.availableOptions); const totalCardinality = optionsList.select((state) => state.componentState.totalCardinality); const invalidSelections = optionsList.select((state) => state.componentState.invalidSelections); - const fieldSpec = optionsList.select((state) => state.componentState.field); + const allowExpensiveQueries = optionsList.select( + (state) => state.componentState.allowExpensiveQueries + ); const sort = optionsList.select((state) => state.explicitInput.sort); const fieldName = optionsList.select((state) => state.explicitInput.fieldName); const hideExists = optionsList.select((state) => state.explicitInput.hideExists); const singleSelect = optionsList.select((state) => state.explicitInput.singleSelect); const existsSelected = optionsList.select((state) => state.explicitInput.existsSelected); + const searchTechnique = optionsList.select((state) => state.explicitInput.searchTechnique); const selectedOptions = optionsList.select((state) => state.explicitInput.selectedOptions); const dataViewId = optionsList.select((state) => state.output.dataViewId); @@ -52,11 +56,11 @@ export const OptionsListPopoverSuggestions = ({ const canLoadMoreSuggestions = useMemo( () => - totalCardinality + allowExpensiveQueries && searchString.valid && totalCardinality && !showOnlySelected ? (availableOptions ?? []).length < Math.min(totalCardinality, MAX_OPTIONS_LIST_REQUEST_SIZE) : false, - [availableOptions, totalCardinality] + [availableOptions, totalCardinality, searchString, showOnlySelected, allowExpensiveQueries] ); // track selectedOptions and invalidSelections in sets for more efficient lookup @@ -85,7 +89,7 @@ export const OptionsListPopoverSuggestions = ({ useEffect(() => { /* This useEffect makes selectableOptions responsive to search, show only selected, and clear selections */ const options: EuiSelectableOption[] = (suggestions ?? []).map((suggestion) => { - if (typeof suggestion === 'string') { + if (typeof suggestion !== 'object') { // this means that `showOnlySelected` is true, and doc count is not known when this is the case suggestion = { value: suggestion }; } @@ -145,6 +149,19 @@ export const OptionsListPopoverSuggestions = ({ } }, [loadMoreSuggestions, totalCardinality]); + const renderOption = useCallback( + (option, searchStringValue) => { + if (!allowExpensiveQueries || searchTechnique === 'exact') return option.label; + + return ( + + {option.label} + + ); + }, + [searchTechnique, allowExpensiveQueries] + ); + useEffect(() => { const container = listRef.current; if (!isLoading && canLoadMoreSuggestions) { @@ -166,13 +183,7 @@ export const OptionsListPopoverSuggestions = ({
{ - return ( - - {option.label} - - ); - }} + renderOption={(option) => renderOption(option, searchString.value)} listProps={{ onFocusBadge: false }} aria-label={OptionsListStrings.popover.getSuggestionsAriaLabel( fieldName, diff --git a/src/plugins/controls/public/options_list/components/options_list_strings.ts b/src/plugins/controls/public/options_list/components/options_list_strings.ts index 2977bb9f1cbb..1e1401918f61 100644 --- a/src/plugins/controls/public/options_list/components/options_list_strings.ts +++ b/src/plugins/controls/public/options_list/components/options_list_strings.ts @@ -7,11 +7,12 @@ */ import { i18n } from '@kbn/i18n'; +import { OptionsListSearchTechnique } from '../../../common/options_list/suggestions_searching'; export const OptionsListStrings = { control: { getSeparator: (type?: string) => { - if (type === 'date') { + if (['date', 'number'].includes(type ?? '')) { return i18n.translate('controls.optionsList.control.dateSeparator', { defaultMessage: '; ', }); @@ -78,6 +79,17 @@ export const OptionsListStrings = { 'Matches values that contain the given search string. Results might take longer to populate.', }), }, + exact: { + getLabel: () => + i18n.translate('controls.optionsList.editor.exactSearchLabel', { + defaultMessage: 'Exact', + }), + getTooltip: () => + i18n.translate('controls.optionsList.editor.exactSearchTooltip', { + defaultMessage: + 'Matches values that are equal to the given search string. Returns results quickly.', + }), + }, }, getAdditionalSettingsTitle: () => i18n.translate('controls.optionsList.editor.additionalSettingsTitle', { @@ -127,6 +139,26 @@ export const OptionsListStrings = { i18n.translate('controls.optionsList.popover.selectionsEmpty', { defaultMessage: 'You have no selections', }), + getInvalidSearchMessage: (fieldType: string) => { + switch (fieldType) { + case 'ip': { + return i18n.translate('controls.optionsList.popover.invalidSearch.ip', { + defaultMessage: 'Your search is not a valid IP address.', + }); + } + case 'number': { + return i18n.translate('controls.optionsList.popover.invalidSearch.number', { + defaultMessage: 'Your search is not a valid number.', + }); + } + default: { + // this shouldn't happen, but giving a fallback error message just in case + return i18n.translate('controls.optionsList.popover.invalidSearch.invalidCharacters', { + defaultMessage: 'Your search contains invalid characters.', + }); + } + } + }, getAllOptionsButtonTitle: () => i18n.translate('controls.optionsList.popover.allOptionsTitle', { defaultMessage: 'Show all options', @@ -135,19 +167,24 @@ export const OptionsListStrings = { i18n.translate('controls.optionsList.popover.selectedOptionsTitle', { defaultMessage: 'Show only selected options', }), - searchPlaceholder: { - prefix: { - getPlaceholderText: () => - i18n.translate('controls.optionsList.popover.prefixSearchPlaceholder', { + getSearchPlaceholder: (searchTechnique?: OptionsListSearchTechnique) => { + switch (searchTechnique) { + case 'prefix': { + return i18n.translate('controls.optionsList.popover.prefixSearchPlaceholder', { defaultMessage: 'Starts with...', - }), - }, - wildcard: { - getPlaceholderText: () => - i18n.translate('controls.optionsList.popover.wildcardSearchPlaceholder', { + }); + } + case 'wildcard': { + return i18n.translate('controls.optionsList.popover.wildcardSearchPlaceholder', { defaultMessage: 'Contains...', - }), - }, + }); + } + case 'exact': { + return i18n.translate('controls.optionsList.popover.exactSearchPlaceholder', { + defaultMessage: 'Equals...', + }); + } + } }, getCardinalityLabel: (totalOptions: number) => i18n.translate('controls.optionsList.popover.cardinalityLabel', { @@ -234,14 +271,22 @@ export const OptionsListStrings = { }), }, _key: { - getSortByLabel: (type?: string) => - type === 'date' - ? i18n.translate('controls.optionsList.popover.sortBy.date', { + getSortByLabel: (type?: string) => { + switch (type) { + case 'date': + return i18n.translate('controls.optionsList.popover.sortBy.date', { defaultMessage: 'By date', - }) - : i18n.translate('controls.optionsList.popover.sortBy.alphabetical', { + }); + case 'number': + return i18n.translate('controls.optionsList.popover.sortBy.numeric', { + defaultMessage: 'Numerically', + }); + default: + return i18n.translate('controls.optionsList.popover.sortBy.alphabetical', { defaultMessage: 'Alphabetically', - }), + }); + } + }, }, }, sortOrder: { diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx index a3fecb46442a..395499bb882c 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx @@ -62,7 +62,7 @@ export class OptionsListEmbeddableFactory return ( !field.spec.scripted && field.aggregatable && - ['string', 'boolean', 'ip', 'date'].includes(field.type) + ['string', 'boolean', 'ip', 'date', 'number'].includes(field.type) ); }; diff --git a/src/plugins/controls/public/options_list/options_list_reducers.ts b/src/plugins/controls/public/options_list/options_list_reducers.ts index 9791e91198e0..3300072c089f 100644 --- a/src/plugins/controls/public/options_list/options_list_reducers.ts +++ b/src/plugins/controls/public/options_list/options_list_reducers.ts @@ -8,15 +8,15 @@ import { PayloadAction } from '@reduxjs/toolkit'; import { WritableDraft } from 'immer/dist/types/types-external'; -import { Filter } from '@kbn/es-query'; import { FieldSpec } from '@kbn/data-views-plugin/common'; +import { Filter } from '@kbn/es-query'; -import { OptionsListReduxState, OptionsListComponentState } from './types'; -import { getIpRangeQuery } from '../../common/options_list/ip_search'; +import { isValidSearch } from '../../common/options_list/is_valid_search'; import { - OPTIONS_LIST_DEFAULT_SORT, OptionsListSortingType, + OPTIONS_LIST_DEFAULT_SORT, } from '../../common/options_list/suggestions_sorting'; +import { OptionsListComponentState, OptionsListReduxState } from './types'; export const getDefaultComponentState = (): OptionsListReduxState['componentState'] => ({ popoverOpen: false, @@ -36,12 +36,13 @@ export const optionsListReducers = { }, setSearchString: (state: WritableDraft, action: PayloadAction) => { state.componentState.searchString.value = action.payload; - if ( - action.payload !== '' && // empty string search is never invalid - state.componentState.field?.type === 'ip' // only IP searches can currently be invalid - ) { - state.componentState.searchString.valid = getIpRangeQuery(action.payload).validSearch; - } + state.componentState.searchString.valid = isValidSearch({ + searchString: action.payload, + fieldType: state.componentState.field?.type, + searchTechnique: state.componentState.allowExpensiveQueries + ? state.explicitInput.searchTechnique + : 'exact', // only exact match searching is supported when allowExpensiveQueries is false + }); }, setAllowExpensiveQueries: ( state: WritableDraft, diff --git a/src/plugins/controls/public/services/core/core.story.ts b/src/plugins/controls/public/services/core/core.story.ts index 1f878c88f61a..5549f1546155 100644 --- a/src/plugins/controls/public/services/core/core.story.ts +++ b/src/plugins/controls/public/services/core/core.story.ts @@ -6,9 +6,8 @@ * Side Public License, v 1. */ -import { coreMock } from '@kbn/core/public/mocks'; +import { coreMock, themeServiceMock } from '@kbn/core/public/mocks'; import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { Observable } from 'rxjs'; import { ControlsCoreService } from './types'; export type CoreServiceFactory = PluginServiceFactory; @@ -16,9 +15,7 @@ export type CoreServiceFactory = PluginServiceFactory; export const coreServiceFactory: CoreServiceFactory = () => { const corePluginMock = coreMock.createStart(); return { - theme: { - theme$: new Observable((subscriber) => subscriber.next({ darkMode: false })), - }, + theme: themeServiceMock.createSetupContract(), i18n: corePluginMock.i18n, }; }; diff --git a/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.test.ts b/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.test.ts deleted file mode 100644 index d364027a55d9..000000000000 --- a/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.test.ts +++ /dev/null @@ -1,690 +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 { FieldSpec } from '@kbn/data-views-plugin/common'; -import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; - -import { getCheapSuggestionAggregationBuilder } from './options_list_cheap_suggestion_queries'; -import { OptionsListRequestBody } from '../../common/options_list/types'; - -describe('options list cheap queries', () => { - let rawSearchResponseMock: SearchResponse = {} as SearchResponse; - - beforeEach(() => { - rawSearchResponseMock = { - hits: { - total: 10, - max_score: 10, - hits: [], - }, - took: 10, - timed_out: false, - _shards: { - failed: 0, - successful: 1, - total: 1, - skipped: 0, - }, - aggregations: {}, - }; - }); - - describe('suggestion aggregation', () => { - describe('keyword or text+keyword field', () => { - test('without a search string, creates keyword aggregation', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - allowExpensiveQueries: false, - fieldName: 'coolTestField.keyword', - sort: { by: '_count', direction: 'asc' }, - fieldSpec: { aggregatable: true } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "coolTestField.keyword", - "order": Object { - "_count": "asc", - }, - "shard_size": 10, - }, - }, - } - `); - }); - - test('with a search string, creates case sensitive keyword aggregation', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - searchString: 'cooool', - allowExpensiveQueries: false, - fieldName: 'coolTestField.keyword', - fieldSpec: { aggregatable: true } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "coolTestField.keyword", - "include": "cooool.*", - "order": Object { - "_count": "desc", - }, - "shard_size": 10, - }, - }, - } - `); - }); - }); - - test('creates nested aggregation for nested field', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - searchString: 'cooool', - allowExpensiveQueries: false, - fieldName: 'coolNestedField', - sort: { by: '_key', direction: 'asc' }, - fieldSpec: { subType: { nested: { path: 'path.to.nested' } } } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "nestedSuggestions": Object { - "aggs": Object { - "suggestions": Object { - "terms": Object { - "field": "coolNestedField", - "include": "cooool.*", - "order": Object { - "_key": "asc", - }, - "shard_size": 10, - }, - }, - }, - "nested": Object { - "path": "path.to.nested", - }, - }, - } - `); - }); - - describe('boolean field', () => { - test('creates boolean aggregation for boolean field', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'coolean', - allowExpensiveQueries: false, - sort: { by: '_key', direction: 'desc' }, - fieldSpec: { type: 'boolean' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "coolean", - "order": Object { - "_key": "desc", - }, - "shard_size": 10, - }, - }, - } - `); - }); - }); - - describe('date field field', () => { - test('creates date aggregation for date field', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: '@timestamp', - allowExpensiveQueries: false, - sort: { by: '_key', direction: 'desc' }, - fieldSpec: { type: 'date' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "@timestamp", - "order": Object { - "_key": "desc", - }, - "shard_size": 10, - }, - }, - } - `); - }); - }); - - describe('IP field', () => { - test('without a search string, creates IP range aggregation with default range', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'clientip', - allowExpensiveQueries: false, - sort: { by: '_count', direction: 'asc' }, - fieldSpec: { type: 'ip' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "aggs": Object { - "filteredSuggestions": Object { - "terms": Object { - "field": "clientip", - "order": Object { - "_count": "asc", - }, - "shard_size": 10, - }, - }, - }, - "ip_range": Object { - "field": "clientip", - "keyed": true, - "ranges": Array [ - Object { - "from": "::", - "key": "ipv6", - "to": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", - }, - ], - }, - }, - } - `); - }); - - test('full IPv4 in the search string, creates IP range aggregation with CIDR mask', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'clientip', - allowExpensiveQueries: false, - searchString: '41.77.243.255', - sort: { by: '_key', direction: 'desc' }, - fieldSpec: { type: 'ip' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "aggs": Object { - "filteredSuggestions": Object { - "terms": Object { - "field": "clientip", - "order": Object { - "_key": "desc", - }, - "shard_size": 10, - }, - }, - }, - "ip_range": Object { - "field": "clientip", - "keyed": true, - "ranges": Array [ - Object { - "key": "ipv4", - "mask": "41.77.243.255/32", - }, - ], - }, - }, - } - `); - }); - - test('full IPv6 in the search string, creates IP range aggregation with CIDR mask', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'clientip', - allowExpensiveQueries: false, - sort: { by: '_key', direction: 'asc' }, - fieldSpec: { type: 'ip' } as unknown as FieldSpec, - searchString: 'f688:fb50:6433:bba2:604:f2c:194a:d3c5', - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "aggs": Object { - "filteredSuggestions": Object { - "terms": Object { - "field": "clientip", - "order": Object { - "_key": "asc", - }, - "shard_size": 10, - }, - }, - }, - "ip_range": Object { - "field": "clientip", - "keyed": true, - "ranges": Array [ - Object { - "key": "ipv6", - "mask": "f688:fb50:6433:bba2:604:f2c:194a:d3c5/128", - }, - ], - }, - }, - } - `); - }); - - test('partial IPv4 in the search string, creates IP range aggregation with min and max', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'clientip', - searchString: '41.77', - allowExpensiveQueries: false, - fieldSpec: { type: 'ip' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "aggs": Object { - "filteredSuggestions": Object { - "terms": Object { - "field": "clientip", - "order": Object { - "_count": "desc", - }, - "shard_size": 10, - }, - }, - }, - "ip_range": Object { - "field": "clientip", - "keyed": true, - "ranges": Array [ - Object { - "from": "41.77.0.0", - "key": "ipv4", - "to": "41.77.255.255", - }, - ], - }, - }, - } - `); - }); - - test('partial IPv46 in the search string, creates IP range aggregation with min and max', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'clientip', - searchString: 'cdb6:', - allowExpensiveQueries: false, - sort: { by: '_count', direction: 'desc' }, - fieldSpec: { type: 'ip' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "aggs": Object { - "filteredSuggestions": Object { - "terms": Object { - "field": "clientip", - "order": Object { - "_count": "desc", - }, - "shard_size": 10, - }, - }, - }, - "ip_range": Object { - "field": "clientip", - "keyed": true, - "ranges": Array [ - Object { - "from": "cdb6::", - "key": "ipv6", - "to": "cdb6:ffff:ffff:ffff:ffff:ffff:ffff:ffff", - }, - ], - }, - }, - } - `); - }); - }); - }); - - describe('suggestion parsing', () => { - test('parses keyword / text result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - searchString: 'cooool', - allowExpensiveQueries: false, - fieldName: 'coolTestField.keyword', - fieldSpec: { aggregatable: true } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - rawSearchResponseMock.aggregations = { - suggestions: { - buckets: [ - { doc_count: 5, key: 'cool1' }, - { doc_count: 15, key: 'cool2' }, - { doc_count: 10, key: 'cool3' }, - ], - }, - }; - expect( - suggestionAggBuilder.parse(rawSearchResponseMock, optionsListRequestBodyMock).suggestions - ).toMatchInlineSnapshot(` - Array [ - Object { - "docCount": 5, - "value": "cool1", - }, - Object { - "docCount": 15, - "value": "cool2", - }, - Object { - "docCount": 10, - "value": "cool3", - }, - ] - `); - }); - - test('parses boolean result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'coolean', - allowExpensiveQueries: false, - fieldSpec: { type: 'boolean' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - rawSearchResponseMock.aggregations = { - suggestions: { - buckets: [ - { doc_count: 55, key_as_string: 'false' }, - { doc_count: 155, key_as_string: 'true' }, - ], - }, - }; - expect( - suggestionAggBuilder.parse(rawSearchResponseMock, optionsListRequestBodyMock).suggestions - ).toMatchInlineSnapshot(` - Array [ - Object { - "docCount": 55, - "value": "false", - }, - Object { - "docCount": 155, - "value": "true", - }, - ] - `); - }); - - test('parses nested result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - searchString: 'cooool', - fieldName: 'coolNestedField', - allowExpensiveQueries: false, - fieldSpec: { subType: { nested: { path: 'path.to.nested' } } } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - rawSearchResponseMock.aggregations = { - nestedSuggestions: { - suggestions: { - buckets: [ - { doc_count: 5, key: 'cool1' }, - { doc_count: 15, key: 'cool2' }, - { doc_count: 10, key: 'cool3' }, - ], - }, - }, - }; - expect( - suggestionAggBuilder.parse(rawSearchResponseMock, optionsListRequestBodyMock).suggestions - ).toMatchInlineSnapshot(` - Array [ - Object { - "docCount": 5, - "value": "cool1", - }, - Object { - "docCount": 15, - "value": "cool2", - }, - Object { - "docCount": 10, - "value": "cool3", - }, - ] - `); - }); - - test('parses keyword only result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - searchString: 'cooool', - allowExpensiveQueries: false, - fieldName: 'coolTestField.keyword', - fieldSpec: { aggregatable: true } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - rawSearchResponseMock.aggregations = { - suggestions: { - buckets: [ - { doc_count: 5, key: 'cool1' }, - { doc_count: 15, key: 'cool2' }, - { doc_count: 10, key: 'cool3' }, - ], - }, - }; - expect( - suggestionAggBuilder.parse(rawSearchResponseMock, optionsListRequestBodyMock).suggestions - ).toMatchInlineSnapshot(` - Array [ - Object { - "docCount": 5, - "value": "cool1", - }, - Object { - "docCount": 15, - "value": "cool2", - }, - Object { - "docCount": 10, - "value": "cool3", - }, - ] - `); - }); - - test('parses mixed IPv4 and IPv6 result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'clientip', - allowExpensiveQueries: false, - fieldSpec: { type: 'ip' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - rawSearchResponseMock.aggregations = { - suggestions: { - buckets: { - ipv4: { - from: '0.0.0.0', - to: '255.255.255.255', - filteredSuggestions: { - buckets: [ - { doc_count: 8, key: '21.35.91.62' }, - { doc_count: 8, key: '21.35.91.61' }, - { doc_count: 11, key: '111.52.174.2' }, - { doc_count: 1, key: '56.73.58.63' }, - { doc_count: 9, key: '23.216.241.120' }, - { doc_count: 10, key: '196.162.13.39' }, - { doc_count: 7, key: '203.88.33.151' }, - ], - }, - }, - ipv6: { - from: '::', - to: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', - filteredSuggestions: { - buckets: [ - { doc_count: 12, key: '52:ae76:5947:5e2a:551:fe6a:712a:c72' }, - { doc_count: 1, key: 'fd:4aa0:c27c:b04:997f:2de1:51b4:8418' }, - { doc_count: 9, key: '28c7:c9a4:42fd:16b0:4de5:e41e:28d9:9172' }, - { doc_count: 6, key: '1ec:aa98:b0a6:d07c:590:18a0:8a33:2eb8' }, - { doc_count: 10, key: 'f7a9:640b:b5a0:1219:8d75:ed94:3c3e:2e63' }, - ], - }, - }, - }, - }, - }; - - const parsed = suggestionAggBuilder.parse( - rawSearchResponseMock, - optionsListRequestBodyMock - ).suggestions; - - expect(parsed).toMatchInlineSnapshot(` - Array [ - Object { - "docCount": 12, - "value": "52:ae76:5947:5e2a:551:fe6a:712a:c72", - }, - Object { - "docCount": 11, - "value": "111.52.174.2", - }, - Object { - "docCount": 10, - "value": "196.162.13.39", - }, - Object { - "docCount": 10, - "value": "f7a9:640b:b5a0:1219:8d75:ed94:3c3e:2e63", - }, - Object { - "docCount": 9, - "value": "23.216.241.120", - }, - Object { - "docCount": 9, - "value": "28c7:c9a4:42fd:16b0:4de5:e41e:28d9:9172", - }, - Object { - "docCount": 8, - "value": "21.35.91.62", - }, - Object { - "docCount": 8, - "value": "21.35.91.61", - }, - Object { - "docCount": 7, - "value": "203.88.33.151", - }, - Object { - "docCount": 6, - "value": "1ec:aa98:b0a6:d07c:590:18a0:8a33:2eb8", - }, - ] - `); - }); - - test('parses date result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: '@timestamp', - allowExpensiveQueries: false, - fieldSpec: { type: 'date' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getCheapSuggestionAggregationBuilder(optionsListRequestBodyMock); - rawSearchResponseMock.aggregations = { - suggestions: { - buckets: [ - { doc_count: 20, key: 1696824675 }, - { doc_count: 13, key: 1686086625 }, - { doc_count: 4, key: 1703684229 }, - { doc_count: 34, key: 1688603684 }, - ], - }, - }; - - const parsed = suggestionAggBuilder.parse( - rawSearchResponseMock, - optionsListRequestBodyMock - ).suggestions; - - expect(parsed).toMatchInlineSnapshot(` - Array [ - Object { - "docCount": 20, - "value": 1696824675, - }, - Object { - "docCount": 13, - "value": 1686086625, - }, - Object { - "docCount": 4, - "value": 1703684229, - }, - Object { - "docCount": 34, - "value": 1688603684, - }, - ] - `); - }); - }); -}); diff --git a/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.ts b/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.ts deleted file mode 100644 index cba08877607d..000000000000 --- a/src/plugins/controls/server/options_list/options_list_cheap_suggestion_queries.ts +++ /dev/null @@ -1,207 +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 { get } from 'lodash'; -import { getFieldSubtypeNested } from '@kbn/data-views-plugin/common'; - -import { OptionsListRequestBody, OptionsListSuggestions } from '../../common/options_list/types'; -import { getIpRangeQuery, type IpRangeQuery } from '../../common/options_list/ip_search'; -import { EsBucket, OptionsListSuggestionAggregationBuilder } from './types'; -import { - getEscapedRegexQuery, - getIpBuckets, - getSortType, -} from './options_list_suggestion_query_helpers'; - -/** - * Suggestion aggregations - */ -export const getCheapSuggestionAggregationBuilder = ({ fieldSpec }: OptionsListRequestBody) => { - if (fieldSpec?.type === 'boolean') { - return cheapSuggestionAggSubtypes.boolean; - } - if (fieldSpec?.type === 'ip') { - return cheapSuggestionAggSubtypes.ip; - } - if (fieldSpec && getFieldSubtypeNested(fieldSpec)) { - return cheapSuggestionAggSubtypes.subtypeNested; - } - return cheapSuggestionAggSubtypes.keywordOrText; -}; - -const cheapSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggregationBuilder } = { - /** - * The "textOrKeyword" query / parser should be used whenever the field is built on some type non-nested string field - * (such as a keyword field or a keyword+text multi-field) - */ - keywordOrText: { - buildAggregation: ({ fieldName, fieldSpec, searchString, sort }: OptionsListRequestBody) => ({ - suggestions: { - terms: { - field: fieldName, - // disabling for date fields because applying a search string will return an error - ...(fieldSpec?.type !== 'date' && searchString && searchString.length > 0 - ? { include: `${getEscapedRegexQuery(searchString)}.*` } - : {}), - shard_size: 10, - order: getSortType(sort), - }, - }, - }), - parse: (rawEsResult) => ({ - suggestions: get(rawEsResult, 'aggregations.suggestions.buckets')?.reduce( - (acc: OptionsListSuggestions, suggestion: EsBucket) => { - acc.push({ value: suggestion.key, docCount: suggestion.doc_count }); - return acc; - }, - [] - ), - }), - }, - - /** - * the "Boolean" query / parser should be used when the options list is built on a field of type boolean. The query is slightly different than a keyword query. - */ - boolean: { - buildAggregation: ({ fieldName, sort }: OptionsListRequestBody) => ({ - suggestions: { - terms: { - field: fieldName, - shard_size: 10, - order: getSortType(sort), - }, - }, - }), - parse: (rawEsResult) => ({ - suggestions: get(rawEsResult, 'aggregations.suggestions.buckets')?.reduce( - (acc: OptionsListSuggestions, suggestion: EsBucket & { key_as_string: string }) => { - acc.push({ value: suggestion.key_as_string, docCount: suggestion.doc_count }); - return acc; - }, - [] - ), - }), - }, - - /** - * the "IP" query / parser should be used when the options list is built on a field of type IP. - */ - ip: { - buildAggregation: ({ fieldName, searchString, sort }: OptionsListRequestBody) => { - let ipRangeQuery: IpRangeQuery = { - validSearch: true, - rangeQuery: [ - { - key: 'ipv6', - from: '::', - to: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', - }, - ], - }; - - if (searchString && searchString.length > 0) { - ipRangeQuery = getIpRangeQuery(searchString); - if (!ipRangeQuery.validSearch) { - // ideally should be prevented on the client side but, if somehow an invalid search gets through to the server, - // simply don't return an aggregation query for the ES search request - return undefined; - } - } - - return { - suggestions: { - ip_range: { - field: fieldName, - ranges: ipRangeQuery.rangeQuery, - keyed: true, - }, - aggs: { - filteredSuggestions: { - terms: { - field: fieldName, - shard_size: 10, - order: getSortType(sort), - }, - }, - }, - }, - }; - }, - parse: (rawEsResult, { sort }) => { - if (!Boolean(rawEsResult.aggregations?.suggestions)) { - // if this is happens, that means there is an invalid search that snuck through to the server side code; - // so, might as well early return with no suggestions - return { suggestions: [] }; - } - - const buckets: EsBucket[] = []; - getIpBuckets(rawEsResult, buckets, 'ipv4'); // modifies buckets array directly, i.e. "by reference" - getIpBuckets(rawEsResult, buckets, 'ipv6'); - - const sortedSuggestions = - sort?.direction === 'asc' - ? buckets.sort( - (bucketA: EsBucket, bucketB: EsBucket) => bucketA.doc_count - bucketB.doc_count - ) - : buckets.sort( - (bucketA: EsBucket, bucketB: EsBucket) => bucketB.doc_count - bucketA.doc_count - ); - - return { - suggestions: sortedSuggestions - .slice(0, 10) // only return top 10 results - .reduce((acc: OptionsListSuggestions, suggestion: EsBucket) => { - acc.push({ value: suggestion.key, docCount: suggestion.doc_count }); - return acc; - }, []), - }; - }, - }, - - /** - * the "Subtype Nested" query / parser should be used when the options list is built on a field with subtype nested. - */ - subtypeNested: { - buildAggregation: (req: OptionsListRequestBody) => { - const { fieldSpec, fieldName, searchString, sort } = req; - const subTypeNested = fieldSpec && getFieldSubtypeNested(fieldSpec); - if (!subTypeNested) { - // if this field is not subtype nested, fall back to keywordOnly - return cheapSuggestionAggSubtypes.keywordOnly.buildAggregation(req); - } - return { - nestedSuggestions: { - nested: { - path: subTypeNested.nested.path, - }, - aggs: { - suggestions: { - terms: { - field: fieldName, - ...(searchString && searchString.length > 0 - ? { include: `${getEscapedRegexQuery(searchString)}.*` } - : {}), - shard_size: 10, - order: getSortType(sort), - }, - }, - }, - }, - }; - }, - parse: (rawEsResult) => ({ - suggestions: get(rawEsResult, 'aggregations.nestedSuggestions.suggestions.buckets')?.reduce( - (acc: OptionsListSuggestions, suggestion: EsBucket) => { - acc.push({ value: suggestion.key, docCount: suggestion.doc_count }); - return acc; - }, - [] - ), - }), - }, -}; diff --git a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts index b2a42fa0b3b1..310a04874f7f 100644 --- a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts +++ b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts @@ -8,17 +8,15 @@ import { Observable } from 'rxjs'; -import { PluginSetup as UnifiedSearchPluginSetup } from '@kbn/unified-search-plugin/server'; -import { getKbnServerError, reportServerError } from '@kbn/kibana-utils-plugin/server'; +import { schema } from '@kbn/config-schema'; import { CoreSetup, ElasticsearchClient } from '@kbn/core/server'; import { SearchRequest } from '@kbn/data-plugin/common'; -import { schema } from '@kbn/config-schema'; +import { getKbnServerError, reportServerError } from '@kbn/kibana-utils-plugin/server'; +import { PluginSetup as UnifiedSearchPluginSetup } from '@kbn/unified-search-plugin/server'; import { OptionsListRequestBody, OptionsListResponse } from '../../common/options_list/types'; import { getValidationAggregationBuilder } from './options_list_validation_queries'; -import { getExpensiveSuggestionAggregationBuilder } from './options_list_expensive_suggestion_queries'; -import { getCheapSuggestionAggregationBuilder } from './options_list_cheap_suggestion_queries'; -import { OptionsListSuggestionAggregationBuilder } from './types'; +import { getSuggestionAggregationBuilder } from './suggestion_queries'; export const setupOptionsListSuggestionsRoute = ( { http }: CoreSetup, @@ -51,6 +49,13 @@ export const setupOptionsListSuggestionsRoute = ( fieldSpec: schema.maybe(schema.any()), allowExpensiveQueries: schema.boolean(), searchString: schema.maybe(schema.string()), + searchTechnique: schema.maybe( + schema.oneOf([ + schema.literal('exact'), + schema.literal('prefix'), + schema.literal('wildcard'), + ]) + ), selectedOptions: schema.maybe( schema.oneOf([schema.arrayOf(schema.string()), schema.arrayOf(schema.number())]) ), @@ -97,18 +102,13 @@ export const setupOptionsListSuggestionsRoute = ( /** * Build ES Query */ - const { runPastTimeout, filters, runtimeFieldMap, allowExpensiveQueries } = request; + const { runPastTimeout, filters, runtimeFieldMap } = request; const { terminateAfter, timeout } = getAutocompleteSettings(); const timeoutSettings = runPastTimeout ? {} : { timeout: `${timeout}ms`, terminate_after: terminateAfter }; - let suggestionBuilder: OptionsListSuggestionAggregationBuilder; - if (allowExpensiveQueries) { - suggestionBuilder = getExpensiveSuggestionAggregationBuilder(request); - } else { - suggestionBuilder = getCheapSuggestionAggregationBuilder(request); - } + const suggestionBuilder = getSuggestionAggregationBuilder(request); const validationBuilder = getValidationAggregationBuilder(); const suggestionAggregation: any = suggestionBuilder.buildAggregation(request) ?? {}; @@ -134,6 +134,7 @@ export const setupOptionsListSuggestionsRoute = ( ...runtimeFieldMap, }, }; + /** * Run ES query */ diff --git a/src/plugins/controls/server/options_list/suggestion_queries/index.ts b/src/plugins/controls/server/options_list/suggestion_queries/index.ts new file mode 100644 index 000000000000..5474873ed538 --- /dev/null +++ b/src/plugins/controls/server/options_list/suggestion_queries/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 { getSuggestionAggregationBuilder } from './options_list_suggestion_queries'; diff --git a/src/plugins/controls/server/options_list/suggestion_queries/options_list_all_suggestions.test.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_all_suggestions.test.ts new file mode 100644 index 000000000000..6b785c8c0bdb --- /dev/null +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_all_suggestions.test.ts @@ -0,0 +1,142 @@ +/* + * 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 { FieldSpec } from '@kbn/data-views-plugin/common'; +import { OptionsListRequestBody } from '../../../common/options_list/types'; +import { getAllSuggestionsAggregationBuilder } from './options_list_all_suggestions'; + +describe('options list fetch all suggestions query', () => { + describe('suggestion aggregation', () => { + test('number field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'bytes', + allowExpensiveQueries: true, + fieldSpec: { + type: 'number', + } as unknown as FieldSpec, + sort: { + by: '_key', + direction: 'asc', + }, + }; + const aggregationBuilder = getAllSuggestionsAggregationBuilder(); + const aggregation = aggregationBuilder.buildAggregation(optionsListRequestBodyMock); + + expect(aggregation).toMatchObject({ + suggestions: { + terms: { + size: 10, + shard_size: 10, + field: 'bytes', + order: { + _key: 'asc', + }, + }, + }, + unique_terms: { + cardinality: { + field: 'bytes', + }, + }, + }); + }); + + test('nested string (keyword, text+keyword) field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'testField', + allowExpensiveQueries: true, + fieldSpec: { + type: 'string', + subType: { nested: { path: 'path.to.nested' } }, + } as unknown as FieldSpec, + }; + const aggregationBuilder = getAllSuggestionsAggregationBuilder(); + const aggregation = aggregationBuilder.buildAggregation(optionsListRequestBodyMock); + + expect(aggregation).toMatchObject({ + nestedSuggestions: { + nested: { + path: 'path.to.nested', + }, + aggs: { + suggestions: { + terms: { + size: 10, + shard_size: 10, + field: 'testField', + order: { + _count: 'desc', + }, + }, + }, + unique_terms: { + cardinality: { + field: 'testField', + }, + }, + }, + }, + }); + }); + }); + + test('suggestion parsing', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'bytes', + allowExpensiveQueries: true, + fieldSpec: { + type: 'number', + } as unknown as FieldSpec, + sort: { + by: '_key', + direction: 'asc', + }, + }; + const aggregationBuilder = getAllSuggestionsAggregationBuilder(); + const searchResponseMock = { + hits: { + total: 10, + max_score: 10, + hits: [], + }, + took: 10, + timed_out: false, + _shards: { + failed: 0, + successful: 1, + total: 1, + skipped: 0, + }, + aggregations: { + suggestions: { + buckets: [ + { doc_count: 5, key: '1' }, + { doc_count: 4, key: '2' }, + { doc_count: 3, key: '3' }, + ], + }, + unique_terms: { + value: 3, + }, + }, + }; + + const parsed = aggregationBuilder.parse(searchResponseMock, optionsListRequestBodyMock); + expect(parsed).toMatchObject({ + suggestions: [ + { value: '1', docCount: 5 }, + { value: '2', docCount: 4 }, + { value: '3', docCount: 3 }, + ], + totalCardinality: 3, + }); + }); +}); diff --git a/src/plugins/controls/server/options_list/suggestion_queries/options_list_all_suggestions.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_all_suggestions.ts new file mode 100644 index 000000000000..e3f82bd4a9ba --- /dev/null +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_all_suggestions.ts @@ -0,0 +1,90 @@ +/* + * 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 { getFieldSubtypeNested } from '@kbn/data-views-plugin/common'; +import { get } from 'lodash'; + +import { OptionsListRequestBody, OptionsListSuggestions } from '../../../common/options_list/types'; +import { EsBucket, OptionsListSuggestionAggregationBuilder } from '../types'; +import { getSortType } from './options_list_suggestion_query_helpers'; + +/** + * Fetch all suggestions without any additional searching/filtering. + * This query will be more-or-less the same for **all** field types, + */ +export const getAllSuggestionsAggregationBuilder: () => OptionsListSuggestionAggregationBuilder = + () => allSuggestionsAggregationBuilder; + +const allSuggestionsAggregationBuilder: OptionsListSuggestionAggregationBuilder = { + buildAggregation: ({ + fieldName, + fieldSpec, + sort, + size, + allowExpensiveQueries, + }: OptionsListRequestBody) => { + let suggestionsAgg: { suggestions: any; unique_terms?: any } = { + suggestions: { + terms: { + size, + field: fieldName, + shard_size: 10, + order: getSortType(sort), + }, + }, + }; + + if (allowExpensiveQueries) { + suggestionsAgg = { + ...suggestionsAgg, + unique_terms: { + cardinality: { + field: fieldName, + }, + }, + }; + } + + const subTypeNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + if (subTypeNested) { + return { + nestedSuggestions: { + nested: { + path: subTypeNested.nested.path, + }, + aggs: { + ...suggestionsAgg, + }, + }, + }; + } + + return suggestionsAgg; + }, + parse: (rawEsResult, { fieldSpec, allowExpensiveQueries }: OptionsListRequestBody) => { + const subTypeNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + const suggestions = get( + rawEsResult, + `aggregations.${subTypeNested ? 'nestedSuggestions.suggestions' : 'suggestions'}.buckets` + )?.reduce((acc: OptionsListSuggestions, suggestion: EsBucket) => { + acc.push({ value: suggestion.key, docCount: suggestion.doc_count }); + return acc; + }, []); + return { + suggestions, + totalCardinality: allowExpensiveQueries + ? get( + rawEsResult, + `aggregations.${ + subTypeNested ? 'nestedSuggestions.unique_terms' : 'unique_terms' + }.value` + ) + : undefined, + }; + }, +}; diff --git a/src/plugins/controls/server/options_list/suggestion_queries/options_list_exact_match.test.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_exact_match.test.ts new file mode 100644 index 000000000000..77ec137e0dbe --- /dev/null +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_exact_match.test.ts @@ -0,0 +1,180 @@ +/* + * 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 { SearchResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { FieldSpec } from '@kbn/data-views-plugin/common'; +import { OptionsListRequestBody } from '../../../common/options_list/types'; +import { getExactMatchAggregationBuilder } from './options_list_exact_match'; + +describe('options list exact match search query', () => { + test('returns empty result when given invalid search', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'bytes', + allowExpensiveQueries: true, + sort: { by: '_key', direction: 'desc' }, + searchString: '1a2b3c', + fieldSpec: { type: 'number' } as unknown as FieldSpec, + }; + const aggregationBuilder = getExactMatchAggregationBuilder(); + const aggregation = aggregationBuilder.buildAggregation(optionsListRequestBodyMock); + expect(aggregation).toEqual({}); + const parsed = aggregationBuilder.parse( + {} as any as SearchResponse, + optionsListRequestBodyMock + ); + expect(parsed).toEqual({ suggestions: [], totalCardinality: 0 }); + }); + + describe('suggestion aggregation', () => { + test('string (keyword, text+keyword) field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'testField', + allowExpensiveQueries: true, + searchString: 'searchForMe', + fieldSpec: { type: 'string' } as unknown as FieldSpec, + }; + const aggregationBuilder = getExactMatchAggregationBuilder(); + const aggregation = aggregationBuilder.buildAggregation(optionsListRequestBodyMock); + expect(aggregation).toMatchObject({ + suggestions: { + filter: { + term: { + testField: { + value: 'searchForMe', + case_insensitive: true, + }, + }, + }, + aggs: { + filteredSuggestions: { + terms: { + field: 'testField', + shard_size: 10, + }, + }, + }, + }, + }); + }); + + test('nested string (keyword, text+keyword) field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'testField', + allowExpensiveQueries: true, + searchString: 'searchForMe', + fieldSpec: { + type: 'string', + subType: { nested: { path: 'path.to.nested' } }, + } as unknown as FieldSpec, + }; + const aggregationBuilder = getExactMatchAggregationBuilder(); + const aggregation = aggregationBuilder.buildAggregation(optionsListRequestBodyMock); + + expect(aggregation).toMatchObject({ + nestedSuggestions: { + nested: { + path: 'path.to.nested', + }, + aggs: { + suggestions: { + filter: { + term: { + testField: { + value: 'searchForMe', + case_insensitive: true, + }, + }, + }, + aggs: { + filteredSuggestions: { + terms: { + field: 'testField', + shard_size: 10, + }, + }, + }, + }, + }, + }, + }); + }); + + test('number field', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'bytes', + allowExpensiveQueries: true, + searchString: '123', + fieldSpec: { type: 'number' } as unknown as FieldSpec, + }; + const aggregationBuilder = getExactMatchAggregationBuilder(); + const aggregation = aggregationBuilder.buildAggregation(optionsListRequestBodyMock); + expect(aggregation).toMatchObject({ + suggestions: { + filter: { + term: { + bytes: { + value: '123', + case_insensitive: false, // this is the only part that is dependent on field type + }, + }, + }, + aggs: { + filteredSuggestions: { + terms: { + field: 'bytes', + shard_size: 10, + }, + }, + }, + }, + }); + }); + }); + + test('suggestion parsing', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + searchString: 'cool', + allowExpensiveQueries: true, + fieldName: 'coolTestField.keyword', + fieldSpec: { type: 'string' } as unknown as FieldSpec, + }; + const aggregationBuilder = getExactMatchAggregationBuilder(); + + const searchResponseMock = { + hits: { + total: 1, + max_score: 1, + hits: [], + }, + took: 10, + timed_out: false, + _shards: { + failed: 0, + successful: 1, + total: 1, + skipped: 0, + }, + aggregations: { + suggestions: { + filteredSuggestions: { + buckets: [{ doc_count: 5, key: 'cool1' }], + }, + }, + }, + }; + expect(aggregationBuilder.parse(searchResponseMock, optionsListRequestBodyMock)).toMatchObject({ + suggestions: [{ docCount: 5, value: 'cool1' }], + totalCardinality: 1, + }); + }); +}); diff --git a/src/plugins/controls/server/options_list/suggestion_queries/options_list_exact_match.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_exact_match.ts new file mode 100644 index 000000000000..e9da0c029418 --- /dev/null +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_exact_match.ts @@ -0,0 +1,91 @@ +/* + * 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 { getFieldSubtypeNested } from '@kbn/data-views-plugin/common'; +import { get } from 'lodash'; + +import { isValidSearch } from '../../../common/options_list/is_valid_search'; +import { OptionsListRequestBody, OptionsListSuggestions } from '../../../common/options_list/types'; +import { EsBucket, OptionsListSuggestionAggregationBuilder } from '../types'; + +/** + * Search for an exact match based on the provided search string. + * This query will be more-or-less the same for **all** field types, and it should only ever return + * 0 (if no match) or 1 (if a match was found) results. + */ +export const getExactMatchAggregationBuilder: () => OptionsListSuggestionAggregationBuilder = () => + exactMatchAggregationBuilder; + +const exactMatchAggregationBuilder: OptionsListSuggestionAggregationBuilder = { + buildAggregation: ({ fieldName, fieldSpec, searchString }: OptionsListRequestBody) => { + if (!isValidSearch({ searchString, fieldType: fieldSpec?.type, searchTechnique: 'exact' })) { + return {}; + } + + const suggestionsAgg = { + suggestions: { + filter: { + term: { + [fieldName]: { + value: searchString, + case_insensitive: fieldSpec?.type === 'string', + }, + }, + }, + aggs: { + filteredSuggestions: { + terms: { + field: fieldName, + shard_size: 10, + }, + }, + }, + }, + }; + + const subTypeNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + if (subTypeNested) { + return { + nestedSuggestions: { + nested: { + path: subTypeNested.nested.path, + }, + aggs: { + ...suggestionsAgg, + }, + }, + }; + } + + return suggestionsAgg; + }, + parse: (rawEsResult, { searchString, fieldSpec }) => { + if (!isValidSearch({ searchString, fieldType: fieldSpec?.type, searchTechnique: 'exact' })) { + // if this is happens, that means there is an invalid search that snuck through to the server side code; + // so, might as well early return with no suggestions + return { suggestions: [], totalCardinality: 0 }; + } + + const subTypeNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + + const suggestions = get( + rawEsResult, + `aggregations.${ + subTypeNested ? 'nestedSuggestions.suggestions' : 'suggestions' + }.filteredSuggestions.buckets` + )?.reduce((acc: OptionsListSuggestions, suggestion: EsBucket) => { + acc.push({ value: suggestion.key, docCount: suggestion.doc_count }); + return acc; + }, []); + + return { + suggestions, + totalCardinality: suggestions.length, // should only be 0 or 1, so it's safe to use length here + }; + }, +}; diff --git a/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.test.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_search_suggestions.test.ts similarity index 66% rename from src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.test.ts rename to src/plugins/controls/server/options_list/suggestion_queries/options_list_search_suggestions.test.ts index a5d6f32f6337..b2ddb699ebaa 100644 --- a/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.test.ts +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_search_suggestions.test.ts @@ -6,13 +6,18 @@ * Side Public License, v 1. */ -import { FieldSpec } from '@kbn/data-views-plugin/common'; import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; +import { FieldSpec } from '@kbn/data-views-plugin/common'; + +import { OptionsListRequestBody } from '../../../common/options_list/types'; +import { getExactMatchAggregationBuilder } from './options_list_exact_match'; +import { getSearchSuggestionsAggregationBuilder } from './options_list_search_suggestions'; -import { getExpensiveSuggestionAggregationBuilder } from './options_list_expensive_suggestion_queries'; -import { OptionsListRequestBody } from '../../common/options_list/types'; +jest.mock('./options_list_exact_match', () => ({ + getExactMatchAggregationBuilder: jest.fn(), +})); -describe('options list expensive queries', () => { +describe('options list type-specific search queries', () => { let rawSearchResponseMock: SearchResponse = {} as SearchResponse; beforeEach(() => { @@ -35,40 +40,19 @@ describe('options list expensive queries', () => { }); describe('suggestion aggregation', () => { - describe('string (keyword, text+keyword, or nested) field', () => { - test('test keyword field, without a search string', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - allowExpensiveQueries: true, - fieldName: 'coolTestField.keyword', - sort: { by: '_key', direction: 'asc' }, - fieldSpec: { aggregatable: true } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "coolTestField.keyword", - "order": Object { - "_key": "asc", - }, - "shard_size": 10, - "size": 10, - }, - }, - "unique_terms": Object { - "cardinality": Object { - "field": "coolTestField.keyword", - }, - }, - } - `); - }); + test('for unsupported field types, return exact match search instead', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'success', + allowExpensiveQueries: true, + sort: { by: '_key', direction: 'desc' }, + fieldSpec: { type: 'boolean' } as unknown as FieldSpec, + }; + getSearchSuggestionsAggregationBuilder(optionsListRequestBodyMock); + expect(getExactMatchAggregationBuilder).toBeCalled(); + }); + describe('string (keyword, text+keyword, or nested) field', () => { test('test keyword field, with a search string', () => { const optionsListRequestBodyMock: OptionsListRequestBody = { size: 10, @@ -76,9 +60,9 @@ describe('options list expensive queries', () => { allowExpensiveQueries: true, fieldName: 'coolTestField.keyword', sort: { by: '_key', direction: 'desc' }, - fieldSpec: { aggregatable: true } as unknown as FieldSpec, + fieldSpec: { type: 'string' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) @@ -123,9 +107,9 @@ describe('options list expensive queries', () => { allowExpensiveQueries: true, fieldName: 'coolTestField.keyword', sort: { by: '_key', direction: 'desc' }, - fieldSpec: { aggregatable: true } as unknown as FieldSpec, + fieldSpec: { type: 'string' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) @@ -170,9 +154,9 @@ describe('options list expensive queries', () => { allowExpensiveQueries: true, fieldName: 'coolTestField.keyword', sort: { by: '_key', direction: 'desc' }, - fieldSpec: { aggregatable: true } as unknown as FieldSpec, + fieldSpec: { type: 'string' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) @@ -216,9 +200,12 @@ describe('options list expensive queries', () => { allowExpensiveQueries: true, fieldName: 'coolNestedField', sort: { by: '_count', direction: 'asc' }, - fieldSpec: { subType: { nested: { path: 'path.to.nested' } } } as unknown as FieldSpec, + fieldSpec: { + type: 'string', + subType: { nested: { path: 'path.to.nested' } }, + } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) @@ -263,151 +250,20 @@ describe('options list expensive queries', () => { }); }); - describe('boolean field', () => { - test('creates boolean aggregation for boolean field', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'coolean', - allowExpensiveQueries: true, - sort: { by: '_key', direction: 'desc' }, - fieldSpec: { type: 'boolean' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "coolean", - "order": Object { - "_key": "desc", - }, - "shard_size": 10, - }, - }, - } - `); - }); - }); - - describe('date field field', () => { - test('creates date aggregation for date field', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: '@timestamp', - allowExpensiveQueries: true, - sort: { by: '_key', direction: 'desc' }, - fieldSpec: { type: 'date' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "@timestamp", - "order": Object { - "_key": "desc", - }, - "shard_size": 10, - "size": 10, - }, - }, - "unique_terms": Object { - "cardinality": Object { - "field": "@timestamp", - }, - }, - } - `); - }); - - test('does not throw error when receiving search string', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: '@timestamp', - allowExpensiveQueries: true, - sort: { by: '_key', direction: 'desc' }, - searchString: '2023', - fieldSpec: { type: 'date' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "terms": Object { - "field": "@timestamp", - "order": Object { - "_key": "desc", - }, - "shard_size": 10, - "size": 10, - }, - }, - "unique_terms": Object { - "cardinality": Object { - "field": "@timestamp", - }, - }, - } - `); - }); - }); - describe('IP field', () => { - test('without a search string, creates IP range aggregation with default range', () => { + test('handles an invalid search', () => { const optionsListRequestBodyMock: OptionsListRequestBody = { size: 10, fieldName: 'clientip', allowExpensiveQueries: true, sort: { by: '_key', direction: 'asc' }, + searchString: '1.a.2.b.3.z', fieldSpec: { type: 'ip' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); - expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Object { - "aggs": Object { - "filteredSuggestions": Object { - "terms": Object { - "field": "clientip", - "order": Object { - "_key": "asc", - }, - "shard_size": 10, - "size": 10, - }, - }, - "unique_terms": Object { - "cardinality": Object { - "field": "clientip", - }, - }, - }, - "ip_range": Object { - "field": "clientip", - "keyed": true, - "ranges": Array [ - Object { - "from": "::", - "key": "ipv6", - "to": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", - }, - ], - }, - }, - } - `); + expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)).toEqual({}); }); test('full IPv4 in the search string, creates IP range aggregation with CIDR mask', () => { @@ -419,7 +275,7 @@ describe('options list expensive queries', () => { sort: { by: '_count', direction: 'asc' }, fieldSpec: { type: 'ip' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) @@ -467,7 +323,7 @@ describe('options list expensive queries', () => { fieldSpec: { type: 'ip' } as unknown as FieldSpec, searchString: 'f688:fb50:6433:bba2:604:f2c:194a:d3c5', }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) @@ -514,7 +370,7 @@ describe('options list expensive queries', () => { allowExpensiveQueries: true, fieldSpec: { type: 'ip' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) @@ -563,7 +419,7 @@ describe('options list expensive queries', () => { sort: { by: '_count', direction: 'desc' }, fieldSpec: { type: 'ip' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock)) @@ -606,26 +462,29 @@ describe('options list expensive queries', () => { }); describe('suggestion parsing', () => { - test('parses string (keyword, text+keyword, or nested) result', () => { + test('parses string (keyword, text+keyword) result', () => { const optionsListRequestBodyMock: OptionsListRequestBody = { size: 10, + searchString: 'cool', allowExpensiveQueries: true, fieldName: 'coolTestField.keyword', - fieldSpec: { aggregatable: true } as unknown as FieldSpec, + fieldSpec: { type: 'string' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); rawSearchResponseMock.aggregations = { - suggestions: { - buckets: [ - { doc_count: 5, key: 'cool1' }, - { doc_count: 15, key: 'cool2' }, - { doc_count: 10, key: 'cool3' }, - ], - }, - unique_terms: { - value: 3, + filteredSuggestions: { + suggestions: { + buckets: [ + { doc_count: 5, key: 'cool1' }, + { doc_count: 15, key: 'cool2' }, + { doc_count: 10, key: 'cool3' }, + ], + }, + unique_terms: { + value: 3, + }, }, }; expect(suggestionAggBuilder.parse(rawSearchResponseMock, optionsListRequestBodyMock)) @@ -650,51 +509,18 @@ describe('options list expensive queries', () => { `); }); - test('parses boolean result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: 'coolean', - allowExpensiveQueries: true, - fieldSpec: { type: 'boolean' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - rawSearchResponseMock.aggregations = { - suggestions: { - buckets: [ - { doc_count: 55, key_as_string: 'false' }, - { doc_count: 155, key_as_string: 'true' }, - ], - }, - }; - expect(suggestionAggBuilder.parse(rawSearchResponseMock, optionsListRequestBodyMock)) - .toMatchInlineSnapshot(` - Object { - "suggestions": Array [ - Object { - "docCount": 55, - "value": "false", - }, - Object { - "docCount": 155, - "value": "true", - }, - ], - "totalCardinality": 2, - } - `); - }); - - test('parses nested result', () => { + test('parses string nested result', () => { const optionsListRequestBodyMock: OptionsListRequestBody = { size: 10, searchString: 'co', fieldName: 'coolNestedField', allowExpensiveQueries: true, - fieldSpec: { subType: { nested: { path: 'path.to.nested' } } } as unknown as FieldSpec, + fieldSpec: { + type: 'string', + subType: { type: 'string', nested: { path: 'path.to.nested' } }, + } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); rawSearchResponseMock.aggregations = { @@ -738,11 +564,12 @@ describe('options list expensive queries', () => { test('parses mixed IPv4 and IPv6 result', () => { const optionsListRequestBodyMock: OptionsListRequestBody = { size: 10, + searchString: '21', fieldName: 'clientip', allowExpensiveQueries: true, fieldSpec: { type: 'ip' } as unknown as FieldSpec, }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( + const suggestionAggBuilder = getSearchSuggestionsAggregationBuilder( optionsListRequestBodyMock ); rawSearchResponseMock.aggregations = { @@ -840,53 +667,5 @@ describe('options list expensive queries', () => { ] `); }); - - test('parses date result', () => { - const optionsListRequestBodyMock: OptionsListRequestBody = { - size: 10, - fieldName: '@timestamp', - allowExpensiveQueries: true, - fieldSpec: { type: 'date' } as unknown as FieldSpec, - }; - const suggestionAggBuilder = getExpensiveSuggestionAggregationBuilder( - optionsListRequestBodyMock - ); - rawSearchResponseMock.aggregations = { - suggestions: { - buckets: [ - { doc_count: 20, key: 1696824675 }, - { doc_count: 13, key: 1686086625 }, - { doc_count: 4, key: 1703684229 }, - { doc_count: 34, key: 1688603684 }, - ], - }, - }; - - const parsed = suggestionAggBuilder.parse( - rawSearchResponseMock, - optionsListRequestBodyMock - ).suggestions; - - expect(parsed).toMatchInlineSnapshot(` - Array [ - Object { - "docCount": 20, - "value": 1696824675, - }, - Object { - "docCount": 13, - "value": 1686086625, - }, - Object { - "docCount": 4, - "value": 1703684229, - }, - Object { - "docCount": 34, - "value": 1688603684, - }, - ] - `); - }); }); }); diff --git a/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_search_suggestions.ts similarity index 57% rename from src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.ts rename to src/plugins/controls/server/options_list/suggestion_queries/options_list_search_suggestions.ts index 156a966f6a48..47f1fe5f696d 100644 --- a/src/plugins/controls/server/options_list/options_list_expensive_suggestion_queries.ts +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_search_suggestions.ts @@ -6,16 +6,15 @@ * Side Public License, v 1. */ -import { get } from 'lodash'; import { getFieldSubtypeNested } from '@kbn/data-views-plugin/common'; +import { get } from 'lodash'; -import { - OptionsListRequestBody, - OptionsListSuggestions, - OPTIONS_LIST_DEFAULT_SEARCH_TECHNIQUE, -} from '../../common/options_list/types'; -import { getIpRangeQuery, type IpRangeQuery } from '../../common/options_list/ip_search'; -import { EsBucket, OptionsListSuggestionAggregationBuilder } from './types'; +import { getIpRangeQuery } from '../../../common/options_list/ip_search'; +import { isValidSearch } from '../../../common/options_list/is_valid_search'; +import { getDefaultSearchTechnique } from '../../../common/options_list/suggestions_searching'; +import { OptionsListRequestBody, OptionsListSuggestions } from '../../../common/options_list/types'; +import { EsBucket, OptionsListSuggestionAggregationBuilder } from '../types'; +import { getExactMatchAggregationBuilder } from './options_list_exact_match'; import { getEscapedWildcardQuery, getIpBuckets, @@ -23,19 +22,28 @@ import { } from './options_list_suggestion_query_helpers'; /** - * Suggestion aggregations + * Type-specific search suggestion aggregations. These queries are highly impacted by the field type. */ -export const getExpensiveSuggestionAggregationBuilder = ({ fieldSpec }: OptionsListRequestBody) => { - if (fieldSpec?.type === 'boolean') { - return expensiveSuggestionAggSubtypes.boolean; - } - if (fieldSpec?.type === 'ip') { - return expensiveSuggestionAggSubtypes.ip; +export const getSearchSuggestionsAggregationBuilder = (request: OptionsListRequestBody) => { + const { fieldSpec } = request; + + // note that date and boolean fields are non-searchable, so type-specific search aggs are not necessary; + // number fields, on the other hand, only support exact match searching - so, this also does not need a + // type-specific agg because it will be handled by `exactMatchSearchAggregation` + switch (fieldSpec?.type) { + case 'ip': { + return suggestionAggSubtypes.ip; + } + case 'string': { + return suggestionAggSubtypes.textOrKeywordOrNested; + } + default: + // safe guard just in case an invalid/unsupported field type somehow got through + return getExactMatchAggregationBuilder(); } - return expensiveSuggestionAggSubtypes.textOrKeywordOrNested; }; -const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggregationBuilder } = { +const suggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggregationBuilder } = { /** * The "textOrKeywordOrNested" query / parser should be used whenever the field is built on some type of string field, * regardless of if it is keyword only, keyword+text, or some nested keyword/keyword+text field. @@ -49,28 +57,19 @@ const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggr sort, size, }: OptionsListRequestBody) => { + const hasSearchString = searchString && searchString.length > 0; + if (!hasSearchString || fieldSpec?.type === 'date') { + // we can assume that this is only ever called with a search string, and date fields are not + // currently searchable; so, if any of these things is true, this is invalid. + return undefined; + } + const subTypeNested = fieldSpec && getFieldSubtypeNested(fieldSpec); let textOrKeywordQuery: any = { - suggestions: { - terms: { - size, - field: fieldName, - shard_size: 10, - order: getSortType(sort), - }, - }, - unique_terms: { - cardinality: { - field: fieldName, - }, - }, - }; - // disabling for date fields because applying a search string will return an error - if (fieldSpec?.type !== 'date' && searchString && searchString.length > 0) { - textOrKeywordQuery = { - filteredSuggestions: { - filter: { - [(searchTechnique ?? OPTIONS_LIST_DEFAULT_SEARCH_TECHNIQUE) as string]: { + filteredSuggestions: { + filter: { + [(searchTechnique ?? getDefaultSearchTechnique(fieldSpec?.type ?? 'string')) as string]: + { [fieldName]: { value: searchTechnique === 'wildcard' @@ -79,11 +78,25 @@ const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggr case_insensitive: true, }, }, + }, + aggs: { + suggestions: { + terms: { + size, + field: fieldName, + shard_size: 10, + order: getSortType(sort), + }, + }, + unique_terms: { + cardinality: { + field: fieldName, + }, }, - aggs: { ...textOrKeywordQuery }, }, - }; - } + }, + }; + if (subTypeNested) { textOrKeywordQuery = { nestedSuggestions: { @@ -98,11 +111,10 @@ const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggr } return textOrKeywordQuery; }, - parse: (rawEsResult, request) => { + parse: (rawEsResult, { fieldSpec }) => { let basePath = 'aggregations'; - const isNested = request.fieldSpec && getFieldSubtypeNested(request.fieldSpec); - basePath += isNested ? '.nestedSuggestions' : ''; - basePath += request.searchString ? '.filteredSuggestions' : ''; + const isNested = fieldSpec && getFieldSubtypeNested(fieldSpec); + basePath += isNested ? '.nestedSuggestions.filteredSuggestions' : '.filteredSuggestions'; const suggestions = get(rawEsResult, `${basePath}.suggestions.buckets`)?.reduce( (acc: OptionsListSuggestions, suggestion: EsBucket) => { @@ -119,55 +131,23 @@ const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggr }, /** - * the "Boolean" query / parser should be used when the options list is built on a field of type boolean. The query is slightly different than a keyword query. + * the "IP" query / parser should be used when the options list is built on a field of type IP. */ - boolean: { - buildAggregation: ({ fieldName, sort }: OptionsListRequestBody) => ({ - suggestions: { + ip: { + buildAggregation: ({ fieldName, searchString, sort, size }: OptionsListRequestBody) => { + const filteredSuggestions = { terms: { + size, field: fieldName, shard_size: 10, order: getSortType(sort), }, - }, - }), - parse: (rawEsResult) => { - const suggestions = get(rawEsResult, 'aggregations.suggestions.buckets')?.reduce( - (acc: OptionsListSuggestions, suggestion: EsBucket & { key_as_string: string }) => { - acc.push({ value: suggestion.key_as_string, docCount: suggestion.doc_count }); - return acc; - }, - [] - ); - return { suggestions, totalCardinality: suggestions.length }; // cardinality is only ever 0, 1, or 2 so safe to use length here - }, - }, - - /** - * the "IP" query / parser should be used when the options list is built on a field of type IP. - */ - ip: { - buildAggregation: ({ fieldName, searchString, sort, size }: OptionsListRequestBody) => { - let ipRangeQuery: IpRangeQuery = { - validSearch: true, - rangeQuery: [ - { - key: 'ipv6', - from: '::', - to: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', - }, - ], }; - if (searchString && searchString.length > 0) { - ipRangeQuery = getIpRangeQuery(searchString); - if (!ipRangeQuery.validSearch) { - // ideally should be prevented on the client side but, if somehow an invalid search gets through to the server, - // simply don't return an aggregation query for the ES search request - return undefined; - } + const ipRangeQuery = getIpRangeQuery(searchString ?? ''); + if (!ipRangeQuery.validSearch) { + return {}; } - return { suggestions: { ip_range: { @@ -176,14 +156,7 @@ const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggr keyed: true, }, aggs: { - filteredSuggestions: { - terms: { - size, - field: fieldName, - shard_size: 10, - order: getSortType(sort), - }, - }, + filteredSuggestions, unique_terms: { cardinality: { field: fieldName, @@ -193,18 +166,22 @@ const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggr }, }; }, - parse: (rawEsResult, request) => { - if (!Boolean(rawEsResult.aggregations?.suggestions)) { + parse: (rawEsResult, { searchString, sort, fieldSpec, size, searchTechnique }) => { + if ( + !searchString || + !isValidSearch({ searchString, fieldType: fieldSpec?.type, searchTechnique }) + ) { // if this is happens, that means there is an invalid search that snuck through to the server side code; // so, might as well early return with no suggestions return { suggestions: [], totalCardinality: 0 }; } + const buckets: EsBucket[] = []; getIpBuckets(rawEsResult, buckets, 'ipv4'); // modifies buckets array directly, i.e. "by reference" getIpBuckets(rawEsResult, buckets, 'ipv6'); const sortedSuggestions = - request.sort?.direction === 'asc' + sort?.direction === 'asc' ? buckets.sort( (bucketA: EsBucket, bucketB: EsBucket) => bucketA.doc_count - bucketB.doc_count ) @@ -213,7 +190,7 @@ const expensiveSuggestionAggSubtypes: { [key: string]: OptionsListSuggestionAggr ); const suggestions = sortedSuggestions - .slice(0, request.size) + .slice(0, size) .reduce((acc: OptionsListSuggestions, suggestion: EsBucket) => { acc.push({ value: suggestion.key, docCount: suggestion.doc_count }); return acc; diff --git a/src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_queries.test.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_queries.test.ts new file mode 100644 index 000000000000..46f0af574f77 --- /dev/null +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_queries.test.ts @@ -0,0 +1,94 @@ +/* + * 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 { FieldSpec } from '@kbn/data-views-plugin/common'; +import { OptionsListRequestBody } from '../../../common/options_list/types'; +import { getAllSuggestionsAggregationBuilder } from './options_list_all_suggestions'; +import { getExactMatchAggregationBuilder } from './options_list_exact_match'; +import { getSearchSuggestionsAggregationBuilder } from './options_list_search_suggestions'; +import { getSuggestionAggregationBuilder } from './options_list_suggestion_queries'; + +jest.mock('./options_list_all_suggestions', () => ({ + getAllSuggestionsAggregationBuilder: jest.fn(), +})); + +jest.mock('./options_list_exact_match', () => ({ + getExactMatchAggregationBuilder: jest.fn(), +})); + +jest.mock('./options_list_search_suggestions', () => ({ + getSearchSuggestionsAggregationBuilder: jest.fn(), +})); + +describe('options list suggestion queries', () => { + beforeEach(() => { + jest.resetAllMocks(); + }); + + test('returns generic fetch all aggregation when no search string is provided', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: '@timestamp', + allowExpensiveQueries: true, + sort: { by: '_key', direction: 'desc' }, + fieldSpec: { type: 'date' } as unknown as FieldSpec, + }; + getSuggestionAggregationBuilder(optionsListRequestBodyMock); + expect(getAllSuggestionsAggregationBuilder).toBeCalled(); + expect(getExactMatchAggregationBuilder).not.toBeCalled(); + expect(getSearchSuggestionsAggregationBuilder).not.toBeCalled(); + }); + + test('returns generic exact match search query when search technique is `exact`', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'bytes', + allowExpensiveQueries: true, + searchTechnique: 'exact', + searchString: 'searchForMe', + sort: { by: '_key', direction: 'asc' }, + fieldSpec: { type: 'number' } as unknown as FieldSpec, + }; + getSuggestionAggregationBuilder(optionsListRequestBodyMock); + expect(getAllSuggestionsAggregationBuilder).not.toBeCalled(); + expect(getExactMatchAggregationBuilder).toBeCalled(); + expect(getSearchSuggestionsAggregationBuilder).not.toBeCalled(); + }); + + test('returns generic exact match search query when allowExpensiveQueries is `false`', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'bytes', + allowExpensiveQueries: false, + searchTechnique: 'prefix', + searchString: 'searchForMe', + sort: { by: '_key', direction: 'asc' }, + fieldSpec: { type: 'number' } as unknown as FieldSpec, + }; + getSuggestionAggregationBuilder(optionsListRequestBodyMock); + expect(getAllSuggestionsAggregationBuilder).not.toBeCalled(); + expect(getExactMatchAggregationBuilder).toBeCalled(); + expect(getSearchSuggestionsAggregationBuilder).not.toBeCalled(); + }); + + test('returns type-specific search query only when absolutely necessary', () => { + const optionsListRequestBodyMock: OptionsListRequestBody = { + size: 10, + fieldName: 'bytes', + allowExpensiveQueries: true, + searchTechnique: 'prefix', + searchString: 'searchForMe', + sort: { by: '_key', direction: 'asc' }, + fieldSpec: { type: 'keyword' } as unknown as FieldSpec, + }; + getSuggestionAggregationBuilder(optionsListRequestBodyMock); + expect(getAllSuggestionsAggregationBuilder).not.toBeCalled(); + expect(getExactMatchAggregationBuilder).not.toBeCalled(); + expect(getSearchSuggestionsAggregationBuilder).toBeCalled(); + }); +}); diff --git a/src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_queries.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_queries.ts new file mode 100644 index 000000000000..56e7820c8260 --- /dev/null +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_queries.ts @@ -0,0 +1,32 @@ +/* + * 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 { OptionsListRequestBody } from '../../../common/options_list/types'; +import { getAllSuggestionsAggregationBuilder } from './options_list_all_suggestions'; +import { getExactMatchAggregationBuilder } from './options_list_exact_match'; +import { getSearchSuggestionsAggregationBuilder } from './options_list_search_suggestions'; + +/** + * Suggestion aggregations + */ +export const getSuggestionAggregationBuilder = (request: OptionsListRequestBody) => { + const { searchString, searchTechnique, allowExpensiveQueries } = request; + const hasSearchString = searchString && searchString.length > 0; + if (!hasSearchString) { + // the field type only matters when there is a search string; so, if no search string, + // return generic "fetch all" aggregation builder + return getAllSuggestionsAggregationBuilder(); + } else if (!allowExpensiveQueries || searchTechnique === 'exact') { + // if `allowExpensiveQueries` is false, only support exact match searching; also, field type + // once again does not matter when building an exact match aggregation + return getExactMatchAggregationBuilder(); + } else { + // at this point, the type of the field matters - so, fetch the type-specific search agg + return getSearchSuggestionsAggregationBuilder(request); + } +}; diff --git a/src/plugins/controls/server/options_list/options_list_suggestion_query_helpers.ts b/src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_query_helpers.ts similarity index 92% rename from src/plugins/controls/server/options_list/options_list_suggestion_query_helpers.ts rename to src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_query_helpers.ts index 437450cc8ecf..5986420f21f9 100644 --- a/src/plugins/controls/server/options_list/options_list_suggestion_query_helpers.ts +++ b/src/plugins/controls/server/options_list/suggestion_queries/options_list_suggestion_query_helpers.ts @@ -8,11 +8,11 @@ import { get } from 'lodash'; -import { EsBucket } from './types'; import { - OPTIONS_LIST_DEFAULT_SORT, OptionsListSortingType, -} from '../../common/options_list/suggestions_sorting'; + OPTIONS_LIST_DEFAULT_SORT, +} from '../../../common/options_list/suggestions_sorting'; +import { EsBucket } from '../types'; export const getSortType = (sort?: OptionsListSortingType) => { return sort diff --git a/src/plugins/data/common/search/expressions/__snapshots__/kibana.test.ts.snap b/src/plugins/data/common/search/expressions/__snapshots__/kibana.test.ts.snap index 2400f7a1f67d..7bcf782fbbbc 100644 --- a/src/plugins/data/common/search/expressions/__snapshots__/kibana.test.ts.snap +++ b/src/plugins/data/common/search/expressions/__snapshots__/kibana.test.ts.snap @@ -14,6 +14,7 @@ Object { }, }, ], + "now": 0, "query": Array [ Object { "language": "lucene", diff --git a/src/plugins/data/common/search/expressions/kibana.test.ts b/src/plugins/data/common/search/expressions/kibana.test.ts index c82bc0293cef..4992a345bd0d 100644 --- a/src/plugins/data/common/search/expressions/kibana.test.ts +++ b/src/plugins/data/common/search/expressions/kibana.test.ts @@ -20,6 +20,7 @@ describe('interpreter/functions#kibana', () => { beforeEach(() => { input = { timeRange: { from: '0', to: '1' } }; search = { + now: 0, type: 'kibana_context', query: { language: 'lucene', query: 'geo.src:US' }, filters: [ diff --git a/src/plugins/data/common/search/expressions/kibana.ts b/src/plugins/data/common/search/expressions/kibana.ts index 83d2cdc1c64b..ad8405a51418 100644 --- a/src/plugins/data/common/search/expressions/kibana.ts +++ b/src/plugins/data/common/search/expressions/kibana.ts @@ -41,6 +41,7 @@ export const kibana: ExpressionFunctionKibana = { // TODO: But it shouldn't be need. ...input, type: 'kibana_context', + now: getSearchContext().now ?? Date.now(), query: [...toArray(getSearchContext().query), ...toArray((input || {}).query)], filters: [...(getSearchContext().filters || []), ...((input || {}).filters || [])], timeRange: getSearchContext().timeRange || (input ? input.timeRange : undefined), diff --git a/src/plugins/discover/common/locator.test.ts b/src/plugins/discover/common/locator.test.ts index 80bc4ceebed2..93da54ad365e 100644 --- a/src/plugins/discover/common/locator.test.ts +++ b/src/plugins/discover/common/locator.test.ts @@ -218,17 +218,22 @@ describe('Discover url generator', () => { expect(path).toContain('__test__'); }); - test('can specify columns, interval, sort and savedQuery', async () => { + test('can specify columns, grid, interval, sort and savedQuery', async () => { const { locator } = await setup(); const { path } = await locator.getLocation({ columns: ['_source'], + grid: { + columns: { + _source: { width: 150 }, + }, + }, interval: 'auto', sort: [['timestamp, asc']] as string[][] & SerializableRecord, savedQuery: '__savedQueryId__', }); expect(path).toMatchInlineSnapshot( - `"#/?_a=(columns:!(_source),interval:auto,savedQuery:__savedQueryId__,sort:!(!('timestamp,%20asc')))"` + `"#/?_a=(columns:!(_source),grid:(columns:(_source:(width:150))),interval:auto,savedQuery:__savedQueryId__,sort:!(!('timestamp,%20asc')))"` ); }); diff --git a/src/plugins/discover/common/locator.ts b/src/plugins/discover/common/locator.ts index 70e60f55b5fb..9be9947e743d 100644 --- a/src/plugins/discover/common/locator.ts +++ b/src/plugins/discover/common/locator.ts @@ -10,6 +10,7 @@ import type { SerializableRecord } from '@kbn/utility-types'; import type { Filter, TimeRange, Query, AggregateQuery } from '@kbn/es-query'; import type { GlobalQueryStateFromUrl, RefreshInterval } from '@kbn/data-plugin/public'; import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public'; +import type { DiscoverGridSettings } from '@kbn/saved-search-plugin/common'; import { DataViewSpec } from '@kbn/data-views-plugin/common'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/common'; import { VIEW_MODE } from './constants'; @@ -70,6 +71,11 @@ export interface DiscoverAppLocatorParams extends SerializableRecord { */ columns?: string[]; + /** + * Data Grid related state + */ + grid?: DiscoverGridSettings; + /** * Used interval of the histogram */ @@ -139,6 +145,7 @@ export class DiscoverAppLocatorDefinition implements LocatorDefinition Get links -> Snapshot const params: DiscoverAppLocatorParams = { - ...otherState, + ...appState, ...(savedSearch.id ? { savedSearchId: savedSearch.id } : {}), ...(dataView?.isPersisted() ? { dataViewId: dataView?.id } diff --git a/src/plugins/discover/public/application/main/services/discover_app_state_container.ts b/src/plugins/discover/public/application/main/services/discover_app_state_container.ts index facf8e26fb85..e1614bf79639 100644 --- a/src/plugins/discover/public/application/main/services/discover_app_state_container.ts +++ b/src/plugins/discover/public/application/main/services/discover_app_state_container.ts @@ -24,7 +24,7 @@ import { SavedSearch, VIEW_MODE } from '@kbn/saved-search-plugin/public'; import { IKbnUrlStateStorage, ISyncStateRef, syncState } from '@kbn/kibana-utils-plugin/public'; import { isEqual } from 'lodash'; import { connectToQueryState, syncGlobalQueryStateWithUrl } from '@kbn/data-plugin/public'; -import type { UnifiedDataTableSettings } from '@kbn/unified-data-table'; +import type { DiscoverGridSettings } from '@kbn/saved-search-plugin/common'; import type { DiscoverServices } from '../../../build_services'; import { addLog } from '../../../utils/add_log'; import { cleanupUrlState } from '../utils/cleanup_url_state'; @@ -94,7 +94,7 @@ export interface DiscoverAppState { /** * Data Grid related state */ - grid?: UnifiedDataTableSettings; + grid?: DiscoverGridSettings; /** * Hide chart */ diff --git a/src/plugins/discover/public/application/main/services/discover_state.ts b/src/plugins/discover/public/application/main/services/discover_state.ts index 1dc58643ebdc..8994afb8a5f9 100644 --- a/src/plugins/discover/public/application/main/services/discover_state.ts +++ b/src/plugins/discover/public/application/main/services/discover_state.ts @@ -570,6 +570,7 @@ function createUrlGeneratorState({ : data.query.timefilter.timefilter.getTime(), searchSessionId: shouldRestoreSearchSession ? data.search.session.getSessionId() : undefined, columns: appState.columns, + grid: appState.grid, sort: appState.sort, savedQuery: appState.savedQuery, interval: appState.interval, diff --git a/src/plugins/expressions/common/expression_functions/specs/index.ts b/src/plugins/expressions/common/expression_functions/specs/index.ts index 0e473e4a79e5..37af3ede5ebe 100644 --- a/src/plugins/expressions/common/expression_functions/specs/index.ts +++ b/src/plugins/expressions/common/expression_functions/specs/index.ts @@ -17,6 +17,7 @@ export * from './overall_metric'; export * from './derivative'; export * from './moving_average'; export * from './ui_setting'; +export * from './math_column'; export type { MapColumnArguments } from './map_column'; export { mapColumn } from './map_column'; export type { MathArguments, MathInput } from './math'; diff --git a/src/plugins/expressions/common/expression_functions/specs/math_column.ts b/src/plugins/expressions/common/expression_functions/specs/math_column.ts index e056bc6b876e..6b75af7de4ca 100644 --- a/src/plugins/expressions/common/expression_functions/specs/math_column.ts +++ b/src/plugins/expressions/common/expression_functions/specs/math_column.ts @@ -18,12 +18,14 @@ export type MathColumnArguments = MathArguments & { copyMetaFrom?: string | null; }; -export const mathColumn: ExpressionFunctionDefinition< +export type ExpressionFunctionMathColumn = ExpressionFunctionDefinition< 'mathColumn', Datatable, MathColumnArguments, Promise -> = { +>; + +export const mathColumn: ExpressionFunctionMathColumn = { name: 'mathColumn', type: 'datatable', inputTypes: ['datatable'], diff --git a/src/plugins/expressions/common/expression_functions/types.ts b/src/plugins/expressions/common/expression_functions/types.ts index 018ee9e9fac0..c59169ccf04a 100644 --- a/src/plugins/expressions/common/expression_functions/types.ts +++ b/src/plugins/expressions/common/expression_functions/types.ts @@ -20,6 +20,7 @@ import { ExpressionFunctionDerivative, ExpressionFunctionMovingAverage, ExpressionFunctionOverallMetric, + ExpressionFunctionMathColumn, } from './specs'; import { ExpressionAstFunction } from '../ast'; @@ -132,4 +133,5 @@ export interface ExpressionFunctionDefinitions { overall_metric: ExpressionFunctionOverallMetric; derivative: ExpressionFunctionDerivative; moving_average: ExpressionFunctionMovingAverage; + math_column: ExpressionFunctionMathColumn; } diff --git a/src/plugins/files/public/index.ts b/src/plugins/files/public/index.ts index d4970fe4f3bf..1f01fc2835fe 100644 --- a/src/plugins/files/public/index.ts +++ b/src/plugins/files/public/index.ts @@ -7,7 +7,9 @@ */ import { FilesPlugin } from './plugin'; -export type { FilesSetup, FilesStart } from './plugin'; + +export type { FilesPublicSetup as FilesSetup, FilesPublicStart as FilesStart } from './plugin'; + export type { FilesClient, ScopedFilesClient, diff --git a/src/plugins/files/public/mocks.ts b/src/plugins/files/public/mocks.ts index 447f8c2b85d5..c60c3e580380 100644 --- a/src/plugins/files/public/mocks.ts +++ b/src/plugins/files/public/mocks.ts @@ -8,7 +8,7 @@ import { createMockFilesClient as createBaseMocksFilesClient } from '@kbn/shared-ux-file-mocks'; import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; -import { FilesSetup } from '.'; +import { FilesPublicSetup } from './plugin'; import type { FilesClient, FilesClientFactory } from './types'; export const createMockFilesClient = (): DeeplyMockedKeys => ({ @@ -17,7 +17,7 @@ export const createMockFilesClient = (): DeeplyMockedKeys => ({ publicDownload: jest.fn(), }); -export const createMockFilesSetup = (): DeeplyMockedKeys => { +export const createMockFilesSetup = (): DeeplyMockedKeys => { return { filesClientFactory: createMockFilesClientFactory(), registerFileKind: jest.fn(), diff --git a/src/plugins/files/public/plugin.ts b/src/plugins/files/public/plugin.ts index 13828d0ee366..9234e6da8baf 100644 --- a/src/plugins/files/public/plugin.ts +++ b/src/plugins/files/public/plugin.ts @@ -7,7 +7,12 @@ */ import type { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; -import type { FilesClient, FilesClientFactory } from './types'; +import type { + FilesClient, + FilesClientFactory, + FilesPublicSetupDependencies, + FilesPublicStartDependencies, +} from './types'; import { FileKindsRegistryImpl } from '../common/file_kinds_registry'; import { createFilesClient } from './files_client'; import { FileKindBrowser } from '../common'; @@ -17,7 +22,7 @@ import * as DefaultImageFileKind from '../common/default_image_file_kind'; /** * Public setup-phase contract */ -export interface FilesSetup { +export interface FilesPublicSetup { /** * A factory for creating an {@link FilesClient} instance. This requires a * registered {@link FileKindBrowser}. @@ -35,7 +40,7 @@ export interface FilesSetup { registerFileKind(fileKind: FileKindBrowser): void; } -export type FilesStart = Pick & { +export type FilesPublicStart = Pick & { getFileKindDefinition: (id: string) => FileKindBrowser; getAllFindKindDefinitions: () => FileKindBrowser[]; }; @@ -43,11 +48,19 @@ export type FilesStart = Pick & { /** * Bringing files to Kibana */ -export class FilesPlugin implements Plugin { +export class FilesPlugin + implements + Plugin< + FilesPublicSetup, + FilesPublicStart, + FilesPublicSetupDependencies, + FilesPublicStartDependencies + > +{ private registry = new FileKindsRegistryImpl(); private filesClientFactory?: FilesClientFactory; - setup(core: CoreSetup): FilesSetup { + setup(core: CoreSetup): FilesPublicSetup { this.registry.register({ ...DefaultImageFileKind.kind, maxSizeBytes: DefaultImageFileKind.maxSize, @@ -77,7 +90,7 @@ export class FilesPlugin implements Plugin { }; } - start(core: CoreStart): FilesStart { + start(core: CoreStart): FilesPublicStart { return { filesClientFactory: this.filesClientFactory!, getFileKindDefinition: (id: string): FileKindBrowser => { diff --git a/src/plugins/files/public/types.ts b/src/plugins/files/public/types.ts index ee4f622a8ddb..35923bb224a1 100644 --- a/src/plugins/files/public/types.ts +++ b/src/plugins/files/public/types.ts @@ -12,3 +12,9 @@ export type { FilesClientFactory, FilesClientResponses, } from '../common/files_client'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface FilesPublicSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface FilesPublicStartDependencies {} diff --git a/src/plugins/files/server/index.ts b/src/plugins/files/server/index.ts index f02a0164b1f6..757ff4fc19fd 100755 --- a/src/plugins/files/server/index.ts +++ b/src/plugins/files/server/index.ts @@ -23,7 +23,7 @@ export { createEsFileClient } from './file_client'; export { createFileHashTransform } from './file_client/stream_transforms/file_hash_transform'; -export type { FilesSetup, FilesStart } from './types'; +export type { FilesServerSetup as FilesSetup, FilesServerStart as FilesStart } from './types'; export type { FileShareServiceStart, CreateShareArgs, diff --git a/src/plugins/files/server/plugin.ts b/src/plugins/files/server/plugin.ts index 9e608d8f38a5..19addde116d0 100755 --- a/src/plugins/files/server/plugin.ts +++ b/src/plugins/files/server/plugin.ts @@ -25,10 +25,10 @@ import { import { BlobStorageService } from './blob_storage_service'; import { FileServiceFactory } from './file_service'; import type { - FilesPluginSetupDependencies, - FilesPluginStartDependencies, - FilesSetup, - FilesStart, + FilesServerSetupDependencies, + FilesServerStartDependencies, + FilesServerSetup, + FilesServerStart, } from './types'; import type { FilesRequestHandlerContext, FilesRouter } from './routes/types'; @@ -36,12 +36,20 @@ import { registerRoutes, registerFileKindRoutes } from './routes'; import { Counters, registerUsageCollector } from './usage'; import * as DefaultImageKind from '../common/default_image_file_kind'; -export class FilesPlugin implements Plugin { +export class FilesPlugin + implements + Plugin< + FilesServerSetup, + FilesServerStart, + FilesServerSetupDependencies, + FilesServerStartDependencies + > +{ private static analytics?: AnalyticsServiceStart; private readonly logger: Logger; private fileServiceFactory: undefined | FileServiceFactory; - private securitySetup: FilesPluginSetupDependencies['security']; - private securityStart: FilesPluginStartDependencies['security']; + private securitySetup: FilesServerSetupDependencies['security']; + private securityStart: FilesServerStartDependencies['security']; constructor(initializerContext: PluginInitializerContext) { this.logger = initializerContext.logger.get(); @@ -57,8 +65,8 @@ export class FilesPlugin implements Plugin subscriber.next(defaultTheme)), + getTheme: () => defaultTheme, }; // The `i18n` start contract should always be included to ensure diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts index 537b7739bcc0..1fa2407cdd28 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts @@ -581,6 +581,10 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, + 'observability:enableInfrastructureProfilingIntegration': { + type: 'boolean', + _meta: { description: 'Non-default value of setting.' }, + }, 'securitySolution:enableGroupedNav': { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts index 273864af2bb4..33518b5389f5 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -46,6 +46,7 @@ export interface UsageStats { 'observability:apmAWSLambdaPriceFactor': string; 'observability:apmAWSLambdaRequestCostPerMillion': number; 'observability:enableInfrastructureHostsView': boolean; + 'observability:enableInfrastructureProfilingIntegration': boolean; 'observability:apmAgentExplorerView': boolean; 'visualization:heatmap:maxBuckets': number; 'visualization:colorMapping': string; diff --git a/src/plugins/kibana_utils/public/index.ts b/src/plugins/kibana_utils/public/index.ts index a33a1f5e7e64..9a717953d60f 100644 --- a/src/plugins/kibana_utils/public/index.ts +++ b/src/plugins/kibana_utils/public/index.ts @@ -112,7 +112,7 @@ export { } from './history'; export { applyDiff } from './state_management/utils/diff_object'; -export type { KibanaUtilsSetup } from './plugin'; +export type { KibanaUtilsPublicSetup as KibanaUtilsSetup, KibanaUtilsPublicStart } from './plugin'; export function plugin(initializerContext: PluginInitializerContext) { return new KibanaUtilsPublicPlugin(initializerContext); diff --git a/src/plugins/kibana_utils/public/mocks.ts b/src/plugins/kibana_utils/public/mocks.ts index a537c2fc74e9..cb872838af4b 100644 --- a/src/plugins/kibana_utils/public/mocks.ts +++ b/src/plugins/kibana_utils/public/mocks.ts @@ -6,10 +6,10 @@ * Side Public License, v 1. */ -import { KibanaUtilsSetup, KibanaUtilsStart } from './plugin'; +import { KibanaUtilsPublicSetup, KibanaUtilsPublicStart } from './plugin'; -export type Setup = jest.Mocked; -export type Start = jest.Mocked; +export type Setup = jest.Mocked; +export type Start = jest.Mocked; const createSetupContract = (): Setup => { return { diff --git a/src/plugins/kibana_utils/public/plugin.ts b/src/plugins/kibana_utils/public/plugin.ts index d483754da5b2..05d8ede25649 100644 --- a/src/plugins/kibana_utils/public/plugin.ts +++ b/src/plugins/kibana_utils/public/plugin.ts @@ -10,26 +10,40 @@ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '@kbn/cor import { History } from 'history'; import { setVersion } from './set_version'; -export interface KibanaUtilsSetup { +export interface KibanaUtilsPublicSetup { setVersion: (history: Pick) => void; } -export type KibanaUtilsStart = undefined; +export type KibanaUtilsPublicStart = undefined; -export class KibanaUtilsPublicPlugin implements Plugin { +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface KibanaUtilsPublicSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface KibanaUtilsPublicStartDependencies {} + +export class KibanaUtilsPublicPlugin + implements + Plugin< + KibanaUtilsPublicSetup, + KibanaUtilsPublicStart, + KibanaUtilsPublicSetupDependencies, + KibanaUtilsPublicStartDependencies + > +{ private readonly version: string; constructor(initializerContext: PluginInitializerContext) { this.version = initializerContext.env.packageInfo.version; } - public setup(core: CoreSetup): KibanaUtilsSetup { + public setup(_core: CoreSetup): KibanaUtilsPublicSetup { return { setVersion: this.setVersion, }; } - public start(core: CoreStart): KibanaUtilsStart { + public start(_core: CoreStart): KibanaUtilsPublicStart { return undefined; } diff --git a/src/plugins/navigation/public/index.ts b/src/plugins/navigation/public/index.ts index 65b8851a39ac..a68f8f2bbcdb 100644 --- a/src/plugins/navigation/public/index.ts +++ b/src/plugins/navigation/public/index.ts @@ -16,7 +16,10 @@ export function plugin(initializerContext: PluginInitializerContext) { export type { TopNavMenuData, TopNavMenuProps, TopNavMenuBadgeProps } from './top_nav_menu'; export { TopNavMenu, TopNavMenuItems, TopNavMenuBadges } from './top_nav_menu'; -export type { NavigationPublicPluginSetup, NavigationPublicPluginStart } from './types'; +export type { + NavigationPublicSetup as NavigationPublicPluginSetup, + NavigationPublicStart as NavigationPublicPluginStart, +} from './types'; // Export plugin after all other imports import { NavigationPublicPlugin } from './plugin'; diff --git a/src/plugins/navigation/public/plugin.ts b/src/plugins/navigation/public/plugin.ts index 3be546918cdc..58e21e4a99f1 100644 --- a/src/plugins/navigation/public/plugin.ts +++ b/src/plugins/navigation/public/plugin.ts @@ -9,22 +9,29 @@ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import { - NavigationPublicPluginSetup, - NavigationPublicPluginStart, - NavigationPluginStartDependencies, + NavigationPublicSetup, + NavigationPublicStart, + NavigationPublicSetupDependencies, + NavigationPublicStartDependencies, } from './types'; import { TopNavMenuExtensionsRegistry, createTopNav } from './top_nav_menu'; import { RegisteredTopNavMenuData } from './top_nav_menu/top_nav_menu_data'; export class NavigationPublicPlugin - implements Plugin + implements + Plugin< + NavigationPublicSetup, + NavigationPublicStart, + NavigationPublicSetupDependencies, + NavigationPublicStartDependencies + > { private readonly topNavMenuExtensionsRegistry: TopNavMenuExtensionsRegistry = new TopNavMenuExtensionsRegistry(); - constructor(initializerContext: PluginInitializerContext) {} + constructor(_initializerContext: PluginInitializerContext) {} - public setup(core: CoreSetup): NavigationPublicPluginSetup { + public setup(_core: CoreSetup): NavigationPublicSetup { return { registerMenuItem: this.topNavMenuExtensionsRegistry.register.bind( this.topNavMenuExtensionsRegistry @@ -33,9 +40,9 @@ export class NavigationPublicPlugin } public start( - core: CoreStart, - { unifiedSearch }: NavigationPluginStartDependencies - ): NavigationPublicPluginStart { + _core: CoreStart, + { unifiedSearch }: NavigationPublicStartDependencies + ): NavigationPublicStart { const extensions = this.topNavMenuExtensionsRegistry.getAll(); /* diff --git a/src/plugins/navigation/public/types.ts b/src/plugins/navigation/public/types.ts index 8958aa91d5ff..9dea8415ca87 100644 --- a/src/plugins/navigation/public/types.ts +++ b/src/plugins/navigation/public/types.ts @@ -11,11 +11,11 @@ import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/publi import { TopNavMenuProps, TopNavMenuExtensionsRegistrySetup, createTopNav } from './top_nav_menu'; import { RegisteredTopNavMenuData } from './top_nav_menu/top_nav_menu_data'; -export interface NavigationPublicPluginSetup { +export interface NavigationPublicSetup { registerMenuItem: TopNavMenuExtensionsRegistrySetup['register']; } -export interface NavigationPublicPluginStart { +export interface NavigationPublicStart { ui: { TopNavMenu: (props: TopNavMenuProps) => React.ReactElement; AggregateQueryTopNavMenu: (props: TopNavMenuProps) => React.ReactElement; @@ -26,6 +26,9 @@ export interface NavigationPublicPluginStart { }; } -export interface NavigationPluginStartDependencies { +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface NavigationPublicSetupDependencies {} + +export interface NavigationPublicStartDependencies { unifiedSearch: UnifiedSearchPublicPluginStart; } diff --git a/src/plugins/no_data_page/public/index.ts b/src/plugins/no_data_page/public/index.ts index 28dfcd604440..4d6c72c34ef8 100644 --- a/src/plugins/no_data_page/public/index.ts +++ b/src/plugins/no_data_page/public/index.ts @@ -13,4 +13,7 @@ export function plugin(ctx: PluginInitializerContext) { return new NoDataPagePlugin(ctx); } -export type { NoDataPagePluginSetup, NoDataPagePluginStart } from './types'; +export type { + NoDataPagePublicSetup as NoDataPagePluginSetup, + NoDataPagePublicStart as NoDataPagePluginStart, +} from './types'; diff --git a/src/plugins/no_data_page/public/plugin.ts b/src/plugins/no_data_page/public/plugin.ts index 740f796f4f39..a9f5dd0fe1f9 100644 --- a/src/plugins/no_data_page/public/plugin.ts +++ b/src/plugins/no_data_page/public/plugin.ts @@ -7,13 +7,26 @@ */ import type { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public'; -import type { NoDataPagePluginSetup, NoDataPagePluginStart } from './types'; +import type { + NoDataPagePublicSetup, + NoDataPagePublicSetupDependencies, + NoDataPagePublicStart, + NoDataPagePublicStartDependencies, +} from './types'; import type { NoDataPageConfig } from '../config'; -export class NoDataPagePlugin implements Plugin { +export class NoDataPagePlugin + implements + Plugin< + NoDataPagePublicSetup, + NoDataPagePublicStart, + NoDataPagePublicSetupDependencies, + NoDataPagePublicStartDependencies + > +{ constructor(private initializerContext: PluginInitializerContext) {} - public setup(core: CoreSetup): NoDataPagePluginSetup { + public setup(_core: CoreSetup): NoDataPagePublicSetup { return { getAnalyticsNoDataPageFlavor: () => { return this.initializerContext.config.get().analyticsNoDataPageFlavor; @@ -21,7 +34,7 @@ export class NoDataPagePlugin implements Plugin { }; } - public start(core: CoreStart): NoDataPagePluginStart { + public start(_core: CoreStart): NoDataPagePublicStart { return { getAnalyticsNoDataPageFlavor: () => { return this.initializerContext.config.get().analyticsNoDataPageFlavor; diff --git a/src/plugins/no_data_page/public/types.ts b/src/plugins/no_data_page/public/types.ts index 2e33170ec06b..43761d946af8 100644 --- a/src/plugins/no_data_page/public/types.ts +++ b/src/plugins/no_data_page/public/types.ts @@ -6,8 +6,14 @@ * Side Public License, v 1. */ -export interface NoDataPagePluginSetup { +export interface NoDataPagePublicSetup { getAnalyticsNoDataPageFlavor: () => 'kibana' | 'serverless_search' | 'serverless_observability'; } -export type NoDataPagePluginStart = NoDataPagePluginSetup; +export type NoDataPagePublicStart = NoDataPagePublicSetup; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface NoDataPagePublicSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface NoDataPagePublicStartDependencies {} diff --git a/src/plugins/presentation_util/public/types.ts b/src/plugins/presentation_util/public/types.ts index 589d4101bdf8..dfc81ad4a0a2 100644 --- a/src/plugins/presentation_util/public/types.ts +++ b/src/plugins/presentation_util/public/types.ts @@ -8,7 +8,7 @@ import { ContentManagementPublicStart } from '@kbn/content-management-plugin/public'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; -import { UiActionsStart } from '@kbn/ui-actions-plugin/public/plugin'; +import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { registerExpressionsLanguage } from '.'; import { PresentationLabsService } from './services/labs/types'; diff --git a/src/plugins/saved_objects_management/public/management_section/object_view/__snapshots__/saved_object_view.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/object_view/__snapshots__/saved_object_view.test.tsx.snap index 538755e8d677..055d065982a7 100644 --- a/src/plugins/saved_objects_management/public/management_section/object_view/__snapshots__/saved_object_view.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/object_view/__snapshots__/saved_object_view.test.tsx.snap @@ -35,6 +35,7 @@ exports[`SavedObjectEdition should render normally 1`] = ` }, }, "theme": Object { + "getTheme": [MockFunction], "theme$": Observable { "_subscribe": [Function], }, diff --git a/src/plugins/saved_search/common/types.ts b/src/plugins/saved_search/common/types.ts index c47548aebd8d..acb98d26a0d1 100644 --- a/src/plugins/saved_search/common/types.ts +++ b/src/plugins/saved_search/common/types.ts @@ -9,13 +9,14 @@ import type { ISearchSource, RefreshInterval, TimeRange } from '@kbn/data-plugin/common'; import type { SavedObjectReference } from '@kbn/core-saved-objects-server'; import type { SavedObjectsResolveResponse } from '@kbn/core/server'; +import type { SerializableRecord } from '@kbn/utility-types'; import { VIEW_MODE } from '.'; -export interface DiscoverGridSettings { +export interface DiscoverGridSettings extends SerializableRecord { columns?: Record; } -export interface DiscoverGridSettingsColumn { +export interface DiscoverGridSettingsColumn extends SerializableRecord { width?: number; } @@ -25,9 +26,7 @@ export interface SavedSearchAttributes { sort: Array<[string, string]>; columns: string[]; description: string; - grid: { - columns?: Record; - }; + grid: DiscoverGridSettings; hideChart: boolean; isTextBasedQuery: boolean; usesAdHocDataView?: boolean; @@ -59,9 +58,7 @@ export interface SavedSearch { columns?: string[]; description?: string; tags?: string[] | undefined; - grid?: { - columns?: Record; - }; + grid?: DiscoverGridSettings; hideChart?: boolean; viewMode?: VIEW_MODE; hideAggregatedPreview?: boolean; diff --git a/src/plugins/saved_search/tsconfig.json b/src/plugins/saved_search/tsconfig.json index 7ed2cb4e8211..b1aa1679469e 100644 --- a/src/plugins/saved_search/tsconfig.json +++ b/src/plugins/saved_search/tsconfig.json @@ -31,6 +31,7 @@ "@kbn/discover-utils", "@kbn/logging", "@kbn/core-plugins-server", + "@kbn/utility-types", ], "exclude": [ "target/**/*", diff --git a/src/plugins/screenshot_mode/public/index.ts b/src/plugins/screenshot_mode/public/index.ts index 591ddbfdf49c..9a5b0203fdcd 100644 --- a/src/plugins/screenshot_mode/public/index.ts +++ b/src/plugins/screenshot_mode/public/index.ts @@ -18,4 +18,7 @@ export { KBN_SCREENSHOT_MODE_ENABLED_KEY, } from '../common'; -export type { ScreenshotModePluginSetup, ScreenshotModePluginStart } from './types'; +export type { + ScreenshotModePublicSetup as ScreenshotModePluginSetup, + ScreenshotModePublicStart as ScreenshotModePluginStart, +} from './types'; diff --git a/src/plugins/screenshot_mode/public/mocks.ts b/src/plugins/screenshot_mode/public/mocks.ts index 1d3e226a83b6..4f7157b8ae84 100644 --- a/src/plugins/screenshot_mode/public/mocks.ts +++ b/src/plugins/screenshot_mode/public/mocks.ts @@ -7,14 +7,14 @@ */ import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; -import type { ScreenshotModePluginSetup, ScreenshotModePluginStart } from './types'; +import type { ScreenshotModePublicSetup, ScreenshotModePublicStart } from './types'; export const screenshotModePluginMock = { - createSetupContract: (): DeeplyMockedKeys => ({ + createSetupContract: (): DeeplyMockedKeys => ({ getScreenshotContext: jest.fn(), isScreenshotMode: jest.fn(() => false), }), - createStartContract: (): DeeplyMockedKeys => ({ + createStartContract: (): DeeplyMockedKeys => ({ getScreenshotContext: jest.fn(), isScreenshotMode: jest.fn(() => false), }), diff --git a/src/plugins/screenshot_mode/public/plugin.ts b/src/plugins/screenshot_mode/public/plugin.ts index 2008e46e9b2d..aa55049128a0 100644 --- a/src/plugins/screenshot_mode/public/plugin.ts +++ b/src/plugins/screenshot_mode/public/plugin.ts @@ -8,19 +8,32 @@ import type { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { getScreenshotContext, getScreenshotMode } from '../common'; -import type { ScreenshotModePluginSetup, ScreenshotModePluginStart } from './types'; +import type { + ScreenshotModePublicSetup, + ScreenshotModePublicSetupDependencies, + ScreenshotModePublicStart, + ScreenshotModePublicStartDependencies, +} from './types'; -export class ScreenshotModePlugin implements Plugin { +export class ScreenshotModePlugin + implements + Plugin< + ScreenshotModePublicSetup, + ScreenshotModePublicStart, + ScreenshotModePublicSetupDependencies, + ScreenshotModePublicStartDependencies + > +{ private publicContract = Object.freeze({ getScreenshotContext, isScreenshotMode: () => getScreenshotMode() === true, }); - public setup(core: CoreSetup): ScreenshotModePluginSetup { + public setup(_core: CoreSetup): ScreenshotModePublicSetup { return this.publicContract; } - public start(core: CoreStart): ScreenshotModePluginStart { + public start(_core: CoreStart): ScreenshotModePublicStart { return this.publicContract; } diff --git a/src/plugins/screenshot_mode/public/types.ts b/src/plugins/screenshot_mode/public/types.ts index 9de538bc9f8f..b25a4a0f35dc 100644 --- a/src/plugins/screenshot_mode/public/types.ts +++ b/src/plugins/screenshot_mode/public/types.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -export interface ScreenshotModePluginSetup { +export interface ScreenshotModePublicSetup { /** * Retrieves a value from the screenshotting context. * @param key Context key to get. @@ -22,4 +22,10 @@ export interface ScreenshotModePluginSetup { isScreenshotMode(): boolean; } -export type ScreenshotModePluginStart = ScreenshotModePluginSetup; +export type ScreenshotModePublicStart = ScreenshotModePublicSetup; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ScreenshotModePublicSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ScreenshotModePublicStartDependencies {} diff --git a/src/plugins/screenshot_mode/server/index.ts b/src/plugins/screenshot_mode/server/index.ts index 55dfd3967f4e..cde13072badc 100644 --- a/src/plugins/screenshot_mode/server/index.ts +++ b/src/plugins/screenshot_mode/server/index.ts @@ -14,8 +14,8 @@ export { export type { ScreenshotModeRequestHandlerContext, - ScreenshotModePluginSetup, - ScreenshotModePluginStart, + ScreenshotModeServerSetup as ScreenshotModePluginSetup, + ScreenshotModeServerStart as ScreenshotModePluginStart, } from './types'; export async function plugin() { diff --git a/src/plugins/screenshot_mode/server/plugin.ts b/src/plugins/screenshot_mode/server/plugin.ts index fc900170f7a8..4a2e05ff7874 100644 --- a/src/plugins/screenshot_mode/server/plugin.ts +++ b/src/plugins/screenshot_mode/server/plugin.ts @@ -9,15 +9,23 @@ import type { Plugin, CoreSetup } from '@kbn/core/server'; import type { ScreenshotModeRequestHandlerContext, - ScreenshotModePluginSetup, - ScreenshotModePluginStart, + ScreenshotModeServerSetup, + ScreenshotModeServerStart, + ScreenshotModeServerSetupDependencies, + ScreenshotModeServerStartDependencies, } from './types'; import { isScreenshotMode } from './is_screenshot_mode'; export class ScreenshotModePlugin - implements Plugin + implements + Plugin< + ScreenshotModeServerSetup, + ScreenshotModeServerStart, + ScreenshotModeServerSetupDependencies, + ScreenshotModeServerStartDependencies + > { - public setup(core: CoreSetup): ScreenshotModePluginSetup { + public setup(core: CoreSetup): ScreenshotModeServerSetup { core.http.registerRouteHandlerContext( 'screenshotMode', (ctx, req) => { @@ -39,7 +47,7 @@ export class ScreenshotModePlugin }; } - public start(): ScreenshotModePluginStart { + public start(): ScreenshotModeServerStart { return { isScreenshotMode, }; diff --git a/src/plugins/screenshot_mode/server/types.ts b/src/plugins/screenshot_mode/server/types.ts index 08655d2f0118..15d4afb4ace3 100644 --- a/src/plugins/screenshot_mode/server/types.ts +++ b/src/plugins/screenshot_mode/server/types.ts @@ -8,7 +8,7 @@ import type { CustomRequestHandlerContext, KibanaRequest } from '@kbn/core/server'; -export interface ScreenshotModePluginStart { +export interface ScreenshotModeServerStart { /** * Any context that requires access to the screenshot mode flag but does not have access * to request context {@link ScreenshotModeRequestHandlerContext}, for instance if they are pre-context, @@ -17,7 +17,7 @@ export interface ScreenshotModePluginStart { isScreenshotMode(request: KibanaRequest): boolean; } -export interface ScreenshotModePluginSetup extends ScreenshotModePluginStart { +export interface ScreenshotModeServerSetup extends ScreenshotModeServerStart { /** * Stores a value in the screenshotting context. * @param key Context key to set. @@ -32,6 +32,12 @@ export interface ScreenshotModePluginSetup extends ScreenshotModePluginStart { setScreenshotModeEnabled(): void; } +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ScreenshotModeServerSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ScreenshotModeServerStartDependencies {} + export type ScreenshotModeRequestHandlerContext = CustomRequestHandlerContext<{ screenshotMode: { isScreenshot: boolean; diff --git a/src/plugins/share/public/index.ts b/src/plugins/share/public/index.ts index d33e4110ff3a..d01e7df655f5 100644 --- a/src/plugins/share/public/index.ts +++ b/src/plugins/share/public/index.ts @@ -12,7 +12,10 @@ export { CSV_QUOTE_VALUES_SETTING, CSV_SEPARATOR_SETTING } from '../common/const export type { LocatorDefinition, LocatorPublic, KibanaLocation } from '../common/url_service'; -export type { SharePluginSetup, SharePluginStart } from './plugin'; +export type { + SharePublicSetup as SharePluginSetup, + SharePublicStart as SharePluginStart, +} from './plugin'; export type { ShareContext, diff --git a/src/plugins/share/public/mocks.ts b/src/plugins/share/public/mocks.ts index 7406dbb12f88..f7fd6b8aa073 100644 --- a/src/plugins/share/public/mocks.ts +++ b/src/plugins/share/public/mocks.ts @@ -7,13 +7,13 @@ */ import { SerializableRecord } from '@kbn/utility-types'; -import { SharePluginSetup, SharePluginStart } from '.'; +import { SharePublicSetup, SharePublicStart } from './plugin'; import { LocatorPublic, UrlService } from '../common/url_service'; import { BrowserShortUrlClient } from './url_service/short_urls/short_url_client'; import type { BrowserShortUrlClientFactoryCreateParams } from './url_service/short_urls/short_url_client_factory'; -export type Setup = jest.Mocked; -export type Start = jest.Mocked; +export type Setup = jest.Mocked; +export type Start = jest.Mocked; const url = new UrlService({ navigate: async () => {}, diff --git a/src/plugins/share/public/plugin.ts b/src/plugins/share/public/plugin.ts index 6a04e4cd1b12..41666a692cb9 100644 --- a/src/plugins/share/public/plugin.ts +++ b/src/plugins/share/public/plugin.ts @@ -26,7 +26,7 @@ import { registrations } from './lib/registrations'; import type { BrowserUrlService } from './types'; /** @public */ -export type SharePluginSetup = ShareMenuRegistrySetup & { +export type SharePublicSetup = ShareMenuRegistrySetup & { /** * Utilities to work with URL locators and short URLs. */ @@ -45,7 +45,7 @@ export type SharePluginSetup = ShareMenuRegistrySetup & { }; /** @public */ -export type SharePluginStart = ShareMenuManagerStart & { +export type SharePublicStart = ShareMenuManagerStart & { /** * Utilities to work with URL locators and short URLs. */ @@ -58,7 +58,21 @@ export type SharePluginStart = ShareMenuManagerStart & { navigate(options: RedirectOptions): void; }; -export class SharePlugin implements Plugin { +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SharePublicSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SharePublicStartDependencies {} + +export class SharePlugin + implements + Plugin< + SharePublicSetup, + SharePublicStart, + SharePublicSetupDependencies, + SharePublicStartDependencies + > +{ private readonly shareMenuRegistry = new ShareMenuRegistry(); private readonly shareContextMenu = new ShareMenuManager(); @@ -68,7 +82,7 @@ export class SharePlugin implements Plugin { constructor(private readonly initializerContext: PluginInitializerContext) {} - public setup(core: CoreSetup): SharePluginSetup { + public setup(core: CoreSetup): SharePublicSetup { const { analytics, http } = core; const { basePath } = http; @@ -122,7 +136,7 @@ export class SharePlugin implements Plugin { }; } - public start(core: CoreStart): SharePluginStart { + public start(core: CoreStart): SharePublicStart { const disableEmbed = this.initializerContext.env.packageInfo.buildFlavor === 'serverless'; const sharingContextMenuStart = this.shareContextMenu.start( core, diff --git a/src/plugins/share/server/index.ts b/src/plugins/share/server/index.ts index d38575a3b7cd..3105e5f57282 100644 --- a/src/plugins/share/server/index.ts +++ b/src/plugins/share/server/index.ts @@ -8,7 +8,10 @@ import { PluginInitializerContext } from '@kbn/core/server'; -export type { SharePluginSetup, SharePluginStart } from './plugin'; +export type { + SharePublicSetup as SharePluginSetup, + SharePublicStart as SharePluginStart, +} from './plugin'; export { CSV_QUOTE_VALUES_SETTING, CSV_SEPARATOR_SETTING } from '../common/constants'; diff --git a/src/plugins/share/server/plugin.ts b/src/plugins/share/server/plugin.ts index 437257704501..228a1fc09b1f 100644 --- a/src/plugins/share/server/plugin.ts +++ b/src/plugins/share/server/plugin.ts @@ -21,16 +21,30 @@ import { LegacyShortUrlLocatorDefinition } from '../common/url_service/locators/ import { ShortUrlRedirectLocatorDefinition } from '../common/url_service/locators/short_url_redirect_locator'; /** @public */ -export interface SharePluginSetup { +export interface SharePublicSetup { url: ServerUrlService; } /** @public */ -export interface SharePluginStart { +export interface SharePublicStart { url: ServerUrlService; } -export class SharePlugin implements Plugin { +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SharePublicSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SharePublicStartDependencies {} + +export class SharePlugin + implements + Plugin< + SharePublicSetup, + SharePublicStart, + SharePublicSetupDependencies, + SharePublicStartDependencies + > +{ private url?: ServerUrlService; private version: string; diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index 8c2a7b13d52c..ec17c9b9d1a3 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -10061,6 +10061,12 @@ "description": "Non-default value of setting." } }, + "observability:enableInfrastructureProfilingIntegration": { + "type": "boolean", + "_meta": { + "description": "Non-default value of setting." + } + }, "securitySolution:enableGroupedNav": { "type": "boolean", "_meta": { diff --git a/src/plugins/ui_actions/kibana.jsonc b/src/plugins/ui_actions/kibana.jsonc index 396f5b82faf0..66ccaa6917d0 100644 --- a/src/plugins/ui_actions/kibana.jsonc +++ b/src/plugins/ui_actions/kibana.jsonc @@ -7,9 +7,7 @@ "id": "uiActions", "server": false, "browser": true, - "requiredPlugins": [ - "dataViews" - ], + "requiredPlugins": [], "requiredBundles": [ "kibanaUtils", "kibanaReact" diff --git a/src/plugins/ui_actions/public/index.ts b/src/plugins/ui_actions/public/index.ts index d996b6b4e2cd..37f92d6962d4 100644 --- a/src/plugins/ui_actions/public/index.ts +++ b/src/plugins/ui_actions/public/index.ts @@ -13,7 +13,10 @@ export function plugin(initializerContext: PluginInitializerContext) { return new UiActionsPlugin(initializerContext); } -export type { UiActionsSetup, UiActionsStart } from './plugin'; +export type { + UiActionsPublicSetup as UiActionsSetup, + UiActionsPublicStart as UiActionsStart, +} from './plugin'; export type { UiActionsServiceParams } from './service'; export { UiActionsService } from './service'; export type { Action, ActionDefinition as UiActionsActionDefinition } from './actions'; diff --git a/src/plugins/ui_actions/public/mocks.ts b/src/plugins/ui_actions/public/mocks.ts index 57474bbf6ff3..c184e6e02112 100644 --- a/src/plugins/ui_actions/public/mocks.ts +++ b/src/plugins/ui_actions/public/mocks.ts @@ -8,11 +8,12 @@ import { CoreSetup, CoreStart } from '@kbn/core/public'; import { coreMock } from '@kbn/core/public/mocks'; -import { Action, UiActionsSetup, UiActionsStart } from '.'; +import { Action } from '.'; +import { UiActionsPublicSetup, UiActionsPublicStart } from './plugin'; import { plugin as pluginInitializer } from '.'; -export type Setup = jest.Mocked; -export type Start = jest.Mocked; +export type Setup = jest.Mocked; +export type Start = jest.Mocked; const createSetupContract = (): Setup => { const setupContract: Setup = { diff --git a/src/plugins/ui_actions/public/plugin.ts b/src/plugins/ui_actions/public/plugin.ts index 16060d4bf343..1a0e45612c83 100644 --- a/src/plugins/ui_actions/public/plugin.ts +++ b/src/plugins/ui_actions/public/plugin.ts @@ -16,7 +16,7 @@ import { import { UiActionsService } from './service'; import { setTheme } from './services'; -export type UiActionsSetup = Pick< +export type UiActionsPublicSetup = Pick< UiActionsService, | 'addTriggerAction' | 'attachAction' @@ -26,14 +26,28 @@ export type UiActionsSetup = Pick< | 'unregisterAction' >; -export type UiActionsStart = PublicMethodsOf; +export type UiActionsPublicStart = PublicMethodsOf; -export class UiActionsPlugin implements Plugin { +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface UiActionsPublicSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface UiActionsPublicStartDependencies {} + +export class UiActionsPlugin + implements + Plugin< + UiActionsPublicSetup, + UiActionsPublicStart, + UiActionsPublicSetupDependencies, + UiActionsPublicStartDependencies + > +{ private readonly service = new UiActionsService(); - constructor(initializerContext: PluginInitializerContext) {} + constructor(_initializerContext: PluginInitializerContext) {} - public setup(core: CoreSetup): UiActionsSetup { + public setup(core: CoreSetup): UiActionsPublicSetup { setTheme(core.theme); this.service.registerTrigger(rowClickTrigger); this.service.registerTrigger(visualizeFieldTrigger); @@ -41,7 +55,7 @@ export class UiActionsPlugin implements Plugin { return this.service; } - public start(core: CoreStart): UiActionsStart { + public start(_core: CoreStart): UiActionsPublicStart { return this.service; } diff --git a/src/plugins/ui_actions_enhanced/server/index.ts b/src/plugins/ui_actions_enhanced/server/index.ts index bb62e2b86a19..51076054e2eb 100644 --- a/src/plugins/ui_actions_enhanced/server/index.ts +++ b/src/plugins/ui_actions_enhanced/server/index.ts @@ -13,8 +13,8 @@ export async function plugin() { export type { AdvancedUiActionsServerPlugin as Plugin, - SetupContract as AdvancedUiActionsSetup, - StartContract as AdvancedUiActionsStart, + UiActionsEnhancedServerSetup as AdvancedUiActionsSetup, + UiActionsEnhancedServerStart as AdvancedUiActionsStart, } from './plugin'; export type { diff --git a/src/plugins/ui_actions_enhanced/server/plugin.ts b/src/plugins/ui_actions_enhanced/server/plugin.ts index 272657ec84f0..8d5c12c4312c 100644 --- a/src/plugins/ui_actions_enhanced/server/plugin.ts +++ b/src/plugins/ui_actions_enhanced/server/plugin.ts @@ -12,24 +12,33 @@ import { EmbeddableSetup } from '@kbn/embeddable-plugin/server'; import { dynamicActionEnhancement } from './dynamic_action_enhancement'; import { ActionFactoryRegistry, SerializedEvent, ActionFactoryDefinition } from './types'; -export interface SetupContract { +export interface UiActionsEnhancedServerSetup { registerActionFactory: (definition: ActionFactoryDefinition) => void; } -export type StartContract = void; +export type UiActionsEnhancedServerStart = void; -interface SetupDependencies { +interface UiActionsEnhancedServerSetupDependencies { embeddable: EmbeddableSetup; // Embeddable are needed because they register basic triggers/actions. } +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface UiActionsEnhancedServerStartDependencies {} + export class AdvancedUiActionsServerPlugin - implements Plugin + implements + Plugin< + UiActionsEnhancedServerSetup, + UiActionsEnhancedServerStart, + UiActionsEnhancedServerSetupDependencies, + UiActionsEnhancedServerStartDependencies + > { protected readonly actionFactories: ActionFactoryRegistry = new Map(); constructor() {} - public setup(core: CoreSetup, { embeddable }: SetupDependencies) { + public setup(_core: CoreSetup, { embeddable }: UiActionsEnhancedServerSetupDependencies) { const getActionFactory = (actionFactoryId: string) => this.actionFactories.get(actionFactoryId); embeddable.registerEnhancement(dynamicActionEnhancement(getActionFactory)); diff --git a/test/functional/apps/dashboard_elements/controls/common/control_group_settings.ts b/test/functional/apps/dashboard_elements/controls/common/control_group_settings.ts index aa3ae89015c5..f4359f9887c5 100644 --- a/test/functional/apps/dashboard_elements/controls/common/control_group_settings.ts +++ b/test/functional/apps/dashboard_elements/controls/common/control_group_settings.ts @@ -6,21 +6,28 @@ * Side Public License, v 1. */ -import { OPTIONS_LIST_CONTROL } from '@kbn/controls-plugin/common'; +import { OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL } from '@kbn/controls-plugin/common'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const testSubjects = getService('testSubjects'); const find = getService('find'); - const { dashboardControls, dashboard } = getPageObjects(['dashboardControls', 'dashboard']); + const queryBar = getService('queryBar'); + const filterBar = getService('filterBar'); + const testSubjects = getService('testSubjects'); + const { dashboardControls, dashboard, timePicker } = getPageObjects([ + 'dashboardControls', + 'dashboard', + 'timePicker', + ]); describe('Dashboard control group settings', () => { before(async () => { await dashboard.navigateToApp(); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); + await timePicker.setDefaultDataRange(); await dashboard.saveDashboard('Test Control Group Settings'); }); @@ -76,6 +83,93 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); + describe('filtering settings', async () => { + let firstOptionsListId: string; + let beforeCount: number; + + let rangeSliderId: string; + let beforeRange: number; + + const getRange = async () => { + await dashboardControls.rangeSliderWaitForLoading(rangeSliderId); + const lower = await dashboardControls.rangeSliderGetLowerBoundAttribute( + rangeSliderId, + 'placeholder' + ); + const upper = await dashboardControls.rangeSliderGetUpperBoundAttribute( + rangeSliderId, + 'placeholder' + ); + return parseInt(upper, 10) - parseInt(lower, 10); + }; + + before(async () => { + await dashboardControls.createControl({ + controlType: RANGE_SLIDER_CONTROL, + dataViewTitle: 'animals-*', + fieldName: 'weightLbs', + }); + await dashboard.clickQuickSave(); + + firstOptionsListId = (await dashboardControls.getAllControlIds())[0]; + await dashboardControls.optionsListWaitForLoading(firstOptionsListId); + await dashboardControls.optionsListOpenPopover(firstOptionsListId); + beforeCount = await dashboardControls.optionsListPopoverGetAvailableOptionsCount(); + + rangeSliderId = (await dashboardControls.getAllControlIds())[2]; + beforeRange = await getRange(); + }); + + describe('do not apply global filters', async () => { + it('- filter pills', async () => { + await filterBar.addFilter({ field: 'animal.keyword', operation: 'is', value: 'cat' }); + await dashboardControls.optionsListOpenPopover(firstOptionsListId); + let afterCount = await dashboardControls.optionsListPopoverGetAvailableOptionsCount(); + expect(afterCount).to.be.lessThan(beforeCount); + await dashboardControls.optionsListEnsurePopoverIsClosed(firstOptionsListId); + + await dashboardControls.updateFilterSyncSetting(false); + await dashboardControls.optionsListOpenPopover(firstOptionsListId); + afterCount = await dashboardControls.optionsListPopoverGetAvailableOptionsCount(); + expect(afterCount).to.be.equal(beforeCount); + + await dashboardControls.optionsListEnsurePopoverIsClosed(firstOptionsListId); + await filterBar.removeAllFilters(); + }); + + it('- query', async () => { + await queryBar.setQuery('weightLbs < 40'); + await queryBar.submitQuery(); + let afterRange = await getRange(); + expect(afterRange).to.be.equal(beforeRange); + await dashboardControls.rangeSliderEnsurePopoverIsClosed(rangeSliderId); + + await dashboardControls.updateFilterSyncSetting(true); + afterRange = await getRange(); + expect(afterRange).to.be.lessThan(beforeRange); + await dashboardControls.rangeSliderEnsurePopoverIsClosed(rangeSliderId); + await queryBar.clearQuery(); + await queryBar.submitQuery(); + }); + }); + + it('do not apply time range', async () => { + await timePicker.setCommonlyUsedTime('Today'); + await dashboardControls.optionsListOpenPopover(firstOptionsListId); + let afterCount = await dashboardControls.optionsListPopoverGetAvailableOptionsCount(); + expect(afterCount).to.be.equal(0); + await dashboardControls.optionsListEnsurePopoverIsClosed(firstOptionsListId); + + await dashboardControls.updateTimeRangeSyncSetting(false); + await dashboardControls.optionsListOpenPopover(firstOptionsListId); + afterCount = await dashboardControls.optionsListPopoverGetAvailableOptionsCount(); + expect(afterCount).to.be.equal(beforeCount); + await dashboardControls.optionsListEnsurePopoverIsClosed(firstOptionsListId); + await timePicker.setDefaultDataRange(); + await dashboardControls.updateTimeRangeSyncSetting(true); + }); + }); + describe('flyout only show settings that are relevant', async () => { before(async () => { await dashboard.switchToEditMode(); diff --git a/test/functional/apps/dashboard_elements/controls/common/range_slider.ts b/test/functional/apps/dashboard_elements/controls/common/range_slider.ts index 17a1873ed098..e08806653325 100644 --- a/test/functional/apps/dashboard_elements/controls/common/range_slider.ts +++ b/test/functional/apps/dashboard_elements/controls/common/range_slider.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { RANGE_SLIDER_CONTROL } from '@kbn/controls-plugin/common'; +import { OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL } from '@kbn/controls-plugin/common'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; @@ -112,6 +112,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const secondId = (await dashboardControls.getAllControlIds())[1]; const newTitle = 'Average ticket price'; await dashboardControls.editExistingControl(secondId); + await dashboardControls.controlsEditorVerifySupportedControlTypes({ + supportedTypes: [OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL], + selectedType: RANGE_SLIDER_CONTROL, + }); await dashboardControls.controlEditorSetTitle(newTitle); await dashboardControls.controlEditorSetWidth('large'); await dashboardControls.controlEditorSave(); @@ -128,7 +132,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await saveButton.isEnabled()).to.be(true); await dashboardControls.controlsEditorSetDataView('kibana_sample_data_flights'); expect(await saveButton.isEnabled()).to.be(false); - await dashboardControls.controlsEditorSetfield('dayOfWeek', RANGE_SLIDER_CONTROL); + await dashboardControls.controlsEditorSetfield('dayOfWeek'); + await dashboardControls.controlsEditorSetControlType(RANGE_SLIDER_CONTROL); await dashboardControls.controlEditorSave(); await dashboardControls.rangeSliderWaitForLoading(firstId); await dashboardControls.validateRange('placeholder', firstId, '0', '6'); diff --git a/test/functional/apps/dashboard_elements/controls/common/replace_controls.ts b/test/functional/apps/dashboard_elements/controls/common/replace_controls.ts index d3019a34b880..974f5e942d42 100644 --- a/test/functional/apps/dashboard_elements/controls/common/replace_controls.ts +++ b/test/functional/apps/dashboard_elements/controls/common/replace_controls.ts @@ -26,9 +26,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const DASHBOARD_NAME = 'Test Replace Controls'; - const changeFieldType = async (controlId: string, newField: string, expectedType?: string) => { + const changeFieldType = async (controlId: string, newField: string, type: string) => { await dashboardControls.editExistingControl(controlId); - await dashboardControls.controlsEditorSetfield(newField, expectedType); + await dashboardControls.controlsEditorSetfield(newField); + await dashboardControls.controlsEditorSetControlType(type); await dashboardControls.controlEditorSave(); }; diff --git a/test/functional/apps/dashboard_elements/controls/options_list/options_list_allow_expensive_queries_off.ts b/test/functional/apps/dashboard_elements/controls/options_list/options_list_allow_expensive_queries_off.ts index 91774aee02f2..344143f7a0cc 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list/options_list_allow_expensive_queries_off.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list/options_list_allow_expensive_queries_off.ts @@ -69,9 +69,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - it('Can search options list for available options', async () => { + it('Can search options list for available options - exact match, case insensitive', async () => { await dashboardControls.optionsListOpenPopover(controlId); - await dashboardControls.optionsListPopoverSearchForOption('meo'); + await dashboardControls.optionsListPopoverSearchForOption('mEOw'); await dashboardControls.ensureAvailableOptionsEqual( controlId, { @@ -84,9 +84,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); }); - it('Can search options list for available options - case sensitive', async () => { + it('Can search options list for available options - does not find partial match', async () => { await dashboardControls.optionsListOpenPopover(controlId); - await dashboardControls.optionsListPopoverSearchForOption('MEO'); + await dashboardControls.optionsListPopoverSearchForOption('meo'); const cardinality = await dashboardControls.optionsListPopoverGetAvailableOptionsCount(); expect(cardinality).to.be(0); await dashboardControls.optionsListPopoverClearSearch(); diff --git a/test/functional/apps/dashboard_elements/controls/options_list/options_list_creation_and_editing.ts b/test/functional/apps/dashboard_elements/controls/options_list/options_list_creation_and_editing.ts index 06dcfb6961f8..a19d5bfee82b 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list/options_list_creation_and_editing.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list/options_list_creation_and_editing.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { OPTIONS_LIST_CONTROL } from '@kbn/controls-plugin/common'; +import { OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL } from '@kbn/controls-plugin/common'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; @@ -106,7 +106,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await saveButton.isEnabled()).to.be(true); await dashboardControls.controlsEditorSetDataView('animals-*'); expect(await saveButton.isEnabled()).to.be(false); - await dashboardControls.controlsEditorSetfield('animal.keyword', OPTIONS_LIST_CONTROL); + await dashboardControls.controlsEditorSetfield('animal.keyword'); + await dashboardControls.controlsEditorSetControlType(OPTIONS_LIST_CONTROL); await dashboardControls.controlEditorSave(); const selectionString = await dashboardControls.optionsListGetSelectionsString(firstId); @@ -141,6 +142,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboard.clearUnsavedChanges(); }); + it('can change an existing control to a number field', async () => { + const firstId = (await dashboardControls.getAllControlIds())[0]; + await dashboardControls.editExistingControl(firstId); + await dashboardControls.controlsEditorSetfield('weightLbs'); + await dashboardControls.controlsEditorVerifySupportedControlTypes({ + supportedTypes: [OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL], + selectedType: OPTIONS_LIST_CONTROL, + }); + await dashboardControls.controlEditorSave(); + }); + it('deletes an existing control', async () => { const firstId = (await dashboardControls.getAllControlIds())[0]; diff --git a/test/functional/apps/dashboard_elements/controls/options_list/options_list_suggestions.ts b/test/functional/apps/dashboard_elements/controls/options_list/options_list_suggestions.ts index b6c27ece900a..0b2dda536d41 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list/options_list_suggestions.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list/options_list_suggestions.ts @@ -7,9 +7,10 @@ */ import { OPTIONS_LIST_CONTROL } from '@kbn/controls-plugin/common'; +import expect from '@kbn/expect'; -import { OPTIONS_LIST_ANIMAL_SOUND_SUGGESTIONS } from '../../../../page_objects/dashboard_page_controls'; import { FtrProviderContext } from '../../../../ftr_provider_context'; +import { OPTIONS_LIST_ANIMAL_SOUND_SUGGESTIONS } from '../../../../page_objects/dashboard_page_controls'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); @@ -143,42 +144,57 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardControls.optionsListPopoverClearSearch(); await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); }); - }); - it('wildcard searching causes unsaved changes', async () => { - await dashboardControls.editExistingControl(controlId); - await dashboardControls.optionsListSetAdditionalSettings({ searchTechnique: 'wildcard' }); - await dashboardControls.controlEditorSave(); - await testSubjects.existOrFail('dashboardUnsavedChangesBadge'); - }); + it('wildcard searching causes unsaved changes', async () => { + await dashboardControls.editExistingControl(controlId); + await dashboardControls.optionsListSetAdditionalSettings({ searchTechnique: 'wildcard' }); + await dashboardControls.controlEditorSave(); + await testSubjects.existOrFail('dashboardUnsavedChangesBadge'); + }); - it('wildcard searching works as expected', async () => { - await dashboardControls.optionsListOpenPopover(controlId); - await dashboardControls.optionsListPopoverSearchForOption('r'); - const containsR = Object.entries(OPTIONS_LIST_ANIMAL_SOUND_SUGGESTIONS).reduce( - (result, [key, docCount]) => { - if (key.includes('r')) return { ...result, [key]: docCount }; - return { ...result }; - }, - {} - ); - await dashboardControls.ensureAvailableOptionsEqual( - controlId, - { - suggestions: containsR, - invalidSelections: [], - }, - true - ); - await dashboardControls.optionsListPopoverClearSearch(); - await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); - }); + it('wildcard searching works as expected', async () => { + await dashboardControls.optionsListOpenPopover(controlId); + await dashboardControls.optionsListPopoverSearchForOption('r'); + const containsR = Object.entries(OPTIONS_LIST_ANIMAL_SOUND_SUGGESTIONS).reduce( + (result, [key, docCount]) => { + if (key.includes('r')) return { ...result, [key]: docCount }; + return { ...result }; + }, + {} + ); + await dashboardControls.ensureAvailableOptionsEqual( + controlId, + { + suggestions: containsR, + invalidSelections: [], + }, + true + ); + await dashboardControls.optionsListPopoverClearSearch(); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); + }); + + it('exact match searching works as expected', async () => { + await dashboardControls.editExistingControl(controlId); + await dashboardControls.optionsListSetAdditionalSettings({ searchTechnique: 'exact' }); + await dashboardControls.controlEditorSave(); - it('returning to default search technqiue should remove unsaved changes', async () => { - await dashboardControls.editExistingControl(controlId); - await dashboardControls.optionsListSetAdditionalSettings({ searchTechnique: 'prefix' }); - await dashboardControls.controlEditorSave(); - await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); + await dashboardControls.optionsListOpenPopover(controlId); + await dashboardControls.optionsListPopoverSearchForOption('R'); + expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.be(0); + await dashboardControls.optionsListPopoverSearchForOption('RuFf'); + expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.be(1); + + await dashboardControls.optionsListPopoverClearSearch(); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); + }); + + it('returning to default search technique should remove unsaved changes', async () => { + await dashboardControls.editExistingControl(controlId); + await dashboardControls.optionsListSetAdditionalSettings({ searchTechnique: 'prefix' }); + await dashboardControls.controlEditorSave(); + await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); + }); }); }); } diff --git a/test/functional/apps/discover/group1/_discover_histogram.ts b/test/functional/apps/discover/group1/_discover_histogram.ts index 43f39b417864..bdaf14fca96e 100644 --- a/test/functional/apps/discover/group1/_discover_histogram.ts +++ b/test/functional/apps/discover/group1/_discover_histogram.ts @@ -33,7 +33,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const queryBar = getService('queryBar'); - describe('discover histogram', function describeIndexTests() { + // FLAKY: https://github.com/elastic/kibana/issues/173586 + describe.skip('discover histogram', function describeIndexTests() { before(async () => { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await esArchiver.load('test/functional/fixtures/es_archiver/long_window_logstash'); diff --git a/test/functional/apps/management/data_views/_data_view_create_delete.ts b/test/functional/apps/management/data_views/_data_view_create_delete.ts index e3bc2240887a..245ac88606b5 100644 --- a/test/functional/apps/management/data_views/_data_view_create_delete.ts +++ b/test/functional/apps/management/data_views/_data_view_create_delete.ts @@ -187,7 +187,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('index pattern edit', function () { + // FLAKY: https://github.com/elastic/kibana/issues/173625 + describe.skip('index pattern edit', function () { it('should update field list', async function () { await PageObjects.settings.editIndexPattern( 'kibana_sample_data_flights', diff --git a/test/functional/page_objects/dashboard_page_controls.ts b/test/functional/page_objects/dashboard_page_controls.ts index effac6f9fbdf..af6f3f81563d 100644 --- a/test/functional/page_objects/dashboard_page_controls.ts +++ b/test/functional/page_objects/dashboard_page_controls.ts @@ -6,24 +6,19 @@ * Side Public License, v 1. */ -import expect from '@kbn/expect'; import { + ControlWidth, OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL, - ControlWidth, } from '@kbn/controls-plugin/common'; -import { OptionsListSearchTechnique } from '@kbn/controls-plugin/common/options_list/types'; import { ControlGroupChainingSystem } from '@kbn/controls-plugin/common/control_group/types'; +import { OptionsListSearchTechnique } from '@kbn/controls-plugin/common/options_list/suggestions_searching'; import { OptionsListSortingType } from '@kbn/controls-plugin/common/options_list/suggestions_sorting'; +import expect from '@kbn/expect'; +import { asyncForEach } from '@kbn/std'; -import { WebElementWrapper } from '../services/lib/web_element_wrapper'; import { FtrService } from '../ftr_provider_context'; - -const CONTROL_DISPLAY_NAMES: { [key: string]: string } = { - default: 'No field selected yet', - [OPTIONS_LIST_CONTROL]: 'Options list', - [RANGE_SLIDER_CONTROL]: 'Range slider', -}; +import { WebElementWrapper } from '../services/lib/web_element_wrapper'; interface OptionsListAdditionalSettings { searchTechnique?: OptionsListSearchTechnique; @@ -112,7 +107,14 @@ export class DashboardPageControls extends FtrService { await this.retry.try(async () => { await this.testSubjects.existOrFail('control-editor-flyout'); }); - await this.controlEditorVerifyType('default'); + + /** All control type options should be disabled until a field is selected */ + const controlTypeOptions = await this.find.allByCssSelector( + '[data-test-subj="controlTypeMenu"] > li > button' + ); + await asyncForEach(controlTypeOptions, async (controlTypeOption) => { + expect(await controlTypeOption.isEnabled()).to.be(false); + }); } /* ----------------------------------------------------------- @@ -183,48 +185,20 @@ export class DashboardPageControls extends FtrService { await this.testSubjects.click('control-group-editor-save'); } - public async updateAllQuerySyncSettings(querySync: boolean) { - this.log.debug(`Update all control group query sync settings to ${querySync}`); + public async updateFilterSyncSetting(querySync: boolean) { + this.log.debug(`Update filter sync setting to ${querySync}`); await this.openControlGroupSettingsFlyout(); - await this.setSwitchState(querySync, 'control-group-query-sync'); + await this.setSwitchState(querySync, 'control-group-filter-sync'); await this.testSubjects.click('control-group-editor-save'); } - public async ensureAdvancedQuerySyncIsOpened() { - const advancedAccordion = await this.testSubjects.find(`control-group-query-sync-advanced`); - const opened = await advancedAccordion.elementHasClass('euiAccordion-isOpen'); - if (!opened) { - await this.testSubjects.click(`control-group-query-sync-advanced`); - await this.retry.try(async () => { - expect(await advancedAccordion.elementHasClass('euiAccordion-isOpen')).to.be(true); - }); - } - } - - public async updateSyncTimeRangeAdvancedSetting(syncTimeRange: boolean) { - this.log.debug(`Update filter sync advanced setting to ${syncTimeRange}`); + public async updateTimeRangeSyncSetting(syncTimeRange: boolean) { + this.log.debug(`Update time range sync setting to ${syncTimeRange}`); await this.openControlGroupSettingsFlyout(); - await this.ensureAdvancedQuerySyncIsOpened(); await this.setSwitchState(syncTimeRange, 'control-group-query-sync-time-range'); await this.testSubjects.click('control-group-editor-save'); } - public async updateSyncQueryAdvancedSetting(syncQuery: boolean) { - this.log.debug(`Update filter sync advanced setting to ${syncQuery}`); - await this.openControlGroupSettingsFlyout(); - await this.ensureAdvancedQuerySyncIsOpened(); - await this.setSwitchState(syncQuery, 'control-group-query-sync-query'); - await this.testSubjects.click('control-group-editor-save'); - } - - public async updateSyncFilterAdvancedSetting(syncFilters: boolean) { - this.log.debug(`Update filter sync advanced setting to ${syncFilters}`); - await this.openControlGroupSettingsFlyout(); - await this.ensureAdvancedQuerySyncIsOpened(); - await this.setSwitchState(syncFilters, 'control-group-query-sync-filters'); - await this.testSubjects.click('control-group-editor-save'); - } - /* ----------------------------------------------------------- Individual controls functions ----------------------------------------------------------- */ @@ -270,7 +244,10 @@ export class DashboardPageControls extends FtrService { await this.openCreateControlFlyout(); if (dataViewTitle) await this.controlsEditorSetDataView(dataViewTitle); - if (fieldName) await this.controlsEditorSetfield(fieldName, controlType); + if (fieldName) { + await this.controlsEditorSetfield(fieldName); + await this.controlsEditorSetControlType(controlType); + } if (title) await this.controlEditorSetTitle(title); if (width) await this.controlEditorSetWidth(width); if (grow !== undefined) await this.controlEditorSetGrow(grow); @@ -387,10 +364,11 @@ export class DashboardPageControls extends FtrService { public async optionsListOpenPopover(controlId: string) { this.log.debug(`Opening popover for Options List: ${controlId}`); - - await this.testSubjects.click(`optionsList-control-${controlId}`); await this.retry.try(async () => { - await this.testSubjects.existOrFail(`optionsList-control-popover`); + await this.testSubjects.click(`optionsList-control-${controlId}`); + await this.retry.waitForWithTimeout('popover to open', 500, async () => { + return await this.testSubjects.exists(`optionsList-control-popover`); + }); }); } @@ -601,11 +579,7 @@ export class DashboardPageControls extends FtrService { await this.testSubjects.click(`data-view-picker-${dataViewTitle}`); } - public async controlsEditorSetfield( - fieldName: string, - expectedType?: string, - shouldSearch: boolean = true - ) { + public async controlsEditorSetfield(fieldName: string, shouldSearch: boolean = true) { this.log.debug(`Setting control field to ${fieldName}`); if (shouldSearch) { await this.testSubjects.setValue('field-search-input', fieldName); @@ -614,13 +588,31 @@ export class DashboardPageControls extends FtrService { await this.testSubjects.existOrFail(`field-picker-select-${fieldName}`); }); await this.testSubjects.click(`field-picker-select-${fieldName}`); - if (expectedType) await this.controlEditorVerifyType(expectedType); } - public async controlEditorVerifyType(type: string) { - this.log.debug(`Verifying that the control editor picked the type ${type}`); - const autoSelectedType = await this.testSubjects.getVisibleText('control-editor-type'); - expect(autoSelectedType).to.equal(CONTROL_DISPLAY_NAMES[type]); + public async controlsEditorVerifySupportedControlTypes({ + supportedTypes, + selectedType = OPTIONS_LIST_CONTROL, + }: { + supportedTypes: string[]; + selectedType?: string; + }) { + this.log.debug(`Verifying that control types match what is expected for the selected field`); + asyncForEach(supportedTypes, async (type) => { + const controlTypeItem = await this.testSubjects.find(`create__${type}`); + expect(await controlTypeItem.isEnabled()).to.be(true); + if (type === selectedType) { + expect(await controlTypeItem.getAttribute('aria-pressed')).to.be('true'); + } + }); + } + + public async controlsEditorSetControlType(type: string) { + this.log.debug(`Setting control type to ${type}`); + const controlTypeItem = await this.testSubjects.find(`create__${type}`); + expect(await controlTypeItem.isEnabled()).to.be(true); + await controlTypeItem.click(); + expect(await controlTypeItem.getAttribute('aria-pressed')).to.be('true'); } // Options List editor functions diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.test.tsx index a4dd40e4f1c4..ebb5afe2f12a 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.test.tsx @@ -133,6 +133,28 @@ describe('API tests', () => { ); }); + it('calls the actions connector api with invoke when assistantStreamingEnabled is true when assistantLangChain is false and alerts is true', async () => { + const testProps: FetchConnectorExecuteAction = { + ...fetchConnectorArgs, + assistantLangChain: false, + alerts: true, + }; + + await fetchConnectorExecuteAction(testProps); + + expect(mockHttp.fetch).toHaveBeenCalledWith( + '/internal/elastic_assistant/actions/connector/foo/_execute', + { + body: '{"params":{"subActionParams":{"model":"gpt-4","messages":[{"role":"user","content":"This is a test"}],"n":1,"stop":null,"temperature":0.2},"subAction":"invokeAI"},"assistantLangChain":false}', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + signal: undefined, + } + ); + }); + it('returns API_ERROR when the response status is error and langchain is on', async () => { (mockHttp.fetch as jest.Mock).mockResolvedValue({ status: 'error' }); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.tsx index 9b1d3d74035f..c2bdd4806a99 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/api.tsx @@ -84,7 +84,7 @@ export const fetchConnectorExecuteAction = async ({ // tracked here: https://github.com/elastic/security-team/issues/7363 // In part 3 I will make enhancements to langchain to introduce streaming // Once implemented, invokeAI can be removed - const isStream = assistantStreamingEnabled && !assistantLangChain; + const isStream = assistantStreamingEnabled && !assistantLangChain && !alerts; const optionalRequestParams = getOptionalRequestParams({ alerts, alertsIndexPattern, diff --git a/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx b/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx index bf50eec3afb9..701050302da2 100644 --- a/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx +++ b/x-pack/plugins/apm/public/components/app/error_group_details/error_sampler/error_sample_contextual_insight.tsx @@ -7,12 +7,11 @@ import { EuiFlexItem, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { - useObservabilityAIAssistant, - ContextualInsight, type Message, MessageRole, } from '@kbn/observability-ai-assistant-plugin/public'; import React, { useMemo, useState } from 'react'; +import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; import { APMError } from '../../../../../typings/es_schemas/ui/apm_error'; import { Transaction } from '../../../../../typings/es_schemas/ui/transaction'; import { ErrorSampleDetailTabContent } from './error_sample_detail'; @@ -25,7 +24,9 @@ export function ErrorSampleContextualInsight({ error: APMError; transaction?: Transaction; }) { - const aiAssistant = useObservabilityAIAssistant(); + const { + observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, + } = useApmPluginContext(); const [logStacktrace, setLogStacktrace] = useState(''); const [exceptionStacktrace, setExceptionStacktrace] = useState(''); @@ -72,10 +73,10 @@ ${exceptionStacktrace}` ]; }, [error, transaction, logStacktrace, exceptionStacktrace]); - return aiAssistant.isEnabled() && messages ? ( + return ObservabilityAIAssistantContextualInsight && messages ? ( <> - - + {ObservabilityAIAssistantActionMenuItem ? ( + + ) : null} ); } diff --git a/x-pack/plugins/apm/public/components/routing/app_root/index.tsx b/x-pack/plugins/apm/public/components/routing/app_root/index.tsx index 8021fe3c6c88..85df672363ce 100644 --- a/x-pack/plugins/apm/public/components/routing/app_root/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/index.tsx @@ -12,7 +12,6 @@ import { } from '@kbn/kibana-react-plugin/public'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import { Storage } from '@kbn/kibana-utils-plugin/public'; -import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public'; import { HeaderMenuPortal, InspectorContextProvider, @@ -75,48 +74,44 @@ export function ApmAppRoot({ services={{ ...core, ...pluginsStart, storage, ...apmServices }} > - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/x-pack/plugins/apm/public/components/shared/charts/transaction_charts/index.tsx b/x-pack/plugins/apm/public/components/shared/charts/transaction_charts/index.tsx index 3096a8541b84..4d1a8544bb87 100644 --- a/x-pack/plugins/apm/public/components/shared/charts/transaction_charts/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/charts/transaction_charts/index.tsx @@ -24,6 +24,7 @@ import { FailedTransactionRateChart } from '../failed_transaction_rate_chart'; import { TopErrors } from '../../../app/transaction_details/top_errors'; import { useBreakpoints } from '../../../../hooks/use_breakpoints'; import { + isMobileAgentName, isOpenTelemetryAgentName, isRumAgentName, } from '../../../../../common/agent_name'; @@ -55,6 +56,7 @@ export function TransactionCharts({ const { agentName } = useApmServiceContext(); const isOpenTelemetryAgent = isOpenTelemetryAgentName(agentName as AgentName); const isRumAgent = isRumAgentName(agentName as AgentName); + const isMobileAgent = isMobileAgentName(agentName as AgentName); const rowDirection = isLarge ? 'column' : 'row'; const latencyChart = ( @@ -112,7 +114,7 @@ export function TransactionCharts({ {latencyChart} {serviceOverviewThroughputChart} - {coldStartRateOrBreakdownChart} + {!isMobileAgent && coldStartRateOrBreakdownChart} + implements + Plugin< + CustomBrandingPublicSetup, + CustomBrandingPublicStart, + CustomBrandingPublicSetupDependencies, + CustomBrandingPublicStartDependencies + > { - public setup(core: CoreSetup): CustomBrandingPluginSetup { + public setup(): CustomBrandingPublicSetup { return {}; } - public start(core: CoreStart): CustomBrandingPluginStart { + public start(): CustomBrandingPublicStart { return {}; } diff --git a/x-pack/plugins/custom_branding/public/types.ts b/x-pack/plugins/custom_branding/public/types.ts index 398b585a9b99..bb4ff4c85f85 100644 --- a/x-pack/plugins/custom_branding/public/types.ts +++ b/x-pack/plugins/custom_branding/public/types.ts @@ -5,6 +5,13 @@ * 2.0. */ // eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface CustomBrandingPluginSetup {} +export interface CustomBrandingPublicSetup {} + // eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface CustomBrandingPluginStart {} +export interface CustomBrandingPublicStart {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CustomBrandingPublicSetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CustomBrandingPublicStartDependencies {} diff --git a/x-pack/plugins/custom_branding/server/plugin.ts b/x-pack/plugins/custom_branding/server/plugin.ts index c4f88dff41c6..81bab17d432f 100755 --- a/x-pack/plugins/custom_branding/server/plugin.ts +++ b/x-pack/plugins/custom_branding/server/plugin.ts @@ -20,7 +20,12 @@ import { License } from '@kbn/license-api-guard-plugin/server'; import { CustomBranding } from '@kbn/core-custom-branding-common'; import { Subscription } from 'rxjs'; import { PLUGIN } from '../common/constants'; -import { Dependencies } from './types'; +import type { + CustomBrandingServerSetup, + CustomBrandingServerStart, + CustomBrandingServerStartDependencies, + CustomBrandingServerSetupDependencies, +} from './types'; import { registerUiSettings } from './ui_settings'; const settingsKeys: Array = [ @@ -31,7 +36,15 @@ const settingsKeys: Array = [ 'pageTitle', ]; -export class CustomBrandingPlugin implements Plugin { +export class CustomBrandingPlugin + implements + Plugin< + CustomBrandingServerSetup, + CustomBrandingServerStart, + CustomBrandingServerSetupDependencies, + CustomBrandingServerStartDependencies + > +{ private readonly license: License; private readonly logger: Logger; private licensingSubscription?: Subscription; @@ -73,7 +86,7 @@ export class CustomBrandingPlugin implements Plugin { return {}; } - public start(core: CoreStart, { licensing }: Dependencies) { + public start(_core: CoreStart, { licensing }: CustomBrandingServerStartDependencies) { this.logger.debug('customBranding: Started'); this.license.start({ pluginId: PLUGIN.ID, diff --git a/x-pack/plugins/custom_branding/server/types.ts b/x-pack/plugins/custom_branding/server/types.ts index c40f49ef1acb..ca9edfc13b23 100755 --- a/x-pack/plugins/custom_branding/server/types.ts +++ b/x-pack/plugins/custom_branding/server/types.ts @@ -12,7 +12,16 @@ import { import { CustomRequestHandlerContext } from '@kbn/core-http-request-handler-context-server'; import { IRouter } from '@kbn/core/server'; -export interface Dependencies { +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CustomBrandingServerSetup {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CustomBrandingServerStart {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CustomBrandingServerSetupDependencies {} + +export interface CustomBrandingServerStartDependencies { licensing: LicensingPluginStart; } diff --git a/x-pack/plugins/dataset_quality/common/data_streams_stats/data_stream_stat.ts b/x-pack/plugins/dataset_quality/common/data_streams_stats/data_stream_stat.ts index 0f48ae45aac7..6f806be70c25 100644 --- a/x-pack/plugins/dataset_quality/common/data_streams_stats/data_stream_stat.ts +++ b/x-pack/plugins/dataset_quality/common/data_streams_stats/data_stream_stat.ts @@ -20,7 +20,7 @@ export class DataStreamStat { degradedDocs?: number; private constructor(dataStreamStat: DataStreamStat) { - this.rawName = dataStreamStat.name; + this.rawName = dataStreamStat.rawName; this.name = dataStreamStat.name; this.title = dataStreamStat.title ?? dataStreamStat.name; this.namespace = dataStreamStat.namespace; diff --git a/x-pack/plugins/dataset_quality/public/hooks/use_dataset_quality_table.tsx b/x-pack/plugins/dataset_quality/public/hooks/use_dataset_quality_table.tsx index 4bff4f54f0db..c68fb3a47bd1 100644 --- a/x-pack/plugins/dataset_quality/public/hooks/use_dataset_quality_table.tsx +++ b/x-pack/plugins/dataset_quality/public/hooks/use_dataset_quality_table.tsx @@ -20,6 +20,7 @@ type DIRECTION = 'asc' | 'desc'; type SORT_FIELD = keyof DataStreamStat; const sortingOverrides: Partial<{ [key in SORT_FIELD]: SORT_FIELD }> = { + ['title']: 'name', ['size']: 'sizeBytes', }; @@ -77,7 +78,7 @@ export const useDatasetQualityTable = () => { const renderedItems = useMemo(() => { const overridenSortingField = sortingOverrides[sortField] || sortField; const mergedData = data.map((dataStream) => { - const degradedDocs = find(degradedStats, { dataset: dataStream.name }); + const degradedDocs = find(degradedStats, { dataset: dataStream.rawName }); return { ...dataStream, diff --git a/x-pack/plugins/drilldowns/url_drilldown/kibana.jsonc b/x-pack/plugins/drilldowns/url_drilldown/kibana.jsonc index f201cea6502e..a7d0217c4e2e 100644 --- a/x-pack/plugins/drilldowns/url_drilldown/kibana.jsonc +++ b/x-pack/plugins/drilldowns/url_drilldown/kibana.jsonc @@ -9,13 +9,13 @@ "browser": true, "requiredPlugins": [ "embeddable", - "uiActions", "uiActionsEnhanced" ], "requiredBundles": [ "kibanaUtils", "kibanaReact", - "imageEmbeddable" + "imageEmbeddable", + "uiActions" ] } } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_checkable.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_checkable.tsx index d2f5fd7e13fb..d225f8175721 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_checkable.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_checkable.tsx @@ -12,16 +12,16 @@ import { css } from '@emotion/react'; import { EuiBadge, EuiButtonIcon, - EuiCard, EuiContextMenuItem, EuiContextMenuPanel, EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, + EuiPanel, EuiPopover, - EuiSpacer, EuiText, + EuiThemeComputed, EuiTitle, useEuiTheme, } from '@elastic/eui'; @@ -30,7 +30,6 @@ import { i18n } from '@kbn/i18n'; import { BETA_LABEL, NATIVE_LABEL, CONNECTOR_CLIENT_LABEL } from '../../../../shared/constants'; -import './connector_checkable.scss'; import { PlatinumLicensePopover } from '../../shared/platinum_license_popover/platinum_license_popover'; export interface ConnectorCheckableProps { @@ -45,6 +44,22 @@ export interface ConnectorCheckableProps { showNativeBadge: boolean; } +const getCss = ( + euiTheme: EuiThemeComputed, + isDisabled: ConnectorCheckableProps['isDisabled'], + showNativeBadge: ConnectorCheckableProps['showNativeBadge'] +) => { + return css` + ${showNativeBadge && + `box-shadow: 8px 9px 0px -1px ${euiTheme.colors.lightestShade}, + 8px 9px 0px 0px ${euiTheme.colors.lightShade};`} + ${isDisabled && + `background-color: ${euiTheme.colors.lightestShade}; + color: ${euiTheme.colors.disabledText}; + `} + `; +}; + export const ConnectorCheckable: React.FC = ({ isDisabled, documentationUrl, @@ -60,175 +75,176 @@ export const ConnectorCheckable: React.FC = ({ const [isLicensePopoverOpen, setIsLicensePopoverOpen] = useState(false); const [isNativePopoverOpen, setIsNativePopoverOpen] = useState(false); return ( - { - if (isDisabled) return; - onConnectorSelect(showNativeBadge); - }, - } - : {})} - hasBorder + { + if (isDisabled && showNativeBadge) return; + onConnectorSelect(showNativeBadge); + }} id={`checkableCard-${serviceType}`} - css={ - showNativeBadge - ? css` - box-shadow: 8px 9px 0px -1px ${euiTheme.colors.lightestShade}, - 8px 9px 0px 0px ${euiTheme.colors.lightShade}; - ` - : undefined - } - layout="horizontal" + css={getCss(euiTheme, isDisabled, showNativeBadge)} + hasBorder data-telemetry-id={`entSearchContent-connector-selectConnector-${serviceType}-select`} - icon={iconType ? : undefined} - title={ - - - - - {isDisabled ? ( - -

{name}

-
- ) : ( - -

{name}

-
- )} -
- {isDisabled && ( - - + + + {iconType ? : null} + + + + + + + + + {isDisabled ? ( + +

{name}

+
+ ) : ( + +

{name}

+
+ )} +
+ {isDisabled && ( + + { + event.preventDefault(); + event.stopPropagation(); + setIsLicensePopoverOpen(!isLicensePopoverOpen); + }} + /> } - )} - iconType="questionInCircle" - onClick={() => setIsLicensePopoverOpen(!isLicensePopoverOpen)} - /> - } - closePopover={() => setIsLicensePopoverOpen(false)} - isPopoverOpen={isLicensePopoverOpen} - /> + closePopover={() => setIsLicensePopoverOpen(false)} + isPopoverOpen={isLicensePopoverOpen} + /> + + )} +
- )} -
-
- {showNativeBadge && ( - - { - e.stopPropagation(); - e.preventDefault(); - setIsNativePopoverOpen(true); - }} - /> - } - isOpen={isNativePopoverOpen} - closePopover={() => { - setIsNativePopoverOpen(false); - }} - > - { - e.stopPropagation(); - onConnectorSelect(true); - }} - > - {i18n.translate( - 'xpack.enterpriseSearch.connectorCheckable.setupANativeConnectorContextMenuItemLabel', - { defaultMessage: 'Setup a Native Connector' } - )} - , - { - e.stopPropagation(); - onConnectorSelect(false); + {showNativeBadge && ( + + { + e.stopPropagation(); + e.preventDefault(); + setIsNativePopoverOpen(true); + }} + /> + } + isOpen={isNativePopoverOpen} + closePopover={() => { + setIsNativePopoverOpen(false); }} > - {i18n.translate( - 'xpack.enterpriseSearch.connectorCheckable.setupAConnectorClientContextMenuItemLabel', - { defaultMessage: 'Setup a Connector Client' } - )} - , - ]} - /> - - - )} -
- } - > - - - - - - - - {showNativeBadge ? NATIVE_LABEL : CONNECTOR_CLIENT_LABEL} - - + { + e.stopPropagation(); + onConnectorSelect(true); + }} + > + {i18n.translate( + 'xpack.enterpriseSearch.connectorCheckable.setupANativeConnectorContextMenuItemLabel', + { defaultMessage: 'Setup a Native Connector' } + )} + , + { + e.stopPropagation(); + onConnectorSelect(false); + }} + > + {i18n.translate( + 'xpack.enterpriseSearch.connectorCheckable.setupAConnectorClientContextMenuItemLabel', + { defaultMessage: 'Setup a Connector Client' } + )} + , + ]} + /> + + + )} + - {isBeta && ( - - - {BETA_LABEL} - - - )} - {isTechPreview && ( - - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.techPreviewLabel', - { - defaultMessage: 'Tech preview', - } + + + + + + + + {showNativeBadge ? NATIVE_LABEL : CONNECTOR_CLIENT_LABEL} + + + + {isBeta && ( + + + {BETA_LABEL} + + )} - - - - )} + {isTechPreview && ( + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.techPreviewLabel', + { + defaultMessage: 'Tech preview', + } + )} + + + + )} + +
+ {documentationUrl && ( + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.documentationLinkLabel', + { + defaultMessage: 'Documentation', + } + )} + + + + )} +
+
- {documentationUrl && ( - - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.selectConnector.connectorCheckable.documentationLinkLabel', - { - defaultMessage: 'Documentation', - } - )} - - - - )}
-
+ ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_description_badge_popout.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_description_badge_popout.tsx new file mode 100644 index 000000000000..7b1d9bbee5e9 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/connector_description_badge_popout.tsx @@ -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 React, { useState } from 'react'; + +import { + EuiBadge, + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiPanel, + EuiPopover, + EuiText, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import connectorLogo from '../../../../../assets/source_icons/network_drive.svg'; + +const nativePopoverPanels = [ + { + description: i18n.translate( + 'xpack.enterpriseSearch.connectorDescriptionBadge.native.chooseADataSourceLabel', + { defaultMessage: "Choose a data source you'd like to sync" } + ), + icons: [], + id: 'native-choose-source', + }, + { + description: i18n.translate( + 'xpack.enterpriseSearch.connectorDescriptionBadge.native.configureConnectorLabel', + { defaultMessage: 'Configure your connector using our Kibana UI' } + ), + icons: [, ], + id: 'native-configure-connector', + }, +]; + +const connectorClientPopoverPanels = [ + { + description: i18n.translate( + 'xpack.enterpriseSearch.connectorDescriptionBadge.client.chooseADataSourceLabel', + { defaultMessage: "Choose a data source you'd like to sync" } + ), + icons: [], + id: 'client-choose-source', + }, + { + description: i18n.translate( + 'xpack.enterpriseSearch.connectorDescriptionBadge.client.configureConnectorLabel', + { + defaultMessage: + 'Deploy connector code on your own infrastructure by running from source, or using Docker', + } + ), + icons: [ + , + , + , + ], + id: 'client-deploy', + }, + { + description: i18n.translate( + 'xpack.enterpriseSearch.connectorDescriptionBadge.client.enterDetailsLabel', + { + defaultMessage: 'Enter access and connection details for your data source', + } + ), + icons: [ + , + , + , + , + , + ], + id: 'client-configure-connector', + }, +]; + +export interface ConnectorDescriptionBadgeProps { + isNative: boolean; +} + +export const ConnectorDescriptionBadge: React.FC = ({ + isNative, +}) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const panels = isNative ? nativePopoverPanels : connectorClientPopoverPanels; + return ( + setIsPopoverOpen(true)} + onClickAriaLabel={i18n.translate( + 'xpack.enterpriseSearch.selectConnector.badgeOnClick.ariaLabel', + { + defaultMessage: 'Click to open connector explanation popover', + } + )} + > + {isNative + ? i18n.translate('xpack.enterpriseSearch.selectConnector.nativeBadgeLabel', { + defaultMessage: 'Native', + }) + : i18n.translate('xpack.enterpriseSearch.selectConnector.connectorClientBadgeLabel', { + defaultMessage: 'Connector client', + })} + + } + isOpen={isPopoverOpen} + closePopover={() => { + setIsPopoverOpen(false); + }} + > + + + {panels.map((panel) => { + return ( + + + + + {panel.icons.map((icon, index) => ( + + {icon} + + ))} + + + + +

{panel.description}

+
+
+
+
+ ); + })} +
+
+
+ ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/select_connector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/select_connector.tsx index 764d3ac0d824..8c75fa9a4b1b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/select_connector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/select_connector/select_connector.tsx @@ -13,8 +13,8 @@ import { css } from '@emotion/react'; import { useValues } from 'kea'; import { - EuiBadge, EuiButton, + EuiCallOut, EuiFacetButton, EuiFacetGroup, EuiFieldSearch, @@ -32,6 +32,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { CONNECTOR_CLIENTS_TYPE, @@ -55,6 +56,7 @@ import { CONNECTORS } from '../../search_index/connector/constants'; import { baseBreadcrumbs } from '../../search_indices'; import { ConnectorCheckable } from './connector_checkable'; +import { ConnectorDescriptionBadge } from './connector_description_badge_popout'; export type ConnectorFilter = typeof CONNECTOR_NATIVE_TYPE | typeof CONNECTOR_CLIENTS_TYPE; @@ -108,7 +110,12 @@ export const SelectConnector: React.FC = () => { return ( {
- - {i18n.translate('xpack.enterpriseSearch.selectConnector.nativeBadgeLabel', { - defaultMessage: 'Native', - })} - +

@@ -222,7 +225,7 @@ export const SelectConnector: React.FC = () => { 'xpack.enterpriseSearch.selectConnector.p.areAvailableDirectlyWithinLabel', { defaultMessage: - 'Are available directly within Elastic Cloud deployments No additional infrastructure is required You can also convert them as self hosted Connectors client at any moment', + 'Available directly within Elastic Cloud deployments. No additional infrastructure is required. You can also convert native connectors to self-hosted connector clients.', } )}

@@ -248,12 +251,7 @@ export const SelectConnector: React.FC = () => { - - {i18n.translate( - 'xpack.enterpriseSearch.selectConnector.connectorClientBadgeLabel', - { defaultMessage: 'Connector client' } - )} - +

@@ -261,7 +259,7 @@ export const SelectConnector: React.FC = () => { 'xpack.enterpriseSearch.selectConnector.p.deployConnectorsOnYourLabel', { defaultMessage: - 'Deploy connectors on your own infrastructure You can also customize existing Connector clients or build your own using our connector framework', + 'Deploy connectors on your own infrastructure. You can also customize existing connector clients, or build your own using our connector framework.', } )}

@@ -327,6 +325,41 @@ export const SelectConnector: React.FC = () => { ))} + {!hasNativeAccess && useNativeFilter && ( + <> + + +

+ +

+ + + +
+ + )} diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_pipeline.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_pipeline.tsx index 52d4f38b4540..cc318831555a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_pipeline.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/configure_pipeline.tsx @@ -19,7 +19,6 @@ import { EuiTabbedContentTab, EuiTitle, EuiText, - EuiTextColor, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -131,27 +130,15 @@ export const ConfigurePipeline: React.FC = () => { )} - - -
- {i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.addInferencePipelineModal.steps.configure.titleSelectTrainedModel', - { defaultMessage: 'Select a trained ML Model' } - )} -
-
- {formErrors.modelStatus !== undefined && ( - <> - - -

- {formErrors.modelStatus} -

-
- - )} - - + + + ), diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/license_badge.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/license_badge.test.tsx new file mode 100644 index 000000000000..dcb67572783e --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/license_badge.test.tsx @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { shallow } from 'enzyme'; + +import { EuiLink } from '@elastic/eui'; + +import { LicenseBadge, LicenseBadgeProps } from './license_badge'; + +const DEFAULT_PROPS: LicenseBadgeProps = { + licenseType: 'mit', + modelDetailsPageUrl: 'https://my-model.ai', +}; + +describe('LicenseBadge', () => { + it('renders with link if URL is present', () => { + const wrapper = shallow( + + ); + expect(wrapper.find(EuiLink)).toHaveLength(1); + }); + it('renders without link if URL is not present', () => { + const wrapper = shallow(); + expect(wrapper.find(EuiLink)).toHaveLength(0); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/license_badge.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/license_badge.tsx new file mode 100644 index 000000000000..414cbdf3057c --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/license_badge.tsx @@ -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 React from 'react'; + +import { EuiBadge, EuiLink } from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +export interface LicenseBadgeProps { + licenseType: string; + modelDetailsPageUrl?: string; +} + +export const LicenseBadge: React.FC = ({ licenseType, modelDetailsPageUrl }) => { + const licenseLabel = i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelectOption.licenseBadge.label', + { + defaultMessage: 'License: {licenseType}', + values: { + licenseType, + }, + } + ); + + return ( + + {modelDetailsPageUrl ? ( + + {licenseLabel} + + ) : ( +

{licenseLabel}

+ )} +
+ ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts index dd01db93bd68..407f33eb1e2d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/ml_inference_logic.ts @@ -119,7 +119,7 @@ export interface MLInferencePipelineOption { indexFields: string[]; } -interface MLInferenceProcessorsActions { +export interface MLInferenceProcessorsActions { addSelectedFieldsToMapping: (isTextExpansionModelSelected: boolean) => { isTextExpansionModelSelected: boolean; }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.test.tsx index 9bd006f65883..f82c0ffb3b1c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.test.tsx @@ -11,13 +11,23 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiSelectable } from '@elastic/eui'; +import { EuiSelectable, EuiText } from '@elastic/eui'; -import { ModelSelect } from './model_select'; +import { MlModel, MlModelDeploymentState } from '../../../../../../../common/types/ml'; + +import { LicenseBadge } from './license_badge'; +import { + DeployModelButton, + ModelSelect, + NoModelSelected, + SelectedModel, + StartModelButton, +} from './model_select'; const DEFAULT_VALUES = { addInferencePipelineModal: { configuration: {}, + indexName: 'my-index', }, selectableModels: [ { @@ -27,8 +37,23 @@ const DEFAULT_VALUES = { modelId: 'model_2', }, ], - indexName: 'my-index', }; +const DEFAULT_MODEL: MlModel = { + modelId: 'model_1', + type: 'ner', + title: 'Model 1', + description: 'Model 1 description', + licenseType: 'elastic', + modelDetailsPageUrl: 'https://my-model.ai', + deploymentState: MlModelDeploymentState.NotDeployed, + startTime: 0, + targetAllocationCount: 0, + nodeAllocationCount: 0, + threadsPerAllocation: 0, + isPlaceholder: false, + hasStats: false, +}; + const MOCK_ACTIONS = { setInferencePipelineConfiguration: jest.fn(), }; @@ -150,4 +175,74 @@ describe('ModelSelect', () => { }) ); }); + it('renders selected model panel if a model is selected', () => { + setMockValues({ + ...DEFAULT_VALUES, + addInferencePipelineModal: { + configuration: { + ...DEFAULT_VALUES.addInferencePipelineModal.configuration, + modelID: 'model_2', + }, + }, + selectedModel: DEFAULT_MODEL, + }); + + const wrapper = shallow(); + expect(wrapper.find(SelectedModel)).toHaveLength(1); + expect(wrapper.find(NoModelSelected)).toHaveLength(0); + }); + it('renders no model selected panel if no model is selected', () => { + setMockValues(DEFAULT_VALUES); + + const wrapper = shallow(); + expect(wrapper.find(SelectedModel)).toHaveLength(0); + expect(wrapper.find(NoModelSelected)).toHaveLength(1); + }); + + describe('SelectedModel', () => { + it('renders with license badge if present', () => { + const wrapper = shallow(); + expect(wrapper.find(LicenseBadge)).toHaveLength(1); + }); + it('renders without license badge if not present', () => { + const props = { + ...DEFAULT_MODEL, + licenseType: undefined, + }; + + const wrapper = shallow(); + expect(wrapper.find(LicenseBadge)).toHaveLength(0); + }); + it('renders with description if present', () => { + const wrapper = shallow(); + expect(wrapper.find(EuiText)).toHaveLength(1); + }); + it('renders without description if not present', () => { + const props = { + ...DEFAULT_MODEL, + description: undefined, + }; + + const wrapper = shallow(); + expect(wrapper.find(EuiText)).toHaveLength(0); + }); + it('renders deploy button for a model placeholder', () => { + const props = { + ...DEFAULT_MODEL, + isPlaceholder: true, + }; + + const wrapper = shallow(); + expect(wrapper.find(DeployModelButton)).toHaveLength(1); + }); + it('renders start button for a downloaded model', () => { + const props = { + ...DEFAULT_MODEL, + deploymentState: MlModelDeploymentState.NotDeployed, + }; + + const wrapper = shallow(); + expect(wrapper.find(StartModelButton)).toHaveLength(1); + }); + }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.tsx index ac3900b6ed66..6f5fc424aef0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select.tsx @@ -5,31 +5,297 @@ * 2.0. */ -import React from 'react'; +import React, { useState } from 'react'; import { useActions, useValues } from 'kea'; -import { EuiSelectable, useIsWithinMaxBreakpoint } from '@elastic/eui'; +import { + EuiButton, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiLoadingSpinner, + EuiPanel, + EuiScreenReaderLive, + EuiSelectable, + EuiText, + EuiTextColor, + EuiTitle, + useEuiTheme, + useIsWithinMaxBreakpoint, +} from '@elastic/eui'; -import { MlModel } from '../../../../../../../common/types/ml'; -import { IndexNameLogic } from '../../index_name_logic'; -import { IndexViewLogic } from '../../index_view_logic'; +import { i18n } from '@kbn/i18n'; -import { MLInferenceLogic } from './ml_inference_logic'; +import { MlModel, MlModelDeploymentState } from '../../../../../../../common/types/ml'; + +import { LicenseBadge } from './license_badge'; import { ModelSelectLogic } from './model_select_logic'; import { ModelSelectOption, ModelSelectOptionProps } from './model_select_option'; import { normalizeModelName } from './utils'; +export const DeployModelButton: React.FC<{ + onClick: () => void; + modelId: string; + disabled: boolean; +}> = ({ onClick, modelId, disabled }) => { + return ( + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.deployButton.label', + { + defaultMessage: 'Deploy', + } + )} + + ); +}; + +export const ModelDeployingButton: React.FC = () => { + return ( + + + + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.deployingButton.label', + { + defaultMessage: 'Deploying', + } + )} + + + + ); +}; + +export const StartModelButton: React.FC<{ + onClick: () => void; + modelId: string; + disabled: boolean; +}> = ({ onClick, modelId, disabled }) => { + return ( + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.startButton.label', + { + defaultMessage: 'Start', + } + )} + + ); +}; + +export const ModelStartingButton: React.FC = () => { + return ( + + + + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.startingButton.label', + { + defaultMessage: 'Starting', + } + )} + + + + ); +}; + +export const NoModelSelected: React.FC = () => ( + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.noModelSelectedPanel.text', + { defaultMessage: 'Select an available model to add to your inference pipeline' } + )} + + +); + +export const SelectedModel: React.FC = (model) => { + const { createModel, startModel } = useActions(ModelSelectLogic); + const { areActionButtonsDisabled } = useValues(ModelSelectLogic); + + const getSelectedModelAnnouncement = (selectedModel: MlModel) => + selectedModel.isPlaceholder + ? i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.selectedModelNotDeployedAnnouncement', + { + defaultMessage: '{modelId} model selected but not deployed', + values: { + modelId: selectedModel.modelId, + }, + } + ) + : selectedModel.deploymentState === MlModelDeploymentState.NotDeployed + ? i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.selectedModelNotStartedAnnouncement', + { + defaultMessage: '{modelId} model selected but not started', + values: { + modelId: selectedModel.modelId, + }, + } + ) + : i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.selectedModelAnnouncement', + { + defaultMessage: '{modelId} model selected', + values: { + modelId: selectedModel.modelId, + }, + } + ); + + return ( + + {getSelectedModelAnnouncement(model)} + + + + +

{model.title}

+
+
+ + {model.modelId} + + {model.description && ( + + {model.description} + + )} + {model.licenseType && ( + + {/* Wrap in a span to prevent the badge from growing to a whole row on mobile */} + + + + + )} + {(model.isPlaceholder || + [ + MlModelDeploymentState.Downloading, + MlModelDeploymentState.NotDeployed, + MlModelDeploymentState.Starting, + ].includes(model.deploymentState)) && ( + <> + + + + {model.isPlaceholder ? ( + <> + + createModel(model.modelId)} + modelId={model.modelId} + disabled={areActionButtonsDisabled} + /> + + + +

+ + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.modelSelect.modelNotDeployedError', + { defaultMessage: 'Model must be deployed before use.' } + )} + +

+
+
+ + ) : model.deploymentState === MlModelDeploymentState.Downloading ? ( + + + + ) : model.deploymentState === MlModelDeploymentState.NotDeployed ? ( + + startModel(model.modelId)} + modelId={model.modelId} + disabled={areActionButtonsDisabled} + /> + + ) : model.deploymentState === MlModelDeploymentState.Starting ? ( + + + + ) : ( + <> + )} +
+
+ + )} +
+
+
+ ); +}; + export const ModelSelect: React.FC = () => { - const { indexName } = useValues(IndexNameLogic); - const { ingestionMethod } = useValues(IndexViewLogic); const { - addInferencePipelineModal: { configuration }, - } = useValues(MLInferenceLogic); - const { selectableModels, isLoading } = useValues(ModelSelectLogic); - const { setInferencePipelineConfiguration } = useActions(MLInferenceLogic); + addInferencePipelineModal: { configuration, indexName }, + ingestionMethod, + isLoading, + selectableModels, + selectedModel, + } = useValues(ModelSelectLogic); + const { setInferencePipelineConfiguration } = useActions(ModelSelectLogic); + const { euiTheme } = useEuiTheme(); const { modelID, pipelineName, isPipelineNameUserSupplied } = configuration; + const rowHeight = useIsWithinMaxBreakpoint('s') ? euiTheme.base * 8 : euiTheme.base * 6; + const maxVisibleOptions = 4.5; + const [listHeight, setListHeight] = useState(maxVisibleOptions * rowHeight); const getModelSelectOptionProps = (models: MlModel[]): ModelSelectOptionProps[] => (models ?? []).map((model) => ({ @@ -39,44 +305,58 @@ export const ModelSelect: React.FC = () => { })); const onChange = (options: ModelSelectOptionProps[]) => { - const selectedOption = options.find((option) => option.checked === 'on'); + const selectedModelOption = options.find((option) => option.checked === 'on'); + setInferencePipelineConfiguration({ ...configuration, inferenceConfig: undefined, - modelID: selectedOption?.modelId ?? '', - isModelPlaceholderSelected: selectedOption?.isPlaceholder ?? false, + modelID: selectedModelOption?.modelId ?? '', + isModelPlaceholderSelected: selectedModelOption?.isPlaceholder ?? false, fieldMappings: undefined, pipelineName: isPipelineNameUserSupplied ? pipelineName - : indexName + '-' + normalizeModelName(selectedOption?.modelId ?? ''), + : indexName + '-' + normalizeModelName(selectedModelOption?.modelId ?? ''), }); }; + const onSearchChange = (_: string, matchingOptions: ModelSelectOptionProps[]) => { + setListHeight(Math.min(maxVisibleOptions, matchingOptions.length) * rowHeight); + }; + const renderOption = (option: ModelSelectOptionProps) => ; return ( - - {(list, search) => ( - <> - {search} - {list} - - )} - + + + + {(list, search) => ( + <> + {search} + {list} + + )} + + + + {selectedModel ? : } + + ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.ts index 5cfa2148203e..6fe25cd3c8b5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_logic.ts @@ -23,6 +23,13 @@ import { StartModelApiLogic, StartModelApiLogicActions, } from '../../../../api/ml_models/start_model_api_logic'; +import { IndexViewLogic } from '../../index_view_logic'; + +import { + MLInferenceLogic, + MLInferenceProcessorsActions, + MLInferenceProcessorsValues, +} from './ml_inference_logic'; export interface ModelSelectActions { createModel: (modelId: string) => { modelId: string }; @@ -40,18 +47,26 @@ export interface ModelSelectActions { startModelError: CreateModelApiLogicActions['apiError']; startModelMakeRequest: StartModelApiLogicActions['makeRequest']; startModelSuccess: StartModelApiLogicActions['apiSuccess']; + + setInferencePipelineConfiguration: MLInferenceProcessorsActions['setInferencePipelineConfiguration']; + setInferencePipelineConfigurationFromMLInferenceLogic: MLInferenceProcessorsActions['setInferencePipelineConfiguration']; } export interface ModelSelectValues { + addInferencePipelineModal: MLInferenceProcessorsValues['addInferencePipelineModal']; + addInferencePipelineModalFromMLInferenceLogic: MLInferenceProcessorsValues['addInferencePipelineModal']; areActionButtonsDisabled: boolean; createModelError: HttpError | undefined; createModelStatus: Status; + ingestionMethod: string; + ingestionMethodFromIndexViewLogic: string; isLoading: boolean; isInitialLoading: boolean; modelStateChangeError: string | undefined; modelsData: FetchModelsApiResponse | undefined; modelsStatus: Status; selectableModels: MlModel[]; + selectedModel: MlModel | undefined; startModelError: HttpError | undefined; startModelStatus: Status; } @@ -60,22 +75,27 @@ export const ModelSelectLogic = kea ({ modelId }), fetchModels: true, + setInferencePipelineConfiguration: (configuration) => ({ configuration }), startModel: (modelId: string) => ({ modelId }), }, connect: { actions: [ + CachedFetchModelsApiLogic, + [ + 'makeRequest as fetchModelsMakeRequest', + 'apiSuccess as fetchModelsSuccess', + 'apiError as fetchModelsError', + 'startPolling as startPollingModels', + ], CreateModelApiLogic, [ 'makeRequest as createModelMakeRequest', 'apiSuccess as createModelSuccess', 'apiError as createModelError', ], - CachedFetchModelsApiLogic, + MLInferenceLogic, [ - 'makeRequest as fetchModelsMakeRequest', - 'apiSuccess as fetchModelsSuccess', - 'apiError as fetchModelsError', - 'startPolling as startPollingModels', + 'setInferencePipelineConfiguration as setInferencePipelineConfigurationFromMLInferenceLogic', ], StartModelApiLogic, [ @@ -85,10 +105,14 @@ export const ModelSelectLogic = kea { actions.startModelMakeRequest({ modelId }); }, + setInferencePipelineConfiguration: ({ configuration }) => { + actions.setInferencePipelineConfigurationFromMLInferenceLogic(configuration); + }, startModelSuccess: () => { actions.startPollingModels(); }, }), path: ['enterprise_search', 'content', 'model_select_logic'], selectors: ({ selectors }) => ({ + addInferencePipelineModal: [ + () => [selectors.addInferencePipelineModalFromMLInferenceLogic], + (modal) => modal, // Pass-through + ], areActionButtonsDisabled: [ () => [selectors.createModelStatus, selectors.startModelStatus], (createModelStatus: Status, startModelStatus: Status) => createModelStatus === Status.LOADING || startModelStatus === Status.LOADING, ], + ingestionMethod: [ + () => [selectors.ingestionMethodFromIndexViewLogic], + (ingestionMethod) => ingestionMethod, // Pass-through + ], modelStateChangeError: [ () => [selectors.createModelError, selectors.startModelError], (createModelError?: HttpError, startModelError?: HttpError) => { @@ -134,6 +169,13 @@ export const ModelSelectLogic = kea [selectors.modelsData], (response: FetchModelsApiResponse) => response ?? [], ], + selectedModel: [ + () => [selectors.selectableModels, selectors.addInferencePipelineModal], + ( + models: MlModel[], + addInferencePipelineModal: MLInferenceProcessorsValues['addInferencePipelineModal'] + ) => models.find((m) => m.modelId === addInferencePipelineModal.configuration.modelID), + ], isLoading: [() => [selectors.isInitialLoading], (isInitialLoading) => isInitialLoading], }), }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.test.tsx index 806366b7e652..81d022aedfb7 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.test.tsx @@ -11,19 +11,13 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiLink, EuiText } from '@elastic/eui'; +import { EuiText } from '@elastic/eui'; import { MlModelDeploymentState } from '../../../../../../../common/types/ml'; import { TrainedModelHealth } from '../ml_model_health'; -import { - DeployModelButton, - getContextMenuPanel, - LicenseBadge, - ModelSelectOption, - ModelSelectOptionProps, - StartModelButton, -} from './model_select_option'; +import { LicenseBadge } from './license_badge'; +import { ModelSelectOption, ModelSelectOptionProps } from './model_select_option'; const DEFAULT_PROPS: ModelSelectOptionProps = { modelId: 'model_1', @@ -73,49 +67,8 @@ describe('ModelSelectOption', () => { const wrapper = shallow(); expect(wrapper.find(EuiText)).toHaveLength(0); }); - it('renders deploy button for a model placeholder', () => { - const props = { - ...DEFAULT_PROPS, - isPlaceholder: true, - }; - - const wrapper = shallow(); - expect(wrapper.find(DeployModelButton)).toHaveLength(1); - }); - it('renders start button for a downloaded model', () => { - const props = { - ...DEFAULT_PROPS, - deploymentState: MlModelDeploymentState.Downloaded, - }; - - const wrapper = shallow(); - expect(wrapper.find(StartModelButton)).toHaveLength(1); - }); it('renders status badge if there is no action button', () => { const wrapper = shallow(); expect(wrapper.find(TrainedModelHealth)).toHaveLength(1); }); }); - -describe('LicenseBadge', () => { - it('renders with link if URL is present', () => { - const wrapper = shallow( - - ); - expect(wrapper.find(EuiLink)).toHaveLength(1); - }); - it('renders without link if URL is not present', () => { - const wrapper = shallow(); - expect(wrapper.find(EuiLink)).toHaveLength(0); - }); -}); - -describe('getContextMenuPanel', () => { - it('gets model details link if URL is present', () => { - const panels = getContextMenuPanel('https://model.ai'); - expect(panels[0].items).toHaveLength(2); - }); -}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx index ebcf26210db3..ced26293cd68 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx @@ -5,235 +5,68 @@ * 2.0. */ -import React, { useState } from 'react'; - -import { useActions, useValues } from 'kea'; +import React from 'react'; import { - EuiBadge, - EuiButton, - EuiButtonEmpty, - EuiButtonIcon, - EuiContextMenu, - EuiContextMenuPanelDescriptor, EuiFlexGroup, EuiFlexItem, - EuiLink, - EuiPopover, - EuiRadio, EuiText, EuiTextColor, + EuiTextTruncate, EuiTitle, useIsWithinMaxBreakpoint, } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; - -import { MlModel, MlModelDeploymentState } from '../../../../../../../common/types/ml'; -import { KibanaLogic } from '../../../../../shared/kibana'; +import { MlModel } from '../../../../../../../common/types/ml'; import { TrainedModelHealth } from '../ml_model_health'; -import { ModelSelectLogic } from './model_select_logic'; -import { TRAINED_MODELS_PATH } from './utils'; - -export const getContextMenuPanel = ( - modelDetailsPageUrl?: string -): EuiContextMenuPanelDescriptor[] => { - return [ - { - id: 0, - items: [ - { - name: i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.modelSelectOption.actionMenu.tuneModelPerformance.label', - { - defaultMessage: 'Tune model performance', - } - ), - icon: 'controlsHorizontal', - onClick: () => - KibanaLogic.values.navigateToUrl(TRAINED_MODELS_PATH, { - shouldNotCreateHref: true, - }), - }, - ...(modelDetailsPageUrl - ? [ - { - name: i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.modelSelectOption.actionMenu.modelDetails.label', - { - defaultMessage: 'Model details', - } - ), - icon: 'popout', - href: modelDetailsPageUrl, - target: '_blank', - }, - ] - : []), - ], - }, - ]; -}; +import { LicenseBadge } from './license_badge'; export type ModelSelectOptionProps = MlModel & { label: string; checked?: 'on'; }; -export const DeployModelButton: React.FC<{ onClick: () => void; disabled: boolean }> = ({ - onClick, - disabled, -}) => { - return ( - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.modelSelectOption.deployButton.label', - { - defaultMessage: 'Deploy', - } - )} - - ); -}; - -export const StartModelButton: React.FC<{ onClick: () => void; disabled: boolean }> = ({ - onClick, - disabled, -}) => { - return ( - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.modelSelectOption.startButton.label', - { - defaultMessage: 'Start', - } - )} - - ); -}; - -export const ModelMenuPopover: React.FC<{ - onClick: () => void; - closePopover: () => void; - isOpen: boolean; - modelDetailsPageUrl?: string; -}> = ({ onClick, closePopover, isOpen, modelDetailsPageUrl }) => { - return ( - - } - isOpen={isOpen} - closePopover={closePopover} - anchorPosition="leftCenter" - panelPaddingSize="none" - > - - - ); -}; - -export interface LicenseBadgeProps { - licenseType: string; - modelDetailsPageUrl?: string; -} - -export const LicenseBadge: React.FC = ({ licenseType, modelDetailsPageUrl }) => { - const licenseLabel = i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.modelSelectOption.licenseBadge.label', - { - defaultMessage: 'License: {licenseType}', - values: { - licenseType, - }, - } - ); - - return ( - - {modelDetailsPageUrl ? ( - - {licenseLabel} - - ) : ( -

{licenseLabel}

- )} -
- ); -}; - export const ModelSelectOption: React.FC = ({ modelId, title, description, + isPlaceholder, licenseType, - modelDetailsPageUrl, deploymentState, deploymentStateReason, - isPlaceholder, - checked, }) => { - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - const onMenuButtonClick = () => setIsPopoverOpen((isOpen) => !isOpen); - const closePopover = () => setIsPopoverOpen(false); - - const { createModel, startModel } = useActions(ModelSelectLogic); - const { areActionButtonsDisabled } = useValues(ModelSelectLogic); - return ( - {/* Selection radio button */} - - null} - // @ts-ignore - inert - /> - - {/* Title, model ID, description, license */} -

{title}

+

+ +

- {modelId} + + + {(licenseType || description) && ( {licenseType && ( - {/* Wrap in a div to prevent the badge from growing to a whole row on mobile */} -
- -
+ {/* Wrap in a span to prevent the badge from growing to a whole row on mobile */} + + +
)} {description && ( -
- {description} -
+
)} @@ -242,36 +75,15 @@ export const ModelSelectOption: React.FC = ({ )}
- {/* Status indicator OR action button */} - - {/* Wrap in a div to prevent the badge/button from growing to a whole row on mobile */} -
- {isPlaceholder ? ( - createModel(modelId)} - disabled={areActionButtonsDisabled} - /> - ) : deploymentState === MlModelDeploymentState.Downloaded ? ( - startModel(modelId)} - disabled={areActionButtonsDisabled} - /> - ) : ( - - )} -
-
- {/* Actions menu */} - + {/* Wrap in a span to prevent the badge from growing to a whole row on mobile */} + + +
); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_health.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_health.test.tsx index 65bfbc0951d3..c07c2dfc0295 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_health.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_health.test.tsx @@ -34,13 +34,13 @@ describe('TrainedModelHealth', () => { it('renders model downloading', () => { const wrapper = shallow(); const health = wrapper.find(EuiHealth); - expect(health.prop('children')).toEqual('Downloading'); + expect(health.prop('children')).toEqual('Deploying'); expect(health.prop('color')).toEqual('warning'); }); it('renders model downloaded', () => { const wrapper = shallow(); const health = wrapper.find(EuiHealth); - expect(health.prop('children')).toEqual('Downloaded'); + expect(health.prop('children')).toEqual('Deployed'); expect(health.prop('color')).toEqual('subdued'); }); it('renders model started', () => { @@ -68,6 +68,14 @@ describe('TrainedModelHealth', () => { expect(health.prop('children')).toEqual('Not started'); expect(health.prop('color')).toEqual('danger'); }); + it('renders model not downloaded for downloadable models', () => { + const wrapper = shallow( + + ); + const health = wrapper.find(EuiHealth); + expect(health.prop('children')).toEqual('Not deployed'); + expect(health.prop('color')).toEqual('subdued'); + }); it('renders model stopping', () => { const pipeline: InferencePipeline = { ...commonModelData, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_health.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_health.tsx index 133582520deb..329a89f0e462 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_health.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_health.tsx @@ -15,28 +15,40 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { MlModelDeploymentState } from '../../../../../../common/types/ml'; import { TrainedModelState } from '../../../../../../common/types/pipelines'; +const modelNotDownloadedText = i18n.translate( + 'xpack.enterpriseSearch.inferencePipelineCard.modelState.notDownloaded', + { + defaultMessage: 'Not deployed', + } +); +const modelNotDownloadedTooltip = i18n.translate( + 'xpack.enterpriseSearch.inferencePipelineCard.modelState.notDownloaded.tooltip', + { + defaultMessage: 'This trained model can be deployed', + } +); const modelDownloadingText = i18n.translate( 'xpack.enterpriseSearch.inferencePipelineCard.modelState.downloading', { - defaultMessage: 'Downloading', + defaultMessage: 'Deploying', } ); const modelDownloadingTooltip = i18n.translate( 'xpack.enterpriseSearch.inferencePipelineCard.modelState.downloading.tooltip', { - defaultMessage: 'This trained model is downloading', + defaultMessage: 'This trained model is deploying', } ); const modelDownloadedText = i18n.translate( 'xpack.enterpriseSearch.inferencePipelineCard.modelState.downloaded', { - defaultMessage: 'Downloaded', + defaultMessage: 'Deployed', } ); const modelDownloadedTooltip = i18n.translate( 'xpack.enterpriseSearch.inferencePipelineCard.modelState.downloaded.tooltip', { - defaultMessage: 'This trained model is downloaded and can be started', + defaultMessage: 'This trained model is deployed and can be started', } ); const modelStartedText = i18n.translate( @@ -100,11 +112,13 @@ const modelNotDeployedTooltip = i18n.translate( export interface TrainedModelHealthProps { modelState: TrainedModelState | MlModelDeploymentState; modelStateReason?: string; + isDownloadable?: boolean; } export const TrainedModelHealth: React.FC = ({ modelState, modelStateReason, + isDownloadable, }) => { let modelHealth: { healthColor: string; @@ -115,9 +129,9 @@ export const TrainedModelHealth: React.FC = ({ case TrainedModelState.NotDeployed: case MlModelDeploymentState.NotDeployed: modelHealth = { - healthColor: 'danger', - healthText: modelNotDeployedText, - tooltipText: modelNotDeployedTooltip, + healthColor: isDownloadable ? 'subdued' : 'danger', + healthText: isDownloadable ? modelNotDownloadedText : modelNotDeployedText, + tooltipText: isDownloadable ? modelNotDownloadedTooltip : modelNotDeployedTooltip, }; break; case MlModelDeploymentState.Downloading: diff --git a/x-pack/plugins/enterprise_search/server/collectors/connectors/telemetry.test.ts b/x-pack/plugins/enterprise_search/server/collectors/connectors/telemetry.test.ts index 64078cfbb20e..13ec0803ec8f 100644 --- a/x-pack/plugins/enterprise_search/server/collectors/connectors/telemetry.test.ts +++ b/x-pack/plugins/enterprise_search/server/collectors/connectors/telemetry.test.ts @@ -9,6 +9,16 @@ import { createCollectorFetchContextMock } from '@kbn/usage-collection-plugin/se import { registerTelemetryUsageCollector } from './telemetry'; +const indexNotFoundError = { + meta: { + body: { + error: { + type: 'index_not_found_exception', + }, + }, + }, +}; + describe('Connectors Telemetry Usage Collector', () => { const makeUsageCollectorStub = jest.fn(); const registerStub = jest.fn(); @@ -53,5 +63,23 @@ describe('Connectors Telemetry Usage Collector', () => { }, }); }); + it('should return default telemetry on index not found error', async () => { + const fetchContextMock = createCollectorFetchContextMock(); + fetchContextMock.esClient.count = jest + .fn() + .mockImplementation(() => Promise.reject(indexNotFoundError)); + registerTelemetryUsageCollector(usageCollectionMock); + const telemetryMetrics = await makeUsageCollectorStub.mock.calls[0][0].fetch( + fetchContextMock + ); + expect(telemetryMetrics).toEqual({ + native: { + total: 0, + }, + clients: { + total: 0, + }, + }); + }); }); }); diff --git a/x-pack/plugins/enterprise_search/server/collectors/connectors/telemetry.ts b/x-pack/plugins/enterprise_search/server/collectors/connectors/telemetry.ts index d5a61dff0a69..1a4712379b16 100644 --- a/x-pack/plugins/enterprise_search/server/collectors/connectors/telemetry.ts +++ b/x-pack/plugins/enterprise_search/server/collectors/connectors/telemetry.ts @@ -10,6 +10,8 @@ import { ElasticsearchClient } from '@kbn/core/server'; import { CONNECTORS_INDEX } from '@kbn/search-connectors'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; +import { isIndexNotFoundException } from '../../utils/identify_exceptions'; + interface Telemetry { native: { total: number; @@ -19,6 +21,15 @@ interface Telemetry { }; } +const defaultTelemetryMetrics: Telemetry = { + native: { + total: 0, + }, + clients: { + total: 0, + }, +}; + /** * Register the telemetry collector */ @@ -46,53 +57,60 @@ export const registerTelemetryUsageCollector = (usageCollection: UsageCollection * Fetch the aggregated telemetry metrics */ +// @ts-ignore export const fetchTelemetryMetrics = async (client: ElasticsearchClient): Promise => { - const [nativeCountResponse, clientsCountResponse] = await Promise.all([ - client.count({ - index: CONNECTORS_INDEX, - query: { - bool: { - filter: [ - { - term: { - is_native: true, + try { + const [nativeCountResponse, clientsCountResponse] = await Promise.all([ + client.count({ + index: CONNECTORS_INDEX, + query: { + bool: { + filter: [ + { + term: { + is_native: true, + }, }, - }, - ], - must_not: [ - { - term: { - service_type: { - value: 'elastic-crawler', + ], + must_not: [ + { + term: { + service_type: { + value: 'elastic-crawler', + }, }, }, - }, - ], + ], + }, }, - }, - }), - client.count({ - index: CONNECTORS_INDEX, - query: { - bool: { - filter: [ - { - term: { - is_native: false, + }), + client.count({ + index: CONNECTORS_INDEX, + query: { + bool: { + filter: [ + { + term: { + is_native: false, + }, }, - }, - ], + ], + }, }, - }, - }), - ]); + }), + ]); - return { - native: { - total: nativeCountResponse.count, - }, - clients: { - total: clientsCountResponse.count, - }, - } as Telemetry; + return { + native: { + total: nativeCountResponse.count, + }, + clients: { + total: clientsCountResponse.count, + }, + } as Telemetry; + } catch (error) { + if (isIndexNotFoundException(error)) { + return defaultTelemetryMetrics; + } + } }; diff --git a/x-pack/plugins/enterprise_search/server/lib/ml/fetch_ml_models.test.ts b/x-pack/plugins/enterprise_search/server/lib/ml/fetch_ml_models.test.ts index 790b34a964d5..bd02af095fe0 100644 --- a/x-pack/plugins/enterprise_search/server/lib/ml/fetch_ml_models.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/ml/fetch_ml_models.test.ts @@ -371,7 +371,7 @@ describe('fetchMlModels', () => { expect(models.length).toBe(2); expect(models[0]).toMatchObject({ modelId: ELSER_MODEL_ID, - deploymentState: MlModelDeploymentState.Downloaded, + deploymentState: MlModelDeploymentState.NotDeployed, }); expect(mockTrainedModelsProvider.getTrainedModels).toHaveBeenCalledTimes(2); }); diff --git a/x-pack/plugins/enterprise_search/server/lib/ml/fetch_ml_models.ts b/x-pack/plugins/enterprise_search/server/lib/ml/fetch_ml_models.ts index 8807eabe14da..c1af4ab69c0b 100644 --- a/x-pack/plugins/enterprise_search/server/lib/ml/fetch_ml_models.ts +++ b/x-pack/plugins/enterprise_search/server/lib/ml/fetch_ml_models.ts @@ -154,8 +154,10 @@ const enrichModelWithDownloadStatus = async ( }); if (modelConfigWithDefinitionStatus && modelConfigWithDefinitionStatus.count > 0) { + // We're using NotDeployed for downloaded models. Downloaded is also a valid status, but we want to have the same + // status badge as for 3rd party models. model.deploymentState = modelConfigWithDefinitionStatus.trained_model_configs[0].fully_defined - ? MlModelDeploymentState.Downloaded + ? MlModelDeploymentState.NotDeployed : MlModelDeploymentState.Downloading; } }; diff --git a/x-pack/plugins/exploratory_view/public/application/application.test.tsx b/x-pack/plugins/exploratory_view/public/application/application.test.tsx index 23203930616e..a0adaca0dbde 100644 --- a/x-pack/plugins/exploratory_view/public/application/application.test.tsx +++ b/x-pack/plugins/exploratory_view/public/application/application.test.tsx @@ -13,7 +13,7 @@ import { AppMountParameters, CoreStart } from '@kbn/core/public'; import { themeServiceMock } from '@kbn/core/public/mocks'; import { ExploratoryViewPublicPluginsStart } from '../plugin'; import { renderApp } from '.'; -import { mockObservabilityAIAssistantService } from '@kbn/observability-ai-assistant-plugin/public'; +import { mockService } from '@kbn/observability-ai-assistant-plugin/public/mock'; describe('renderApp', () => { const originalConsole = global.console; @@ -43,7 +43,7 @@ describe('renderApp', () => { }, }, usageCollection: { reportUiCounter: noop }, - observabilityAIAssistant: { service: mockObservabilityAIAssistantService }, + observabilityAIAssistant: { service: mockService }, } as unknown as ExploratoryViewPublicPluginsStart; const core = { diff --git a/x-pack/plugins/exploratory_view/public/application/index.tsx b/x-pack/plugins/exploratory_view/public/application/index.tsx index c59aa090f75b..f3189e7cf660 100644 --- a/x-pack/plugins/exploratory_view/public/application/index.tsx +++ b/x-pack/plugins/exploratory_view/public/application/index.tsx @@ -16,7 +16,6 @@ import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-pl import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; -import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public'; import { PluginContext } from '../context/plugin_context'; import { routes } from '../routes'; import { ExploratoryViewPublicPluginsStart } from '../plugin'; @@ -68,47 +67,43 @@ export const renderApp = ({ const ApplicationUsageTrackingProvider = usageCollection?.components.ApplicationUsageTrackingProvider ?? React.Fragment; - const aiAssistantService = plugins.observabilityAIAssistant.service; - ReactDOM.render( - - + - - - - -
+ + +
+ - - - -
-
-
- - - - + + +
+
+
+
+
+
, diff --git a/x-pack/plugins/exploratory_view/public/application/types.ts b/x-pack/plugins/exploratory_view/public/application/types.ts index 7d6cc14dfe77..3cdaee088db7 100644 --- a/x-pack/plugins/exploratory_view/public/application/types.ts +++ b/x-pack/plugins/exploratory_view/public/application/types.ts @@ -20,6 +20,7 @@ import { EmbeddableStateTransfer } from '@kbn/embeddable-plugin/public'; import { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { LensPublicStart } from '@kbn/lens-plugin/public'; import { SharePluginStart } from '@kbn/share-plugin/public'; @@ -41,6 +42,7 @@ export interface ObservabilityAppServices { lens: LensPublicStart; navigation: NavigationPublicPluginStart; notifications: NotificationsStart; + observabilityAIAssistant: ObservabilityAIAssistantPluginStart; overlays: OverlayStart; savedObjectsClient: SavedObjectsStart['client']; share: SharePluginStart; diff --git a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.test.tsx b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.test.tsx index 5d43f5bd1e6d..0070517a81ca 100644 --- a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.test.tsx +++ b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.test.tsx @@ -12,6 +12,7 @@ import { sampleAttribute } from '../../configurations/test_data/sample_attribute import * as pluginHook from '../../../../../hooks/use_plugin_context'; import { TypedLensByValueInput } from '@kbn/lens-plugin/public'; import { ExpViewActionMenuContent } from './action_menu'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; jest.spyOn(pluginHook, 'usePluginContext').mockReturnValue({ appMountParameters: { @@ -19,6 +20,24 @@ jest.spyOn(pluginHook, 'usePluginContext').mockReturnValue({ }, } as any); +const mockObservabilityAIAssistant = observabilityAIAssistantPluginMock.createStartContract(); + +jest.mock('../../hooks/use_kibana', () => { + const originalModule = jest.requireActual('../../hooks/use_kibana'); + return { + ...originalModule, + useKibana: () => { + const { services } = originalModule.useKibana(); + return { + services: { + ...services, + observabilityAIAssistant: mockObservabilityAIAssistant, + }, + }; + }, + }; +}); + describe('Action Menu', function () { afterAll(() => { jest.clearAllMocks(); diff --git a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.tsx b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.tsx index f8e86388131a..f0e387a1554d 100644 --- a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.tsx +++ b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/components/action_menu/action_menu.tsx @@ -9,14 +9,9 @@ import React, { useState } from 'react'; import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { LensEmbeddableInput, TypedLensByValueInput } from '@kbn/lens-plugin/public'; -import { - ObservabilityAIAssistantActionMenuItem, - useObservabilityAIAssistantOptional, -} from '@kbn/observability-ai-assistant-plugin/public'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; import { EmbedAction } from '../../header/embed_action'; -import { ObservabilityAppServices } from '../../../../../application/types'; import { AddToCaseAction } from '../../header/add_to_case_action'; +import { useKibana } from '../../hooks/use_kibana'; export function ExpViewActionMenuContent({ timeRange, @@ -25,16 +20,16 @@ export function ExpViewActionMenuContent({ timeRange?: { from: string; to: string }; lensAttributes: TypedLensByValueInput['attributes'] | null; }) { - const kServices = useKibana().services; - - const { lens, isDev } = kServices; + const { + lens, + isDev, + observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, + } = useKibana().services; const [isSaveOpen, setIsSaveOpen] = useState(false); const LensSaveModalComponent = lens.SaveModalComponent; - const service = useObservabilityAIAssistantOptional(); - return ( <>
- {service?.isEnabled() ? ( + {ObservabilityAIAssistantActionMenuItem ? ( diff --git a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/exploratory_view.test.tsx b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/exploratory_view.test.tsx index 83cae3e8b4eb..e8b01b10316c 100644 --- a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/exploratory_view.test.tsx +++ b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/exploratory_view.test.tsx @@ -12,6 +12,7 @@ import { ExploratoryView } from './exploratory_view'; import * as obsvDataViews from '../../../utils/observability_data_views/observability_data_views'; import * as pluginHook from '../../../hooks/use_plugin_context'; import { createStubIndexPattern } from '@kbn/data-plugin/common/stubs'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; jest.spyOn(pluginHook, 'usePluginContext').mockReturnValue({ appMountParameters: { @@ -19,6 +20,24 @@ jest.spyOn(pluginHook, 'usePluginContext').mockReturnValue({ }, } as any); +const mockObservabilityAIAssistant = observabilityAIAssistantPluginMock.createStartContract(); + +jest.mock('./hooks/use_kibana', () => { + const originalModule = jest.requireActual('./hooks/use_kibana'); + return { + ...originalModule, + useKibana: () => { + const { services } = originalModule.useKibana(); + return { + services: { + ...services, + observabilityAIAssistant: mockObservabilityAIAssistant, + }, + }; + }, + }; +}); + describe('ExploratoryView', () => { mockAppDataView(); diff --git a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/exploratory_view.tsx b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/exploratory_view.tsx index a67618cf5f93..9b5fadb9c1bf 100644 --- a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/exploratory_view.tsx +++ b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/exploratory_view.tsx @@ -16,9 +16,8 @@ import { EuiFlexItem, } from '@elastic/eui'; import { PanelDirection } from '@elastic/eui/src/components/resizable_container/types'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; import { TypedLensByValueInput } from '@kbn/lens-plugin/public'; -import { ExploratoryViewPublicPluginsStart } from '../../../plugin'; +import { useKibana } from './hooks/use_kibana'; import { useSeriesStorage } from './hooks/use_series_storage'; import { useLensAttributes } from './hooks/use_lens_attributes'; import { useAppDataViewContext } from './hooks/use_app_data_view'; @@ -38,7 +37,7 @@ export function ExploratoryView({ }) { const { services: { lens }, - } = useKibana(); + } = useKibana(); const seriesBuilderRef = useRef(null); const wrapperRef = useRef(null); diff --git a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/hooks/use_kibana.ts b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/hooks/use_kibana.ts new file mode 100644 index 000000000000..57c0c731d424 --- /dev/null +++ b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/hooks/use_kibana.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CoreStart } from '@kbn/core/public'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { ExploratoryViewPublicPluginsStart } from '../../../../plugin'; + +export type StartServices = CoreStart & + ExploratoryViewPublicPluginsStart & + AdditionalServices & { + isDev: boolean; + }; +const useTypedKibana = () => + useKibana>(); + +export { useTypedKibana as useKibana }; diff --git a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/index.tsx b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/index.tsx index 152593abaf06..392420ee547f 100644 --- a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/index.tsx +++ b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/index.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { useHistory } from 'react-router-dom'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; + import { createKbnUrlStateStorage, withNotifyOnErrors, @@ -17,7 +17,7 @@ import { import { TypedLensByValueInput } from '@kbn/lens-plugin/public'; import { useBreadcrumbs, useTrackPageview } from '@kbn/observability-shared-plugin/public'; import { ExploratoryView } from './exploratory_view'; -import { ExploratoryViewPublicPluginsStart } from '../../../plugin'; +import { useKibana } from './hooks/use_kibana'; import { DataViewContextProvider } from './hooks/use_app_data_view'; import { UrlStorageContextProvider } from './hooks/use_series_storage'; import { RefreshButton } from './header/refresh_button'; @@ -39,7 +39,7 @@ export function ExploratoryViewPage({ }: ExploratoryViewPageProps) { const { services: { uiSettings, notifications, observabilityShared }, - } = useKibana(); + } = useKibana(); const history = useHistory(); diff --git a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/lens_embeddable.tsx b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/lens_embeddable.tsx index 6ec631403b22..2613d39e7939 100644 --- a/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/lens_embeddable.tsx +++ b/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/lens_embeddable.tsx @@ -9,10 +9,9 @@ import { i18n } from '@kbn/i18n'; import React, { Dispatch, SetStateAction, useCallback, useState } from 'react'; import styled from 'styled-components'; import { LensEmbeddableInput, TypedLensByValueInput } from '@kbn/lens-plugin/public'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; import { useUiTracker } from '@kbn/observability-shared-plugin/public'; import { useSeriesStorage } from './hooks/use_series_storage'; -import { ExploratoryViewPublicPluginsStart } from '../../../plugin'; +import { useKibana } from './hooks/use_kibana'; import { useExpViewTimeRange } from './hooks/use_time_range'; import { parseRelativeDate } from './components/date_range_picker'; import { trackTelemetryOnLoad } from './utils/telemetry'; @@ -30,7 +29,7 @@ export function LensEmbeddable(props: Props) { const { lensAttributes, setChartTimeRangeContext } = props; const { services: { lens, notifications }, - } = useKibana(); + } = useKibana(); const LensComponent = lens?.EmbeddableComponent; const LensSaveModalComponent = lens?.SaveModalComponent; diff --git a/x-pack/plugins/fleet/.storybook/context/index.tsx b/x-pack/plugins/fleet/.storybook/context/index.tsx index 538a62ce3258..fec359e89682 100644 --- a/x-pack/plugins/fleet/.storybook/context/index.tsx +++ b/x-pack/plugins/fleet/.storybook/context/index.tsx @@ -93,6 +93,7 @@ export const StorybookContext: React.FC<{ storyContext?: Parameters settings: getSettings(), theme: { theme$: EMPTY, + getTheme: () => ({ darkMode: false }), }, plugins: {} as unknown as PluginsServiceStart, authz: { diff --git a/x-pack/plugins/fleet/common/services/is_agent_upgradeable.test.ts b/x-pack/plugins/fleet/common/services/is_agent_upgradeable.test.ts index 7ab016239702..dbc5b5515b6b 100644 --- a/x-pack/plugins/fleet/common/services/is_agent_upgradeable.test.ts +++ b/x-pack/plugins/fleet/common/services/is_agent_upgradeable.test.ts @@ -11,6 +11,7 @@ import { getRecentUpgradeInfoForAgent, isAgentUpgradeable, isAgentUpgrading, + getNotUpgradeableMessage, } from './is_agent_upgradeable'; const getAgent = ({ @@ -241,6 +242,154 @@ describe('Fleet - isAgentUpgradeable', () => { }); }); +describe('Fleet - getNotUpgradeableMessage', () => { + it('if agent reports not upgradeable with agent version < latest agent version', () => { + expect(getNotUpgradeableMessage(getAgent({ version: '7.9.0' }), '8.0.0')).toBe( + 'agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service.' + ); + }); + + it('if agent reports not upgradeable with agent version > latest agent version', () => { + expect(getNotUpgradeableMessage(getAgent({ version: '8.0.0' }), '7.9.0')).toBe( + 'agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service.' + ); + }); + + it('returns false if agent reports not upgradeable with agent version === latest agent version', () => { + expect(getNotUpgradeableMessage(getAgent({ version: '8.0.0' }), '8.0.0')).toBe( + 'agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service.' + ); + }); + + it('if agent reports upgradeable, with agent version === latest agent version', () => { + expect( + getNotUpgradeableMessage(getAgent({ version: '8.0.0', upgradeable: true }), '8.0.0') + ).toBe('agent is already running on the latest available version.'); + }); + + it('if agent reports upgradeable, with agent version > latest agent version', () => { + expect( + getNotUpgradeableMessage(getAgent({ version: '8.0.0', upgradeable: true }), '7.9.0') + ).toBe('agent is running on a version greater than the latest available version.'); + }); + + it('if agent reports upgradeable, but agent is unenrolling', () => { + expect( + getNotUpgradeableMessage( + getAgent({ version: '7.9.0', upgradeable: true, unenrolling: true }), + '8.0.0' + ) + ).toBe('agent is being unenrolled.'); + }); + + it('if agent reports upgradeable, but agent is unenrolled', () => { + expect( + getNotUpgradeableMessage( + getAgent({ version: '7.9.0', upgradeable: true, unenrolled: true }), + '8.0.0' + ) + ).toBe('agent has been unenrolled.'); + }); + + it('Returns no error message if agent reports upgradeable, with agent version < latest agent version', () => { + expect( + getNotUpgradeableMessage(getAgent({ version: '7.9.0', upgradeable: true }), '8.0.0') + ).toBeUndefined(); + }); + + it('if agent reports upgradeable, with agent snapshot version === latest agent version', () => { + expect( + getNotUpgradeableMessage(getAgent({ version: '7.9.0-SNAPSHOT', upgradeable: true }), '7.9.0') + ).toBe('agent is already running on the latest available version.'); + }); + + it('it does not return message if agent reports upgradeable, with upgrade to agent snapshot version newer than latest agent version', () => { + expect( + getNotUpgradeableMessage( + getAgent({ version: '8.10.2', upgradeable: true }), + '8.10.2', + '8.11.0-SNAPSHOT' + ) + ).toBeUndefined(); + }); + + it('if agent reports upgradeable, with target version < current agent version ', () => { + expect( + getNotUpgradeableMessage(getAgent({ version: '7.9.0', upgradeable: true }), '8.0.0', '7.8.0') + ).toBe('agent does not support downgrades.'); + }); + + it('if agent reports upgradeable, with target version == current agent version ', () => { + expect( + getNotUpgradeableMessage(getAgent({ version: '7.9.0', upgradeable: true }), '8.0.0', '7.9.0') + ).toBe('agent is already running on the selected version.'); + }); + + it('if agent with no upgrade details reports upgradeable, but is already upgrading', () => { + expect( + getNotUpgradeableMessage( + getAgent({ version: '7.9.0', upgradeable: true, upgrading: true }), + '8.0.0' + ) + ).toBe('agent is already being upgraded.'); + }); + + it('if agent reports upgradeable, but has an upgrade status other than failed', () => { + expect( + getNotUpgradeableMessage( + getAgent({ + version: '7.9.0', + upgradeable: true, + upgradeDetails: { + target_version: '8.0.0', + action_id: 'XXX', + state: 'UPG_REQUESTED', + }, + }), + '8.0.0' + ) + ).toBe('agent is already being upgraded.'); + }); + + it('it does not return a message if agent reports upgradeable and has a failed upgrade status', () => { + expect( + getNotUpgradeableMessage( + getAgent({ + version: '7.9.0', + upgradeable: true, + upgradeDetails: { + target_version: '8.0.0', + action_id: 'XXX', + state: 'UPG_FAILED', + metadata: { + error_msg: 'Upgrade timed out', + }, + }, + }), + '8.0.0' + ) + ).toBeUndefined(); + }); + + it('if the agent reports upgradeable but was upgraded less than 10 minutes ago', () => { + expect( + getNotUpgradeableMessage( + getAgent({ version: '7.9.0', upgradeable: true, minutesSinceUpgrade: 9 }), + '8.0.0' + ) + ).toContain('please wait'); + }); + + it('if agent reports upgradeable and was upgraded more than 10 minutes ago', () => { + expect( + getNotUpgradeableMessage( + getAgent({ version: '7.9.0', upgradeable: true, minutesSinceUpgrade: 11 }), + '8.0.0' + ) + ).toBeUndefined(); + }); +}); + describe('hasAgentBeenUpgradedRecently', () => { it('returns true if the agent was upgraded less than 10 minutes ago', () => { expect( diff --git a/x-pack/plugins/fleet/common/services/is_agent_upgradeable.ts b/x-pack/plugins/fleet/common/services/is_agent_upgradeable.ts index ac21e24520c7..d36010aa13b9 100644 --- a/x-pack/plugins/fleet/common/services/is_agent_upgradeable.ts +++ b/x-pack/plugins/fleet/common/services/is_agent_upgradeable.ts @@ -8,11 +8,27 @@ import semverCoerce from 'semver/functions/coerce'; import semverLt from 'semver/functions/lt'; import semverGt from 'semver/functions/gt'; +import semverEq from 'semver/functions/eq'; +import moment from 'moment'; import type { Agent } from '../types'; export const AGENT_UPGRADE_COOLDOWN_IN_MIN = 10; +// Error messages for agent not upgradeable +export const VERSION_MISSING_ERROR = `agent version is missing.`; +export const UNENROLLED_ERROR = `agent has been unenrolled.`; +export const ONGOING_UNEROLLMENT_ERROR = `agent is being unenrolled.`; +export const NOT_UPGRADEABLE_ERROR = `agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service.`; +export const ALREADY_UPGRADED_ERROR = `agent is already being upgraded.`; +export const INVALID_VERSION_ERROR = 'agent version is not valid.'; +export const SELECTED_VERSION_ERROR = 'the selected version is not valid.'; +export const RUNNING_SELECTED_VERSION_ERROR = `agent is already running on the selected version.`; +export const DOWNGRADE_NOT_ALLOWED_ERROR = `agent does not support downgrades.`; +export const LATEST_VERSION_NOT_VALID_ERROR = 'latest version is not valid.'; +export const AGENT_ALREADY_ON_LATEST_ERROR = `agent is already running on the latest available version.`; +export const AGENT_ON_GREATER_VERSION_ERROR = `agent is running on a version greater than the latest available version.`; + export function isAgentUpgradeable( agent: Agent, latestAgentVersion: string, @@ -42,21 +58,76 @@ export function isAgentUpgradeable( return isAgentVersionLessThanLatest(agentVersion, latestAgentVersion); } +// Based on the previous, returns a detailed message explaining why the agent is not upgradeable +export const getNotUpgradeableMessage = ( + agent: Agent, + latestAgentVersion?: string, + versionToUpgrade?: string +) => { + let agentVersion: string; + if (typeof agent?.local_metadata?.elastic?.agent?.version === 'string') { + agentVersion = agent.local_metadata.elastic.agent.version; + } else { + return VERSION_MISSING_ERROR; + } + if (agent.unenrolled_at) { + return UNENROLLED_ERROR; + } + if (agent.unenrollment_started_at) { + return ONGOING_UNEROLLMENT_ERROR; + } + if (!agent.local_metadata.elastic.agent.upgradeable) { + return NOT_UPGRADEABLE_ERROR; + } + if (isAgentUpgrading(agent)) { + return ALREADY_UPGRADED_ERROR; + } + if (getRecentUpgradeInfoForAgent(agent).hasBeenUpgradedRecently) { + const timeToWaitMins = getRecentUpgradeInfoForAgent(agent).timeToWaitMins; + const elapsedMinsSinceUpgrade = getRecentUpgradeInfoForAgent(agent).elapsedMinsSinceUpgrade; + return `agent was upgraded ${elapsedMinsSinceUpgrade} minutes ago, please wait ${timeToWaitMins} minutes before attempting the upgrade again.`; + } + const agentVersionNumber = semverCoerce(agentVersion); + if (!agentVersionNumber) return INVALID_VERSION_ERROR; + + if (versionToUpgrade !== undefined) { + const versionToUpgradeNumber = semverCoerce(versionToUpgrade); + if (!versionToUpgradeNumber) return SELECTED_VERSION_ERROR; + + if (semverEq(agentVersionNumber, versionToUpgradeNumber)) return RUNNING_SELECTED_VERSION_ERROR; + + if (semverLt(versionToUpgradeNumber, agentVersionNumber)) return DOWNGRADE_NOT_ALLOWED_ERROR; + + // explicitly allow this case - the agent is upgradeable + if (semverGt(versionToUpgradeNumber, agentVersionNumber)) return undefined; + } + + const latestAgentVersionNumber = semverCoerce(latestAgentVersion); + if (!latestAgentVersionNumber) return LATEST_VERSION_NOT_VALID_ERROR; + + if (semverEq(agentVersionNumber, latestAgentVersionNumber)) return AGENT_ALREADY_ON_LATEST_ERROR; + + if (semverGt(agentVersionNumber, latestAgentVersionNumber)) return AGENT_ON_GREATER_VERSION_ERROR; + + // in all the other cases, the agent is upgradeable; don't return any message. + return undefined; +}; + const isAgentVersionLessThanLatest = (agentVersion: string, latestAgentVersion: string) => { // make sure versions are only the number before comparison const agentVersionNumber = semverCoerce(agentVersion); - if (!agentVersionNumber) throw new Error('agent version is not valid'); + if (!agentVersionNumber) throw new Error(`${INVALID_VERSION_ERROR}`); const latestAgentVersionNumber = semverCoerce(latestAgentVersion); - if (!latestAgentVersionNumber) throw new Error('latest version is not valid'); + if (!latestAgentVersionNumber) throw new Error(`${LATEST_VERSION_NOT_VALID_ERROR}`); return semverLt(agentVersionNumber, latestAgentVersionNumber); }; const isNotDowngrade = (agentVersion: string, versionToUpgrade: string) => { const agentVersionNumber = semverCoerce(agentVersion); - if (!agentVersionNumber) throw new Error('agent version is not valid'); + if (!agentVersionNumber) throw new Error(`${INVALID_VERSION_ERROR}`); const versionToUpgradeNumber = semverCoerce(versionToUpgrade); - if (!versionToUpgradeNumber) throw new Error('target version is not valid'); + if (!versionToUpgradeNumber) throw new Error(`${SELECTED_VERSION_ERROR}`); return semverGt(versionToUpgradeNumber, agentVersionNumber); }; @@ -64,19 +135,27 @@ const isNotDowngrade = (agentVersion: string, versionToUpgrade: string) => { export function getRecentUpgradeInfoForAgent(agent: Agent): { hasBeenUpgradedRecently: boolean; timeToWaitMs: number; + elapsedMinsSinceUpgrade: number; + timeToWaitMins: number; } { if (!agent.upgraded_at) { return { hasBeenUpgradedRecently: false, timeToWaitMs: 0, + timeToWaitMins: 0, + elapsedMinsSinceUpgrade: 0, }; } - const elaspedSinceUpgradeInMillis = Date.now() - Date.parse(agent.upgraded_at); - const timeToWaitMs = AGENT_UPGRADE_COOLDOWN_IN_MIN * 6e4 - elaspedSinceUpgradeInMillis; - const hasBeenUpgradedRecently = elaspedSinceUpgradeInMillis / 6e4 < AGENT_UPGRADE_COOLDOWN_IN_MIN; + const elapsedSinceUpgradeInMillis = Date.now() - Date.parse(agent.upgraded_at); + const elapsedMins = moment.duration(elapsedSinceUpgradeInMillis, 'milliseconds').asMinutes(); + const elapsedMinsSinceUpgrade = Math.ceil(elapsedMins); - return { hasBeenUpgradedRecently, timeToWaitMs }; + const timeToWaitMs = AGENT_UPGRADE_COOLDOWN_IN_MIN * 6e4 - elapsedSinceUpgradeInMillis; + const hasBeenUpgradedRecently = elapsedSinceUpgradeInMillis / 6e4 < AGENT_UPGRADE_COOLDOWN_IN_MIN; + const timeToWait = moment.duration(timeToWaitMs, 'milliseconds').asMinutes(); + const timeToWaitMins = Math.ceil(timeToWait); + return { hasBeenUpgradedRecently, timeToWaitMs, elapsedMinsSinceUpgrade, timeToWaitMins }; } export function isAgentUpgrading(agent: Agent) { diff --git a/x-pack/plugins/fleet/common/types/models/agent.ts b/x-pack/plugins/fleet/common/types/models/agent.ts index 120f0bc883e1..1242a6112495 100644 --- a/x-pack/plugins/fleet/common/types/models/agent.ts +++ b/x-pack/plugins/fleet/common/types/models/agent.ts @@ -446,6 +446,7 @@ export interface AgentUpgradeDetails { metadata?: { scheduled_at?: string; download_percent?: number; + download_rate?: number; // bytes per second failed_state?: AgentUpgradeStateType; error_msg?: string; }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx index 74fb11be866e..f27d428bd42c 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx @@ -29,6 +29,7 @@ import { AgentHealth } from '../../../components'; import { Tags } from '../../../components/tags'; import { formatAgentCPU, formatAgentMemory } from '../../../services/agent_metrics'; import { AgentDashboardLink } from '../agent_dashboard_link'; +import { AgentUpgradeStatus } from '../../../agent_list_page/components/agent_upgrade_status'; // Allows child text to be truncated const FlexItemWithMinWidth = styled(EuiFlexItem)` @@ -173,18 +174,20 @@ export const AgentDetailsOverviewSection: React.FunctionComponent<{ {agent.local_metadata.elastic.agent.version} - {latestAgentVersion && isAgentUpgradeable(agent, latestAgentVersion) ? ( - - - - - - ) : null} + + +
) : ( '-' diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_list_table.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_list_table.tsx index c52f1bb6588a..d555c163c0fc 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_list_table.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_list_table.tsx @@ -31,6 +31,8 @@ import { Tags } from '../../components/tags'; import type { AgentMetrics } from '../../../../../../../common/types'; import { formatAgentCPU, formatAgentMemory } from '../../services/agent_metrics'; +import { getNotUpgradeableMessage } from '../../../../../../../common/services/is_agent_upgradeable'; + import { AgentUpgradeStatus } from './agent_upgrade_status'; import { EmptyPrompt } from './empty_prompt'; @@ -303,6 +305,7 @@ export const AgentListTable: React.FC = (props: Props) => { agentUpgradeStartedAt={agent.upgrade_started_at} agentUpgradedAt={agent.upgraded_at} agentUpgradeDetails={agent.upgrade_details} + notUpgradeableMessage={getNotUpgradeableMessage(agent, latestAgentVersion)} />
diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.test.tsx index 1518a68fd6f0..a5f3498fd0b5 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.test.tsx @@ -48,12 +48,38 @@ describe('getDownloadEstimate', () => { expect(getDownloadEstimate()).toEqual(''); }); - it('should return an empty string if the agent has a zero download percent', () => { - expect(getDownloadEstimate(0)).toEqual(''); + it('should display 0% if the agent has a zero download percent', () => { + expect(getDownloadEstimate({ download_percent: 0 })).toEqual(' (0%)'); + }); + + it('should display 0 Bps if the agent has a zero download rate', () => { + expect(getDownloadEstimate({ download_rate: 0 })).toEqual(' (at 0.0 Bps)'); }); it('should return a formatted string if the agent has a positive download percent', () => { - expect(getDownloadEstimate(16.4)).toEqual(' (16.4%)'); + expect(getDownloadEstimate({ download_percent: 16.4 })).toEqual(' (16.4%)'); + }); + + it('should return a formatted string if the agent has a kBps download rate', () => { + expect(getDownloadEstimate({ download_rate: 1024 })).toEqual(' (at 1.0 kBps)'); + }); + + it('should return a formatted string if the agent has a download rate and download percent', () => { + expect(getDownloadEstimate({ download_rate: 10, download_percent: 99 })).toEqual( + ' (99% at 10.0 Bps)' + ); + }); + + it('should return a formatted string if the agent has a MBps download rate', () => { + expect(getDownloadEstimate({ download_rate: 1200000 })).toEqual(' (at 1.1 MBps)'); + }); + + it('should return a formatted string if the agent has a GBps download rate', () => { + expect(getDownloadEstimate({ download_rate: 2400000000 })).toEqual(' (at 2.2 GBps)'); + }); + + it('should return a formatted string if the agent has a GBps download rate more than 1024', () => { + expect(getDownloadEstimate({ download_rate: 1200000000 * 1024 })).toEqual(' (at 1144.4 GBps)'); }); }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.tsx index ab4835757f94..e5cf2eb7913c 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_upgrade_status.tsx @@ -35,14 +35,34 @@ export function getUpgradeStartDelay(scheduledAt?: string): string { return ` The upgrade will start in less than ${Math.ceil(timeDiffMillis / 36e5)} hours.`; } -export function getDownloadEstimate(downloadPercent?: number): string { - if (!downloadPercent || downloadPercent === 0) { +export function getDownloadEstimate(metadata?: AgentUpgradeDetails['metadata']): string { + if ( + !metadata || + (metadata.download_percent === undefined && metadata.download_rate === undefined) + ) { return ''; } + let tooltip = ''; + if (metadata.download_percent !== undefined) { + tooltip = `${metadata.download_percent}%`; + } + if (metadata.download_rate !== undefined) { + tooltip += ` at ${formatRate(metadata.download_rate)}`; + } - return ` (${downloadPercent}%)`; + return ` (${tooltip.trim()})`; } +const formatRate = (downloadRate: number) => { + let i = 0; + const byteUnits = [' Bps', ' kBps', ' MBps', ' GBps']; + for (; i < byteUnits.length - 1; i++) { + if (downloadRate < 1024) break; + downloadRate = downloadRate / 1024; + } + return downloadRate.toFixed(1) + byteUnits[i]; +}; + function getStatusComponents(agentUpgradeDetails?: AgentUpgradeDetails) { switch (agentUpgradeDetails?.state) { case 'UPG_REQUESTED': @@ -97,9 +117,7 @@ function getStatusComponents(agentUpgradeDetails?: AgentUpgradeDetails) { id="xpack.fleet.agentUpgradeStatusTooltip.upgradeDownloading" defaultMessage="Downloading the new agent artifact version{downloadEstimate}." values={{ - downloadEstimate: getDownloadEstimate( - agentUpgradeDetails?.metadata?.download_percent - ), + downloadEstimate: getDownloadEstimate(agentUpgradeDetails?.metadata), }} /> ), @@ -219,7 +237,14 @@ export const AgentUpgradeStatus: React.FC<{ agentUpgradeStartedAt?: string | null; agentUpgradedAt?: string | null; agentUpgradeDetails?: AgentUpgradeDetails; -}> = ({ isAgentUpgradable, agentUpgradeStartedAt, agentUpgradedAt, agentUpgradeDetails }) => { + notUpgradeableMessage?: string | null; +}> = ({ + isAgentUpgradable, + agentUpgradeStartedAt, + agentUpgradedAt, + agentUpgradeDetails, + notUpgradeableMessage, +}) => { const isAgentUpgrading = useMemo( () => agentUpgradeStartedAt && !agentUpgradedAt, [agentUpgradeStartedAt, agentUpgradedAt] @@ -227,6 +252,24 @@ export const AgentUpgradeStatus: React.FC<{ const status = useMemo(() => getStatusComponents(agentUpgradeDetails), [agentUpgradeDetails]); const minVersion = '8.12'; + if (!isAgentUpgradable && notUpgradeableMessage) { + return ( + + } + color="subdued" + /> + ); + } + if (isAgentUpgradable) { return ( diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx index 1a18b6e27f5e..17e415691a82 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx @@ -29,6 +29,7 @@ jest.mock('../../../../hooks', () => { }), sendPostBulkAgentUpgrade: jest.fn(), useAgentVersion: jest.fn().mockReturnValue('8.10.2'), + useKibanaVersion: jest.fn().mockReturnValue('8.10.2'), }; }); @@ -203,4 +204,28 @@ describe('AgentUpgradeAgentModal', () => { expect(el).toBeDisabled(); }); }); + + it('should disable submit button and display a warning for a single agent that is not upgradeable', async () => { + const { utils } = renderAgentUpgradeAgentModal({ + agents: [ + { + status: 'offline', + upgrade_started_at: '2022-11-21T12:27:24Z', + id: 'agent1', + local_metadata: { elastic: { agent: { version: '8.9.0' } } }, + }, + ] as any, + agentCount: 2, + }); + await waitFor(() => { + expect(utils.queryByText(/The selected agent is not upgradeable/)).toBeInTheDocument(); + expect( + utils.queryByText( + /Reason: agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service./ + ) + ).toBeInTheDocument(); + const el = utils.getByTestId('confirmModalConfirmButton'); + expect(el).toBeDisabled(); + }); + }); }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx index 0acb4296befd..28bb86fdb538 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx @@ -48,6 +48,10 @@ import { } from '../../../../hooks'; import { sendGetAgentsAvailableVersions } from '../../../../hooks'; +import { + isAgentUpgradeable, + getNotUpgradeableMessage, +} from '../../../../../../../common/services/is_agent_upgradeable'; import { FALLBACK_VERSIONS, @@ -127,7 +131,6 @@ export const AgentUpgradeAgentModal: React.FunctionComponent Array.isArray(agentsOrQuery) ? agentsOrQuery.map((agent) => agent.id) : agentsOrQuery; const { error } = - isSingleAgent && !isScheduled + isSingleAgent && + !isScheduled && + isAgentUpgradeable(agents[0], latestAgentVersion || '', selectedVersion[0].value) ? await sendPostAgentUpgrade((agents[0] as Agent).id, { version, force: isUpdating, @@ -332,7 +337,13 @@ export const AgentUpgradeAgentModal: React.FunctionComponent } - confirmButtonDisabled={isSubmitting || noVersions || (isUpdating && updatingAgents === 0)} + confirmButtonDisabled={ + isSubmitting || + noVersions || + (isUpdating && updatingAgents === 0) || + (isSingleAgent && + !isAgentUpgradeable(agents[0], latestAgentVersion || '', selectedVersion[0].value)) + } confirmButtonText={ isSingleAgent ? ( ) : isSingleAgent ? ( - <> -

+ !isAgentUpgradeable(agents[0], latestAgentVersion || '', selectedVersion[0].value) ? ( + + } + > -

- {isUpdating && ( + + ) : ( + <>

- - - +

- )} - + {isUpdating && ( +

+ + + +

+ )} + + ) ) : ( + > + + ) : null} diff --git a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts index 391c721e2ef9..3b1cd89ff136 100644 --- a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts +++ b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts @@ -25,6 +25,7 @@ import { isAgentUpgradeable, AGENT_UPGRADE_COOLDOWN_IN_MIN, isAgentUpgrading, + getNotUpgradeableMessage, } from '../../../common/services'; import { getMaxVersion } from '../../../common/services/get_min_max_version'; import { getAgentById } from '../../services/agents'; @@ -114,7 +115,11 @@ export const postAgentUpgradeHandler: RequestHandler< return response.customError({ statusCode: 400, body: { - message: `agent ${request.params.agentId} is not upgradeable`, + message: `Agent ${request.params.agentId} is not upgradeable: ${getNotUpgradeableMessage( + agent, + latestAgentVersion, + version + )}`, }, }); } diff --git a/x-pack/plugins/fleet/server/services/agents/upgrade_action_runner.ts b/x-pack/plugins/fleet/server/services/agents/upgrade_action_runner.ts index 157eaa688c74..61e3ad42c8aa 100644 --- a/x-pack/plugins/fleet/server/services/agents/upgrade_action_runner.ts +++ b/x-pack/plugins/fleet/server/services/agents/upgrade_action_runner.ts @@ -10,7 +10,11 @@ import type { SavedObjectsClientContract, ElasticsearchClient } from '@kbn/core/ import { v4 as uuidv4 } from 'uuid'; import moment from 'moment'; -import { getRecentUpgradeInfoForAgent, isAgentUpgradeable } from '../../../common/services'; +import { + getRecentUpgradeInfoForAgent, + isAgentUpgradeable, + getNotUpgradeableMessage, +} from '../../../common/services'; import type { Agent } from '../../types'; @@ -86,7 +90,13 @@ export async function upgradeBatch( getRecentUpgradeInfoForAgent(agent).hasBeenUpgradedRecently || (!options.force && !isAgentUpgradeable(agent, latestAgentVersion, options.version)); if (isNotAllowed) { - throw new FleetError(`Agent ${agent.id} is not upgradeable`); + throw new FleetError( + `Agent ${agent.id} is not upgradeable: ${getNotUpgradeableMessage( + agent, + latestAgentVersion, + options.version + )}` + ); } if (!options.force && isHostedAgent(hostedPolicies, agent)) { diff --git a/x-pack/plugins/global_search_bar/public/plugin.tsx b/x-pack/plugins/global_search_bar/public/plugin.tsx index cf421202a486..12f15036886c 100644 --- a/x-pack/plugins/global_search_bar/public/plugin.tsx +++ b/x-pack/plugins/global_search_bar/public/plugin.tsx @@ -22,7 +22,7 @@ export interface GlobalSearchBarPluginStartDeps { usageCollection?: UsageCollectionSetup; } -export class GlobalSearchBarPlugin implements Plugin<{}, {}> { +export class GlobalSearchBarPlugin implements Plugin<{}, {}, {}, GlobalSearchBarPluginStartDeps> { public setup({ analytics }: CoreSetup) { eventTypes.forEach((eventType) => { analytics.registerEventType(eventType); diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx index a8ebb5c884b6..c1f9231a3a1a 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx @@ -19,12 +19,7 @@ import { import { LogRateAnalysisContent, type LogRateAnalysisResultsData } from '@kbn/aiops-plugin/public'; import { Rule } from '@kbn/alerting-plugin/common'; import { TopAlert } from '@kbn/observability-plugin/public'; -import { - ContextualInsight, - useObservabilityAIAssistant, - type Message, - MessageRole, -} from '@kbn/observability-ai-assistant-plugin/public'; +import { type Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { i18n } from '@kbn/i18n'; import { ALERT_END } from '@kbn/rule-data-utils'; @@ -54,7 +49,11 @@ interface SignificantFieldValue { export const LogRateAnalysis: FC = ({ rule, alert }) => { const { services } = useKibanaContextForPlugin(); - const { dataViews, logsShared } = services; + const { + dataViews, + logsShared, + observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, + } = services; const [dataView, setDataView] = useState(); const [esSearchQuery, setEsSearchQuery] = useState(); const [logRateAnalysisParams, setLogRateAnalysisParams] = useState< @@ -180,8 +179,6 @@ export const LogRateAnalysis: FC = ({ r ); }; - const aiAssistant = useObservabilityAIAssistant(); - const messages = useMemo(() => { const hasLogRateAnalysisParams = logRateAnalysisParams && logRateAnalysisParams.significantFieldValues?.length > 0; @@ -290,9 +287,12 @@ export const LogRateAnalysis: FC = ({ r - {aiAssistant.isEnabled() && messages ? ( + {ObservabilityAIAssistantContextualInsight && messages ? ( - + ) : null} diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx index e730767ee0d7..055039091e07 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx @@ -20,7 +20,6 @@ import { EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { getPaddedAlertTimeRange } from '@kbn/observability-get-padded-alert-time-range-util'; import { get, identity } from 'lodash'; -import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public'; import { useLogView } from '@kbn/logs-shared-plugin/public'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { @@ -44,10 +43,7 @@ const AlertDetailsAppSection = ({ alert, setAlertSummaryFields, }: AlertDetailsAppSectionProps) => { - const { - logsShared, - observabilityAIAssistant: { service: observabilityAIAssistantService }, - } = useKibanaContextForPlugin().services; + const { logsShared } = useKibanaContextForPlugin().services; const theme = useTheme(); const timeRange = getPaddedAlertTimeRange(alert.fields[ALERT_START]!, alert.fields[ALERT_END]); const alertEnd = alert.fields[ALERT_END] ? moment(alert.fields[ALERT_END]).valueOf() : undefined; @@ -245,14 +241,12 @@ const AlertDetailsAppSection = ({ }; return ( - - - {getLogRatioChart()} - {getLogCountChart()} - {getLogRateAnalysisSection()} - {getLogsHistoryChart()} - - + + {getLogRatioChart()} + {getLogCountChart()} + {getLogRateAnalysisSection()} + {getLogsHistoryChart()} + ); }; diff --git a/x-pack/plugins/infra/public/apps/common_providers.tsx b/x-pack/plugins/infra/public/apps/common_providers.tsx index 67c13bad48c9..158e0b95293e 100644 --- a/x-pack/plugins/infra/public/apps/common_providers.tsx +++ b/x-pack/plugins/infra/public/apps/common_providers.tsx @@ -9,10 +9,7 @@ import { AppMountParameters, CoreStart } from '@kbn/core/public'; import React from 'react'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; -import { - ObservabilityAIAssistantProvider, - ObservabilityAIAssistantPluginStart, -} from '@kbn/observability-ai-assistant-plugin/public'; +import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { NavigationWarningPromptProvider } from '@kbn/observability-shared-plugin/public'; import { TriggersAndActionsUIPublicPluginStart } from '@kbn/triggers-actions-ui-plugin/public'; @@ -44,11 +41,9 @@ export const CommonInfraProviders: React.FC<{ - - - {children} - - + + {children} + diff --git a/x-pack/plugins/infra/public/components/asset_details/__stories__/decorator.tsx b/x-pack/plugins/infra/public/components/asset_details/__stories__/decorator.tsx index a0f2a34df8f3..58eb37f58de7 100644 --- a/x-pack/plugins/infra/public/components/asset_details/__stories__/decorator.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/__stories__/decorator.tsx @@ -28,8 +28,6 @@ import type { AlertSummaryWidgetProps } from '@kbn/triggers-actions-ui-plugin/pu import { defaultLogViewAttributes } from '@kbn/logs-shared-plugin/common'; import { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import { MemoryRouter } from 'react-router-dom'; -import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public'; -import { ObservabilityAIAssistantService } from '@kbn/observability-ai-assistant-plugin/public/types'; import { PluginConfigProvider } from '../../../containers/plugin_config_context'; import type { PluginKibanaContextValue } from '../../../hooks/use_kibana'; import { SourceProvider } from '../../../containers/metrics_source'; @@ -198,20 +196,7 @@ export const DecorateWithKibanaContext: DecoratorFn = (story) => { - true, - callApi: () => {}, - getCurrentUser: () => {}, - getLicense: () => {}, - getLicenseManagementLocator: () => {}, - start: {}, - } as unknown as ObservabilityAIAssistantService - } - > - {story()} - + {story()} diff --git a/x-pack/plugins/infra/public/components/asset_details/hooks/use_page_header.tsx b/x-pack/plugins/infra/public/components/asset_details/hooks/use_page_header.tsx index 3fae1eca66a4..905def3ab0bc 100644 --- a/x-pack/plugins/infra/public/components/asset_details/hooks/use_page_header.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/hooks/use_page_header.tsx @@ -5,22 +5,23 @@ * 2.0. */ import { - EuiIcon, - type EuiPageHeaderProps, - type EuiBreadcrumbsProps, EuiFlexGroup, EuiFlexItem, + EuiIcon, + type EuiBreadcrumbsProps, + type EuiPageHeaderProps, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; import { useLinkProps } from '@kbn/observability-shared-plugin/public'; -import React, { useCallback, useMemo } from 'react'; import { capitalize } from 'lodash'; +import React, { useCallback, useMemo } from 'react'; import { useHistory, useLocation } from 'react-router-dom'; -import { FormattedMessage } from '@kbn/i18n-react'; import { usePluginConfig } from '../../../containers/plugin_config_context'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; +import { useProfilingIntegrationSetting } from '../../../hooks/use_profiling_integration_setting'; import { APM_HOST_FILTER_FIELD } from '../constants'; import { LinkToAlertsRule, LinkToApmServices, LinkToNodeDetails } from '../links'; -import { ContentTabIds, type RouteState, type LinkOptions, type Tab, type TabIds } from '../types'; +import { ContentTabIds, type LinkOptions, type RouteState, type Tab, type TabIds } from '../types'; import { useAssetDetailsRenderPropsContext } from './use_asset_details_render_props'; import { useTabSwitcherContext } from './use_tab_switcher'; @@ -110,12 +111,14 @@ const useRightSideItems = (links?: LinkOptions[]) => { const useFeatureFlagTabs = () => { const { featureFlags } = usePluginConfig(); + const isProfilingEnabled = useProfilingIntegrationSetting(); + const featureFlagControlledTabs: Partial> = useMemo( () => ({ [ContentTabIds.OSQUERY]: featureFlags.osqueryEnabled, - [ContentTabIds.PROFILING]: featureFlags.profilingEnabled, + [ContentTabIds.PROFILING]: isProfilingEnabled, }), - [featureFlags.osqueryEnabled, featureFlags.profilingEnabled] + [featureFlags.osqueryEnabled, isProfilingEnabled] ); const isTabEnabled = useCallback( diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/kpis/cpu_profiling_prompt.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/kpis/cpu_profiling_prompt.tsx index afe39963e966..291b255e7ce3 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/overview/kpis/cpu_profiling_prompt.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/overview/kpis/cpu_profiling_prompt.tsx @@ -10,19 +10,24 @@ import { i18n } from '@kbn/i18n'; import { EuiButtonEmpty } from '@elastic/eui'; import { EuiBadge } from '@elastic/eui'; import { EuiFlexGroup } from '@elastic/eui'; -import { usePluginConfig } from '../../../../../containers/plugin_config_context'; +import { useProfilingIntegrationSetting } from '../../../../../hooks/use_profiling_integration_setting'; import { useTabSwitcherContext } from '../../../hooks/use_tab_switcher'; export function CpuProfilingPrompt() { const { showTab } = useTabSwitcherContext(); - const { featureFlags } = usePluginConfig(); + const isProfilingEnabled = useProfilingIntegrationSetting(); - if (!featureFlags.profilingEnabled) { + if (!isProfilingEnabled) { return null; } return ( - + {i18n.translate('xpack.infra.cpuProfilingPrompt.newBadgeLabel', { defaultMessage: 'NEW', diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/process_row.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/process_row.tsx index a874e071e6c2..c6f98c6d1422 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/processes/process_row.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/processes/process_row.tsx @@ -23,12 +23,8 @@ import { } from '@elastic/eui'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; import useToggle from 'react-use/lib/useToggle'; -import { - useObservabilityAIAssistant, - type Message, - MessageRole, - ContextualInsight, -} from '@kbn/observability-ai-assistant-plugin/public'; +import { type Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { Process } from './types'; import { ProcessRowCharts } from './process_row_charts'; @@ -38,7 +34,10 @@ interface Props { supportAIAssistant?: boolean; } export const ContextualInsightProcessRow = ({ command }: { command: string }) => { - const aiAssistant = useObservabilityAIAssistant(); + const { + observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, + } = useKibanaContextForPlugin().services; + const explainProcessMessages = useMemo(() => { if (!command) { return undefined; @@ -98,11 +97,11 @@ export const ContextualInsightProcessRow = ({ command }: { command: string }) => }, [command]); return ( <> - {aiAssistant.isEnabled() && explainProcessMessages ? ( + {ObservabilityAIAssistantContextualInsight && explainProcessMessages ? ( - diff --git a/x-pack/plugins/infra/public/hooks/use_profiling_integration_setting.ts b/x-pack/plugins/infra/public/hooks/use_profiling_integration_setting.ts new file mode 100644 index 000000000000..ee9101af55fc --- /dev/null +++ b/x-pack/plugins/infra/public/hooks/use_profiling_integration_setting.ts @@ -0,0 +1,21 @@ +/* + * 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 { useUiSetting } from '@kbn/kibana-react-plugin/public'; +import { enableInfrastructureProfilingIntegration } from '@kbn/observability-plugin/common'; +import { usePluginConfig } from '../containers/plugin_config_context'; + +export function useProfilingIntegrationSetting(): boolean { + const { + featureFlags: { profilingEnabled }, + } = usePluginConfig(); + const isProfilingUiSettingEnabled = useUiSetting( + enableInfrastructureProfilingIntegration + ); + + return profilingEnabled && isProfilingUiSettingEnabled; +} diff --git a/x-pack/plugins/infra/public/pages/logs/page_content.tsx b/x-pack/plugins/infra/public/pages/logs/page_content.tsx index ca6c281a4730..39868c74797d 100644 --- a/x-pack/plugins/infra/public/pages/logs/page_content.tsx +++ b/x-pack/plugins/infra/public/pages/logs/page_content.tsx @@ -11,9 +11,9 @@ import React, { useContext } from 'react'; import { Routes, Route } from '@kbn/shared-ux-router'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-shared-plugin/public'; -import { ObservabilityAIAssistantActionMenuItem } from '@kbn/observability-ai-assistant-plugin/public'; import { LazyAlertDropdownWrapper } from '../../alerting/log_threshold'; import { HelpCenterContent } from '../../components/help_center_content'; +import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; import { useReadOnlyBadge } from '../../hooks/use_readonly_badge'; import { HeaderActionMenuContext } from '../../utils/header_action_menu_provider'; import { RedirectWithQueryParams } from '../../utils/redirect_with_query_params'; @@ -26,11 +26,15 @@ import { StateMachinePlayground } from '../../observability_logs/xstate_helpers' import { NotFoundPage } from '../404'; export const LogsPageContent: React.FunctionComponent = () => { - const enableDeveloperRoutes = isDevMode(); const uiCapabilities = useKibana().services.application?.capabilities; const { setHeaderActionMenu, theme$ } = useContext(HeaderActionMenuContext); - const kibana = useKibana(); + const { + application: { getUrlForApp }, + observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, + } = useKibanaContextForPlugin().services; + + const enableDeveloperRoutes = isDevMode(); useReadOnlyBadge(!uiCapabilities?.logs?.save); @@ -76,13 +80,15 @@ export const LogsPageContent: React.FunctionComponent = () => { {ADD_DATA_LABEL} - + {ObservabilityAIAssistantActionMenuItem ? ( + + ) : null} )} diff --git a/x-pack/plugins/infra/public/pages/metrics/index.tsx b/x-pack/plugins/infra/public/pages/metrics/index.tsx index 46f2f1c12476..e617edcebf96 100644 --- a/x-pack/plugins/infra/public/pages/metrics/index.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/index.tsx @@ -13,8 +13,8 @@ import { Routes, Route } from '@kbn/shared-ux-router'; import { EuiErrorBoundary, EuiHeaderLinks, EuiHeaderLink } from '@elastic/eui'; import { useKibana, useUiSetting } from '@kbn/kibana-react-plugin/public'; import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-shared-plugin/public'; -import { ObservabilityAIAssistantActionMenuItem } from '@kbn/observability-ai-assistant-plugin/public'; import { enableInfrastructureHostsView } from '@kbn/observability-plugin/common'; +import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; import { MetricsSourceConfigurationProperties } from '../../../common/metrics_sources'; import { HelpCenterContent } from '../../components/help_center_content'; import { useReadOnlyBadge } from '../../hooks/use_readonly_badge'; @@ -44,6 +44,9 @@ const ADD_DATA_LABEL = i18n.translate('xpack.infra.metricsHeaderAddDataButtonLab }); export const InfrastructurePage = () => { + const { + observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, + } = useKibanaContextForPlugin().services; const config = usePluginConfig(); const uiCapabilities = useKibana().services.application?.capabilities; const { setHeaderActionMenu, theme$ } = useContext(HeaderActionMenuContext); @@ -95,7 +98,9 @@ export const InfrastructurePage = () => { > {ADD_DATA_LABEL} - + {ObservabilityAIAssistantActionMenuItem ? ( + + ) : null} )} diff --git a/x-pack/plugins/infra/public/pages/metrics/settings/features_configuration_panel.tsx b/x-pack/plugins/infra/public/pages/metrics/settings/features_configuration_panel.tsx index 19d7392fb7ca..aa69ef543c68 100644 --- a/x-pack/plugins/infra/public/pages/metrics/settings/features_configuration_panel.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/settings/features_configuration_panel.tsx @@ -10,9 +10,13 @@ import { EuiSpacer } from '@elastic/eui'; import { EuiForm } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; -import { enableInfrastructureHostsView } from '@kbn/observability-plugin/common'; +import { + enableInfrastructureHostsView, + enableInfrastructureProfilingIntegration, +} from '@kbn/observability-plugin/common'; import { useEditableSettings } from '@kbn/observability-shared-plugin/public'; import { LazyField } from '@kbn/advanced-settings-plugin/public'; +import { usePluginConfig } from '../../../containers/plugin_config_context'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; type Props = Pick< @@ -31,6 +35,7 @@ export function FeaturesConfigurationPanel({ const { services: { docLinks, notifications }, } = useKibanaContextForPlugin(); + const { featureFlags } = usePluginConfig(); return ( @@ -52,6 +57,17 @@ export function FeaturesConfigurationPanel({ toasts={notifications.toasts} unsavedChanges={unsavedChanges[enableInfrastructureHostsView]} /> + {featureFlags.profilingEnabled && ( + + )} ); } diff --git a/x-pack/plugins/infra/public/pages/metrics/settings/source_configuration_settings.tsx b/x-pack/plugins/infra/public/pages/metrics/settings/source_configuration_settings.tsx index 5769f861234c..a064aaf0e151 100644 --- a/x-pack/plugins/infra/public/pages/metrics/settings/source_configuration_settings.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/settings/source_configuration_settings.tsx @@ -17,7 +17,10 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { useCallback } from 'react'; import { Prompt, useEditableSettings } from '@kbn/observability-shared-plugin/public'; -import { enableInfrastructureHostsView } from '@kbn/observability-plugin/common'; +import { + enableInfrastructureHostsView, + enableInfrastructureProfilingIntegration, +} from '@kbn/observability-plugin/common'; import { SourceLoadingPage } from '../../../components/source_loading_page'; import { useSourceContext } from '../../../containers/metrics_source'; import { useInfraMLCapabilitiesContext } from '../../../containers/ml/infra_ml_capabilities'; @@ -61,7 +64,10 @@ export const SourceConfigurationSettings = ({ formState, formStateChanges, } = useSourceConfigurationFormState(source && source.configuration); - const infraUiSettings = useEditableSettings('infra_metrics', [enableInfrastructureHostsView]); + const infraUiSettings = useEditableSettings('infra_metrics', [ + enableInfrastructureHostsView, + enableInfrastructureProfilingIntegration, + ]); const resetAllUnsavedChanges = useCallback(() => { resetForm(); diff --git a/x-pack/plugins/lens/common/expressions/formula_context/context_fns.test.ts b/x-pack/plugins/lens/common/expressions/formula_context/context_fns.test.ts new file mode 100644 index 000000000000..f064238992b0 --- /dev/null +++ b/x-pack/plugins/lens/common/expressions/formula_context/context_fns.test.ts @@ -0,0 +1,91 @@ +/* + * 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 { ExecutionContext } from '@kbn/expressions-plugin/common'; +import { Adapters } from '@kbn/inspector-plugin/common'; +import { formulaIntervalFn, formulaNowFn, formulaTimeRangeFn } from './context_fns'; + +describe('interval', () => { + it('should return 0 if no time range available', () => { + // (not sure if this case is actually possible) + const result = formulaIntervalFn.fn(undefined, { targetBars: 100 }, { + getSearchContext: () => ({ + /* no time range */ + }), + } as ExecutionContext); + expect(result).toEqual(0); + }); + + it('should return 0 if no targetBars is passed', () => { + const result = formulaIntervalFn.fn( + undefined, + { + /* no targetBars */ + }, + { + getSearchContext: () => ({ + timeRange: { + from: 'now-15m', + to: 'now', + }, + }), + } as ExecutionContext + ); + expect(result).toEqual(0); + }); + + it('should return a valid value > 0 if both timeRange and targetBars is passed', () => { + const result = formulaIntervalFn.fn(undefined, { targetBars: 100 }, { + getSearchContext: () => ({ + timeRange: { + from: 'now-15m', + to: 'now', + }, + }), + } as ExecutionContext); + expect(result).toEqual(10000); + }); +}); + +describe('time range', () => { + it('should return 0 if no time range is available', () => { + // (not sure if this case is actually possible) + const result = formulaTimeRangeFn.fn(undefined, {}, { + getSearchContext: () => ({ + /* no time range */ + }), + } as ExecutionContext); + expect(result).toEqual(0); + }); + + it('should return a valid value > 0 if time range is available', () => { + const result = formulaTimeRangeFn.fn(undefined, {}, { + getSearchContext: () => ({ + timeRange: { + from: 'now-15m', + to: 'now', + }, + now: 1000000, // important to provide this to make the result consistent + }), + } as ExecutionContext); + + expect(result).toBe(900000); + }); +}); + +describe('now', () => { + it('should return the now value when passed', () => { + const now = 123456789; + expect( + formulaNowFn.fn(undefined, {}, { + getSearchContext: () => ({ + now, + }), + } as ExecutionContext) + ).toEqual(now); + }); +}); diff --git a/x-pack/plugins/lens/common/expressions/formula_context/context_fns.ts b/x-pack/plugins/lens/common/expressions/formula_context/context_fns.ts new file mode 100644 index 000000000000..2f77d1142f7d --- /dev/null +++ b/x-pack/plugins/lens/common/expressions/formula_context/context_fns.ts @@ -0,0 +1,97 @@ +/* + * 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 { getAbsoluteTimeRange, calcAutoIntervalNear } from '@kbn/data-plugin/common'; +import type { TimeRange } from '@kbn/es-query'; +import type { ExpressionFunctionDefinition } from '@kbn/expressions-plugin/common'; +import moment from 'moment'; +import { i18n } from '@kbn/i18n'; + +export type ExpressionFunctionFormulaTimeRange = ExpressionFunctionDefinition< + 'formula_time_range', + undefined, + object, + number +>; + +const getTimeRangeAsNumber = (timeRange: TimeRange | undefined, now: number | undefined) => { + if (!timeRange) return 0; + const absoluteTimeRange = getAbsoluteTimeRange( + timeRange, + now != null ? { forceNow: new Date(now) } : {} + ); + return timeRange ? moment(absoluteTimeRange.to).diff(moment(absoluteTimeRange.from)) : 0; +}; + +export const formulaTimeRangeFn: ExpressionFunctionFormulaTimeRange = { + name: 'formula_time_range', + + help: i18n.translate('xpack.lens.formula.timeRange.help', { + defaultMessage: 'The specified time range, in milliseconds (ms).', + }), + + args: {}, + + fn(_input, _args, { getSearchContext }) { + const { timeRange, now } = getSearchContext(); + return getTimeRangeAsNumber(timeRange, now); + }, +}; + +export type ExpressionFunctionFormulaInterval = ExpressionFunctionDefinition< + 'formula_interval', + undefined, + { + targetBars?: number; + }, + number +>; + +export const formulaIntervalFn: ExpressionFunctionFormulaInterval = { + name: 'formula_interval', + + help: i18n.translate('xpack.lens.formula.interval.help', { + defaultMessage: 'The specified minimum interval for the date histogram, in milliseconds (ms).', + }), + + args: { + targetBars: { + types: ['number'], + help: i18n.translate('xpack.lens.formula.interval.targetBars.help', { + defaultMessage: 'The target number of bars for the date histogram.', + }), + }, + }, + + fn(_input, args, { getSearchContext }) { + const { timeRange, now } = getSearchContext(); + return timeRange && args.targetBars + ? calcAutoIntervalNear(args.targetBars, getTimeRangeAsNumber(timeRange, now)).asMilliseconds() + : 0; + }, +}; + +export type ExpressionFunctionFormulaNow = ExpressionFunctionDefinition< + 'formula_now', + undefined, + object, + number +>; + +export const formulaNowFn: ExpressionFunctionFormulaNow = { + name: 'formula_now', + + help: i18n.translate('xpack.lens.formula.now.help', { + defaultMessage: 'The current now moment used in Kibana expressed in milliseconds (ms).', + }), + + args: {}, + + fn(_input, _args, { getSearchContext }) { + return getSearchContext().now ?? Date.now(); + }, +}; diff --git a/x-pack/plugins/lens/common/expressions/formula_context/index.ts b/x-pack/plugins/lens/common/expressions/formula_context/index.ts new file mode 100644 index 000000000000..da8931779cfb --- /dev/null +++ b/x-pack/plugins/lens/common/expressions/formula_context/index.ts @@ -0,0 +1,8 @@ +/* + * 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 * from './context_fns'; diff --git a/x-pack/plugins/lens/common/expressions/index.ts b/x-pack/plugins/lens/common/expressions/index.ts index ccb6343334d6..c3ccaddac9fd 100644 --- a/x-pack/plugins/lens/common/expressions/index.ts +++ b/x-pack/plugins/lens/common/expressions/index.ts @@ -11,3 +11,4 @@ export * from './format_column'; export * from './map_to_columns'; export * from './time_scale'; export * from './datatable'; +export * from './formula_context'; diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/context_variables.test.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/context_variables.test.ts index 407f458a11e3..db38e18d3bd1 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/context_variables.test.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/context_variables.test.ts @@ -34,20 +34,6 @@ function createLayer( }; } -function createExpression(type: 'interval' | 'now' | 'time_range', value: number) { - return [ - { - type: 'function', - function: 'mathColumn', - arguments: { - id: ['col1'], - name: [`Constant: ${type}`], - expression: [String(value)], - }, - }, - ]; -} - describe('context variables', () => { describe('interval', () => { describe('getErrorMessages', () => { @@ -124,53 +110,6 @@ describe('context variables', () => { ).toBeUndefined(); }); }); - describe('toExpression', () => { - it('should return 0 if no dateRange is passed', () => { - expect( - intervalOperation.toExpression( - createLayer('interval'), - 'col1', - createMockedIndexPattern(), - { now: new Date(), targetBars: 100 } - ) - ).toEqual(expect.arrayContaining(createExpression('interval', 0))); - }); - - it('should return 0 if no targetBars is passed', () => { - expect( - intervalOperation.toExpression( - createLayer('interval'), - 'col1', - createMockedIndexPattern(), - { - dateRange: { - fromDate: new Date(2022, 0, 1).toISOString(), - toDate: new Date(2023, 0, 1).toISOString(), - }, - now: new Date(), - } - ) - ).toEqual(expect.arrayContaining(createExpression('interval', 0))); - }); - - it('should return a valid value > 0 if both dateRange and targetBars is passed', () => { - expect( - intervalOperation.toExpression( - createLayer('interval'), - 'col1', - createMockedIndexPattern(), - { - dateRange: { - fromDate: new Date(2022, 0, 1).toISOString(), - toDate: new Date(2023, 0, 1).toISOString(), - }, - now: new Date(), - targetBars: 100, - } - ) - ).toEqual(expect.arrayContaining(createExpression('interval', 86400000))); - }); - }); }); describe('time_range', () => { describe('getErrorMessages', () => { @@ -202,35 +141,6 @@ describe('context variables', () => { ).toEqual(expect.arrayContaining(['The current time range interval is not available'])); }); }); - - describe('toExpression', () => { - it('should return 0 if no dateRange is passed', () => { - expect( - timeRangeOperation.toExpression( - createLayer('time_range'), - 'col1', - createMockedIndexPattern(), - { now: new Date(), targetBars: 100 } - ) - ).toEqual(expect.arrayContaining(createExpression('time_range', 0))); - }); - - it('should return a valid value > 0 if dateRange is passed', () => { - expect( - timeRangeOperation.toExpression( - createLayer('time_range'), - 'col1', - createMockedIndexPattern(), - { - dateRange: { - fromDate: new Date(2022, 0, 1).toISOString(), - toDate: new Date(2023, 0, 1).toISOString(), - }, - } - ) - ).toEqual(expect.arrayContaining(createExpression('time_range', 31536000000))); - }); - }); }); describe('now', () => { describe('getErrorMessages', () => { @@ -240,16 +150,5 @@ describe('context variables', () => { ).toBeUndefined(); }); }); - - describe('toExpression', () => { - it('should return the now value when passed', () => { - const now = new Date(); - expect( - nowOperation.toExpression(createLayer('now'), 'col1', createMockedIndexPattern(), { - now, - }) - ).toEqual(expect.arrayContaining(createExpression('now', +now))); - }); - }); }); }); diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/context_variables.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/context_variables.tsx index 4b7b5b94b493..f5f28d94ad22 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/context_variables.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/context_variables.tsx @@ -6,9 +6,18 @@ */ import { i18n } from '@kbn/i18n'; -import moment from 'moment'; -import { calcAutoIntervalNear, UI_SETTINGS } from '@kbn/data-plugin/common'; +import { UI_SETTINGS } from '@kbn/data-plugin/common'; import { partition } from 'lodash'; +import { + buildExpressionFunction, + buildExpression, + ExpressionFunctionDefinitions, +} from '@kbn/expressions-plugin/common'; +import { + ExpressionFunctionFormulaInterval, + ExpressionFunctionFormulaNow, + ExpressionFunctionFormulaTimeRange, +} from '../../../../../../common/expressions/formula_context/context_fns'; import type { DateHistogramIndexPatternColumn, FormBasedLayer, @@ -58,13 +67,9 @@ export interface TimeRangeIndexPatternColumn extends ReferenceBasedIndexPatternC operationType: 'time_range'; } -function getTimeRangeFromContext({ dateRange }: ContextValues) { - return dateRange ? moment(dateRange.toDate).diff(moment(dateRange.fromDate)) : 0; -} - function getTimeRangeErrorMessages( - layer: FormBasedLayer, - columnId: string, + _layer: FormBasedLayer, + _columnId: string, indexPattern: IndexPattern, dateRange?: DateRange | undefined ) { @@ -89,12 +94,11 @@ function getTimeRangeErrorMessages( export const timeRangeOperation = createContextValueBasedOperation({ type: 'time_range', label: 'Time range', - description: i18n.translate('xpack.lens.indexPattern.timeRange.documentation.markdown', { - defaultMessage: ` -The specified time range, in milliseconds (ms). - `, + description: i18n.translate('xpack.lens.formula.timeRange.help', { + defaultMessage: 'The specified time range, in milliseconds (ms).', }), - getContextValue: getTimeRangeFromContext, + getExpressionFunction: (_context: ContextValues) => + buildExpressionFunction('formula_time_range', {}), getErrorMessage: getTimeRangeErrorMessages, }); @@ -102,9 +106,6 @@ export interface NowIndexPatternColumn extends ReferenceBasedIndexPatternColumn operationType: 'now'; } -function getNowFromContext({ now }: ContextValues) { - return now == null ? Date.now() : +now; -} function getNowErrorMessage() { return undefined; } @@ -112,12 +113,11 @@ function getNowErrorMessage() { export const nowOperation = createContextValueBasedOperation({ type: 'now', label: 'Current now', - description: i18n.translate('xpack.lens.indexPattern.now.documentation.markdown', { - defaultMessage: ` - The current now moment used in Kibana expressed in milliseconds (ms). - `, + description: i18n.translate('xpack.lens.formula.now.help', { + defaultMessage: 'The current now moment used in Kibana expressed in milliseconds (ms).', }), - getContextValue: getNowFromContext, + getExpressionFunction: (_context: ContextValues) => + buildExpressionFunction('formula_now', {}), getErrorMessage: getNowErrorMessage, }); @@ -125,12 +125,6 @@ export interface IntervalIndexPatternColumn extends ReferenceBasedIndexPatternCo operationType: 'interval'; } -function getIntervalFromContext(context: ContextValues) { - return context.dateRange && context.targetBars - ? calcAutoIntervalNear(context.targetBars, getTimeRangeFromContext(context)).asMilliseconds() - : 0; -} - function getIntervalErrorMessages( layer: FormBasedLayer, columnId: string, @@ -174,12 +168,13 @@ function getIntervalErrorMessages( export const intervalOperation = createContextValueBasedOperation({ type: 'interval', label: 'Date histogram interval', - description: i18n.translate('xpack.lens.indexPattern.interval.documentation.markdown', { - defaultMessage: ` -The specified minimum interval for the date histogram, in milliseconds (ms). - `, + description: i18n.translate('xpack.lens.formula.interval.help', { + defaultMessage: 'The specified minimum interval for the date histogram, in milliseconds (ms).', }), - getContextValue: getIntervalFromContext, + getExpressionFunction: ({ targetBars }: ContextValues) => + buildExpressionFunction('formula_interval', { + targetBars, + }), getErrorMessage: getIntervalErrorMessages, }); @@ -191,14 +186,14 @@ export type ConstantsIndexPatternColumn = function createContextValueBasedOperation({ label, type, - getContextValue, + getExpressionFunction, getErrorMessage, description, }: { label: string; type: ColumnType['operationType']; description: string; - getContextValue: (context: ContextValues) => number; + getExpressionFunction: (context: ContextValues) => ReturnType; getErrorMessage: OperationDefinition['getErrorMessage']; }): OperationDefinition { return { @@ -233,15 +228,11 @@ function createContextValueBasedOperation { const column = layer.columns[columnId] as ColumnType; return [ - { - type: 'function', - function: 'mathColumn', - arguments: { - id: [columnId], - name: [column.label], - expression: [String(getContextValue(context))], - }, - }, + buildExpressionFunction('mathColumn', { + id: columnId, + name: column.label, + expression: buildExpression([getExpressionFunction(context)]), + }).toAst(), ]; }, createCopy(layers, source, target) { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx index b0729cb489ba..04d69c1afc57 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.test.tsx @@ -484,6 +484,7 @@ describe('ConfigPanel', () => { }, dateRange: expect.anything(), filters: [], + now: expect.anything(), query: undefined, }, groupId: 'a', diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx index 73a4ef853390..bc3b71c08487 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.tsx @@ -24,7 +24,6 @@ import { } from '@elastic/eui'; import type { CoreStart } from '@kbn/core/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { ExecutionContextSearch } from '@kbn/es-query'; import type { ExpressionRendererEvent, ExpressionRenderError, @@ -66,7 +65,6 @@ import { editVisualizationAction, setSaveable, useLensSelector, - selectExecutionContext, selectIsFullscreenDatasource, selectVisualization, selectDatasourceStates, @@ -80,6 +78,7 @@ import { VisualizationState, DatasourceStates, DataViewsState, + selectExecutionContextSearch, } from '../../../state_management'; import type { LensInspector } from '../../../lens_inspector_service'; import { inferTimeField, DONT_CLOSE_DIMENSION_CONTAINER_ON_CLICK_CLASS } from '../../../utils'; @@ -712,7 +711,7 @@ export const VisualizationWrapper = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const context = useLensSelector(selectExecutionContext); + const searchContext = useLensSelector(selectExecutionContextSearch); // Used for reporting const { isRenderComplete, hasDynamicError, setIsRenderComplete, setDynamicError, nodeRef } = useReportingState(errors); @@ -722,18 +721,6 @@ export const VisualizationWrapper = ({ onRender$(); }, [setIsRenderComplete, onRender$]); - const searchContext: ExecutionContextSearch = useMemo( - () => ({ - query: context.query, - timeRange: { - from: context.dateRange.fromDate, - to: context.dateRange.toDate, - }, - filters: context.filters, - disableWarningToasts: true, - }), - [context] - ); const searchSessionId = useLensSelector(selectSearchSessionId); if (errors.length) { diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index 9851a10c8641..e5d34db62ba7 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -1253,6 +1253,7 @@ export class Embeddable const input = this.getInput(); const context: ExecutionContextSearch = { + now: this.deps.data.nowProvider.get().getTime(), timeRange: input.timeslice !== undefined ? { diff --git a/x-pack/plugins/lens/public/expressions.ts b/x-pack/plugins/lens/public/expressions.ts index ef12b43bec71..32856175db1b 100644 --- a/x-pack/plugins/lens/public/expressions.ts +++ b/x-pack/plugins/lens/public/expressions.ts @@ -14,6 +14,11 @@ import { formatColumn } from '../common/expressions/format_column'; import { counterRate } from '../common/expressions/counter_rate'; import { getTimeScale } from '../common/expressions/time_scale/time_scale'; import { collapse } from '../common/expressions/collapse'; +import { + formulaIntervalFn, + formulaNowFn, + formulaTimeRangeFn, +} from '../common/expressions/formula_context'; type TimeScaleArguments = Parameters; @@ -25,6 +30,9 @@ export const setupExpressions = ( getForceNow: TimeScaleArguments[2] ) => { [ + formulaTimeRangeFn, + formulaNowFn, + formulaIntervalFn, collapse, counterRate, formatColumn, diff --git a/x-pack/plugins/lens/public/state_management/selectors.ts b/x-pack/plugins/lens/public/state_management/selectors.ts index 7572c3128729..44121c4d064c 100644 --- a/x-pack/plugins/lens/public/state_management/selectors.ts +++ b/x-pack/plugins/lens/public/state_management/selectors.ts @@ -46,9 +46,11 @@ export const selectTriggerApplyChanges = (state: LensState) => { return shouldApply; }; +// TODO - is there any point to keeping this around since we have selectExecutionSearchContext? export const selectExecutionContext = createSelector( [selectQuery, selectFilters, selectResolvedDateRange], (query, filters, dateRange) => ({ + now: Date.now(), dateRange, query, filters, @@ -56,6 +58,7 @@ export const selectExecutionContext = createSelector( ); export const selectExecutionContextSearch = createSelector(selectExecutionContext, (res) => ({ + now: res.now, query: res.query, timeRange: { from: res.dateRange.fromDate, diff --git a/x-pack/plugins/lens/server/expressions/expressions.ts b/x-pack/plugins/lens/server/expressions/expressions.ts index 1e80fc5bb49a..b5e8fc285160 100644 --- a/x-pack/plugins/lens/server/expressions/expressions.ts +++ b/x-pack/plugins/lens/server/expressions/expressions.ts @@ -13,6 +13,9 @@ import { mapToColumns, getTimeScale, getDatatable, + formulaIntervalFn, + formulaNowFn, + formulaTimeRangeFn, } from '../../common/expressions'; import { getDatatableUtilitiesFactory, getFormatFactory, getTimeZoneFactory } from './utils'; @@ -23,6 +26,9 @@ export const setupExpressions = ( expressions: ExpressionsServerSetup ) => { [ + formulaNowFn, + formulaIntervalFn, + formulaTimeRangeFn, counterRate, formatColumn, mapToColumns, diff --git a/x-pack/plugins/logs_shared/public/components/log_ai_assistant/index.tsx b/x-pack/plugins/logs_shared/public/components/log_ai_assistant/index.tsx index 0bfb9f516209..78b696388e16 100644 --- a/x-pack/plugins/logs_shared/public/components/log_ai_assistant/index.tsx +++ b/x-pack/plugins/logs_shared/public/components/log_ai_assistant/index.tsx @@ -4,25 +4,18 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { ComponentType } from 'react'; -import { Optional } from '@kbn/utility-types'; +import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; +import React from 'react'; import { dynamic } from '../../../common/dynamic'; -import type { LogAIAssistantDeps } from './log_ai_assistant'; export const LogAIAssistant = dynamic(() => import('./log_ai_assistant')); -interface LogAIAssistantFactoryDeps { - observabilityAIAssistant: LogAIAssistantDeps['observabilityAIAssistant']; -} - -export type LogAIAssistantComponent = ComponentType< - Optional ->; - export function createLogAIAssistant({ - observabilityAIAssistant: aiAssistantService, -}: LogAIAssistantFactoryDeps): LogAIAssistantComponent { - return ({ observabilityAIAssistant = aiAssistantService, ...props }) => ( + observabilityAIAssistant, +}: { + observabilityAIAssistant: ObservabilityAIAssistantPluginStart; +}) { + return ({ ...props }) => ( ); } diff --git a/x-pack/plugins/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx b/x-pack/plugins/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx index 8a8c755d70ff..79adfde85540 100644 --- a/x-pack/plugins/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx +++ b/x-pack/plugins/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx @@ -8,12 +8,9 @@ import React, { useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { - ContextualInsight, type Message, - ObservabilityAIAssistantPluginStart, MessageRole, - ObservabilityAIAssistantProvider, - useObservabilityAIAssistant, + type ObservabilityAIAssistantPluginStart, } from '@kbn/observability-ai-assistant-plugin/public'; import { LogEntryField } from '../../../common'; import { explainLogMessageTitle, similarLogMessagesTitle } from './translations'; @@ -23,16 +20,14 @@ export interface LogAIAssistantDocument { } export interface LogAIAssistantProps { + observabilityAIAssistant: ObservabilityAIAssistantPluginStart; doc: LogAIAssistantDocument | undefined; } -export interface LogAIAssistantDeps extends LogAIAssistantProps { - observabilityAIAssistant: ObservabilityAIAssistantPluginStart['service']; -} - -export const LogAIAssistant = withProviders(({ doc }: LogAIAssistantProps) => { - const aiAssistant = useObservabilityAIAssistant(); - +export const LogAIAssistant = ({ + doc, + observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, +}: LogAIAssistantProps) => { const explainLogMessageMessages = useMemo(() => { if (!doc) { return undefined; @@ -75,18 +70,18 @@ export const LogAIAssistant = withProviders(({ doc }: LogAIAssistantProps) => { return ( - {aiAssistant.isEnabled() && explainLogMessageMessages ? ( + {ObservabilityAIAssistantContextualInsight && explainLogMessageMessages ? ( - ) : null} - {aiAssistant.isEnabled() && similarLogMessageMessages ? ( + {ObservabilityAIAssistantContextualInsight && similarLogMessageMessages ? ( - { ) : null} ); -}); +}; // eslint-disable-next-line import/no-default-export export default LogAIAssistant; - -function withProviders(Component: React.FunctionComponent) { - return function ComponentWithProviders({ - observabilityAIAssistant: observabilityAIAssistantService, - ...props - }: LogAIAssistantDeps) { - return ( - - - - ); - }; -} diff --git a/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx b/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx index 2c5913d282e1..aca2638a6120 100644 --- a/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx +++ b/x-pack/plugins/logs_shared/public/components/logging/log_entry_flyout/log_entry_flyout.tsx @@ -100,12 +100,6 @@ export const LogEntryFlyout = ({ onSetFieldFilter, logViewReference, }: LogEntryFlyoutProps) => { - const { - services: { - observabilityAIAssistant: { service: observabilityAIAssistantService }, - }, - } = useKibanaContextForPlugin(); - const { cancelRequest: cancelLogEntryRequest, errors: logEntryErrors, @@ -119,6 +113,8 @@ export const LogEntryFlyout = ({ logEntryId, }); + const { observabilityAIAssistant } = useKibanaContextForPlugin().services; + useEffect(() => { if (logViewReference && logEntryId) { fetchLogEntry(); @@ -186,10 +182,7 @@ export const LogEntryFlyout = ({ > - + diff --git a/x-pack/plugins/logs_shared/public/plugin.ts b/x-pack/plugins/logs_shared/public/plugin.ts index 372ca2c124bc..092e95570db7 100644 --- a/x-pack/plugins/logs_shared/public/plugin.ts +++ b/x-pack/plugins/logs_shared/public/plugin.ts @@ -33,9 +33,7 @@ export class LogsSharedPlugin implements LogsSharedClientPluginClass { search: data.search, }); - const LogAIAssistant = createLogAIAssistant({ - observabilityAIAssistant: observabilityAIAssistant.service, - }); + const LogAIAssistant = createLogAIAssistant({ observabilityAIAssistant }); return { logViews, diff --git a/x-pack/plugins/logs_shared/public/types.ts b/x-pack/plugins/logs_shared/public/types.ts index c0379c6fc21f..2a2e9c1cf742 100644 --- a/x-pack/plugins/logs_shared/public/types.ts +++ b/x-pack/plugins/logs_shared/public/types.ts @@ -17,7 +17,7 @@ import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; -import { LogAIAssistantComponent } from './components/log_ai_assistant'; +import type { LogAIAssistantProps } from './components/log_ai_assistant/log_ai_assistant'; // import type { OsqueryPluginStart } from '../../osquery/public'; import { LogViewsServiceSetup, LogViewsServiceStart } from './services/log_views'; @@ -28,7 +28,7 @@ export interface LogsSharedClientSetupExports { export interface LogsSharedClientStartExports { logViews: LogViewsServiceStart; - LogAIAssistant: LogAIAssistantComponent; + LogAIAssistant: (props: Omit) => JSX.Element; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/x-pack/plugins/ml/public/alerting/beta_badge.tsx b/x-pack/plugins/ml/public/alerting/beta_badge.tsx deleted file mode 100644 index 1f03fa5c6c8b..000000000000 --- a/x-pack/plugins/ml/public/alerting/beta_badge.tsx +++ /dev/null @@ -1,25 +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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { FC } from 'react'; -import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; - -export const BetaBadge: FC<{ message: string }> = ({ message }) => { - return ( - - - - - - ); -}; diff --git a/x-pack/plugins/ml/public/alerting/jobs_health_rule/anomaly_detection_jobs_health_rule_trigger.tsx b/x-pack/plugins/ml/public/alerting/jobs_health_rule/anomaly_detection_jobs_health_rule_trigger.tsx index daab200ff070..b47c74cfef22 100644 --- a/x-pack/plugins/ml/public/alerting/jobs_health_rule/anomaly_detection_jobs_health_rule_trigger.tsx +++ b/x-pack/plugins/ml/public/alerting/jobs_health_rule/anomaly_detection_jobs_health_rule_trigger.tsx @@ -20,7 +20,6 @@ import { HttpService } from '../../application/services/http_service'; import { useMlKibana } from '../../application/contexts/kibana'; import { TestsSelectionControl } from './tests_selection_control'; import { ALL_JOBS_SELECTION } from '../../../common/constants/alerts'; -import { BetaBadge } from '../beta_badge'; export type MlAnomalyAlertTriggerProps = RuleTypeParamsExpressionProps; @@ -108,15 +107,6 @@ const AnomalyDetectionJobsHealthRuleTrigger: FC = ({ error={formErrors} isInvalid={isFormInvalid} > - - ; @@ -158,12 +157,6 @@ const MlAnomalyAlertTrigger: FC = ({ return ( - - = ( setStep={setStep} isDetailsStepValid={pipelineNameError === undefined && targetFieldError === undefined} isConfigureProcessorStepValid={hasUnsavedChanges === false} + hasProcessorStep + pipelineCreated={formState.pipelineCreated} /> {step === ADD_INFERENCE_PIPELINE_STEPS.DETAILS && ( @@ -184,6 +186,7 @@ export const AddInferencePipelineFlyout: FC = ( isConfigureProcessorStepValid={hasUnsavedChanges === false} pipelineCreated={formState.pipelineCreated} creatingPipeline={formState.creatingPipeline} + hasProcessorStep /> diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/components/pipeline_details.tsx b/x-pack/plugins/ml/public/application/components/ml_inference/components/pipeline_details.tsx index bd36ee4bf6c4..034c6ed5468e 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/components/pipeline_details.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_inference/components/pipeline_details.tsx @@ -14,18 +14,14 @@ import { EuiFlexItem, EuiForm, EuiFormRow, - EuiLink, - EuiSpacer, - EuiTitle, - EuiText, - EuiTextArea, EuiPanel, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useMlKibana } from '../../../contexts/kibana'; import type { MlInferenceState } from '../types'; +import { PipelineDetailsTitle } from '../../shared'; +import { PipelineNameAndDescription } from '../../shared'; interface Props { handlePipelineConfigUpdate: (configUpdate: Partial) => void; @@ -47,12 +43,6 @@ export const PipelineDetails: FC = memo( targetField, targetFieldError, }) => { - const { - services: { - docLinks: { links }, - }, - } = useMlKibana(); - const handleConfigChange = (value: string, type: string) => { handlePipelineConfigUpdate({ [type]: value }); }; @@ -60,133 +50,18 @@ export const PipelineDetails: FC = memo( return ( - -

- {i18n.translate( - 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.configure.title', - { defaultMessage: 'Create a pipeline' } - )} -

-
- - -

- {modelId}, - pipeline: ( - - pipeline - - ), - }} - /> -

-

- - _reindex API - - ), - pipelineSimulateLink: ( - - pipeline/_simulate - - ), - }} - /> -

-
+
- {/* NAME */} - - {i18n.translate( - 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.configure.name.helpText', - { - defaultMessage: - 'Pipeline names are unique within a deployment and can only contain letters, numbers, underscores, and hyphens.', - } - )} -
- ) - } - error={pipelineNameError} - isInvalid={pipelineNameError !== undefined} - > - ) => - handleConfigChange(e.target.value, 'pipelineName') - } - /> - - {/* DESCRIPTION */} - - {i18n.translate( - 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.configure.description.helpText', - { - defaultMessage: 'A description of what this pipeline does.', - } - )} -
- } - > - ) => - handleConfigChange(e.target.value, 'pipelineDescription') - } - /> - + {/* NAME and DESCRIPTION */} + {/* TARGET FIELD */} = ({ pipelineName, sourceIndex }) => { - const [selectedIndex, setSelectedIndex] = useState([ - { label: sourceIndex }, - ]); + const [selectedIndex, setSelectedIndex] = useState( + sourceIndex ? [{ label: sourceIndex }] : [] + ); const [options, setOptions] = useState([]); const [destinationIndex, setDestinationIndex] = useState(''); const [destinationIndexExists, setDestinationIndexExists] = useState(false); @@ -205,7 +205,7 @@ export const ReindexWithPipeline: FC = ({ pipelineName, sourceIndex }) => setCanReindexError(errorMessage); } } - if (hasPrivileges !== undefined) { + if (hasPrivileges !== undefined && selectedIndex.length) { checkPrivileges(); } }, @@ -264,6 +264,7 @@ export const ReindexWithPipeline: FC = ({ pipelineName, sourceIndex }) => 0) || !canReindex || destinationIndexExists @@ -395,7 +396,7 @@ export const ReindexWithPipeline: FC = ({ pipelineName, sourceIndex }) => 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.review.reindexStartedMessage', { defaultMessage: 'Reindexing of {sourceIndex} to {destinationIndex} has started.', - values: { sourceIndex, destinationIndex }, + values: { sourceIndex: selectedIndex[0].label, destinationIndex }, } )} color="success" diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/get_steps.ts b/x-pack/plugins/ml/public/application/components/ml_inference/get_steps.ts index a7d3ea17de09..3f7c9ff2255f 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/get_steps.ts +++ b/x-pack/plugins/ml/public/application/components/ml_inference/get_steps.ts @@ -11,7 +11,8 @@ import { ADD_INFERENCE_PIPELINE_STEPS } from './constants'; export function getSteps( step: AddInferencePipelineSteps, isConfigureStepValid: boolean, - isPipelineDataValid: boolean + isPipelineDataValid: boolean, + hasProcessorStep: boolean ) { let nextStep: AddInferencePipelineSteps | undefined; let previousStep: AddInferencePipelineSteps | undefined; @@ -19,7 +20,9 @@ export function getSteps( switch (step) { case ADD_INFERENCE_PIPELINE_STEPS.DETAILS: - nextStep = ADD_INFERENCE_PIPELINE_STEPS.CONFIGURE_PROCESSOR; + nextStep = hasProcessorStep + ? ADD_INFERENCE_PIPELINE_STEPS.CONFIGURE_PROCESSOR + : ADD_INFERENCE_PIPELINE_STEPS.ON_FAILURE; isContinueButtonEnabled = isConfigureStepValid; break; case ADD_INFERENCE_PIPELINE_STEPS.CONFIGURE_PROCESSOR: @@ -29,7 +32,9 @@ export function getSteps( break; case ADD_INFERENCE_PIPELINE_STEPS.ON_FAILURE: nextStep = ADD_INFERENCE_PIPELINE_STEPS.TEST; - previousStep = ADD_INFERENCE_PIPELINE_STEPS.CONFIGURE_PROCESSOR; + previousStep = hasProcessorStep + ? ADD_INFERENCE_PIPELINE_STEPS.CONFIGURE_PROCESSOR + : ADD_INFERENCE_PIPELINE_STEPS.DETAILS; isContinueButtonEnabled = isPipelineDataValid; break; case ADD_INFERENCE_PIPELINE_STEPS.TEST: diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/validation.ts b/x-pack/plugins/ml/public/application/components/ml_inference/validation.ts index f6326669cf55..8c2e567b1c4f 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/validation.ts +++ b/x-pack/plugins/ml/public/application/components/ml_inference/validation.ts @@ -5,8 +5,10 @@ * 2.0. */ +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { i18n } from '@kbn/i18n'; import { IngestInferenceProcessor } from '@elastic/elasticsearch/lib/api/types'; +import type { SupportedPytorchTasksType } from '@kbn/ml-trained-models-utils'; import { InferenceModelTypes } from './types'; import type { AddInferencePipelineFormErrors } from './types'; @@ -46,6 +48,18 @@ const INFERENCE_CONFIG_MODEL_TYPE_ERROR = i18n.translate( defaultMessage: 'Inference configuration inference type must match model type.', } ); +const PROCESSOR_REQUIRED = i18n.translate( + 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.configure.processorRequiredError', + { + defaultMessage: 'At least one processor is required to create the pipeline.', + } +); +const INFERENCE_PROCESSOR_REQUIRED = i18n.translate( + 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.configure.inferenceProcessorRequiredError', + { + defaultMessage: "An inference processor specifying 'model_id' is required.", + } +); const VALID_PIPELINE_NAME_REGEX = /^[\w\-]+$/; export const isValidPipelineName = (input: string): boolean => { @@ -75,7 +89,7 @@ export const validateInferencePipelineConfigurationStep = ( export const validateInferenceConfig = ( inferenceConfig: IngestInferenceProcessor['inference_config'], - modelType?: InferenceModelTypes + modelType?: InferenceModelTypes | SupportedPytorchTasksType ) => { const inferenceConfigKeys = Object.keys(inferenceConfig ?? {}); let error; @@ -116,3 +130,31 @@ export const validateFieldMap = ( return error; }; + +export const validatePipelineProcessors = ( + pipelineProcessors: estypes.IngestPipeline, + taskType?: SupportedPytorchTasksType +) => { + const { processors } = pipelineProcessors; + let error; + // Must have at least one processor + if (!Array.isArray(processors) || (Array.isArray(processors) && processors.length < 1)) { + error = PROCESSOR_REQUIRED; + } + + const inferenceProcessor = processors?.find( + (processor) => processor.inference && processor.inference.model_id + ); + + if (inferenceProcessor === undefined) { + error = INFERENCE_PROCESSOR_REQUIRED; + } else { + // If populated, inference config must have the correct model type + const inferenceConfig = inferenceProcessor.inference?.inference_config; + if (taskType && inferenceConfig) { + error = validateInferenceConfig(inferenceConfig, taskType); + } + } + + return error; +}; diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/components/add_inference_pipeline_footer.tsx b/x-pack/plugins/ml/public/application/components/shared/add_inference_pipeline_footer.tsx similarity index 88% rename from x-pack/plugins/ml/public/application/components/ml_inference/components/add_inference_pipeline_footer.tsx rename to x-pack/plugins/ml/public/application/components/shared/add_inference_pipeline_footer.tsx index 04ea2ea21737..e6d000c4e953 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/components/add_inference_pipeline_footer.tsx +++ b/x-pack/plugins/ml/public/application/components/shared/add_inference_pipeline_footer.tsx @@ -9,14 +9,14 @@ import React, { FC, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButton, EuiButtonEmpty, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { AddInferencePipelineSteps } from '../types'; +import type { AddInferencePipelineSteps } from '../ml_inference/types'; import { BACK_BUTTON_LABEL, CANCEL_BUTTON_LABEL, CLOSE_BUTTON_LABEL, CONTINUE_BUTTON_LABEL, -} from '../constants'; -import { getSteps } from '../get_steps'; +} from '../ml_inference/constants'; +import { getSteps } from '../ml_inference/get_steps'; interface Props { isDetailsStepValid: boolean; @@ -26,7 +26,8 @@ interface Props { step: AddInferencePipelineSteps; onClose: () => void; onCreate: () => void; - setStep: React.Dispatch>; + setStep: (step: AddInferencePipelineSteps) => void; + hasProcessorStep: boolean; } export const AddInferencePipelineFooter: FC = ({ @@ -38,10 +39,11 @@ export const AddInferencePipelineFooter: FC = ({ onCreate, step, setStep, + hasProcessorStep, }) => { const { nextStep, previousStep, isContinueButtonEnabled } = useMemo( - () => getSteps(step, isDetailsStepValid, isConfigureProcessorStepValid), - [isDetailsStepValid, isConfigureProcessorStepValid, step] + () => getSteps(step, isDetailsStepValid, isConfigureProcessorStepValid, hasProcessorStep), + [isDetailsStepValid, isConfigureProcessorStepValid, step, hasProcessorStep] ); return ( diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/components/add_inference_pipeline_horizontal_steps.tsx b/x-pack/plugins/ml/public/application/components/shared/add_inference_pipeline_horizontal_steps.tsx similarity index 58% rename from x-pack/plugins/ml/public/application/components/ml_inference/components/add_inference_pipeline_horizontal_steps.tsx rename to x-pack/plugins/ml/public/application/components/shared/add_inference_pipeline_horizontal_steps.tsx index 2a34f6483c24..c8cdf387c84c 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/components/add_inference_pipeline_horizontal_steps.tsx +++ b/x-pack/plugins/ml/public/application/components/shared/add_inference_pipeline_horizontal_steps.tsx @@ -8,58 +8,58 @@ import React, { FC, memo } from 'react'; import { i18n } from '@kbn/i18n'; -import { EuiStepsHorizontal, EuiStepsHorizontalProps } from '@elastic/eui'; -import type { AddInferencePipelineSteps } from '../types'; -import { ADD_INFERENCE_PIPELINE_STEPS } from '../constants'; +import { EuiStepsHorizontal, type EuiStepsHorizontalProps } from '@elastic/eui'; +import type { AddInferencePipelineSteps } from '../ml_inference/types'; +import { ADD_INFERENCE_PIPELINE_STEPS } from '../ml_inference/constants'; const steps = Object.values(ADD_INFERENCE_PIPELINE_STEPS); interface Props { step: AddInferencePipelineSteps; - setStep: React.Dispatch>; + setStep: (step: AddInferencePipelineSteps) => void; isDetailsStepValid: boolean; - isConfigureProcessorStepValid: boolean; + isConfigureProcessorStepValid?: boolean; + hasProcessorStep: boolean; + pipelineCreated: boolean; } +const DISABLED = 'disabled'; +const COMPLETE = 'complete'; +const INCOMPLETE = 'incomplete'; + export const AddInferencePipelineHorizontalSteps: FC = memo( - ({ step, setStep, isDetailsStepValid, isConfigureProcessorStepValid }) => { + ({ + step, + setStep, + isDetailsStepValid, + isConfigureProcessorStepValid, + hasProcessorStep, + pipelineCreated, + }) => { const currentStepIndex = steps.findIndex((s) => s === step); + const navSteps: EuiStepsHorizontalProps['steps'] = [ { // Details - onClick: () => setStep(ADD_INFERENCE_PIPELINE_STEPS.DETAILS), - status: isDetailsStepValid ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.ml.inferencePipeline.content.indices.transforms.addInferencePipelineModal.steps.details.title', - { - defaultMessage: 'Details', - } - ), - }, - { - // Processor configuration onClick: () => { - if (!isDetailsStepValid) return; - setStep(ADD_INFERENCE_PIPELINE_STEPS.CONFIGURE_PROCESSOR); + if (pipelineCreated) return; + setStep(ADD_INFERENCE_PIPELINE_STEPS.DETAILS); }, - status: - isDetailsStepValid && isConfigureProcessorStepValid && currentStepIndex > 1 - ? 'complete' - : 'incomplete', + status: isDetailsStepValid ? COMPLETE : INCOMPLETE, title: i18n.translate( - 'xpack.ml.inferencePipeline.content.indices.transforms.addInferencePipelineModal.steps.configureProcessor.title', + 'xpack.ml.inferencePipeline.content.indices.transforms.addInferencePipelineModal.steps.details.title', { - defaultMessage: 'Configure processor', + defaultMessage: 'Details', } ), }, { - // handle failures + // Handle failures onClick: () => { - if (!isDetailsStepValid) return; + if (!isDetailsStepValid || pipelineCreated) return; setStep(ADD_INFERENCE_PIPELINE_STEPS.ON_FAILURE); }, - status: currentStepIndex > 2 ? 'complete' : 'incomplete', + status: currentStepIndex > 2 ? COMPLETE : INCOMPLETE, title: i18n.translate( 'xpack.ml.inferencePipeline.content.indices.transforms.addInferencePipelineModal.steps.handleFailures.title', { @@ -70,10 +70,10 @@ export const AddInferencePipelineHorizontalSteps: FC = memo( { // Test onClick: () => { - if (!isConfigureProcessorStepValid || !isDetailsStepValid) return; + if (!isConfigureProcessorStepValid || !isDetailsStepValid || pipelineCreated) return; setStep(ADD_INFERENCE_PIPELINE_STEPS.TEST); }, - status: currentStepIndex > 3 ? 'complete' : 'incomplete', + status: currentStepIndex > 3 ? COMPLETE : INCOMPLETE, title: i18n.translate( 'xpack.ml.trainedModels.content.indices.transforms.addInferencePipelineModal.steps.test.title', { @@ -84,10 +84,10 @@ export const AddInferencePipelineHorizontalSteps: FC = memo( { // Review and Create onClick: () => { - if (!isConfigureProcessorStepValid) return; + if (!isConfigureProcessorStepValid || pipelineCreated) return; setStep(ADD_INFERENCE_PIPELINE_STEPS.CREATE); }, - status: isDetailsStepValid && isConfigureProcessorStepValid ? 'incomplete' : 'disabled', + status: isDetailsStepValid && isConfigureProcessorStepValid ? INCOMPLETE : DISABLED, title: i18n.translate( 'xpack.ml.inferencePipeline.content.indices.transforms.addInferencePipelineModal.steps.create.title', { @@ -96,23 +96,60 @@ export const AddInferencePipelineHorizontalSteps: FC = memo( ), }, ]; + + if (hasProcessorStep === true) { + navSteps.splice(1, 0, { + // Processor configuration + onClick: () => { + if (!isDetailsStepValid || pipelineCreated) return; + setStep(ADD_INFERENCE_PIPELINE_STEPS.CONFIGURE_PROCESSOR); + }, + status: + isDetailsStepValid && isConfigureProcessorStepValid && currentStepIndex > 1 + ? COMPLETE + : INCOMPLETE, + title: i18n.translate( + 'xpack.ml.inferencePipeline.content.indices.transforms.addInferencePipelineModal.steps.configureProcessor.title', + { + defaultMessage: 'Configure processor', + } + ), + }); + } + let DETAILS_INDEX: number; + let CONFIGURE_INDEX: number | undefined; + let ON_FAILURE_INDEX: number; + let TEST_INDEX: number; + let CREATE_INDEX: number; + + if (hasProcessorStep) { + [DETAILS_INDEX, CONFIGURE_INDEX, ON_FAILURE_INDEX, TEST_INDEX, CREATE_INDEX] = [ + 0, 1, 2, 3, 4, 5, + ]; + } else { + [DETAILS_INDEX, ON_FAILURE_INDEX, TEST_INDEX, CREATE_INDEX] = [0, 1, 2, 3, 4]; + } + switch (step) { case ADD_INFERENCE_PIPELINE_STEPS.DETAILS: - navSteps[0].status = 'current'; + navSteps[DETAILS_INDEX].status = 'current'; break; case ADD_INFERENCE_PIPELINE_STEPS.CONFIGURE_PROCESSOR: - navSteps[1].status = 'current'; + if (CONFIGURE_INDEX !== undefined) { + navSteps[CONFIGURE_INDEX].status = 'current'; + } break; case ADD_INFERENCE_PIPELINE_STEPS.ON_FAILURE: - navSteps[2].status = 'current'; + navSteps[ON_FAILURE_INDEX].status = 'current'; break; case ADD_INFERENCE_PIPELINE_STEPS.TEST: - navSteps[3].status = 'current'; + navSteps[TEST_INDEX].status = 'current'; break; case ADD_INFERENCE_PIPELINE_STEPS.CREATE: - navSteps[4].status = 'current'; + navSteps[CREATE_INDEX].status = 'current'; break; } + return ; } ); diff --git a/x-pack/plugins/ml/public/application/components/shared/index.ts b/x-pack/plugins/ml/public/application/components/shared/index.ts new file mode 100644 index 000000000000..573c13257a46 --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/shared/index.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 { AddInferencePipelineHorizontalSteps } from './add_inference_pipeline_horizontal_steps'; +export { AddInferencePipelineFooter } from './add_inference_pipeline_footer'; +export { ReviewAndCreatePipeline } from './review_and_create_pipeline'; +export { OnFailureConfiguration } from './on_failure_configuration'; +export { PipelineDetailsTitle } from './pipeline_details_title'; +export { PipelineNameAndDescription } from './pipeline_name_and_description'; diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/components/on_failure_configuration.tsx b/x-pack/plugins/ml/public/application/components/shared/on_failure_configuration.tsx similarity index 96% rename from x-pack/plugins/ml/public/application/components/ml_inference/components/on_failure_configuration.tsx rename to x-pack/plugins/ml/public/application/components/shared/on_failure_configuration.tsx index f53e80b122f5..10ab5a46a632 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/components/on_failure_configuration.tsx +++ b/x-pack/plugins/ml/public/application/components/shared/on_failure_configuration.tsx @@ -25,12 +25,12 @@ import { CodeEditor } from '@kbn/kibana-react-plugin/public'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { SaveChangesButton } from './save_changes_button'; -import type { MlInferenceState } from '../types'; -import { getDefaultOnFailureConfiguration } from '../state'; -import { CANCEL_EDIT_MESSAGE, EDIT_MESSAGE } from '../constants'; -import { useMlKibana } from '../../../contexts/kibana'; -import { isValidJson } from '../../../../../common/util/validation_utils'; +import { SaveChangesButton } from '../ml_inference/components/save_changes_button'; +import type { MlInferenceState } from '../ml_inference/types'; +import { getDefaultOnFailureConfiguration } from '../ml_inference/state'; +import { CANCEL_EDIT_MESSAGE, EDIT_MESSAGE } from '../ml_inference/constants'; +import { useMlKibana } from '../../contexts/kibana'; +import { isValidJson } from '../../../../common/util/validation_utils'; interface Props { handleAdvancedConfigUpdate: (configUpdate: Partial) => void; diff --git a/x-pack/plugins/ml/public/application/components/shared/pipeline_details_title.tsx b/x-pack/plugins/ml/public/application/components/shared/pipeline_details_title.tsx new file mode 100644 index 000000000000..ce7ef231256c --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/shared/pipeline_details_title.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 React, { FC } from 'react'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { EuiCode, EuiLink, EuiSpacer, EuiTitle, EuiText } from '@elastic/eui'; + +import { useMlKibana } from '../../contexts/kibana'; + +interface Props { + modelId: string; +} + +export const PipelineDetailsTitle: FC = ({ modelId }) => { + const { + services: { + docLinks: { links }, + }, + } = useMlKibana(); + + return ( + <> + +

+ {i18n.translate( + 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.configure.title', + { defaultMessage: 'Create a pipeline' } + )} +

+
+ + +

+ {modelId}, + pipeline: ( + + pipeline + + ), + }} + /> +

+

+ + _reindex API + + ), + pipelineSimulateLink: ( + + pipeline/_simulate + + ), + }} + /> +

+
+ + ); +}; diff --git a/x-pack/plugins/ml/public/application/components/shared/pipeline_name_and_description.tsx b/x-pack/plugins/ml/public/application/components/shared/pipeline_name_and_description.tsx new file mode 100644 index 000000000000..c64fbca93903 --- /dev/null +++ b/x-pack/plugins/ml/public/application/components/shared/pipeline_name_and_description.tsx @@ -0,0 +1,115 @@ +/* + * 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. + */ + +/* + * 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, { FC } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiFieldText, EuiFormRow, EuiText, EuiTextArea } from '@elastic/eui'; + +interface Props { + handlePipelineConfigUpdate: (configUpdate: Partial) => void; + pipelineNameError: string | undefined; + pipelineDescription: string; + pipelineName: string; +} + +export const PipelineNameAndDescription: FC = ({ + pipelineName, + pipelineNameError, + pipelineDescription, + handlePipelineConfigUpdate, +}) => { + const handleConfigChange = (value: string, type: string) => { + handlePipelineConfigUpdate({ [type]: value }); + }; + + return ( + <> + + {i18n.translate( + 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.configure.name.helpText', + { + defaultMessage: + 'Pipeline names are unique within a deployment and can only contain letters, numbers, underscores, and hyphens.', + } + )} + + ) + } + error={pipelineNameError} + isInvalid={pipelineNameError !== undefined} + > + ) => + handleConfigChange(e.target.value, 'pipelineName') + } + /> + + {/* DESCRIPTION */} + + {i18n.translate( + 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.configure.description.helpText', + { + defaultMessage: 'A description of the pipeline.', + } + )} + + } + > + ) => + handleConfigChange(e.target.value, 'pipelineDescription') + } + /> + + + ); +}; diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/components/review_and_create_pipeline.tsx b/x-pack/plugins/ml/public/application/components/shared/review_and_create_pipeline.tsx similarity index 86% rename from x-pack/plugins/ml/public/application/components/ml_inference/components/review_and_create_pipeline.tsx rename to x-pack/plugins/ml/public/application/components/shared/review_and_create_pipeline.tsx index d80e678bafb0..7cb3066436af 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/components/review_and_create_pipeline.tsx +++ b/x-pack/plugins/ml/public/application/components/shared/review_and_create_pipeline.tsx @@ -7,6 +7,7 @@ import React, { FC, useMemo, useState } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { EuiAccordion, @@ -18,17 +19,28 @@ import { EuiSpacer, EuiTitle, EuiText, + EuiTextColor, htmlIdGenerator, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { IngestPipeline } from '@elastic/elasticsearch/lib/api/types'; -import { useMlKibana } from '../../../contexts/kibana'; -import { ReindexWithPipeline } from './reindex_with_pipeline'; +import { useMlKibana } from '../../contexts/kibana'; +import { ReindexWithPipeline } from '../ml_inference/components/reindex_with_pipeline'; const MANAGEMENT_APP_ID = 'management'; +function getFieldFromPipelineConfig(config: estypes.IngestPipeline) { + const { processors } = config; + let field = ''; + if (processors?.length) { + field = Object.keys(processors[0].inference?.field_map ?? {})[0]; + } + return field; +} + interface Props { + highlightTargetField?: boolean; inferencePipeline: IngestPipeline; modelType?: string; pipelineName: string; @@ -38,6 +50,7 @@ interface Props { } export const ReviewAndCreatePipeline: FC = ({ + highlightTargetField = false, inferencePipeline, modelType, pipelineName, @@ -62,6 +75,10 @@ export const ReviewAndCreatePipeline: FC = ({ : links.ingest.inferenceClassification; const accordionId = useMemo(() => htmlIdGenerator()(), []); + const targetedField = useMemo( + () => getFieldFromPipelineConfig(inferencePipeline), + [inferencePipeline] + ); const configCodeBlock = useMemo( () => ( @@ -84,7 +101,7 @@ export const ReviewAndCreatePipeline: FC = ({ gutterSize="s" data-test-subj="mlTrainedModelsInferenceReviewAndCreateStep" > - + {pipelineCreated === false ? (

@@ -189,20 +206,19 @@ export const ReviewAndCreatePipeline: FC = ({ ) : null} - - -

- {!pipelineCreated ? ( - - ) : null} -

-
-
+ {highlightTargetField ? ( + + + {targetedField} }} + /> + + + ) : null} - {pipelineCreated && sourceIndex ? ( + {pipelineCreated ? ( <> void; + model: ModelItem; +} + +export const CreatePipelineForModelFlyout: FC = ({ + onClose, + model, +}) => { + const { + currentContext: { pipelineConfig }, + } = useTestTrainedModelsContext(); + + const initialState = useMemo( + () => getInitialState(model, pipelineConfig), + // eslint-disable-next-line react-hooks/exhaustive-deps + [model.model_id, pipelineConfig] + ); + const [formState, setFormState] = useState(initialState); + const [step, setStep] = useState(ADD_INFERENCE_PIPELINE_STEPS.DETAILS); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const taskType = useMemo( + () => Object.keys(model.inference_config ?? {})[0], + // eslint-disable-next-line react-hooks/exhaustive-deps + [model.model_id] + ) as SupportedPytorchTasksType; + + const { + trainedModels: { createInferencePipeline }, + } = useMlApiContext(); + + const createPipeline = async () => { + setFormState({ ...formState, creatingPipeline: true }); + try { + const config = getPipelineConfig(formState); + await createInferencePipeline(formState.pipelineName, config); + setFormState({ + ...formState, + pipelineCreated: true, + creatingPipeline: false, + pipelineError: undefined, + }); + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + const errorProperties = extractErrorProperties(e); + setFormState({ + ...formState, + creatingPipeline: false, + pipelineError: errorProperties.message ?? e.message, + }); + } + }; + + const pipelineNames = useFetchPipelines(); + + const handleConfigUpdate = (configUpdate: Partial) => { + const updatedState = { ...formState, ...configUpdate }; + setFormState(updatedState); + }; + + const handleSetStep = (currentStep: AddInferencePipelineSteps) => { + setStep(currentStep); + }; + + const { pipelineName: pipelineNameError } = useMemo(() => { + const errors = validateInferencePipelineConfigurationStep( + formState.pipelineName, + pipelineNames + ); + return errors; + }, [pipelineNames, formState.pipelineName]); + + return ( + + + +

+ {i18n.translate( + 'xpack.ml.trainedModels.content.indices.pipelines.createInferencePipeline.title', + { + defaultMessage: 'Create inference pipeline', + } + )} +

+
+
+ + + + {step === ADD_INFERENCE_PIPELINE_STEPS.DETAILS && ( + + )} + {step === ADD_INFERENCE_PIPELINE_STEPS.ON_FAILURE && ( + + )} + {step === ADD_INFERENCE_PIPELINE_STEPS.TEST && ( + + )} + {step === ADD_INFERENCE_PIPELINE_STEPS.CREATE && ( + + )} + + + + +
+ ); +}; diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_inference_properties_from_pipeline_config.ts b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_inference_properties_from_pipeline_config.ts new file mode 100644 index 000000000000..68b7dcda61a7 --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_inference_properties_from_pipeline_config.ts @@ -0,0 +1,118 @@ +/* + * 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 * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { + IngestInferenceProcessor, + IngestInferenceConfig, +} from '@elastic/elasticsearch/lib/api/types'; +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import { SUPPORTED_PYTORCH_TASKS } from '@kbn/ml-trained-models-utils'; +import { DEFAULT_INPUT_FIELD } from '../test_models/models/inference_base'; + +const INPUT_FIELD = 'inputField'; +const ZERO_SHOT_CLASSIFICATION_PROPERTIES = ['labels', 'multi_label'] as const; +const QUESTION_ANSWERING_PROPERTIES = ['question'] as const; + +const MODEL_INFERENCE_CONFIG_PROPERTIES = { + [SUPPORTED_PYTORCH_TASKS.QUESTION_ANSWERING]: QUESTION_ANSWERING_PROPERTIES, + [SUPPORTED_PYTORCH_TASKS.ZERO_SHOT_CLASSIFICATION]: ZERO_SHOT_CLASSIFICATION_PROPERTIES, +} as const; + +type SupportedModelInferenceConfigPropertiesType = keyof typeof MODEL_INFERENCE_CONFIG_PROPERTIES; + +interface MLIngestInferenceProcessor extends IngestInferenceProcessor { + inference_config: MLInferencePipelineInferenceConfig; +} + +// Currently, estypes doesn't include pipeline processor types with the trained model processors +type MLInferencePipelineInferenceConfig = IngestInferenceConfig & { + zero_shot_classification?: estypes.MlZeroShotClassificationInferenceOptions; + question_answering?: estypes.MlQuestionAnsweringInferenceUpdateOptions; +}; + +interface GetInferencePropertiesFromPipelineConfigReturnType { + inputField: string; + inferenceConfig?: MLInferencePipelineInferenceConfig; + inferenceObj?: IngestInferenceProcessor | MLIngestInferenceProcessor; + fieldMap?: IngestInferenceProcessor['field_map']; + labels?: string[]; + multi_label?: boolean; + question?: string; +} + +function isSupportedInferenceConfigPropertyType( + arg: unknown +): arg is SupportedModelInferenceConfigPropertiesType { + return typeof arg === 'string' && Object.keys(MODEL_INFERENCE_CONFIG_PROPERTIES).includes(arg); +} + +export function isMlInferencePipelineInferenceConfig( + arg: unknown +): arg is MLInferencePipelineInferenceConfig { + return ( + isPopulatedObject(arg, [SUPPORTED_PYTORCH_TASKS.QUESTION_ANSWERING]) || + isPopulatedObject(arg, [SUPPORTED_PYTORCH_TASKS.ZERO_SHOT_CLASSIFICATION]) + ); +} + +export function isMlIngestInferenceProcessor(arg: unknown): arg is MLIngestInferenceProcessor { + return ( + isPopulatedObject(arg) && + arg.hasOwnProperty('inference_config') && + (isPopulatedObject(arg.inference_config, [SUPPORTED_PYTORCH_TASKS.QUESTION_ANSWERING]) || + isPopulatedObject(arg.inference_config, [SUPPORTED_PYTORCH_TASKS.ZERO_SHOT_CLASSIFICATION])) + ); +} + +export function getInferencePropertiesFromPipelineConfig( + type: string, + pipelineConfig: estypes.IngestPipeline +): GetInferencePropertiesFromPipelineConfigReturnType { + const propertiesToReturn: GetInferencePropertiesFromPipelineConfigReturnType = { + [INPUT_FIELD]: '', + }; + + pipelineConfig.processors?.forEach((processor) => { + const { inference } = processor; + if (inference) { + propertiesToReturn.inferenceObj = inference; + // Get the input field + if (inference.field_map) { + propertiesToReturn.fieldMap = inference.field_map; + + for (const [key, value] of Object.entries(inference.field_map)) { + if (value === DEFAULT_INPUT_FIELD) { + propertiesToReturn[INPUT_FIELD] = key; + } + } + if (propertiesToReturn[INPUT_FIELD] === '') { + // If not found, set to the first field in the field map + propertiesToReturn[INPUT_FIELD] = Object.keys(inference.field_map)[0]; + } + } + propertiesToReturn.inferenceConfig = inference.inference_config; + // Get the properties associated with the type of model/task + if ( + isMlInferencePipelineInferenceConfig(propertiesToReturn.inferenceConfig) && + isSupportedInferenceConfigPropertyType(type) + ) { + MODEL_INFERENCE_CONFIG_PROPERTIES[type]?.forEach((property) => { + const configSettings = + propertiesToReturn.inferenceConfig && propertiesToReturn.inferenceConfig[type]; + propertiesToReturn[property] = + configSettings && configSettings.hasOwnProperty(property) + ? // @ts-ignore + configSettings[property] + : undefined; + }); + } + } + }); + + return propertiesToReturn; +} diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_pipeline_config.ts b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_pipeline_config.ts new file mode 100644 index 000000000000..10c405090f05 --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_pipeline_config.ts @@ -0,0 +1,37 @@ +/* + * 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 * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { InferecePipelineCreationState } from './state'; + +export function getPipelineConfig(state: InferecePipelineCreationState): estypes.IngestPipeline { + const { ignoreFailure, modelId, onFailure, pipelineDescription, initialPipelineConfig } = state; + const processor = + initialPipelineConfig?.processors && initialPipelineConfig.processors?.length + ? initialPipelineConfig?.processors[0] + : {}; + + return { + description: pipelineDescription, + processors: [ + { + inference: { + ...(processor?.inference + ? { + ...processor.inference, + ignore_failure: ignoreFailure, + ...(onFailure && Object.keys(onFailure).length > 0 + ? { on_failure: onFailure } + : { on_failure: undefined }), + } + : {}), + model_id: modelId, + }, + }, + ], + }; +} diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/pipeline_details.tsx b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/pipeline_details.tsx new file mode 100644 index 000000000000..ef474ce3b434 --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/pipeline_details.tsx @@ -0,0 +1,183 @@ +/* + * 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, { FC, memo, useState } from 'react'; + +import { + EuiButtonEmpty, + EuiCodeBlock, + EuiFlexGroup, + EuiFlexItem, + EuiForm, + EuiFormRow, + EuiPanel, +} from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; +import { CodeEditor } from '@kbn/kibana-react-plugin/public'; +import type { SupportedPytorchTasksType } from '@kbn/ml-trained-models-utils'; +import { type InferecePipelineCreationState } from './state'; +import { EDIT_MESSAGE, CANCEL_EDIT_MESSAGE } from '../../components/ml_inference/constants'; +import { isValidJson } from '../../../../common/util/validation_utils'; +import { useTestTrainedModelsContext } from '../test_models/test_trained_models_context'; +import { SaveChangesButton } from '../../components/ml_inference/components/save_changes_button'; +import { validatePipelineProcessors } from '../../components/ml_inference/validation'; +import { PipelineDetailsTitle, PipelineNameAndDescription } from '../../components/shared'; + +interface Props { + handlePipelineConfigUpdate: (configUpdate: Partial) => void; + modelId: string; + pipelineNameError: string | undefined; + pipelineName: string; + pipelineDescription: string; + initialPipelineConfig?: InferecePipelineCreationState['initialPipelineConfig']; + setHasUnsavedChanges: React.Dispatch>; + taskType?: SupportedPytorchTasksType; +} + +export const PipelineDetails: FC = memo( + ({ + handlePipelineConfigUpdate, + modelId, + pipelineName, + pipelineNameError, + pipelineDescription, + initialPipelineConfig, + setHasUnsavedChanges, + taskType, + }) => { + const [isProcessorConfigValid, setIsProcessorConfigValid] = useState(true); + const [processorConfigError, setProcessorConfigError] = useState(); + + const { + currentContext: { pipelineConfig }, + } = useTestTrainedModelsContext(); + const [processorConfigString, setProcessorConfigString] = useState( + JSON.stringify(initialPipelineConfig ?? {}, null, 2) + ); + const [editProcessorConfig, setEditProcessorConfig] = useState(false); + + const updateProcessorConfig = () => { + const invalidProcessorConfigMessage = validatePipelineProcessors( + JSON.parse(processorConfigString), + taskType + ); + if (invalidProcessorConfigMessage === undefined) { + handlePipelineConfigUpdate({ initialPipelineConfig: JSON.parse(processorConfigString) }); + setHasUnsavedChanges(false); + setEditProcessorConfig(false); + setProcessorConfigError(undefined); + } else { + setHasUnsavedChanges(true); + setIsProcessorConfigValid(false); + setProcessorConfigError(invalidProcessorConfigMessage); + } + }; + + const handleProcessorConfigChange = (json: string) => { + setProcessorConfigString(json); + const valid = isValidJson(json); + setIsProcessorConfigValid(valid); + }; + + const resetProcessorConfig = () => { + setProcessorConfigString(JSON.stringify(pipelineConfig, null, 2)); + setIsProcessorConfigValid(true); + setProcessorConfigError(undefined); + }; + + return ( + + + + + + + {/* NAME */} + + {/* NAME and DESCRIPTION */} + + {/* PROCESSOR CONFIGURATION */} + + + { + const editingState = !editProcessorConfig; + if (editingState === false) { + setProcessorConfigError(undefined); + setIsProcessorConfigValid(true); + setHasUnsavedChanges(false); + } + setEditProcessorConfig(editingState); + }} + > + {editProcessorConfig ? CANCEL_EDIT_MESSAGE : EDIT_MESSAGE} + + + + {editProcessorConfig ? ( + + ) : null} + + + {editProcessorConfig ? ( + + {i18n.translate( + 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.advanced.resetInferenceConfigButton', + { defaultMessage: 'Reset' } + )} + + ) : null} + + + } + error={processorConfigError} + isInvalid={processorConfigError !== undefined} + data-test-subj="mlTrainedModelsInferencePipelineInferenceConfigEditor" + > + {editProcessorConfig ? ( + + ) : ( + + {processorConfigString} + + )} + + + +
+ + ); + } +); diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts new file mode 100644 index 000000000000..9edcb19e61e3 --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts @@ -0,0 +1,42 @@ +/* + * 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 * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { IngestInferenceProcessor } from '@elastic/elasticsearch/lib/api/types'; +import { getDefaultOnFailureConfiguration } from '../../components/ml_inference/state'; +import type { ModelItem } from '../models_list'; + +export interface InferecePipelineCreationState { + creatingPipeline: boolean; + error: boolean; + ignoreFailure: boolean; + modelId: string; + onFailure?: IngestInferenceProcessor['on_failure']; + pipelineName: string; + pipelineNameError?: string; + pipelineDescription: string; + pipelineCreated: boolean; + pipelineError?: string; + initialPipelineConfig?: estypes.IngestPipeline; + takeActionOnFailure: boolean; +} + +export const getInitialState = ( + model: ModelItem, + initialPipelineConfig: estypes.IngestPipeline | undefined +): InferecePipelineCreationState => ({ + creatingPipeline: false, + error: false, + ignoreFailure: false, + modelId: model.model_id, + onFailure: getDefaultOnFailureConfiguration(), + pipelineDescription: `Uses the pre-trained model ${model.model_id} to infer against the data that is being ingested in the pipeline`, + pipelineName: `ml-inference-${model.model_id}`, + pipelineCreated: false, + initialPipelineConfig, + takeActionOnFailure: true, +}); diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx new file mode 100644 index 000000000000..5f793fa84801 --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx @@ -0,0 +1,79 @@ +/* + * 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, { FC } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +import { ModelItem } from '../models_list'; +import { TestTrainedModelContent } from '../test_models/test_trained_model_content'; +import { useMlKibana } from '../../contexts/kibana'; +import { type InferecePipelineCreationState } from './state'; + +interface ContentProps { + model: ModelItem; + handlePipelineConfigUpdate: (configUpdate: Partial) => void; + externalPipelineConfig?: estypes.IngestPipeline; +} + +export const TestTrainedModel: FC = ({ + model, + handlePipelineConfigUpdate, + externalPipelineConfig, +}) => { + const { + services: { + docLinks: { links }, + }, + } = useMlKibana(); + + return ( + + + +

+ {i18n.translate( + 'xpack.ml.trainedModels.content.indices.pipelines.addInferencePipelineModal.steps.advanced.testTrainedModelTitle', + { defaultMessage: 'Try it out' } + )} +

+
+ + +

+ +

+

+ + Learn more. + + ), + }} + /> +

+
+
+ + + +
+ ); +}; diff --git a/x-pack/plugins/ml/public/application/model_management/models_list.tsx b/x-pack/plugins/ml/public/application/model_management/models_list.tsx index 0aebca5c1673..dd766d10c36d 100644 --- a/x-pack/plugins/ml/public/application/model_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/model_management/models_list.tsx @@ -69,7 +69,7 @@ import { useToastNotificationService } from '../services/toast_notification_serv import { useFieldFormatter } from '../contexts/kibana/use_field_formatter'; import { useRefresh } from '../routing/use_refresh'; import { SavedObjectsWarning } from '../components/saved_objects_warning'; -import { TestTrainedModelFlyout } from './test_models'; +import { TestModelAndPipelineCreationFlyout } from './test_models'; import { TestDfaModelsFlyout } from './test_dfa_models_flyout'; import { AddInferencePipelineFlyout } from '../components/ml_inference'; import { useEnabledFeatures } from '../contexts/ml'; @@ -819,7 +819,15 @@ export const ModelsList: FC = ({ /> )} {modelToTest === null ? null : ( - + { + setModelToTest(null); + if (refreshList) { + fetchModelsData(); + } + }} + /> )} {dfaModelToTest === null ? null : ( diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/index.ts b/x-pack/plugins/ml/public/application/model_management/test_models/index.ts index 25078a40d420..4b238f477092 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/index.ts +++ b/x-pack/plugins/ml/public/application/model_management/test_models/index.ts @@ -5,5 +5,5 @@ * 2.0. */ -export { TestTrainedModelFlyout } from './test_flyout'; +export { TestModelAndPipelineCreationFlyout } from './test_model_and_pipeline_creation_flyout'; export { isTestable, isDfaTrainedModel } from './utils'; diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx index 03466cd87a16..3ae11845646a 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx @@ -10,7 +10,15 @@ import React, { FC, useState, useMemo, useEffect, useCallback } from 'react'; import useObservable from 'react-use/lib/useObservable'; import { firstValueFrom } from 'rxjs'; import { DataView } from '@kbn/data-views-plugin/common'; -import { EuiSpacer, EuiSelect, EuiFormRow, EuiAccordion, EuiCodeBlock } from '@elastic/eui'; +import { + EuiAccordion, + EuiCode, + EuiCodeBlock, + EuiFormRow, + EuiSpacer, + EuiSelect, + EuiText, +} from '@elastic/eui'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { i18n } from '@kbn/i18n'; @@ -21,9 +29,14 @@ import type { InferrerType } from '.'; interface Props { inferrer: InferrerType; data: ReturnType; + disableIndexSelection: boolean; } -export const InferenceInputFormIndexControls: FC = ({ inferrer, data }) => { +export const InferenceInputFormIndexControls: FC = ({ + inferrer, + data, + disableIndexSelection, +}) => { const { dataViewListItems, fieldNames, @@ -40,14 +53,25 @@ export const InferenceInputFormIndexControls: FC = ({ inferrer, data }) = return ( <> - setSelectedDataViewId(e.target.value)} - hasNoInitialSelection={true} - disabled={runningState === RUNNING_STATE.RUNNING} - fullWidth - /> + {disableIndexSelection ? ( + + + {dataViewListItems.find((item) => item.value === selectedDataViewId)?.text} + + + ) : ( + { + inferrer.setSelectedDataViewId(e.target.value); + setSelectedDataViewId(e.target.value); + }} + hasNoInitialSelection={true} + disabled={runningState === RUNNING_STATE.RUNNING} + fullWidth + /> + )} = ({ inferrer, data }) = setSelectedField(e.target.value)} + onChange={(e) => { + setSelectedField(e.target.value); + }} hasNoInitialSelection={true} disabled={runningState === RUNNING_STATE.RUNNING} fullWidth @@ -79,7 +105,14 @@ export const InferenceInputFormIndexControls: FC = ({ inferrer, data }) = } )} > - + {JSON.stringify(pipeline, null, 2)} @@ -87,7 +120,13 @@ export const InferenceInputFormIndexControls: FC = ({ inferrer, data }) = ); }; -export function useIndexInput({ inferrer }: { inferrer: InferrerType }) { +export function useIndexInput({ + inferrer, + defaultSelectedDataViewId, +}: { + inferrer: InferrerType; + defaultSelectedDataViewId?: string; +}) { const { services: { data: { @@ -100,7 +139,9 @@ export function useIndexInput({ inferrer }: { inferrer: InferrerType }) { const [dataViewListItems, setDataViewListItems] = useState< Array<{ value: string; text: string }> >([]); - const [selectedDataViewId, setSelectedDataViewId] = useState(undefined); + const [selectedDataViewId, setSelectedDataViewId] = useState( + defaultSelectedDataViewId + ); const [selectedDataView, setSelectedDataView] = useState(null); const [fieldNames, setFieldNames] = useState>([]); const selectedField = useObservable(inferrer.getInputField$(), inferrer.getInputField()); @@ -197,11 +238,20 @@ export function useIndexInput({ inferrer }: { inferrer: InferrerType }) { })); setFieldNames(tempFieldNames); - const fieldName = tempFieldNames.length === 1 ? tempFieldNames[0].value : undefined; + const defaultSelectedField = inferrer.getInputField(); + + const fieldName = + defaultSelectedField && + tempFieldNames.find((field) => field.value === defaultSelectedField) + ? defaultSelectedField + : tempFieldNames[0].value; + // Only set a field if it's the default field + // if (inferrer.getInputField() === DEFAULT_INPUT_FIELD) { inferrer.setInputField(fieldName); + // } } }, - [selectedDataView, inferrer] + [selectedDataView, inferrer] // defaultSelectedField ); useEffect( diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_base.ts b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_base.ts index 8dc0bf6b8881..bdd082cf8ca0 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_base.ts +++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_base.ts @@ -31,7 +31,7 @@ export type InferenceOptions = | estypes.MlTextEmbeddingInferenceOptions | estypes.MlQuestionAnsweringInferenceUpdateOptions; -const DEFAULT_INPUT_FIELD = 'text_field'; +export const DEFAULT_INPUT_FIELD = 'text_field'; export const DEFAULT_INFERENCE_TIME_OUT = '30s'; export type FormattedNerResponse = Array<{ @@ -72,8 +72,10 @@ export abstract class InferenceBase { private isValid$ = new BehaviorSubject(false); private pipeline$ = new BehaviorSubject({}); private supportedFieldTypes: ES_FIELD_TYPES[] = [ES_FIELD_TYPES.TEXT]; + private selectedDataViewId: string | undefined; protected readonly info: string[] = []; + public switchToCreationMode?: () => void; private subscriptions$: Subscription = new Subscription(); @@ -87,8 +89,13 @@ export abstract class InferenceBase { this.inputField$.next(this.modelInputField); } + public setSwitchtoCreationMode(callback: () => void) { + this.switchToCreationMode = callback; + } + public destroy() { this.subscriptions$.unsubscribe(); + this.pipeline$.unsubscribe(); } protected initialize( @@ -162,6 +169,15 @@ export abstract class InferenceBase { this.runningState$.next(RUNNING_STATE.STOPPED); } + public setSelectedDataViewId(dataViewId: string) { + // Data view selected for testing + this.selectedDataViewId = dataViewId; + } + + public getSelectedDataViewId() { + return this.selectedDataViewId; + } + public setInputField(field: string | undefined) { // if the field is not set, change to be the same as the model input field this.inputField$.next(field === undefined ? this.modelInputField : field); diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/index_input.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/index_input.tsx index 4dbe90028365..4b87ddccfb4b 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/index_input.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/index_input.tsx @@ -11,7 +11,6 @@ import useObservable from 'react-use/lib/useObservable'; import { EuiSpacer, - EuiButton, EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, @@ -28,13 +27,22 @@ import { ErrorMessage } from '../../inference_error'; import type { InferrerType } from '..'; import { useIndexInput, InferenceInputFormIndexControls } from '../index_input'; import { RUNNING_STATE } from '../inference_base'; +import { InputFormControls } from './input_form_controls'; +import { useTestTrainedModelsContext } from '../../test_trained_models_context'; interface Props { inferrer: InferrerType; } export const IndexInputForm: FC = ({ inferrer }) => { - const data = useIndexInput({ inferrer }); + const { + currentContext: { defaultSelectedDataViewId, createPipelineFlyoutOpen }, + } = useTestTrainedModelsContext(); + + const data = useIndexInput({ + inferrer, + defaultSelectedDataViewId, + }); const { reloadExamples, selectedField } = data; const [errorText, setErrorText] = useState(null); @@ -60,23 +68,26 @@ export const IndexInputForm: FC = ({ inferrer }) => { return ( <>{infoComponent} - + - - + - + {runningState === RUNNING_STATE.RUNNING ? : null} diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/input_form_controls.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/input_form_controls.tsx new file mode 100644 index 000000000000..18cacbb74550 --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/input_form_controls.tsx @@ -0,0 +1,63 @@ +/* + * 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, { FC } from 'react'; + +import { EuiButton, EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; + +import { FormattedMessage } from '@kbn/i18n-react'; +import type { InferrerType } from '..'; + +interface Props { + testButtonDisabled: boolean; + createPipelineButtonDisabled: boolean; + inferrer: InferrerType; + showCreatePipelineButton?: boolean; +} + +export const InputFormControls: FC = ({ + testButtonDisabled, + createPipelineButtonDisabled, + inferrer, + showCreatePipelineButton, +}) => { + return ( + <> + + + + + + {showCreatePipelineButton ? ( + + { + if (inferrer.switchToCreationMode) { + inferrer.switchToCreationMode(); + } + }} + > + + + + ) : null} + + ); +}; diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/text_input.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/text_input.tsx index fc162a305c32..ae5a4c72cac6 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/text_input.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_input_form/text_input.tsx @@ -8,7 +8,7 @@ import React, { FC, useState, useMemo, useCallback, FormEventHandler } from 'react'; import useObservable from 'react-use/lib/useObservable'; -import { EuiSpacer, EuiButton, EuiTabs, EuiTab, EuiForm } from '@elastic/eui'; +import { EuiFlexGroup, EuiSpacer, EuiTabs, EuiTab, EuiForm } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { extractErrorMessage } from '@kbn/ml-error-utils'; @@ -18,6 +18,7 @@ import type { InferrerType } from '..'; import { OutputLoadingContent } from '../../output_loading'; import { RUNNING_STATE } from '../inference_base'; import { RawOutput } from '../raw_output'; +import { InputFormControls } from './input_form_controls'; interface Props { inferrer: InferrerType; @@ -57,17 +58,15 @@ export const TextInputForm: FC = ({ inferrer }) => { <>{inputComponent}
- - + - +
{runningState !== RUNNING_STATE.STOPPED ? ( <> diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/selected_model.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/selected_model.tsx index 4747d9c14918..80ee311d533a 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/selected_model.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/selected_model.tsx @@ -7,6 +7,7 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import React, { FC, useMemo, useEffect } from 'react'; +import { cloneDeep } from 'lodash'; import { TRAINED_MODEL_TYPE, SUPPORTED_PYTORCH_TASKS } from '@kbn/ml-trained-models-utils'; import { NerInference } from './models/ner'; @@ -22,52 +23,182 @@ import { import { TextEmbeddingInference } from './models/text_embedding'; import { useMlApiContext } from '../../contexts/kibana'; +import { type TestTrainedModelsContextType } from './test_trained_models_context'; import { InferenceInputForm } from './models/inference_input_form'; import { InferrerType } from './models'; import { INPUT_TYPE } from './models/inference_base'; import { TextExpansionInference } from './models/text_expansion'; +import { type InferecePipelineCreationState } from '../create_pipeline_for_model/state'; +import { + getInferencePropertiesFromPipelineConfig, + isMlIngestInferenceProcessor, + isMlInferencePipelineInferenceConfig, +} from '../create_pipeline_for_model/get_inference_properties_from_pipeline_config'; interface Props { model: estypes.MlTrainedModelConfig; inputType: INPUT_TYPE; deploymentId: string; + handlePipelineConfigUpdate?: (configUpdate: Partial) => void; + externalPipelineConfig?: estypes.IngestPipeline; + setCurrentContext?: React.Dispatch; } -export const SelectedModel: FC = ({ model, inputType, deploymentId }) => { +export const SelectedModel: FC = ({ + model, + inputType, + deploymentId, + handlePipelineConfigUpdate, + externalPipelineConfig, + setCurrentContext, +}) => { const { trainedModels } = useMlApiContext(); const inferrer = useMemo(() => { - if (model.model_type === TRAINED_MODEL_TYPE.PYTORCH) { - const taskType = Object.keys(model.inference_config ?? {})[0]; + const taskType = Object.keys(model.inference_config ?? {})[0]; + let tempInferrer: InferrerType | undefined; + const pipelineConfigValues = externalPipelineConfig + ? getInferencePropertiesFromPipelineConfig(taskType, externalPipelineConfig) + : null; + if (model.model_type === TRAINED_MODEL_TYPE.PYTORCH) { switch (taskType) { case SUPPORTED_PYTORCH_TASKS.NER: - return new NerInference(trainedModels, model, inputType, deploymentId); + tempInferrer = new NerInference(trainedModels, model, inputType, deploymentId); + break; case SUPPORTED_PYTORCH_TASKS.TEXT_CLASSIFICATION: - return new TextClassificationInference(trainedModels, model, inputType, deploymentId); + tempInferrer = new TextClassificationInference( + trainedModels, + model, + inputType, + deploymentId + ); + break; case SUPPORTED_PYTORCH_TASKS.ZERO_SHOT_CLASSIFICATION: - return new ZeroShotClassificationInference(trainedModels, model, inputType, deploymentId); + tempInferrer = new ZeroShotClassificationInference( + trainedModels, + model, + inputType, + deploymentId + ); + if (pipelineConfigValues) { + const { labels, multi_label: multiLabel } = pipelineConfigValues; + if (labels && multiLabel !== undefined) { + tempInferrer.setLabelsText(Array.isArray(labels) ? labels.join(',') : labels); + tempInferrer.setMultiLabel(Boolean(multiLabel)); + } + } + break; case SUPPORTED_PYTORCH_TASKS.TEXT_EMBEDDING: - return new TextEmbeddingInference(trainedModels, model, inputType, deploymentId); + tempInferrer = new TextEmbeddingInference(trainedModels, model, inputType, deploymentId); + break; case SUPPORTED_PYTORCH_TASKS.FILL_MASK: - return new FillMaskInference(trainedModels, model, inputType, deploymentId); + tempInferrer = new FillMaskInference(trainedModels, model, inputType, deploymentId); + break; case SUPPORTED_PYTORCH_TASKS.QUESTION_ANSWERING: - return new QuestionAnsweringInference(trainedModels, model, inputType, deploymentId); + tempInferrer = new QuestionAnsweringInference( + trainedModels, + model, + inputType, + deploymentId + ); + if (pipelineConfigValues?.question) { + tempInferrer.setQuestionText(pipelineConfigValues.question); + } + break; case SUPPORTED_PYTORCH_TASKS.TEXT_EXPANSION: - return new TextExpansionInference(trainedModels, model, inputType, deploymentId); + tempInferrer = new TextExpansionInference(trainedModels, model, inputType, deploymentId); + break; default: break; } } else if (model.model_type === TRAINED_MODEL_TYPE.LANG_IDENT) { - return new LangIdentInference(trainedModels, model, inputType, deploymentId); + tempInferrer = new LangIdentInference(trainedModels, model, inputType, deploymentId); + } + if (tempInferrer) { + if (pipelineConfigValues) { + tempInferrer.setInputField(pipelineConfigValues.inputField); + } + if (externalPipelineConfig === undefined) { + tempInferrer.setSwitchtoCreationMode(() => { + if (tempInferrer && setCurrentContext) { + setCurrentContext({ + pipelineConfig: tempInferrer.getPipeline(), + defaultSelectedDataViewId: tempInferrer.getSelectedDataViewId(), + createPipelineFlyoutOpen: true, + }); + } + }); + } else { + tempInferrer?.getPipeline$().subscribe((testPipeline) => { + if (handlePipelineConfigUpdate && testPipeline && externalPipelineConfig) { + const { + fieldMap: testFieldMap, + inferenceConfig: testInferenceConfig, + labels, + multi_label: multiLabel, + question, + } = getInferencePropertiesFromPipelineConfig(taskType, testPipeline); + + const updatedPipeline = cloneDeep(externalPipelineConfig); + const { inferenceObj: externalInference, inferenceConfig: externalInferenceConfig } = + getInferencePropertiesFromPipelineConfig(taskType, updatedPipeline); + + if (externalInference) { + // Always update target field change + externalInference.field_map = testFieldMap; + + if (externalInferenceConfig === undefined) { + externalInference.inference_config = testInferenceConfig; + } else if ( + isMlIngestInferenceProcessor(externalInference) && + isMlInferencePipelineInferenceConfig(externalInference.inference_config) + ) { + // Only update the properties that change in the test step to avoid overwriting user edits + if ( + taskType === SUPPORTED_PYTORCH_TASKS.ZERO_SHOT_CLASSIFICATION && + labels && + multiLabel !== undefined + ) { + const external = + externalInference.inference_config[ + SUPPORTED_PYTORCH_TASKS.ZERO_SHOT_CLASSIFICATION + ]; + + if (external) { + external.multi_label = multiLabel; + external.labels = labels; + } + } else if ( + taskType === SUPPORTED_PYTORCH_TASKS.QUESTION_ANSWERING && + question !== undefined + ) { + const external = + externalInference.inference_config[SUPPORTED_PYTORCH_TASKS.QUESTION_ANSWERING]; + + if (external) { + external.question = question; + } + } + } + } + + handlePipelineConfigUpdate({ + initialPipelineConfig: updatedPipeline, + }); + } + }); + } } - }, [inputType, model, trainedModels, deploymentId]); + return tempInferrer; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [inputType, model, trainedModels, deploymentId, setCurrentContext]); useEffect(() => { return () => { inferrer?.destroy(); }; - }, [inferrer]); + }, [inferrer, model.model_id]); if (inferrer !== undefined) { return ; diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx index 434621d11773..f595fd1de35d 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx @@ -5,126 +5,36 @@ * 2.0. */ -import React, { FC, useState, useMemo } from 'react'; +import React, { FC } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { - EuiFlyout, - EuiFlyoutBody, - EuiFlyoutHeader, - EuiFormRow, - EuiSelect, - EuiSpacer, - EuiTab, - EuiTabs, - EuiTitle, - useEuiPaddingSize, -} from '@elastic/eui'; +import { EuiFlyout, EuiFlyoutBody, EuiFlyoutHeader, EuiSpacer, EuiTitle } from '@elastic/eui'; -import { SUPPORTED_PYTORCH_TASKS } from '@kbn/ml-trained-models-utils'; -import { SelectedModel } from './selected_model'; -import { INPUT_TYPE } from './models/inference_base'; import { type ModelItem } from '../models_list'; +import { TestTrainedModelContent } from './test_trained_model_content'; interface Props { model: ModelItem; onClose: () => void; } -export const TestTrainedModelFlyout: FC = ({ model, onClose }) => { - const [deploymentId, setDeploymentId] = useState(model.deployment_ids[0]); - const mediumPadding = useEuiPaddingSize('m'); - - const [inputType, setInputType] = useState(INPUT_TYPE.TEXT); - - const onlyShowTab: INPUT_TYPE | undefined = useMemo(() => { - return (model.type ?? []).includes(SUPPORTED_PYTORCH_TASKS.TEXT_EXPANSION) - ? INPUT_TYPE.INDEX - : undefined; - }, [model]); - - return ( - <> - - - -

- -

-
- - -

{model.model_id}

-
-
- - {model.deployment_ids.length > 1 ? ( - <> - - } - > - { - return { text: v, value: v }; - })} - value={deploymentId} - onChange={(e) => { - setDeploymentId(e.target.value); - }} - /> - - - - ) : null} - - {onlyShowTab === undefined ? ( - <> - - setInputType(INPUT_TYPE.TEXT)} - > - - - setInputType(INPUT_TYPE.INDEX)} - > - - - - - - - ) : null} - - = ({ model, onClose }) => ( + + + +

+ - - - - ); -}; +

+
+ + +

{model.model_id}

+
+
+ + + +
+); diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx new file mode 100644 index 000000000000..33c4e69df59b --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx @@ -0,0 +1,37 @@ +/* + * 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, { FC, useState } from 'react'; + +import { + type TestTrainedModelsContextType, + TestTrainedModelsContext, +} from './test_trained_models_context'; +import type { ModelItem } from '../models_list'; +import { TestTrainedModelFlyout } from './test_flyout'; +import { CreatePipelineForModelFlyout } from '../create_pipeline_for_model/create_pipeline_for_model_flyout'; + +interface Props { + model: ModelItem; + onClose: (refreshList?: boolean) => void; +} +export const TestModelAndPipelineCreationFlyout: FC = ({ model, onClose }) => { + const [currentContext, setCurrentContext] = useState({ + pipelineConfig: undefined, + createPipelineFlyoutOpen: false, + }); + + return ( + + {currentContext.createPipelineFlyoutOpen === false ? ( + + ) : ( + + )} + + ); +}; diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx new file mode 100644 index 000000000000..52665343cb35 --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx @@ -0,0 +1,115 @@ +/* + * 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, { FC, useState, useMemo } from 'react'; + +import { SUPPORTED_PYTORCH_TASKS } from '@kbn/ml-trained-models-utils'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { EuiFormRow, EuiSelect, EuiSpacer, EuiTab, EuiTabs, useEuiPaddingSize } from '@elastic/eui'; +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { SelectedModel } from './selected_model'; +import { type ModelItem } from '../models_list'; +import { INPUT_TYPE } from './models/inference_base'; +import { useTestTrainedModelsContext } from './test_trained_models_context'; +import { type InferecePipelineCreationState } from '../create_pipeline_for_model/state'; + +interface ContentProps { + model: ModelItem; + handlePipelineConfigUpdate?: (configUpdate: Partial) => void; + externalPipelineConfig?: estypes.IngestPipeline; +} + +export const TestTrainedModelContent: FC = ({ + model, + handlePipelineConfigUpdate, + externalPipelineConfig, +}) => { + const [deploymentId, setDeploymentId] = useState(model.deployment_ids[0]); + const mediumPadding = useEuiPaddingSize('m'); + + const [inputType, setInputType] = useState(INPUT_TYPE.TEXT); + const { + currentContext: { createPipelineFlyoutOpen }, + setCurrentContext, + } = useTestTrainedModelsContext(); + + const onlyShowTab: INPUT_TYPE | undefined = useMemo(() => { + return (model.type ?? []).includes(SUPPORTED_PYTORCH_TASKS.TEXT_EXPANSION) || + createPipelineFlyoutOpen + ? INPUT_TYPE.INDEX + : undefined; + }, [model, createPipelineFlyoutOpen]); + return ( + <> + {' '} + {model.deployment_ids.length > 1 ? ( + <> + + } + > + { + return { text: v, value: v }; + })} + value={deploymentId} + onChange={(e) => { + setDeploymentId(e.target.value); + }} + /> + + + + ) : null} + {onlyShowTab === undefined ? ( + <> + + setInputType(INPUT_TYPE.TEXT)} + > + + + setInputType(INPUT_TYPE.INDEX)} + > + + + + + + + ) : null} + + + ); +}; diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_models_context.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_models_context.tsx new file mode 100644 index 000000000000..5db45a334b16 --- /dev/null +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_models_context.tsx @@ -0,0 +1,32 @@ +/* + * 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 { createContext, Dispatch, useContext } from 'react'; +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +export interface TestTrainedModelsContextType { + pipelineConfig?: estypes.IngestPipeline; + createPipelineFlyoutOpen: boolean; + defaultSelectedDataViewId?: string; +} +export const TestTrainedModelsContext = createContext< + | { + currentContext: TestTrainedModelsContextType; + setCurrentContext: Dispatch; + } + | undefined +>(undefined); + +export function useTestTrainedModelsContext() { + const testTrainedModelsContext = useContext(TestTrainedModelsContext); + + if (testTrainedModelsContext === undefined) { + throw new Error('TestTrainedModelsContext has not been initialized.'); + } + + return testTrainedModelsContext; +} diff --git a/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts b/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts index ad536027a661..2dadf5e51026 100644 --- a/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts +++ b/x-pack/plugins/ml/server/lib/alerts/register_anomaly_detection_alert_type.ts @@ -166,7 +166,7 @@ export function registerAnomalyDetectionAlertType({ >({ id: ML_ALERT_TYPES.ANOMALY_DETECTION, name: i18n.translate('xpack.ml.anomalyDetectionAlert.name', { - defaultMessage: 'Anomaly detection alert', + defaultMessage: 'Anomaly detection', }), actionGroups: [THRESHOLD_MET_GROUP], defaultActionGroupId: ANOMALY_SCORE_MATCH_GROUP_ID, diff --git a/x-pack/plugins/notifications/kibana.jsonc b/x-pack/plugins/notifications/kibana.jsonc index b6c7c6a3e334..e223a12dbc79 100644 --- a/x-pack/plugins/notifications/kibana.jsonc +++ b/x-pack/plugins/notifications/kibana.jsonc @@ -6,7 +6,7 @@ "id": "notifications", "server": true, "browser": false, - "requiredPlugins": [ + "optionalPlugins": [ "actions", "licensing" ] diff --git a/x-pack/plugins/notifications/server/index.ts b/x-pack/plugins/notifications/server/index.ts index 4c3afb14f7a5..76df75c9afd2 100755 --- a/x-pack/plugins/notifications/server/index.ts +++ b/x-pack/plugins/notifications/server/index.ts @@ -10,7 +10,7 @@ export { config } from './config'; // This exports static code and TypeScript types, // as well as, Kibana Platform `plugin()` initializer. -export type { NotificationsPluginStart } from './types'; +export type { NotificationsServerStart as NotificationsPluginStart } from './types'; export async function plugin(initializerContext: PluginInitializerContext) { const { NotificationsPlugin } = await import('./plugin'); diff --git a/x-pack/plugins/notifications/server/mocks.ts b/x-pack/plugins/notifications/server/mocks.ts index 65d600fda6e9..aa6f5c227d44 100644 --- a/x-pack/plugins/notifications/server/mocks.ts +++ b/x-pack/plugins/notifications/server/mocks.ts @@ -7,7 +7,7 @@ import type { PublicMethodsOf } from '@kbn/utility-types'; import type { EmailService } from './services'; -import type { NotificationsPluginStart } from './types'; +import type { NotificationsServerStart } from './types'; import type { NotificationsPlugin } from './plugin'; const emailServiceMock: jest.Mocked = { @@ -19,7 +19,7 @@ const createEmailServiceMock = () => { return emailServiceMock; }; -const startMock: jest.Mocked = { +const startMock: jest.Mocked = { isEmailServiceAvailable: jest.fn(), getEmailService: jest.fn(createEmailServiceMock), }; @@ -30,7 +30,7 @@ const createStartMock = () => { const notificationsPluginMock: jest.Mocked> = { setup: jest.fn(), - start: jest.fn(createStartMock) as jest.Mock, + start: jest.fn(createStartMock) as jest.Mock, stop: jest.fn(), }; diff --git a/x-pack/plugins/notifications/server/plugin.ts b/x-pack/plugins/notifications/server/plugin.ts index 562db1977a73..542eaeb0ba23 100755 --- a/x-pack/plugins/notifications/server/plugin.ts +++ b/x-pack/plugins/notifications/server/plugin.ts @@ -7,14 +7,23 @@ import type { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '@kbn/core/server'; import type { - NotificationsPluginSetupDeps, - NotificationsPluginStartDeps, - NotificationsPluginStart, + NotificationsServerSetupDependencies, + NotificationsServerStartDependencies, + NotificationsServerStart, + NotificationsServerSetup, } from './types'; import type { NotificationsConfigType } from './config'; import { EmailServiceProvider } from './services/connectors_email_service_provider'; -export class NotificationsPlugin implements Plugin { +export class NotificationsPlugin + implements + Plugin< + NotificationsServerSetup, + NotificationsServerStart, + NotificationsServerSetupDependencies, + NotificationsServerStartDependencies + > +{ private emailServiceProvider: EmailServiceProvider; constructor(initializerContext: PluginInitializerContext) { @@ -24,11 +33,11 @@ export class NotificationsPlugin implements Plugin { const originalConsole = global.console; @@ -51,7 +51,7 @@ describe('renderApp', () => { }, }, usageCollection: { reportUiCounter: noop }, - observabilityAIAssistant: { service: mockObservabilityAIAssistantService }, + observabilityAIAssistant: { service: mockService }, } as unknown as ObservabilityPublicPluginsStart; const core = { diff --git a/x-pack/plugins/observability/public/application/index.tsx b/x-pack/plugins/observability/public/application/index.tsx index 5eb3fa65849c..7b01bc1f8eeb 100644 --- a/x-pack/plugins/observability/public/application/index.tsx +++ b/x-pack/plugins/observability/public/application/index.tsx @@ -19,7 +19,6 @@ import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; -import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public'; import { PluginContext } from '../context/plugin_context/plugin_context'; import { ConfigSchema, ObservabilityPublicPluginsStart } from '../plugin'; import { routes } from '../routes/routes'; @@ -85,23 +84,24 @@ export const renderApp = ({ const ApplicationUsageTrackingProvider = usageCollection?.components.ApplicationUsageTrackingProvider ?? React.Fragment; const CloudProvider = plugins.cloud?.CloudContextProvider ?? React.Fragment; + const PresentationContextProvider = plugins.presentationUtil?.ContextProvider ?? React.Fragment; ReactDOM.render( - - - - - - + + + + + + - - - - - - , + + + + + + , element ); return () => { diff --git a/x-pack/plugins/observability/public/context/plugin_context/plugin_context.tsx b/x-pack/plugins/observability/public/context/plugin_context/plugin_context.tsx index d9ae99760a7a..11d2b05fc235 100644 --- a/x-pack/plugins/observability/public/context/plugin_context/plugin_context.tsx +++ b/x-pack/plugins/observability/public/context/plugin_context/plugin_context.tsx @@ -5,11 +5,11 @@ * 2.0. */ -import { AppMountParameters } from '@kbn/core/public'; import { createContext } from 'react'; +import type { AppMountParameters } from '@kbn/core/public'; import type { LazyObservabilityPageTemplateProps } from '@kbn/observability-shared-plugin/public'; -import { ObservabilityRuleTypeRegistry } from '../../rules/create_observability_rule_type_registry'; -import { ConfigSchema } from '../../plugin'; +import type { ObservabilityRuleTypeRegistry } from '../../rules/create_observability_rule_type_registry'; +import type { ConfigSchema } from '../../plugin'; export interface PluginContextValue { config: ConfigSchema; diff --git a/x-pack/plugins/observability/public/pages/alert_details/alert_details.test.tsx b/x-pack/plugins/observability/public/pages/alert_details/alert_details.test.tsx index f2a7a4d72d66..9d537453d4ea 100644 --- a/x-pack/plugins/observability/public/pages/alert_details/alert_details.test.tsx +++ b/x-pack/plugins/observability/public/pages/alert_details/alert_details.test.tsx @@ -13,6 +13,9 @@ import { casesPluginMock } from '@kbn/cases-plugin/public/mocks'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import * as useUiSettingHook from '@kbn/kibana-react-plugin/public/ui_settings/use_ui_setting'; import { useBreadcrumbs } from '@kbn/observability-shared-plugin/public'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; +import { ruleTypeRegistryMock } from '@kbn/triggers-actions-ui-plugin/public/application/rule_type_registry.mock'; +import { RuleTypeModel, ValidationResult } from '@kbn/triggers-actions-ui-plugin/public'; import { Subset } from '../../typings'; import { render } from '../../utils/test_helper'; @@ -22,8 +25,6 @@ import { useFetchAlertDetail } from '../../hooks/use_fetch_alert_detail'; import { AlertDetails } from './alert_details'; import { ConfigSchema } from '../../plugin'; import { alert, alertWithNoData } from './mock/alert'; -import { ruleTypeRegistryMock } from '@kbn/triggers-actions-ui-plugin/public/application/rule_type_registry.mock'; -import { RuleTypeModel, ValidationResult } from '@kbn/triggers-actions-ui-plugin/public'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), @@ -45,17 +46,20 @@ const ruleTypeRegistry = ruleTypeRegistryMock.create(); const useKibanaMock = useKibana as jest.Mock; +const mockObservabilityAIAssistant = observabilityAIAssistantPluginMock.createStartContract(); + const mockKibana = () => { useKibanaMock.mockReturnValue({ services: { ...kibanaStartMock.startContract(), - theme: {}, cases: casesPluginMock.createStartContract(), http: { basePath: { prepend: jest.fn(), }, }, + observabilityAIAssistant: mockObservabilityAIAssistant, + theme: {}, triggersActionsUi: { ruleTypeRegistry, }, diff --git a/x-pack/plugins/observability/public/pages/alerts/alerts.test.tsx b/x-pack/plugins/observability/public/pages/alerts/alerts.test.tsx index cf59af003a78..8977e9ae3e4f 100644 --- a/x-pack/plugins/observability/public/pages/alerts/alerts.test.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/alerts.test.tsx @@ -15,6 +15,7 @@ import { RUNNING_MAINTENANCE_WINDOW_1 } from '@kbn/alerts-ui-shared/src/maintena import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { MAINTENANCE_WINDOW_FEATURE_ID } from '@kbn/alerting-plugin/common/maintenance_window'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { ObservabilityPublicPluginsStart } from '../../plugin'; import { AlertsPage } from './alerts'; @@ -35,10 +36,19 @@ mockUseKibanaReturnValue.services.application.capabilities = { }, }; +const mockObservabilityAIAssistant = observabilityAIAssistantPluginMock.createStartContract(); + jest.mock('../../utils/kibana_react', () => ({ __esModule: true, - useKibana: jest.fn(() => mockUseKibanaReturnValue), + useKibana: jest.fn(() => ({ + ...mockUseKibanaReturnValue, + services: { + ...mockUseKibanaReturnValue.services, + observabilityAIAssistant: mockObservabilityAIAssistant, + }, + })), })); + jest.mock('@kbn/kibana-react-plugin/public', () => ({ __esModule: true, useKibana: jest.fn(() => mockUseKibanaReturnValue), diff --git a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx index b8e216ded52f..ab7080e1d6d6 100644 --- a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx @@ -4,11 +4,12 @@ * 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 { act } from '@testing-library/react-hooks'; -import { kibanaStartMock } from '../../../utils/kibana_react.mock'; -import React from 'react'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; +import { kibanaStartMock } from '../../../utils/kibana_react.mock'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { AlertActions, ObservabilityAlertActionsProps } from './alert_actions'; import { inventoryThresholdAlertEs } from '../../../rules/fixtures/example_alerts'; import { RULE_DETAILS_PAGE_ID } from '../../rule_details/constants'; @@ -42,6 +43,9 @@ mockUseKibanaReturnValue.services.cases.hooks.useCasesAddToExistingCaseModal.moc mockUseKibanaReturnValue.services.cases.helpers.canUseCases.mockReturnValue(allCasesPermissions()); +const { ObservabilityAIAssistantActionMenuItem, ObservabilityAIAssistantContextualInsight } = + observabilityAIAssistantPluginMock.createStartContract(); + jest.mock('../../../utils/kibana_react', () => ({ __esModule: true, useKibana: jest.fn(() => mockUseKibanaReturnValue), @@ -72,6 +76,8 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ plugins: {} as ObservabilityPublicPluginsStart, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), ObservabilityPageTemplate: KibanaPageTemplate, + ObservabilityAIAssistantActionMenuItem, + ObservabilityAIAssistantContextualInsight, })); describe('ObservabilityActions component', () => { diff --git a/x-pack/plugins/observability/public/pages/overview/components/header_menu/header_menu.tsx b/x-pack/plugins/observability/public/pages/overview/components/header_menu/header_menu.tsx index 111acb054e16..b57c512565fc 100644 --- a/x-pack/plugins/observability/public/pages/overview/components/header_menu/header_menu.tsx +++ b/x-pack/plugins/observability/public/pages/overview/components/header_menu/header_menu.tsx @@ -8,22 +8,22 @@ import { EuiHeaderLink, EuiHeaderLinks } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; -import { - ObservabilityAIAssistantActionMenuItem, - useObservabilityAIAssistantOptional, -} from '@kbn/observability-ai-assistant-plugin/public'; + import { useKibana } from '../../../../utils/kibana_react'; import { usePluginContext } from '../../../../hooks/use_plugin_context'; import HeaderMenuPortal from './header_menu_portal'; export function HeaderMenu(): React.ReactElement | null { - const { http, theme } = useKibana().services; + const { + http, + theme, + observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, + } = useKibana().services; + const { appMountParameters: { setHeaderActionMenu }, } = usePluginContext(); - const aiAssistant = useObservabilityAIAssistantOptional(); - return ( @@ -34,7 +34,7 @@ export function HeaderMenu(): React.ReactElement | null { > {addDataLinkText} - {aiAssistant?.isEnabled() ? : null} + {ObservabilityAIAssistantActionMenuItem ? : null} ); diff --git a/x-pack/plugins/observability/public/pages/overview/components/sections/apm/apm_section.test.tsx b/x-pack/plugins/observability/public/pages/overview/components/sections/apm/apm_section.test.tsx index 23d3af1167b9..b5befe3c3083 100644 --- a/x-pack/plugins/observability/public/pages/overview/components/sections/apm/apm_section.test.tsx +++ b/x-pack/plugins/observability/public/pages/overview/components/sections/apm/apm_section.test.tsx @@ -7,6 +7,7 @@ import React from 'react'; import * as fetcherHook from '@kbn/observability-shared-plugin/public/hooks/use_fetcher'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { render, data as dataMock } from '../../../../../utils/test_helper'; import { CoreStart } from '@kbn/core/public'; import { ConfigSchema, ObservabilityPublicPluginsStart } from '../../../../../plugin'; @@ -27,6 +28,9 @@ jest.mock('react-router-dom', () => ({ useHistory: jest.fn(), })); +const { ObservabilityAIAssistantActionMenuItem, ObservabilityAIAssistantContextualInsight } = + observabilityAIAssistantPluginMock.createStartContract(); + describe('APMSection', () => { const bucketSize = { intervalString: '60s', bucketSize: 60, dateFormat: 'YYYY-MM-DD HH:mm' }; @@ -61,6 +65,8 @@ describe('APMSection', () => { plugins: {} as ObservabilityPublicPluginsStart, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), ObservabilityPageTemplate: KibanaPageTemplate, + ObservabilityAIAssistantActionMenuItem, + ObservabilityAIAssistantContextualInsight, })); }); diff --git a/x-pack/plugins/observability/public/pages/overview/components/sections/ux/core_web_vitals/translations.ts b/x-pack/plugins/observability/public/pages/overview/components/sections/ux/core_web_vitals/translations.ts index d6445320a797..bded2fd67cca 100644 --- a/x-pack/plugins/observability/public/pages/overview/components/sections/ux/core_web_vitals/translations.ts +++ b/x-pack/plugins/observability/public/pages/overview/components/sections/ux/core_web_vitals/translations.ts @@ -16,7 +16,7 @@ export const LCP_LABEL = i18n.translate('xpack.observability.ux.coreVitals.lcp', }); export const INP_LABEL = i18n.translate('xpack.observability.ux.coreVitals.inp', { - defaultMessage: 'Interaction to Next Paint', + defaultMessage: 'Interaction to next paint', }); export const CLS_LABEL = i18n.translate('xpack.observability.ux.coreVitals.cls', { diff --git a/x-pack/plugins/observability/public/pages/rules/rules.test.tsx b/x-pack/plugins/observability/public/pages/rules/rules.test.tsx index 6f18d308780a..904578fe75a0 100644 --- a/x-pack/plugins/observability/public/pages/rules/rules.test.tsx +++ b/x-pack/plugins/observability/public/pages/rules/rules.test.tsx @@ -8,6 +8,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import { CoreStart } from '@kbn/core/public'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { ObservabilityPublicPluginsStart } from '../../plugin'; import { RulesPage } from './rules'; @@ -19,10 +20,17 @@ import { AppMountParameters } from '@kbn/core/public'; import { ALERTS_FEATURE_ID } from '@kbn/alerting-plugin/common'; const mockUseKibanaReturnValue = kibanaStartMock.startContract(); +const mockObservabilityAIAssistant = observabilityAIAssistantPluginMock.createStartContract(); jest.mock('../../utils/kibana_react', () => ({ __esModule: true, - useKibana: jest.fn(() => mockUseKibanaReturnValue), + useKibana: jest.fn(() => ({ + ...mockUseKibanaReturnValue, + services: { + ...mockUseKibanaReturnValue.services, + observabilityAIAssistant: mockObservabilityAIAssistant, + }, + })), })); jest.mock('@kbn/observability-shared-plugin/public'); diff --git a/x-pack/plugins/observability/public/pages/slo_details/components/error_budget_chart_panel.tsx b/x-pack/plugins/observability/public/pages/slo_details/components/error_budget_chart_panel.tsx index b460e3e2a942..a053e39fae34 100644 --- a/x-pack/plugins/observability/public/pages/slo_details/components/error_budget_chart_panel.tsx +++ b/x-pack/plugins/observability/public/pages/slo_details/components/error_budget_chart_panel.tsx @@ -10,6 +10,7 @@ import numeral from '@elastic/numeral'; import { i18n } from '@kbn/i18n'; import { rollingTimeWindowTypeSchema, SLOWithSummaryResponse } from '@kbn/slo-schema'; import React from 'react'; +import { toDuration, toMinutes } from '../../../utils/slo/duration'; import { ChartData } from '../../../typings/slo'; import { useKibana } from '../../../utils/kibana_react'; import { toDurationAdverbLabel, toDurationLabel } from '../../../utils/slo/labels'; @@ -27,6 +28,24 @@ export function ErrorBudgetChartPanel({ data, isLoading, slo }: Props) { const isSloFailed = slo.summary.status === 'DEGRADING' || slo.summary.status === 'VIOLATED'; + let remainingBudgetFormatted; + if (slo.budgetingMethod === 'timeslices' && slo.timeWindow.type === 'calendarAligned') { + const totalSlices = + toMinutes(toDuration(slo.timeWindow.duration)) / + toMinutes(toDuration(slo.objective.timesliceWindow!)); + const remainingBudgetInTimeUnit = + slo.summary.errorBudget.remaining * (slo.summary.errorBudget.initial * totalSlices); + + if (remainingBudgetInTimeUnit <= 0) { + remainingBudgetFormatted = '0min'; + } else { + if (remainingBudgetInTimeUnit / 60 >= 1) { + remainingBudgetFormatted = `${Math.trunc(remainingBudgetInTimeUnit / 60)}h`; + } + remainingBudgetFormatted += `${Math.trunc(remainingBudgetInTimeUnit % 60)}min`; + } + } + return ( @@ -68,6 +87,20 @@ export function ErrorBudgetChartPanel({ data, isLoading, slo }: Props) { reverse />
+ {!!remainingBudgetFormatted && ( + + + + )} diff --git a/x-pack/plugins/observability/public/pages/slo_details/components/header_control.tsx b/x-pack/plugins/observability/public/pages/slo_details/components/header_control.tsx index 34eb1f278e7a..b8bad5b98c4c 100644 --- a/x-pack/plugins/observability/public/pages/slo_details/components/header_control.tsx +++ b/x-pack/plugins/observability/public/pages/slo_details/components/header_control.tsx @@ -5,22 +5,22 @@ * 2.0. */ -import React, { useCallback, useState } from 'react'; -import { i18n } from '@kbn/i18n'; import { EuiButton, EuiContextMenuItem, EuiContextMenuPanel, EuiPopover } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { SLOWithSummaryResponse } from '@kbn/slo-schema'; +import React, { useCallback, useState } from 'react'; -import { useCloneSlo } from '../../../hooks/slo/use_clone_slo'; +import { rulesLocatorID, sloFeatureId } from '../../../../common'; +import { SLO_BURN_RATE_RULE_TYPE_ID } from '../../../../common/constants'; +import { paths } from '../../../../common/locators/paths'; import { SloDeleteConfirmationModal } from '../../../components/slo/delete_confirmation_modal/slo_delete_confirmation_modal'; import { useCapabilities } from '../../../hooks/slo/use_capabilities'; -import { useKibana } from '../../../utils/kibana_react'; +import { useCloneSlo } from '../../../hooks/slo/use_clone_slo'; import { useDeleteSlo } from '../../../hooks/slo/use_delete_slo'; -import { isApmIndicatorType } from '../../../utils/slo/indicator'; -import { convertSliApmParamsToApmAppDeeplinkUrl } from '../../../utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url'; -import { SLO_BURN_RATE_RULE_TYPE_ID } from '../../../../common/constants'; -import { rulesLocatorID, sloFeatureId } from '../../../../common'; -import { paths } from '../../../../common/locators/paths'; import type { RulesParams } from '../../../locators/rules'; +import { useKibana } from '../../../utils/kibana_react'; +import { convertSliApmParamsToApmAppDeeplinkUrl } from '../../../utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url'; +import { isApmIndicatorType } from '../../../utils/slo/indicator'; export interface Props { slo: SLOWithSummaryResponse | undefined; @@ -72,27 +72,13 @@ export function HeaderControl({ isLoading, slo }: Props) { }; const handleNavigateToApm = () => { - if ( - slo?.indicator.type === 'sli.apm.transactionDuration' || - slo?.indicator.type === 'sli.apm.transactionErrorRate' - ) { - const { - indicator: { - params: { environment, filter, service, transactionName, transactionType }, - }, - timeWindow: { duration }, - } = slo; - - const url = convertSliApmParamsToApmAppDeeplinkUrl({ - duration, - environment, - filter, - service, - transactionName, - transactionType, - }); + if (!slo) { + return undefined; + } - navigate(basePath.prepend(url)); + const url = convertSliApmParamsToApmAppDeeplinkUrl(slo); + if (url) { + navigateToUrl(basePath.prepend(url)); } }; @@ -189,7 +175,7 @@ export function HeaderControl({ isLoading, slo }: Props) { , ] .concat( - !!slo && isApmIndicatorType(slo.indicator.type) ? ( + !!slo && isApmIndicatorType(slo.indicator) ? ( ; + IndicatorOverview = ; break; } diff --git a/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx b/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx index 5a06bbd9bf2d..22691aaa2b49 100644 --- a/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_details/slo_details.test.tsx @@ -8,6 +8,7 @@ import React from 'react'; import { fireEvent, screen, waitFor } from '@testing-library/react'; import type { Capabilities } from '@kbn/core/public'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { useKibana } from '../../utils/kibana_react'; import { useParams, useLocation } from 'react-router-dom'; @@ -84,6 +85,7 @@ const mockKibana = () => { addError: jest.fn(), }, }, + observabilityAIAssistant: observabilityAIAssistantPluginMock.createStartContract(), share: { url: { locators: { diff --git a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx index 857cbdc7338a..553969637129 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx @@ -9,6 +9,7 @@ import { fireEvent, waitFor, cleanup } from '@testing-library/react'; import { createBrowserHistory } from 'history'; import React from 'react'; import Router from 'react-router-dom'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { paths } from '../../../common/locators/paths'; import { buildSlo } from '../../data/slo/slo'; @@ -102,6 +103,7 @@ const mockKibana = () => { addSuccess: mockAddSuccess, }, }, + observabilityAIAssistant: observabilityAIAssistantPluginMock.createStartContract(), storage: { get: () => {}, }, diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.tsx index 316298cd8d44..60fceb4481b9 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.tsx @@ -5,14 +5,18 @@ * 2.0. */ -import React from 'react'; -import { EuiBadge, EuiFlexItem, EuiToolTip, EuiBadgeProps } from '@elastic/eui'; -import { SLOResponse, SLOWithSummaryResponse } from '@kbn/slo-schema'; -import { euiLightVars } from '@kbn/ui-theme'; +import { EuiBadge, EuiBadgeProps, EuiFlexItem, EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { + apmTransactionDurationIndicatorSchema, + apmTransactionErrorRateIndicatorSchema, + SLOResponse, + SLOWithSummaryResponse, +} from '@kbn/slo-schema'; +import { euiLightVars } from '@kbn/ui-theme'; +import React from 'react'; import { useKibana } from '../../../../utils/kibana_react'; import { convertSliApmParamsToApmAppDeeplinkUrl } from '../../../../utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url'; -import { isApmIndicatorType } from '../../../../utils/slo/indicator'; import { toIndicatorTypeLabel } from '../../../../utils/slo/labels'; export interface Props { @@ -27,26 +31,8 @@ export function SloIndicatorTypeBadge({ slo, color }: Props) { } = useKibana().services; const handleNavigateToApm = () => { - if ( - slo.indicator.type === 'sli.apm.transactionDuration' || - slo.indicator.type === 'sli.apm.transactionErrorRate' - ) { - const { - indicator: { - params: { environment, filter, service, transactionName, transactionType }, - }, - timeWindow: { duration }, - } = slo; - - const url = convertSliApmParamsToApmAppDeeplinkUrl({ - duration, - environment, - filter, - service, - transactionName, - transactionType, - }); - + const url = convertSliApmParamsToApmAppDeeplinkUrl(slo); + if (url) { navigateToUrl(basePath.prepend(url)); } }; @@ -58,7 +44,8 @@ export function SloIndicatorTypeBadge({ slo, color }: Props) { {toIndicatorTypeLabel(slo.indicator.type)} - {isApmIndicatorType(slo.indicator.type) && 'service' in slo.indicator.params && ( + {(apmTransactionDurationIndicatorSchema.is(slo.indicator) || + apmTransactionErrorRateIndicatorSchema.is(slo.indicator)) && ( > | undefined; @@ -64,15 +68,17 @@ export function SloCardItem({ slo, rules, activeAlerts, historicalSummary, cards const [isActionsPopoverOpen, setIsActionsPopoverOpen] = useState(false); const [isAddRuleFlyoutOpen, setIsAddRuleFlyoutOpen] = useState(false); const [isDeleteConfirmationModalOpen, setDeleteConfirmationModalOpen] = useState(false); - + const [isDashboardAttachmentReady, setDashboardAttachmentReady] = useState(false); const historicalSliData = formatHistoricalData(historicalSummary, 'sli_value'); - const { handleCreateRule, handleDeleteCancel, handleDeleteConfirm } = useSloListActions({ - slo, - setDeleteConfirmationModalOpen, - setIsActionsPopoverOpen, - setIsAddRuleFlyoutOpen, - }); + const { handleCreateRule, handleDeleteCancel, handleDeleteConfirm, handleAttachToDashboardSave } = + useSloListActions({ + slo, + setDeleteConfirmationModalOpen, + setIsActionsPopoverOpen, + setIsAddRuleFlyoutOpen, + setDashboardAttachmentReady, + }); return ( <> @@ -104,6 +110,7 @@ export function SloCardItem({ slo, rules, activeAlerts, historicalSummary, cards setIsActionsPopoverOpen={setIsActionsPopoverOpen} setIsAddRuleFlyoutOpen={setIsAddRuleFlyoutOpen} setDeleteConfirmationModalOpen={setDeleteConfirmationModalOpen} + setDashboardAttachmentReady={setDashboardAttachmentReady} /> )} @@ -130,6 +137,25 @@ export function SloCardItem({ slo, rules, activeAlerts, historicalSummary, cards onConfirm={handleDeleteConfirm} /> ) : null} + {isDashboardAttachmentReady ? ( + { + setDashboardAttachmentReady(false); + }} + onSave={handleAttachToDashboardSave} + /> + ) : null} ); } diff --git a/x-pack/plugins/observability/public/pages/slos/components/card_view/slo_card_item_actions.tsx b/x-pack/plugins/observability/public/pages/slos/components/card_view/slo_card_item_actions.tsx index 51d1887d433f..ff4d7f363cae 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/card_view/slo_card_item_actions.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/card_view/slo_card_item_actions.tsx @@ -41,6 +41,7 @@ interface Props { setIsActionsPopoverOpen: (value: boolean) => void; setDeleteConfirmationModalOpen: (value: boolean) => void; setIsAddRuleFlyoutOpen: (value: boolean) => void; + setDashboardAttachmentReady: (value: boolean) => void; } export function SloCardItemActions(props: Props) { diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_item_actions.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_item_actions.tsx index 51652abe1354..8bda3b98bd51 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_item_actions.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_item_actions.tsx @@ -30,6 +30,7 @@ interface Props { setIsActionsPopoverOpen: (value: boolean) => void; setDeleteConfirmationModalOpen: (value: boolean) => void; setIsAddRuleFlyoutOpen: (value: boolean) => void; + setDashboardAttachmentReady?: (value: boolean) => void; btnProps?: Partial; } const CustomShadowPanel = styled(EuiPanel)<{ shadow: string }>` @@ -59,6 +60,7 @@ export function SloItemActions({ setIsActionsPopoverOpen, setIsAddRuleFlyoutOpen, setDeleteConfirmationModalOpen, + setDashboardAttachmentReady, btnProps, }: Props) { const { @@ -110,6 +112,13 @@ export function SloItemActions({ setIsAddRuleFlyoutOpen(true); }; + const handleAttachToDashboard = () => { + setIsActionsPopoverOpen(false); + if (setDashboardAttachmentReady) { + setDashboardAttachmentReady(true); + } + }; + const btn = ( , + + {i18n.translate('xpack.observability.slo.item.actions.attachToDashboard', { + defaultMessage: 'Attach to Dashboard', + })} + , ]} /> diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx index 31455cea0190..dc3865af0005 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx @@ -9,6 +9,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiText } from '@elastic/eui'; import { HistoricalSummaryResponse, SLOWithSummaryResponse } from '@kbn/slo-schema'; import type { Rule } from '@kbn/triggers-actions-ui-plugin/public'; import React, { useState } from 'react'; + import { SloDeleteConfirmationModal } from '../../../components/slo/delete_confirmation_modal/slo_delete_confirmation_modal'; import { useSloFormattedSummary } from '../hooks/use_slo_summary'; import { BurnRateRuleFlyout } from './common/burn_rate_rule_flyout'; diff --git a/x-pack/plugins/observability/public/pages/slos/hooks/use_slo_list_actions.ts b/x-pack/plugins/observability/public/pages/slos/hooks/use_slo_list_actions.ts index 169e1e54c522..bdc6cf3a4c49 100644 --- a/x-pack/plugins/observability/public/pages/slos/hooks/use_slo_list_actions.ts +++ b/x-pack/plugins/observability/public/pages/slos/hooks/use_slo_list_actions.ts @@ -6,19 +6,26 @@ */ import { SLOWithSummaryResponse } from '@kbn/slo-schema'; +import { SaveModalDashboardProps } from '@kbn/presentation-util-plugin/public'; +import { useCallback } from 'react'; import { useDeleteSlo } from '../../../hooks/slo/use_delete_slo'; +import { SLO_EMBEDDABLE } from '../../../embeddable/slo/overview/slo_embeddable'; +import { useKibana } from '../../../utils/kibana_react'; export function useSloListActions({ slo, setIsAddRuleFlyoutOpen, setIsActionsPopoverOpen, setDeleteConfirmationModalOpen, + setDashboardAttachmentReady, }: { slo: SLOWithSummaryResponse; setIsActionsPopoverOpen: (val: boolean) => void; setIsAddRuleFlyoutOpen: (val: boolean) => void; setDeleteConfirmationModalOpen: (val: boolean) => void; + setDashboardAttachmentReady?: (val: boolean) => void; }) { + const { embeddable } = useKibana().services; const { mutate: deleteSlo } = useDeleteSlo(); const handleDeleteConfirm = () => { @@ -34,9 +41,35 @@ export function useSloListActions({ setIsAddRuleFlyoutOpen(true); }; + const handleAttachToDashboardSave: SaveModalDashboardProps['onSave'] = useCallback( + ({ dashboardId, newTitle, newDescription }) => { + const stateTransfer = embeddable!.getStateTransfer(); + const embeddableInput = { + title: newTitle, + description: newDescription, + sloId: slo.id, + sloInstanceId: slo.instanceId, + }; + + const state = { + input: embeddableInput, + type: SLO_EMBEDDABLE, + }; + + const path = dashboardId === 'new' ? '#/create' : `#/view/${dashboardId}`; + + stateTransfer.navigateToWithEmbeddablePackage('dashboards', { + state, + path, + }); + }, + [embeddable, slo.id, slo.instanceId] + ); + return { handleDeleteConfirm, handleDeleteCancel, handleCreateRule, + handleAttachToDashboardSave, }; } diff --git a/x-pack/plugins/observability/public/pages/slos/slos.test.tsx b/x-pack/plugins/observability/public/pages/slos/slos.test.tsx index 1f28e822b96f..61e6190b7995 100644 --- a/x-pack/plugins/observability/public/pages/slos/slos.test.tsx +++ b/x-pack/plugins/observability/public/pages/slos/slos.test.tsx @@ -7,7 +7,7 @@ import { act, fireEvent, screen, waitFor } from '@testing-library/react'; import React from 'react'; - +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; @@ -90,6 +90,7 @@ const mockKibana = () => { addError: mockAddError, }, }, + observabilityAIAssistant: observabilityAIAssistantPluginMock.createStartContract(), share: { url: { locators: { diff --git a/x-pack/plugins/observability/public/pages/slos_welcome/slos_welcome.test.tsx b/x-pack/plugins/observability/public/pages/slos_welcome/slos_welcome.test.tsx index a6b4f671d306..8290ecc2988b 100644 --- a/x-pack/plugins/observability/public/pages/slos_welcome/slos_welcome.test.tsx +++ b/x-pack/plugins/observability/public/pages/slos_welcome/slos_welcome.test.tsx @@ -17,6 +17,7 @@ import { SlosWelcomePage } from './slos_welcome'; import { emptySloList, sloList } from '../../data/slo/slo'; import { useCapabilities } from '../../hooks/slo/use_capabilities'; import { paths } from '../../../common/locators/paths'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; jest.mock('@kbn/observability-shared-plugin/public'); jest.mock('../../utils/kibana_react'); @@ -33,16 +34,19 @@ const useGlobalDiagnosisMock = useFetchSloGlobalDiagnosis as jest.Mock; const mockNavigate = jest.fn(); +const mockObservabilityAIAssistant = observabilityAIAssistantPluginMock.createStartContract(); + const mockKibana = () => { useKibanaMock.mockReturnValue({ services: { - theme: {}, application: { navigateToUrl: mockNavigate }, + theme: {}, http: { basePath: { prepend: (url: string) => url, }, }, + observabilityAIAssistant: mockObservabilityAIAssistant, }, }); }; diff --git a/x-pack/plugins/observability/public/plugin.ts b/x-pack/plugins/observability/public/plugin.ts index 2e716f42d071..808573579cb9 100644 --- a/x-pack/plugins/observability/public/plugin.ts +++ b/x-pack/plugins/observability/public/plugin.ts @@ -67,6 +67,7 @@ import { ServerlessPluginSetup, ServerlessPluginStart } from '@kbn/serverless/pu import type { UiActionsStart, UiActionsSetup } from '@kbn/ui-actions-plugin/public'; import { firstValueFrom } from 'rxjs'; +import type { PresentationUtilPluginStart } from '@kbn/presentation-util-plugin/public'; import { observabilityAppId, observabilityFeatureId } from '../common'; import { ALERTS_PATH, @@ -123,6 +124,7 @@ export interface ObservabilityPublicPluginsSetup { uiActions: UiActionsSetup; licensing: LicensingPluginSetup; serverless?: ServerlessPluginSetup; + presentationUtil?: PresentationUtilPluginStart; } export interface ObservabilityPublicPluginsStart { actionTypeRegistry: ActionTypeRegistryContract; @@ -153,6 +155,7 @@ export interface ObservabilityPublicPluginsStart { serverless?: ServerlessPluginStart; uiSettings: IUiSettingsClient; uiActions: UiActionsStart; + presentationUtil?: PresentationUtilPluginStart; } export type ObservabilityPublicStart = ReturnType; diff --git a/x-pack/plugins/observability/public/utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url.test.ts b/x-pack/plugins/observability/public/utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url.test.ts index 11236c3d6bbd..5efea5009ed8 100644 --- a/x-pack/plugins/observability/public/utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url.test.ts +++ b/x-pack/plugins/observability/public/utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url.test.ts @@ -6,9 +6,11 @@ */ import { convertSliApmParamsToApmAppDeeplinkUrl } from './convert_sli_apm_params_to_apm_app_deeplink_url'; +import { buildSlo } from '../../data/slo/slo'; +import { buildApmLatencyIndicator } from '../../data/slo/indicator'; +import { ALL_VALUE } from '@kbn/slo-schema'; -const SLI_APM_PARAMS = { - duration: '30-d', +const DEFAULT_PARAMS = { environment: 'fooEnvironment', filter: 'agent.name : "beats" and agent.version : 3.4.12 ', service: 'barService', @@ -18,74 +20,88 @@ const SLI_APM_PARAMS = { describe('convertSliApmParamsToApmAppDeeplinkUrl', () => { it('should return a correct APM deeplink when all params have a value', () => { - const url = convertSliApmParamsToApmAppDeeplinkUrl(SLI_APM_PARAMS); + const url = convertSliApmParamsToApmAppDeeplinkUrl( + buildSlo({ + indicator: buildApmLatencyIndicator(DEFAULT_PARAMS), + }) + ); expect(url).toMatchInlineSnapshot( - `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&rangeFrom=now-30-d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` + `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&rangeFrom=now-30d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` ); }); - it('should return a correct APM deeplink when empty duration is passed', () => { - const url = convertSliApmParamsToApmAppDeeplinkUrl({ - ...SLI_APM_PARAMS, - duration: '', - }); + it('should return a correct APM deeplink when all environment is passed', () => { + const url = convertSliApmParamsToApmAppDeeplinkUrl( + buildSlo({ + indicator: buildApmLatencyIndicator({ ...DEFAULT_PARAMS, environment: ALL_VALUE }), + }) + ); expect(url).toMatchInlineSnapshot( - `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` + `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=ENVIRONMENT_ALL&transactionType=blarfType&rangeFrom=now-30d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` ); }); - it('should return a correct APM deeplink when empty environment is passed', () => { - const url = convertSliApmParamsToApmAppDeeplinkUrl({ - ...SLI_APM_PARAMS, - environment: '', - }); + it('should return a correct APM deeplink when empty filter is passed', () => { + const url = convertSliApmParamsToApmAppDeeplinkUrl( + buildSlo({ + indicator: buildApmLatencyIndicator({ ...DEFAULT_PARAMS, filter: '' }), + }) + ); expect(url).toMatchInlineSnapshot( - `"/app/apm/services/barService/overview?comparisonEnabled=true&transactionType=blarfType&rangeFrom=now-30-d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` + `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&rangeFrom=now-30d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22"` ); }); - it('should return a correct APM deeplink when empty filter is passed', () => { - const url = convertSliApmParamsToApmAppDeeplinkUrl({ - ...SLI_APM_PARAMS, - filter: '', - }); + it('should return an empty string if all service is passed', () => { + const url = convertSliApmParamsToApmAppDeeplinkUrl( + buildSlo({ + indicator: buildApmLatencyIndicator({ ...DEFAULT_PARAMS, service: ALL_VALUE }), + }) + ); expect(url).toMatchInlineSnapshot( - `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&rangeFrom=now-30-d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22"` + `"/app/apm/services/*/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&rangeFrom=now-30d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` ); }); - it('should return an empty string if an empty service is passed', () => { - const url = convertSliApmParamsToApmAppDeeplinkUrl({ - ...SLI_APM_PARAMS, - service: '', - }); + it('should return a correct APM deeplink when all transactionName is passed', () => { + const url = convertSliApmParamsToApmAppDeeplinkUrl( + buildSlo({ + indicator: buildApmLatencyIndicator({ ...DEFAULT_PARAMS, transactionName: ALL_VALUE }), + }) + ); - expect(url).toMatchInlineSnapshot(`""`); + expect(url).toMatchInlineSnapshot( + `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&rangeFrom=now-30d&rangeTo=now&kuery=agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` + ); }); - it('should return a correct APM deeplink when empty transactionName is passed', () => { - const url = convertSliApmParamsToApmAppDeeplinkUrl({ - ...SLI_APM_PARAMS, - transactionName: '', - }); + it('should return a correct APM deeplink when all transactionType is passed', () => { + const url = convertSliApmParamsToApmAppDeeplinkUrl( + buildSlo({ + indicator: buildApmLatencyIndicator({ ...DEFAULT_PARAMS, transactionType: ALL_VALUE }), + }) + ); expect(url).toMatchInlineSnapshot( - `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&rangeFrom=now-30-d&rangeTo=now&kuery=agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` + `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=&rangeFrom=now-30d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` ); }); - it('should return a correct APM deeplink when empty transactionType is passed', () => { - const url = convertSliApmParamsToApmAppDeeplinkUrl({ - ...SLI_APM_PARAMS, - transactionType: '', - }); + it('should return a correct APM deeplink when groupBy and instanceId are provided', () => { + const url = convertSliApmParamsToApmAppDeeplinkUrl( + buildSlo({ + indicator: buildApmLatencyIndicator(DEFAULT_PARAMS), + groupBy: 'label.project_id', + instanceId: 'bf6689b383749812f35c7a408f57d113', + }) + ); expect(url).toMatchInlineSnapshot( - `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&rangeFrom=now-30-d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12+"` + `"/app/apm/services/barService/overview?comparisonEnabled=true&environment=fooEnvironment&transactionType=blarfType&rangeFrom=now-30d&rangeTo=now&kuery=transaction.name+%3A+%22bazName%22+and+agent.name+%3A+%22beats%22+and+agent.version+%3A+3.4.12++and+label.project_id+%3A+%22bf6689b383749812f35c7a408f57d113%22"` ); }); }); diff --git a/x-pack/plugins/observability/public/utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url.ts b/x-pack/plugins/observability/public/utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url.ts index a36a6f8c70b2..4cf2f8865233 100644 --- a/x-pack/plugins/observability/public/utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url.ts +++ b/x-pack/plugins/observability/public/utils/slo/convert_sli_apm_params_to_apm_app_deeplink_url.ts @@ -5,29 +5,30 @@ * 2.0. */ -import { ALL_VALUE } from '@kbn/slo-schema'; - -interface Props { - duration?: string; - environment: string; - filter: string | undefined; - service: string; - transactionName: string; - transactionType: string; -} - -export function convertSliApmParamsToApmAppDeeplinkUrl({ - duration, - environment, - filter, - service, - transactionName, - transactionType, -}: Props) { - if (!service) { - return ''; +import { + ALL_VALUE, + apmTransactionDurationIndicatorSchema, + apmTransactionErrorRateIndicatorSchema, + SLOResponse, +} from '@kbn/slo-schema'; + +export function convertSliApmParamsToApmAppDeeplinkUrl(slo: SLOResponse): string | undefined { + if ( + !apmTransactionDurationIndicatorSchema.is(slo.indicator) && + !apmTransactionErrorRateIndicatorSchema.is(slo.indicator) + ) { + return undefined; } + const { + indicator: { + params: { environment, filter, service, transactionName, transactionType }, + }, + timeWindow: { duration }, + groupBy, + instanceId, + } = slo; + const qs = new URLSearchParams('comparisonEnabled=true'); if (environment) { @@ -50,6 +51,9 @@ export function convertSliApmParamsToApmAppDeeplinkUrl({ if (filter && filter.length > 0) { kueryParams.push(filter); } + if (groupBy !== ALL_VALUE && instanceId !== ALL_VALUE) { + kueryParams.push(`${groupBy} : "${instanceId}"`); + } if (kueryParams.length > 0) { qs.append('kuery', kueryParams.join(' and ')); diff --git a/x-pack/plugins/observability/public/utils/slo/indicator.ts b/x-pack/plugins/observability/public/utils/slo/indicator.ts index 955eab9e3329..ece808ddc033 100644 --- a/x-pack/plugins/observability/public/utils/slo/indicator.ts +++ b/x-pack/plugins/observability/public/utils/slo/indicator.ts @@ -5,7 +5,12 @@ * 2.0. */ -import { SLOWithSummaryResponse } from '@kbn/slo-schema'; +import { + apmTransactionDurationIndicatorSchema, + apmTransactionErrorRateIndicatorSchema, + Indicator, +} from '@kbn/slo-schema'; -export const isApmIndicatorType = (indicatorType: SLOWithSummaryResponse['indicator']['type']) => - ['sli.apm.transactionDuration', 'sli.apm.transactionErrorRate'].includes(indicatorType); +export const isApmIndicatorType = (indicator: Indicator): boolean => + apmTransactionDurationIndicatorSchema.is(indicator) || + apmTransactionErrorRateIndicatorSchema.is(indicator); diff --git a/x-pack/plugins/observability/public/utils/test_helper.tsx b/x-pack/plugins/observability/public/utils/test_helper.tsx index 9428f887ed93..61fb7bbade53 100644 --- a/x-pack/plugins/observability/public/utils/test_helper.tsx +++ b/x-pack/plugins/observability/public/utils/test_helper.tsx @@ -62,6 +62,7 @@ export const render = (component: React.ReactNode, config: Subset exploratoryView: { createExploratoryViewUrl: jest.fn(), getAppDataView: jest.fn(), + // eslint-disable-next-line @kbn/i18n/strings_should_be_translated_with_i18n ExploratoryViewEmbeddable: () =>
Embeddable exploratory view
, }, }} diff --git a/x-pack/plugins/observability/server/index.ts b/x-pack/plugins/observability/server/index.ts index 46e294f60322..3d9e87ccadf0 100644 --- a/x-pack/plugins/observability/server/index.ts +++ b/x-pack/plugins/observability/server/index.ts @@ -57,6 +57,7 @@ const configSchema = schema.object({ }), enabled: schema.boolean({ defaultValue: true }), createO11yGenericFeatureId: schema.boolean({ defaultValue: false }), + sloOrphanSummaryCleanUpTaskEnabled: schema.boolean({ defaultValue: true }), }); export const config: PluginConfigDescriptor = { diff --git a/x-pack/plugins/observability/server/plugin.ts b/x-pack/plugins/observability/server/plugin.ts index 932016b02a41..791ddc810831 100644 --- a/x-pack/plugins/observability/server/plugin.ts +++ b/x-pack/plugins/observability/server/plugin.ts @@ -13,10 +13,12 @@ import { import { CloudSetup } from '@kbn/cloud-plugin/server'; import { CoreSetup, + CoreStart, DEFAULT_APP_CATEGORIES, Logger, Plugin, PluginInitializerContext, + SavedObjectsClient, } from '@kbn/core/server'; import { LogExplorerLocatorParams, LOG_EXPLORER_LOCATOR_ID } from '@kbn/deeplinks-observability'; import { PluginSetupContract as FeaturesSetup } from '@kbn/features-plugin/server'; @@ -29,10 +31,15 @@ import { METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, } from '@kbn/rule-data-utils'; +import { + TaskManagerSetupContract, + TaskManagerStartContract, +} from '@kbn/task-manager-plugin/server'; import { RuleRegistryPluginSetupContract } from '@kbn/rule-registry-plugin/server'; import { SharePluginSetup } from '@kbn/share-plugin/server'; import { SpacesPluginSetup, SpacesPluginStart } from '@kbn/spaces-plugin/server'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; +import { SloOrphanSummaryCleanupTask } from './services/slo/tasks/orphan_summary_cleanup_task'; import { ObservabilityConfig } from '.'; import { casesFeatureId, observabilityFeatureId, sloFeatureId } from '../common'; import { SLO_BURN_RATE_RULE_TYPE_ID } from '../common/constants'; @@ -67,10 +74,12 @@ interface PluginSetup { spaces?: SpacesPluginSetup; usageCollection?: UsageCollectionSetup; cloud?: CloudSetup; + taskManager: TaskManagerSetupContract; } interface PluginStart { alerting: PluginStartContract; + taskManager: TaskManagerStartContract; spaces?: SpacesPluginStart; } @@ -86,6 +95,7 @@ const o11yRuleTypes = [ export class ObservabilityPlugin implements Plugin { private logger: Logger; + private sloOrphanCleanupTask?: SloOrphanSummaryCleanupTask; constructor(private readonly initContext: PluginInitializerContext) { this.initContext = initContext; @@ -361,12 +371,17 @@ export class ObservabilityPlugin implements Plugin { const sloInstaller = new DefaultSLOInstaller(sloResourceInstaller, this.logger); sloInstaller.install(); }); - /** * Register a config for the observability guide */ plugins.guidedOnboarding?.registerGuideConfig(kubernetesGuideId, kubernetesGuideConfig); + this.sloOrphanCleanupTask = new SloOrphanSummaryCleanupTask( + plugins.taskManager, + this.logger, + config + ); + return { getAlertDetailsConfig() { return config.unsafe.alertDetails; @@ -379,7 +394,12 @@ export class ObservabilityPlugin implements Plugin { }; } - public start() {} + public start(core: CoreStart, plugins: PluginStart) { + const internalSoClient = new SavedObjectsClient(core.savedObjects.createInternalRepository()); + const internalEsClient = core.elasticsearch.client.asInternalUser; + + this.sloOrphanCleanupTask?.start(plugins.taskManager, internalSoClient, internalEsClient); + } public stop() {} } diff --git a/x-pack/plugins/observability/server/services/slo/slo_repository.ts b/x-pack/plugins/observability/server/services/slo/slo_repository.ts index be6c9266b9e9..1e2adfbe84b9 100644 --- a/x-pack/plugins/observability/server/services/slo/slo_repository.ts +++ b/x-pack/plugins/observability/server/services/slo/slo_repository.ts @@ -6,7 +6,6 @@ */ import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { Paginated, Pagination, sloSchema } from '@kbn/slo-schema'; import { fold } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; @@ -88,20 +87,14 @@ export class KibanaSavedObjectsSLORepository implements SLORepository { async findAllByIds(ids: string[]): Promise { if (ids.length === 0) return []; - try { - const response = await this.soClient.find({ - type: SO_SLO_TYPE, - page: 1, - perPage: ids.length, - filter: `slo.attributes.id:(${ids.join(' or ')})`, - }); - return response.saved_objects.map((slo) => toSLO(slo.attributes)); - } catch (err) { - if (SavedObjectsErrorHelpers.isNotFoundError(err)) { - throw new SLONotFound(`SLOs [${ids.join(',')}] not found`); - } - throw err; - } + const response = await this.soClient.find({ + type: SO_SLO_TYPE, + page: 1, + perPage: ids.length, + filter: `slo.attributes.id:(${ids.join(' or ')})`, + }); + + return response.saved_objects.map((slo) => toSLO(slo.attributes)); } async search( diff --git a/x-pack/plugins/observability/server/services/slo/tasks/orphan_summary_cleanup_task.test.ts b/x-pack/plugins/observability/server/services/slo/tasks/orphan_summary_cleanup_task.test.ts new file mode 100644 index 000000000000..6638ab84c2c0 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/tasks/orphan_summary_cleanup_task.test.ts @@ -0,0 +1,320 @@ +/* + * 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 { getDeleteQueryFilter, SloOrphanSummaryCleanupTask } from './orphan_summary_cleanup_task'; +import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; + +import { loggerMock } from '@kbn/logging-mocks'; +import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; +import { times } from 'lodash'; +import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; + +const taskManagerSetup = taskManagerMock.createSetup(); +const taskManagerStart = taskManagerMock.createStart(); +const logger = loggerMock.create(); +const esClient = elasticsearchClientMock.createClusterClient().asInternalUser; +const soClient = savedObjectsClientMock.create(); + +describe('SloSummaryCleanupTask', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should run for empty', async function () { + const task = new SloOrphanSummaryCleanupTask(taskManagerSetup, logger, {} as any); + await task.start(taskManagerStart, soClient, esClient); + + task.fetchSloSummariesIds = jest.fn().mockReturnValue({ sloSummaryIds: [] }); + + task.findSloDefinitions = jest.fn(); + await task.runTask(); + }); + + it('should run some slos', async function () { + const task = new SloOrphanSummaryCleanupTask(taskManagerSetup, logger, {} as any); + task.findSloDefinitions = jest.fn().mockResolvedValue([ + { id: '1', revision: 1 }, + { id: '2', revision: 1 }, + { id: '3', revision: 1 }, + ]); + + await task.start(taskManagerStart, soClient, esClient); + + task.fetchSloSummariesIds = jest.fn().mockReturnValue({ + sloSummaryIds: [ + { id: '1', revision: 1 }, + { id: '2', revision: 1 }, + { id: '3', revision: 2 }, + { id: '4', revision: NaN }, + { id: '3', revision: 1 }, + { id: '3', revision: 0 }, + ], + }); + + await task.runTask(); + + expect(task.fetchSloSummariesIds).toHaveBeenCalled(); + expect(esClient.deleteByQuery).toHaveBeenCalledWith({ + index: '.slo-observability.summary-v3*', + query: { + bool: { + should: [ + { bool: { must: [{ term: { 'slo.id': '3' } }, { term: { 'slo.revision': 2 } }] } }, + { bool: { must: [{ term: { 'slo.id': '4' } }, { term: { 'slo.revision': NaN } }] } }, + { bool: { must: [{ term: { 'slo.id': '3' } }, { term: { 'slo.revision': 0 } }] } }, + ], + }, + }, + wait_for_completion: false, + }); + }); + + it('should run lots of slos', async function () { + const task = new SloOrphanSummaryCleanupTask(taskManagerSetup, logger, {} as any); + task.findSloDefinitions = jest.fn().mockResolvedValue( + times(10000, (i) => ({ + id: `${i}`, + revision: 1, + })) + ); + task.fetchSloSummariesIds = jest.fn().mockReturnValue({ + sloSummaryIds: [ + { id: '01', revision: 1 }, + { id: '02', revision: 1 }, + { id: '03', revision: 1 }, + { id: '04', revision: 1 }, + { id: '1', revision: 1 }, + { id: '2', revision: 1 }, + { id: '3', revision: 1 }, + { id: '4', revision: 1 }, + ], + }); + await task.start(taskManagerStart, soClient, esClient); + await task.runTask(); + + expect(task.fetchSloSummariesIds).toHaveBeenCalledTimes(1); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(1); + expect(esClient.deleteByQuery).toHaveBeenNthCalledWith(1, { + wait_for_completion: false, + index: '.slo-observability.summary-v3*', + query: { + bool: { + should: getDeleteQueryFilter([ + { id: '01', revision: 1 }, + { id: '02', revision: 1 }, + { id: '03', revision: 1 }, + { id: '04', revision: 1 }, + ]), + }, + }, + }); + }); + + it('should run when lots of slo defs are there', async function () { + const task = new SloOrphanSummaryCleanupTask(taskManagerSetup, logger, {} as any); + task.findSloDefinitions = jest.fn().mockResolvedValue( + times(10000, (i) => ({ + id: `${i}`, + revision: 2, + })) + ); + task.fetchSloSummariesIds = jest.fn().mockImplementation(async (searchKey) => { + if (!searchKey) { + return { + sloSummaryIds: [ + { id: '1', revision: 2 }, + { id: '2', revision: 2 }, + { id: '3', revision: 2 }, + { id: '4', revision: 2 }, + { id: '01', revision: 1 }, + { id: '02', revision: 1 }, + { id: '03', revision: 1 }, + { id: '04', revision: 1 }, + ], + searchAfter: '1', + }; + } + return { + sloSummaryIds: [ + { id: '5', revision: 2 }, + { id: '6', revision: 2 }, + { id: '7', revision: 2 }, + { id: '8', revision: 2 }, + { id: '05', revision: 1 }, + { id: '06', revision: 1 }, + { id: '07', revision: 1 }, + { id: '08', revision: 1 }, + ], + }; + }); + await task.start(taskManagerStart, soClient, esClient); + await task.runTask(); + + expect(task.fetchSloSummariesIds).toHaveBeenCalledTimes(2); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(2); + + expect(esClient.deleteByQuery).toHaveBeenNthCalledWith(1, { + index: '.slo-observability.summary-v3*', + query: { + bool: { + should: getDeleteQueryFilter([ + { id: '01', revision: 1 }, + { id: '02', revision: 1 }, + { id: '03', revision: 1 }, + { id: '04', revision: 1 }, + ]), + }, + }, + wait_for_completion: false, + }); + + expect(esClient.deleteByQuery).toHaveBeenLastCalledWith({ + wait_for_completion: false, + index: '.slo-observability.summary-v3*', + query: { + bool: { + should: getDeleteQueryFilter([ + { id: '05', revision: 1 }, + { id: '06', revision: 1 }, + { id: '07', revision: 1 }, + { id: '08', revision: 1 }, + ]), + }, + }, + }); + }); + + it('should run when summaries are way more then defs', async function () { + const task = new SloOrphanSummaryCleanupTask(taskManagerSetup, logger, {} as any); + task.findSloDefinitions = jest.fn().mockResolvedValue( + times(100, (i) => ({ + id: `${i}`, + revision: 2, + })) + ); + task.fetchSloSummariesIds = jest.fn().mockImplementation(async (searchKey) => { + if (!searchKey) { + return { + sloSummaryIds: [ + { id: '1', revision: 2 }, + { id: '2', revision: 2 }, + { id: '3', revision: 2 }, + { id: '4', revision: 2 }, + { id: '01', revision: 1 }, + { id: '02', revision: 1 }, + { id: '03', revision: 1 }, + { id: '04', revision: 1 }, + ], + searchAfter: '1', + }; + } + return { + sloSummaryIds: [ + { id: '5', revision: 2 }, + { id: '6', revision: 2 }, + { id: '7', revision: 2 }, + { id: '8', revision: 2 }, + { id: '05', revision: 1 }, + { id: '06', revision: 1 }, + { id: '07', revision: 1 }, + { id: '08', revision: 1 }, + ], + }; + }); + await task.start(taskManagerStart, soClient, esClient); + await task.runTask(); + + expect(task.fetchSloSummariesIds).toHaveBeenCalledTimes(2); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(2); + expect(esClient.deleteByQuery).toHaveBeenNthCalledWith(1, { + wait_for_completion: false, + index: '.slo-observability.summary-v3*', + query: { + bool: { + should: getDeleteQueryFilter([ + { id: '01', revision: 1 }, + { id: '02', revision: 1 }, + { id: '03', revision: 1 }, + { id: '04', revision: 1 }, + ]), + }, + }, + }); + expect(esClient.deleteByQuery).toHaveBeenLastCalledWith({ + wait_for_completion: false, + index: '.slo-observability.summary-v3*', + query: { + bool: { + should: getDeleteQueryFilter([ + { id: '05', revision: 1 }, + { id: '06', revision: 1 }, + { id: '07', revision: 1 }, + { id: '08', revision: 1 }, + ]), + }, + }, + }); + }); + + it('should run when there are no Slo defs', async function () { + const task = new SloOrphanSummaryCleanupTask(taskManagerSetup, logger, {} as any); + task.findSloDefinitions = jest.fn().mockResolvedValue([]); + task.fetchSloSummariesIds = jest.fn().mockImplementation(async (searchKey) => { + if (!searchKey) { + return { + sloSummaryIds: [ + { id: '1', revision: 2 }, + { id: '2', revision: 2 }, + { id: '3', revision: 2 }, + { id: '4', revision: 2 }, + { id: '01', revision: 1 }, + { id: '02', revision: 1 }, + { id: '03', revision: 1 }, + { id: '04', revision: 1 }, + ], + searchAfter: '1', + }; + } + return { + sloSummaryIds: [ + { id: '5', revision: 2 }, + { id: '6', revision: 2 }, + { id: '7', revision: 2 }, + { id: '8', revision: 2 }, + { id: '05', revision: 1 }, + { id: '06', revision: 1 }, + { id: '07', revision: 1 }, + { id: '08', revision: 1 }, + ], + }; + }); + await task.start(taskManagerStart, soClient, esClient); + await task.runTask(); + + expect(task.fetchSloSummariesIds).toHaveBeenCalledTimes(2); + expect(esClient.deleteByQuery).toHaveBeenCalledTimes(2); + + expect(esClient.deleteByQuery).toHaveBeenNthCalledWith(1, { + wait_for_completion: false, + index: '.slo-observability.summary-v3*', + query: { + bool: { + should: getDeleteQueryFilter([ + { id: '1', revision: 2 }, + { id: '2', revision: 2 }, + { id: '3', revision: 2 }, + { id: '4', revision: 2 }, + { id: '01', revision: 1 }, + { id: '02', revision: 1 }, + { id: '03', revision: 1 }, + { id: '04', revision: 1 }, + ]), + }, + }, + }); + }); +}); diff --git a/x-pack/plugins/observability/server/services/slo/tasks/orphan_summary_cleanup_task.ts b/x-pack/plugins/observability/server/services/slo/tasks/orphan_summary_cleanup_task.ts new file mode 100644 index 000000000000..c863dadfe859 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/tasks/orphan_summary_cleanup_task.ts @@ -0,0 +1,249 @@ +/* + * 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 { ElasticsearchClient, Logger, SavedObjectsClientContract } from '@kbn/core/server'; +import { + ConcreteTaskInstance, + TaskManagerSetupContract, + TaskManagerStartContract, +} from '@kbn/task-manager-plugin/server'; +import { AggregationsCompositeAggregateKey } from '@elastic/elasticsearch/lib/api/types'; +import { ALL_SPACES_ID } from '@kbn/spaces-plugin/common/constants'; +import { StoredSLO } from '../../../domain/models'; +import { SO_SLO_TYPE } from '../../../saved_objects'; +import { ObservabilityConfig } from '../../..'; +import { SLO_SUMMARY_DESTINATION_INDEX_PATTERN } from '../../../../common/slo/constants'; + +export const TASK_TYPE = 'SLO:ORPHAN_SUMMARIES-CLEANUP-TASK'; + +export const getDeleteQueryFilter = ( + sloSummaryIdsToDelete: Array<{ id: string; revision: number }> +) => { + return sloSummaryIdsToDelete.map(({ id, revision }) => { + return { + bool: { + must: [ + { + term: { + 'slo.id': id, + }, + }, + { + term: { + 'slo.revision': Number(revision), + }, + }, + ], + }, + }; + }); +}; + +export class SloOrphanSummaryCleanupTask { + private abortController = new AbortController(); + private logger: Logger; + private taskManager?: TaskManagerStartContract; + private soClient?: SavedObjectsClientContract; + private esClient?: ElasticsearchClient; + private config: ObservabilityConfig; + + constructor(taskManager: TaskManagerSetupContract, logger: Logger, config: ObservabilityConfig) { + this.logger = logger; + this.config = config; + + taskManager.registerTaskDefinitions({ + [TASK_TYPE]: { + title: 'SLO Definitions Cleanup Task', + timeout: '3m', + maxAttempts: 1, + createTaskRunner: ({ taskInstance }: { taskInstance: ConcreteTaskInstance }) => { + return { + run: async () => { + return this.runTask(); + }, + + cancel: async () => { + this.abortController.abort('[SLO] Definitions clean up Task timed out'); + }, + }; + }, + }, + }); + } + + runTask = async () => { + if (this.soClient && this.esClient) { + let searchAfterKey: AggregationsCompositeAggregateKey | undefined; + + do { + const { sloSummaryIds, searchAfter } = await this.fetchSloSummariesIds(searchAfterKey); + + if (sloSummaryIds.length === 0) { + return; + } + + searchAfterKey = searchAfter; + + const ids = sloSummaryIds.map(({ id }) => id); + + const sloDefinitions = await this.findSloDefinitions(ids); + + const sloSummaryIdsToDelete = sloSummaryIds.filter( + ({ id, revision }) => + !sloDefinitions.find( + (attributes) => attributes.id === id && attributes.revision === revision + ) + ); + + if (sloSummaryIdsToDelete.length > 0) { + this.logger.info( + `[SLO] Deleting ${sloSummaryIdsToDelete.length} SLO Summaries from the summary index` + ); + + await this.esClient.deleteByQuery({ + wait_for_completion: false, + index: SLO_SUMMARY_DESTINATION_INDEX_PATTERN, + query: { + bool: { + should: getDeleteQueryFilter(sloSummaryIdsToDelete.sort()), + }, + }, + }); + } + } while (searchAfterKey); + } + }; + + fetchSloSummariesIds = async ( + searchAfter?: AggregationsCompositeAggregateKey + ): Promise<{ + searchAfter?: AggregationsCompositeAggregateKey; + sloSummaryIds: Array<{ id: string; revision: number }>; + }> => { + this.logger.debug(`[SLO] Fetching SLO Summaries ids after ${searchAfter}`); + if (!this.esClient) { + return { + searchAfter: undefined, + sloSummaryIds: [], + }; + } + + const size = 1000; + + const result = await this.esClient.search< + unknown, + { + slos: { + after_key: AggregationsCompositeAggregateKey; + buckets: Array<{ + key: { + id: string; + revision: number; + }; + }>; + }; + } + >({ + size: 0, + index: SLO_SUMMARY_DESTINATION_INDEX_PATTERN, + aggs: { + slos: { + composite: { + size, + sources: [ + { + id: { + terms: { + field: 'slo.id', + }, + }, + }, + { + revision: { + terms: { + field: 'slo.revision', + }, + }, + }, + ], + after: searchAfter, + }, + }, + }, + }); + + const aggBuckets = result.aggregations?.slos.buckets ?? []; + if (aggBuckets.length === 0) { + return { + searchAfter: undefined, + sloSummaryIds: [], + }; + } + + const newSearchAfter = + aggBuckets.length < size ? undefined : result.aggregations?.slos.after_key; + + const sloSummaryIds = aggBuckets.map(({ key }) => { + return { + id: String(key.id), + revision: Number(key.revision), + }; + }); + + return { + searchAfter: newSearchAfter, + sloSummaryIds, + }; + }; + + findSloDefinitions = async (ids: string[]) => { + const sloDefinitions = await this.soClient?.find>({ + type: SO_SLO_TYPE, + page: 1, + perPage: ids.length, + filter: `slo.attributes.id:(${ids.join(' or ')})`, + namespaces: [ALL_SPACES_ID], + fields: ['id', 'revision'], + }); + + return sloDefinitions?.saved_objects.map(({ attributes }) => attributes) ?? []; + }; + + private get taskId() { + return `${TASK_TYPE}:1.0.0`; + } + + public async start( + taskManager: TaskManagerStartContract, + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient + ) { + this.taskManager = taskManager; + this.soClient = soClient; + this.esClient = esClient; + + if (!taskManager) { + this.logger.info('[SLO] Missing required service during startup, skipping task.'); + return; + } + + if (this.config.sloOrphanSummaryCleanUpTaskEnabled) { + this.taskManager.ensureScheduled({ + id: this.taskId, + taskType: TASK_TYPE, + schedule: { + interval: '1h', + }, + scope: ['observability', 'slo'], + state: {}, + params: {}, + }); + } else { + this.taskManager.removeIfExists(this.taskId); + } + } +} diff --git a/x-pack/plugins/observability/server/ui_settings.ts b/x-pack/plugins/observability/server/ui_settings.ts index 98260fff5f4c..8029b412ebb6 100644 --- a/x-pack/plugins/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability/server/ui_settings.ts @@ -37,6 +37,7 @@ import { profilingPervCPUWattArm64, profilingAWSCostDiscountRate, profilingCostPervCPUPerHour, + enableInfrastructureProfilingIntegration, } from '../common/ui_settings_keys'; const betaLabel = i18n.translate('xpack.observability.uiSettings.betaLabel', { @@ -236,6 +237,24 @@ export const uiSettings: Record = { }), schema: schema.boolean(), }, + [enableInfrastructureProfilingIntegration]: { + category: [observabilityFeatureId], + name: i18n.translate('xpack.observability.enableInfrastructureProfilingIntegration', { + defaultMessage: 'Universal Profiling integration in Infrastructure', + }), + value: true, + description: i18n.translate( + 'xpack.observability.enableInfrastructureProfilingIntegrationDescription', + { + defaultMessage: + '{betaLabel} Enable Universal Profiling integration in the Infrastructure app.', + values: { + betaLabel: `[${betaLabel}]`, + }, + } + ), + schema: schema.boolean(), + }, [enableAwsLambdaMetrics]: { category: [observabilityFeatureId], name: i18n.translate('xpack.observability.enableAwsLambdaMetrics', { @@ -415,9 +434,9 @@ export const uiSettings: Record = { }), value: 1.7, description: i18n.translate('xpack.observability.profilingDatacenterPUEUiSettingDescription', { - defaultMessage: `Data center power usage effectiveness (PUE) measures how efficiently a data center uses energy. Defaults to 1.7, the average on-premise data center PUE according to the {uptimeLink} survey + defaultMessage: `Data center power usage effectiveness (PUE) measures how efficiently a data center uses energy. Defaults to 1.7, the average on-premise data center PUE according to the {uptimeLink} survey

- You can also use the PUE that corresponds with your cloud provider: + You can also use the PUE that corresponds with your cloud provider:
  • AWS: 1.135
  • GCP: 1.1
  • @@ -444,7 +463,7 @@ export const uiSettings: Record = { }), value: 0.000379069, description: i18n.translate('xpack.observability.profilingCo2PerKWHUiSettingDescription', { - defaultMessage: `Carbon intensity measures how clean your data center electricity is. + defaultMessage: `Carbon intensity measures how clean your data center electricity is. Specifically, it measures the average amount of CO2 emitted per kilowatt-hour (kWh) of electricity consumed in a particular region. Use the cloud carbon footprint {datasheetLink} to update this value according to your region. Defaults to US East (N. Virginia).`, values: { diff --git a/x-pack/plugins/observability/tsconfig.json b/x-pack/plugins/observability/tsconfig.json index 15e2aade480c..61762322f9ee 100644 --- a/x-pack/plugins/observability/tsconfig.json +++ b/x-pack/plugins/observability/tsconfig.json @@ -96,7 +96,11 @@ "@kbn/lens-embeddable-utils", "@kbn/serverless", "@kbn/dashboard-plugin", - "@kbn/calculate-auto" + "@kbn/calculate-auto", + "@kbn/presentation-util-plugin", + "@kbn/task-manager-plugin", + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/core-saved-objects-api-server-mocks" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/observability_ai_assistant/public/application.tsx b/x-pack/plugins/observability_ai_assistant/public/application.tsx index 15ed0243bd92..10e5403bba43 100644 --- a/x-pack/plugins/observability_ai_assistant/public/application.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/application.tsx @@ -20,6 +20,8 @@ import type { ObservabilityAIAssistantService, } from './types'; +// This is the Conversation application. + export function Application({ coreStart, history, @@ -36,6 +38,7 @@ export function Application({ const theme = useMemo(() => { return { theme$ }; }, [theme$]); + return ( diff --git a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx index c38d328a87bc..64375b0bd9a9 100644 --- a/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx +++ b/x-pack/plugins/observability_ai_assistant/public/components/chat/chat_body.tsx @@ -84,6 +84,8 @@ const animClassName = css` ${euiThemeVars.euiAnimSlightBounce} ${euiThemeVars.euiAnimSpeedNormal} forwards; `; +const PADDING_AND_BORDER = 32; + export function ChatBody({ initialTitle, initialMessages, @@ -144,6 +146,8 @@ export function ChatBody({ const isAtBottom = (parent: HTMLElement) => parent.scrollTop + parent.clientHeight >= parent.scrollHeight; + const [promptEditorHeight, setPromptEditorHeight] = useState(0); + const handleFeedback = (message: Message, feedback: Feedback) => { if (conversation.value?.conversation && 'user' in conversation.value) { sendEvent(chatService.analytics, { @@ -156,6 +160,14 @@ export function ChatBody({ } }; + const handleChangeHeight = (editorHeight: number) => { + if (editorHeight === 0) { + setPromptEditorHeight(0); + } else { + setPromptEditorHeight(editorHeight + PADDING_AND_BORDER); + } + }; + useEffect(() => { const parent = timelineContainerRef.current?.parentElement; if (!parent) { @@ -203,8 +215,10 @@ export function ChatBody({