@gooddata/sdk-ui-pluggable-host 11.40.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +20 -0
  3. package/esm/assets/logo-white.svg +3 -0
  4. package/esm/components/FullScreenLoader.d.ts +1 -0
  5. package/esm/components/FullScreenLoader.js +8 -0
  6. package/esm/components/HostUiContainer.d.ts +16 -0
  7. package/esm/components/HostUiContainer.js +141 -0
  8. package/esm/components/HostUiContainer.scss +5 -0
  9. package/esm/components/Root.d.ts +16 -0
  10. package/esm/components/Root.js +64 -0
  11. package/esm/components/Root.scss +14 -0
  12. package/esm/components/lib/translations.d.ts +7 -0
  13. package/esm/components/lib/translations.js +64 -0
  14. package/esm/components/useRedirectNavigation.d.ts +7 -0
  15. package/esm/components/useRedirectNavigation.js +23 -0
  16. package/esm/components/useRedirectTarget.d.ts +19 -0
  17. package/esm/components/useRedirectTarget.js +62 -0
  18. package/esm/debug.d.ts +9 -0
  19. package/esm/debug.js +18 -0
  20. package/esm/index.d.ts +11 -0
  21. package/esm/index.js +10 -0
  22. package/esm/lib/chunkReloadGuard.d.ts +89 -0
  23. package/esm/lib/chunkReloadGuard.js +203 -0
  24. package/esm/lib/hostNotifications.d.ts +20 -0
  25. package/esm/lib/hostNotifications.js +50 -0
  26. package/esm/lib/isProduction.d.ts +12 -0
  27. package/esm/lib/isProduction.js +13 -0
  28. package/esm/loader/lastVisitedApp.d.ts +11 -0
  29. package/esm/loader/lastVisitedApp.js +43 -0
  30. package/esm/loader/localLoader.d.ts +16 -0
  31. package/esm/loader/localLoader.js +38 -0
  32. package/esm/loader/pluggableApplicationsLoader.d.ts +13 -0
  33. package/esm/loader/pluggableApplicationsLoader.js +55 -0
  34. package/esm/loader/redirectLogic.d.ts +30 -0
  35. package/esm/loader/redirectLogic.js +143 -0
  36. package/esm/loader/remoteLoader.d.ts +5 -0
  37. package/esm/loader/remoteLoader.js +117 -0
  38. package/esm/loader/remoteUrlSecurity.d.ts +1 -0
  39. package/esm/loader/remoteUrlSecurity.js +26 -0
  40. package/esm/loader/routing.d.ts +22 -0
  41. package/esm/loader/routing.js +87 -0
  42. package/esm/platformContext/backend.d.ts +44 -0
  43. package/esm/platformContext/backend.js +131 -0
  44. package/esm/platformContext/bootstrap.d.ts +15 -0
  45. package/esm/platformContext/bootstrap.js +122 -0
  46. package/esm/platformContext/loadPlatformContext.d.ts +18 -0
  47. package/esm/platformContext/loadPlatformContext.js +50 -0
  48. package/esm/platformContext/tigerNotAuthenticatedHandler.d.ts +3 -0
  49. package/esm/platformContext/tigerNotAuthenticatedHandler.js +16 -0
  50. package/esm/platformContext/types.d.ts +17 -0
  51. package/esm/platformContext/types.js +2 -0
  52. package/esm/platformContext/useLoadPlatformContext.d.ts +35 -0
  53. package/esm/platformContext/useLoadPlatformContext.js +131 -0
  54. package/esm/platformContext/useWorkspacePermissions.d.ts +26 -0
  55. package/esm/platformContext/useWorkspacePermissions.js +52 -0
  56. package/esm/platformContext/useWorkspaceSettings.d.ts +25 -0
  57. package/esm/platformContext/useWorkspaceSettings.js +46 -0
  58. package/esm/registry/pluggableApplicationsRegistry.d.ts +55 -0
  59. package/esm/registry/pluggableApplicationsRegistry.js +203 -0
  60. package/esm/sdk-ui-pluggable-host.d.ts +262 -0
  61. package/esm/styles/global.css +16 -0
  62. package/esm/translations/de-DE.json +34 -0
  63. package/esm/translations/en-AU.json +34 -0
  64. package/esm/translations/en-GB.json +34 -0
  65. package/esm/translations/en-US.json +130 -0
  66. package/esm/translations/es-419.json +34 -0
  67. package/esm/translations/es-ES.json +34 -0
  68. package/esm/translations/fi-FI.json +34 -0
  69. package/esm/translations/fr-CA.json +34 -0
  70. package/esm/translations/fr-FR.json +34 -0
  71. package/esm/translations/id-ID.json +34 -0
  72. package/esm/translations/it-IT.json +34 -0
  73. package/esm/translations/ja-JP.json +34 -0
  74. package/esm/translations/ko-KR.json +34 -0
  75. package/esm/translations/nl-NL.json +34 -0
  76. package/esm/translations/pl-PL.json +34 -0
  77. package/esm/translations/pt-BR.json +34 -0
  78. package/esm/translations/pt-PT.json +34 -0
  79. package/esm/translations/ru-RU.json +34 -0
  80. package/esm/translations/sl-SI.json +34 -0
  81. package/esm/translations/th-TH.json +34 -0
  82. package/esm/translations/tr-TR.json +34 -0
  83. package/esm/translations/uk-UA.json +34 -0
  84. package/esm/translations/vi-VN.json +34 -0
  85. package/esm/translations/zh-HK.json +34 -0
  86. package/esm/translations/zh-Hans.json +34 -0
  87. package/esm/translations/zh-Hant.json +34 -0
  88. package/esm/tsdoc-metadata.json +11 -0
  89. package/esm/types/lifecycle.d.ts +18 -0
  90. package/esm/types/lifecycle.js +2 -0
  91. package/esm/ui/DefaultHostUi.d.ts +12 -0
  92. package/esm/ui/DefaultHostUi.js +101 -0
  93. package/esm/ui/DefaultHostUi.scss +8 -0
  94. package/esm/ui/GenAIChat.d.ts +43 -0
  95. package/esm/ui/GenAIChat.js +102 -0
  96. package/esm/ui/HostChrome.d.ts +19 -0
  97. package/esm/ui/HostChrome.js +115 -0
  98. package/esm/ui/HostChrome.scss +24 -0
  99. package/esm/ui/HostIntlProvider.d.ts +9 -0
  100. package/esm/ui/HostIntlProvider.js +13 -0
  101. package/esm/ui/HostNotificationDispatcher.d.ts +12 -0
  102. package/esm/ui/HostNotificationDispatcher.js +42 -0
  103. package/esm/ui/PluggableApplicationRenderer.d.ts +10 -0
  104. package/esm/ui/PluggableApplicationRenderer.js +100 -0
  105. package/esm/ui/PluggableApplicationRenderer.scss +29 -0
  106. package/esm/ui/SemanticSearch.d.ts +23 -0
  107. package/esm/ui/SemanticSearch.js +46 -0
  108. package/esm/ui/WorkspacePicker.d.ts +9 -0
  109. package/esm/ui/WorkspacePicker.js +29 -0
  110. package/esm/ui/appMenuItems.d.ts +17 -0
  111. package/esm/ui/appMenuItems.js +81 -0
  112. package/esm/ui/chromeHelpers.d.ts +17 -0
  113. package/esm/ui/chromeHelpers.js +29 -0
  114. package/esm/ui/hostChromeBem.d.ts +1 -0
  115. package/esm/ui/hostChromeBem.js +3 -0
  116. package/esm/ui/resolveHostUiModule.d.ts +8 -0
  117. package/esm/ui/resolveHostUiModule.js +22 -0
  118. package/esm/ui/useHostChromeChat.d.ts +29 -0
  119. package/esm/ui/useHostChromeChat.js +38 -0
  120. package/esm/ui/useHostChromePricing.d.ts +52 -0
  121. package/esm/ui/useHostChromePricing.js +37 -0
  122. package/esm/ui/useHostChromeSearch.d.ts +20 -0
  123. package/esm/ui/useHostChromeSearch.js +18 -0
  124. package/esm/ui/useHostChromeWorkspaceFeatures.d.ts +19 -0
  125. package/esm/ui/useHostChromeWorkspaceFeatures.js +36 -0
  126. package/package.json +114 -0
@@ -0,0 +1,8 @@
1
+ import { type IPlatformContext, type IHostUiModule } from "@gooddata/sdk-pluggable-application-model";
2
+ /**
3
+ * Resolves the host UI module to use.
4
+ *
5
+ * If the remote pluggable applications registry specifies a `uiModule`, it will be loaded
6
+ * via module federation. Otherwise, the built-in default host UI is used.
7
+ */
8
+ export declare function resolveHostUiModule(ctx: IPlatformContext): Promise<IHostUiModule>;
@@ -0,0 +1,22 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { loadRemoteHostUiModule } from "../loader/remoteLoader.js";
3
+ import { getRemoteRegistry } from "../registry/pluggableApplicationsRegistry.js";
4
+ import { defaultHostUiModule } from "./DefaultHostUi.js";
5
+ /**
6
+ * Resolves the host UI module to use.
7
+ *
8
+ * If the remote pluggable applications registry specifies a `uiModule`, it will be loaded
9
+ * via module federation. Otherwise, the built-in default host UI is used.
10
+ */
11
+ export async function resolveHostUiModule(ctx) {
12
+ const remoteRegistry = getRemoteRegistry(ctx);
13
+ if (remoteRegistry?.uiModule) {
14
+ try {
15
+ return await loadRemoteHostUiModule(remoteRegistry.uiModule);
16
+ }
17
+ catch (error) {
18
+ console.error("[host-runtime/resolve-ui] Failed to load remote UI module, falling back to default.", error);
19
+ }
20
+ }
21
+ return defaultHostUiModule;
22
+ }
@@ -0,0 +1,29 @@
1
+ import { type ReactNode } from "react";
2
+ import { type IPlatformContext, type IPluggableAppTelemetryCallbacks } from "@gooddata/sdk-pluggable-application-model";
3
+ import { type IHostChromeWorkspaceFeatures } from "./useHostChromeWorkspaceFeatures.js";
4
+ export interface IHostChromeChat {
5
+ /** The `<GenAIChat>` element to mount, or `null` when chat is gated off. */
6
+ element: ReactNode;
7
+ /**
8
+ * Whether the chat entry point should be visible in the header. Reflects both the
9
+ * feature-flag/permission gate and the runtime LLM availability probe.
10
+ */
11
+ showChatItem: boolean;
12
+ /** Open the chat dialog. */
13
+ open: () => void;
14
+ /** Open the chat dialog with a pre-seeded user question. */
15
+ askAiAssistant: (question: string) => void;
16
+ }
17
+ export interface IUseHostChromeChatArgs {
18
+ features: IHostChromeWorkspaceFeatures;
19
+ ctx: IPlatformContext;
20
+ telemetry: IPluggableAppTelemetryCallbacks | undefined;
21
+ }
22
+ /**
23
+ * Owns the GenAI chat state and renders the `<GenAIChat>` element for the host chrome.
24
+ *
25
+ * Encapsulates open/close state, the seeded-question flow used by the AI-assistant entry
26
+ * points, the runtime availability probe (`useGenAiChatAvailability`) and forwarding chat
27
+ * events to the host telemetry callbacks.
28
+ */
29
+ export declare function useHostChromeChat({ features, ctx, telemetry }: IUseHostChromeChatArgs): IHostChromeChat;
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useCallback, useState } from "react";
4
+ import { useGenAiChatAvailability } from "@gooddata/sdk-ui-gen-ai";
5
+ import { getBackend } from "../platformContext/backend.js";
6
+ import { GenAIChat } from "./GenAIChat.js";
7
+ /**
8
+ * Owns the GenAI chat state and renders the `<GenAIChat>` element for the host chrome.
9
+ *
10
+ * Encapsulates open/close state, the seeded-question flow used by the AI-assistant entry
11
+ * points, the runtime availability probe (`useGenAiChatAvailability`) and forwarding chat
12
+ * events to the host telemetry callbacks.
13
+ */
14
+ export function useHostChromeChat({ features, ctx, telemetry }) {
15
+ const [isChatOpen, setIsChatOpen] = useState(false);
16
+ const [askedQuestion, setAskedQuestion] = useState(null);
17
+ const open = useCallback(() => {
18
+ setIsChatOpen(true);
19
+ }, []);
20
+ const close = useCallback(() => {
21
+ setIsChatOpen(false);
22
+ }, []);
23
+ const askAiAssistant = useCallback((question) => {
24
+ setAskedQuestion(question);
25
+ setIsChatOpen(true);
26
+ }, []);
27
+ const handleChatEvent = useCallback((event) => {
28
+ telemetry?.trackEvent(event.name, event.payload);
29
+ }, [telemetry]);
30
+ const showChatItem = useGenAiChatAvailability(getBackend(), features.workspaceId, features.showChat, features.canManageProject);
31
+ const element = features.showChat && features.workspaceId ? (_jsx(GenAIChat, { workspaceId: features.workspaceId, open: isChatOpen, onOpen: open, onClose: close, askedQuestion: askedQuestion, canManageProject: features.canManageProject, canAnalyzeProject: features.canAccessWorkbench, canFullControl: features.canFullControl, settings: ctx.workspaceSettings, onEvent: handleChatEvent })) : null;
32
+ return {
33
+ element,
34
+ showChatItem,
35
+ open,
36
+ askAiAssistant,
37
+ };
38
+ }
@@ -0,0 +1,52 @@
1
+ import { type ReactNode } from "react";
2
+ import { type IPlatformContext } from "@gooddata/sdk-pluggable-application-model";
3
+ /**
4
+ * Shape returned by a pricing extension hook. Provides the trial-info derived from
5
+ * entitlements + a dialog element so the host chrome can wire the upsell affordances
6
+ * on `<AppHeader>` without owning the dialog implementation.
7
+ *
8
+ * @alpha
9
+ */
10
+ export interface IHostChromePricing {
11
+ /** The pricing dialog React element (or null to skip rendering). */
12
+ element: ReactNode;
13
+ /** Whether the current org is on a trial entitlement (drives upsell button visibility). */
14
+ isTrial: boolean;
15
+ /** ISO date string for the trial contract expiry, derived from entitlements. */
16
+ expiredDate: string;
17
+ /** Open the pricing dialog (wired to the upsell button click). */
18
+ onUpsellButtonClick: () => void;
19
+ }
20
+ /**
21
+ * A host pricing extension. The `Use` prefix signals that this MUST be a React hook —
22
+ * it is invoked from `HostChrome`'s render and therefore must obey the React Rules of
23
+ * Hooks (stable call order, no conditional hook calls, etc.).
24
+ *
25
+ * @alpha
26
+ */
27
+ export type UseHostPricingExtension = (ctx: IPlatformContext, locale: string) => IHostChromePricing;
28
+ /**
29
+ * Registers a pricing extension that the default host chrome will consume to render
30
+ * trial-upgrade affordances. Optional — when no extension is registered, the chrome
31
+ * shows no upsell button and no pricing dialog.
32
+ *
33
+ * @remarks
34
+ * This indirection keeps the chrome free of any hard dependency on a specific pricing
35
+ * dialog implementation (e.g. `gdc-pricing-dialog`). The host app supplies
36
+ * the extension at boot; removing the extension is a one-line change.
37
+ *
38
+ * Contract:
39
+ * - MUST be called once before the first render of `<Root>`.
40
+ * - The supplied function MUST obey React Rules of Hooks — it is invoked from
41
+ * `HostChrome`'s render.
42
+ * - Swapping or unregistering the extension after first render is unsupported and
43
+ * will violate Rules of Hooks.
44
+ *
45
+ * @alpha
46
+ */
47
+ export declare function setHostPricingExtension(extension: UseHostPricingExtension | undefined): void;
48
+ /**
49
+ * Returns the pricing affordances for the current platform context + locale. Falls
50
+ * back to a no-op shape when no pricing extension is registered.
51
+ */
52
+ export declare function useHostChromePricing(ctx: IPlatformContext, locale: string): IHostChromePricing;
@@ -0,0 +1,37 @@
1
+ // (C) 2026 GoodData Corporation
2
+ let registeredPricingExtension;
3
+ /**
4
+ * Registers a pricing extension that the default host chrome will consume to render
5
+ * trial-upgrade affordances. Optional — when no extension is registered, the chrome
6
+ * shows no upsell button and no pricing dialog.
7
+ *
8
+ * @remarks
9
+ * This indirection keeps the chrome free of any hard dependency on a specific pricing
10
+ * dialog implementation (e.g. `gdc-pricing-dialog`). The host app supplies
11
+ * the extension at boot; removing the extension is a one-line change.
12
+ *
13
+ * Contract:
14
+ * - MUST be called once before the first render of `<Root>`.
15
+ * - The supplied function MUST obey React Rules of Hooks — it is invoked from
16
+ * `HostChrome`'s render.
17
+ * - Swapping or unregistering the extension after first render is unsupported and
18
+ * will violate Rules of Hooks.
19
+ *
20
+ * @alpha
21
+ */
22
+ export function setHostPricingExtension(extension) {
23
+ registeredPricingExtension = extension;
24
+ }
25
+ const NO_PRICING = {
26
+ element: null,
27
+ isTrial: false,
28
+ expiredDate: "",
29
+ onUpsellButtonClick: () => { },
30
+ };
31
+ /**
32
+ * Returns the pricing affordances for the current platform context + locale. Falls
33
+ * back to a no-op shape when no pricing extension is registered.
34
+ */
35
+ export function useHostChromePricing(ctx, locale) {
36
+ return registeredPricingExtension ? registeredPricingExtension(ctx, locale) : NO_PRICING;
37
+ }
@@ -0,0 +1,20 @@
1
+ import { type ReactNode } from "react";
2
+ import { type IPluggableAppTelemetryCallbacks } from "@gooddata/sdk-pluggable-application-model";
3
+ import { type IHostChromeWorkspaceFeatures } from "./useHostChromeWorkspaceFeatures.js";
4
+ export interface IHostChromeSearch {
5
+ /** The `<SemanticSearch>` element to mount in the header, or `null` when gated off. */
6
+ element: ReactNode;
7
+ }
8
+ export interface IUseHostChromeSearchArgs {
9
+ features: IHostChromeWorkspaceFeatures;
10
+ isTrial: boolean;
11
+ onAskAiAssistant: (question: string) => void;
12
+ telemetry: IPluggableAppTelemetryCallbacks | undefined;
13
+ }
14
+ /**
15
+ * Builds the semantic-search element rendered in the host chrome header.
16
+ *
17
+ * Forwards search events to the host telemetry callbacks and wires the AI-assistant
18
+ * footer button so it can hand the user's question to the chat hook.
19
+ */
20
+ export declare function useHostChromeSearch({ features, isTrial, onAskAiAssistant, telemetry }: IUseHostChromeSearchArgs): IHostChromeSearch;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useCallback } from "react";
4
+ import { getBackend } from "../platformContext/backend.js";
5
+ import { SemanticSearch } from "./SemanticSearch.js";
6
+ /**
7
+ * Builds the semantic-search element rendered in the host chrome header.
8
+ *
9
+ * Forwards search events to the host telemetry callbacks and wires the AI-assistant
10
+ * footer button so it can hand the user's question to the chat hook.
11
+ */
12
+ export function useHostChromeSearch({ features, isTrial, onAskAiAssistant, telemetry, }) {
13
+ const handleSearchEvent = useCallback((event) => {
14
+ telemetry?.trackEvent(event.name, event.payload);
15
+ }, [telemetry]);
16
+ const element = features.showSearch && features.workspaceId ? (_jsx(SemanticSearch, { backend: getBackend(), workspaceId: features.workspaceId, canManage: features.canManageProject, canAnalyze: features.canCreateVisualization, canFullControl: features.canFullControl, metadataTimeZone: features.settings.metadataTimeZone, isTrial: isTrial, enableUseGenAIChat: features.showChat, useHostedMetricEditor: Boolean(features.settings.enableShellApplication_metricEditor), onAskAiAssistant: onAskAiAssistant, onEvent: handleSearchEvent })) : null;
17
+ return { element };
18
+ }
@@ -0,0 +1,19 @@
1
+ import { type PluggableApplicationRegistryItem } from "@gooddata/sdk-model";
2
+ import { type IEffectiveSettings, type IPlatformContext } from "@gooddata/sdk-pluggable-application-model";
3
+ export interface IHostChromeWorkspaceFeatures {
4
+ isWorkspaceApp: boolean;
5
+ workspaceId: string | undefined;
6
+ settings: IEffectiveSettings;
7
+ canUseAiAssistant: boolean;
8
+ canManageProject: boolean;
9
+ canCreateVisualization: boolean;
10
+ canAccessWorkbench: boolean;
11
+ canFullControl: boolean;
12
+ showSearch: boolean;
13
+ showChat: boolean;
14
+ }
15
+ /**
16
+ * Computes the workspace-app gate plus the matrix of permissions and settings the host
17
+ * chrome needs to decide whether to render search, chat, etc.
18
+ */
19
+ export declare function useHostChromeWorkspaceFeatures(resolvedApplications: PluggableApplicationRegistryItem[], ctx: IPlatformContext, pathname: string): IHostChromeWorkspaceFeatures;
@@ -0,0 +1,36 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { useMemo } from "react";
3
+ import { getActiveInternalApplication, getWorkspaceIdFromPath } from "../loader/routing.js";
4
+ /**
5
+ * Computes the workspace-app gate plus the matrix of permissions and settings the host
6
+ * chrome needs to decide whether to render search, chat, etc.
7
+ */
8
+ export function useHostChromeWorkspaceFeatures(resolvedApplications, ctx, pathname) {
9
+ const activeApp = useMemo(() => getActiveInternalApplication(resolvedApplications, ctx, pathname), [resolvedApplications, ctx, pathname]);
10
+ return useMemo(() => {
11
+ const isWorkspaceApp = activeApp?.applicationScope === "workspace";
12
+ const workspaceId = getWorkspaceIdFromPath(pathname);
13
+ const settings = ctx.settings;
14
+ const enableSemanticSearch = !!settings.enableSemanticSearch;
15
+ const enableGenAIChat = !!settings.enableGenAIChat;
16
+ const canUseAiAssistant = !!ctx.workspacePermissions?.canUseAiAssistant;
17
+ const canManageProject = !!ctx.workspacePermissions?.canManageProject;
18
+ const canCreateVisualization = !!ctx.workspacePermissions?.canCreateVisualization;
19
+ const canAccessWorkbench = !!ctx.workspacePermissions?.canAccessWorkbench;
20
+ const canFullControl = !!ctx.organizationPermissions?.canManageOrganization;
21
+ const showSearch = isWorkspaceApp && !!workspaceId && enableSemanticSearch;
22
+ const showChat = isWorkspaceApp && !!workspaceId && enableGenAIChat && canUseAiAssistant;
23
+ return {
24
+ isWorkspaceApp,
25
+ workspaceId,
26
+ settings,
27
+ canUseAiAssistant,
28
+ canManageProject,
29
+ canCreateVisualization,
30
+ canAccessWorkbench,
31
+ canFullControl,
32
+ showSearch,
33
+ showChat,
34
+ };
35
+ }, [activeApp, ctx, pathname]);
36
+ }
package/package.json ADDED
@@ -0,0 +1,114 @@
1
+ {
2
+ "name": "@gooddata/sdk-ui-pluggable-host",
3
+ "version": "11.40.0-alpha.3",
4
+ "description": "GoodData SDK runtime for hosting pluggable applications — registry, loader, routing, platform context, default UI chrome",
5
+ "license": "MIT",
6
+ "author": "GoodData Corporation",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/gooddata/gooddata-ui-sdk.git",
10
+ "directory": "libs/sdk-ui-pluggable-host"
11
+ },
12
+ "files": [
13
+ "esm/**/*.js",
14
+ "esm/**/*.json",
15
+ "esm/**/*.d.ts",
16
+ "esm/**/*.map",
17
+ "esm/**/*.css",
18
+ "esm/**/*.scss",
19
+ "esm/**/*.svg"
20
+ ],
21
+ "type": "module",
22
+ "sideEffects": [
23
+ "**/*.css",
24
+ "**/*.scss"
25
+ ],
26
+ "browser": "./esm/index.js",
27
+ "types": "./esm/index.d.ts",
28
+ "exports": "./esm/index.js",
29
+ "dependencies": {
30
+ "@module-federation/runtime": "2.3.1",
31
+ "lodash-es": "^4.17.23",
32
+ "@gooddata/sdk-backend-base": "11.40.0-alpha.3",
33
+ "@gooddata/sdk-backend-spi": "11.40.0-alpha.3",
34
+ "@gooddata/sdk-backend-tiger": "11.40.0-alpha.3",
35
+ "@gooddata/sdk-model": "11.40.0-alpha.3",
36
+ "@gooddata/sdk-pluggable-application-model": "11.40.0-alpha.3",
37
+ "@gooddata/sdk-ui-application-header": "11.40.0-alpha.3",
38
+ "@gooddata/sdk-ui": "11.40.0-alpha.3",
39
+ "@gooddata/sdk-ui-ext": "11.40.0-alpha.3",
40
+ "@gooddata/sdk-ui-gen-ai": "11.40.0-alpha.3",
41
+ "@gooddata/sdk-ui-kit": "11.40.0-alpha.3",
42
+ "@gooddata/sdk-ui-semantic-search": "11.40.0-alpha.3",
43
+ "@gooddata/sdk-ui-theme-provider": "11.40.0-alpha.3",
44
+ "@gooddata/util": "11.40.0-alpha.3"
45
+ },
46
+ "devDependencies": {
47
+ "@microsoft/api-documenter": "^7.17.0",
48
+ "@microsoft/api-extractor": "^7.55.2",
49
+ "@testing-library/dom": "10.4.1",
50
+ "@testing-library/react": "16.3.0",
51
+ "@types/lodash-es": "^4.17.12",
52
+ "@types/node": "24.12.0",
53
+ "@types/react": "19.1.11",
54
+ "@types/react-dom": "19.1.7",
55
+ "@typescript-eslint/eslint-plugin": "8.58.0",
56
+ "@typescript-eslint/parser": "8.58.0",
57
+ "@typescript/native-preview": "7.0.0-dev.20260202.1",
58
+ "@vitest/coverage-v8": "4.1.0",
59
+ "@vitest/eslint-plugin": "1.6.6",
60
+ "eslint": "^9.39.2",
61
+ "eslint-import-resolver-typescript": "4.4.4",
62
+ "eslint-plugin-headers": "1.3.3",
63
+ "eslint-plugin-import-x": "4.16.1",
64
+ "eslint-plugin-jsdoc": "62.1.0",
65
+ "eslint-plugin-no-barrel-files": "1.2.2",
66
+ "eslint-plugin-no-only-tests": "3.3.0",
67
+ "eslint-plugin-react": "7.37.5",
68
+ "eslint-plugin-react-hooks": "5.2.0",
69
+ "eslint-plugin-sonarjs": "3.0.6",
70
+ "happy-dom": "18.0.1",
71
+ "jiti": "2.6.1",
72
+ "npm-run-all": "^4.1.5",
73
+ "oxfmt": "0.45.0",
74
+ "oxlint": "^1.43.0",
75
+ "oxlint-tsgolint": "0.11.4",
76
+ "react": "19.1.1",
77
+ "react-dom": "19.1.1",
78
+ "react-intl": "7.1.11",
79
+ "react-router": "7.13.1",
80
+ "rolldown": "1.0.0-rc.9",
81
+ "sass": "1.70.0",
82
+ "tslib": "2.8.1",
83
+ "typescript": "5.9.3",
84
+ "vite": "8.0.0",
85
+ "vitest": "4.1.0",
86
+ "vitest-dom": "0.1.1",
87
+ "@gooddata/eslint-config": "11.40.0-alpha.3",
88
+ "@gooddata/oxlint-config": "11.40.0-alpha.3"
89
+ },
90
+ "peerDependencies": {
91
+ "react": ">=18.3.1",
92
+ "react-dom": ">=18.3.1",
93
+ "react-intl": ">=7",
94
+ "react-router": ">=7"
95
+ },
96
+ "scripts": {
97
+ "_phase:build": "npm run build",
98
+ "_phase:test": "npm run test-once",
99
+ "_phase:validate": "npm run validate",
100
+ "api-extractor": "mkdir -p api && [ -z \"${CI}\" ] && (api-extractor run -l) || (api-extractor run)",
101
+ "build": "npm-run-all -p build-check build-ts && npm run copy-assets && npm run api-extractor",
102
+ "build-check": "tsgo",
103
+ "build-ts": "tsgo -p ./tsconfig.build.json",
104
+ "clean": "../../common/scripts/clean-command-state.sh && rm -rf esm *.log",
105
+ "copy-assets": "bash scripts/copy-assets.sh",
106
+ "format-check": "oxfmt --check .",
107
+ "format-write": "oxfmt .",
108
+ "lint": "oxlint . --type-aware --quiet && eslint .",
109
+ "lint-fix": "oxlint . --type-aware --quiet --fix && eslint . --fix",
110
+ "test": "vitest",
111
+ "test-once": "vitest run",
112
+ "validate": "npm run lint && npm run format-check"
113
+ }
114
+ }