@gooddata/sdk-ui-pluggable-host 11.55.0 → 11.56.0-alpha.1

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.
@@ -0,0 +1,3 @@
1
+ <svg width="27" height="39" viewBox="0 0 27 39" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M26.9922 5.50391V4.50781C26.9922 4.11719 26.875 3.7526 26.6406 3.41406C26.4062 3.0625 26.0482 2.75 25.5664 2.47656C25.2279 2.26823 24.8177 2.07943 24.3359 1.91016C23.8672 1.72786 23.3333 1.55859 22.7344 1.40234C22.1484 1.25911 21.5169 1.13542 20.8398 1.03125C20.1628 0.914062 19.4531 0.816406 18.7109 0.738281C17.9818 0.660156 17.2201 0.601562 16.4258 0.5625C15.6315 0.523438 14.8242 0.503906 14.0039 0.503906C13.1836 0.503906 12.3763 0.523438 11.582 0.5625C10.7878 0.601562 10.0195 0.660156 9.27734 0.738281C8.54818 0.816406 7.84505 0.914062 7.16797 1.03125C6.49089 1.13542 5.85938 1.25911 5.27344 1.40234C4.67448 1.55859 4.13411 1.72786 3.65234 1.91016C3.18359 2.07943 2.77995 2.26823 2.44141 2.47656C1.95964 2.75 1.59505 3.0625 1.34766 3.41406C1.11328 3.7526 0.996094 4.11719 0.996094 4.50781V5.50391C0.996094 6.81901 1.1849 8.08854 1.5625 9.3125C1.95312 10.5365 2.49349 11.6758 3.18359 12.7305C3.88672 13.7721 4.72656 14.7031 5.70312 15.5234C6.69271 16.3438 7.79297 17.0013 9.00391 17.4961V21.5C7.79297 21.9948 6.69271 22.6523 5.70312 23.4727C4.72656 24.293 3.88672 25.2305 3.18359 26.2852C2.49349 27.3268 1.95312 28.4596 1.5625 29.6836C1.1849 30.9076 0.996094 32.1771 0.996094 33.4922V34.5078C0.996094 34.8984 1.11328 35.263 1.34766 35.6016C1.59505 35.9401 1.95964 36.2461 2.44141 36.5195C2.77995 36.7279 3.18359 36.9167 3.65234 37.0859C4.13411 37.2682 4.67448 37.4375 5.27344 37.5938C5.85938 37.737 6.49089 37.8607 7.16797 37.9648C7.84505 38.082 8.54818 38.1797 9.27734 38.2578C10.0195 38.3359 10.7878 38.3945 11.582 38.4336C12.3763 38.4727 13.1836 38.4922 14.0039 38.4922C14.8242 38.4922 15.6315 38.4727 16.4258 38.4336C17.2201 38.3945 17.9818 38.3359 18.7109 38.2578C19.4531 38.1797 20.1628 38.082 20.8398 37.9648C21.5169 37.8607 22.1484 37.737 22.7344 37.5938C23.3333 37.4375 23.8672 37.2682 24.3359 37.0859C24.8177 36.9167 25.2279 36.7279 25.5664 36.5195C26.0482 36.2461 26.4062 35.9401 26.6406 35.6016C26.875 35.263 26.9922 34.8984 26.9922 34.5078V33.4922C26.9922 32.1771 26.8034 30.9076 26.4258 29.6836C26.0482 28.4596 25.5078 27.3268 24.8047 26.2852C24.1016 25.2305 23.2552 24.293 22.2656 23.4727C21.2891 22.6523 20.2018 21.9948 19.0039 21.5V17.4961C20.2018 17.0013 21.2891 16.3438 22.2656 15.5234C23.2552 14.7031 24.1016 13.7721 24.8047 12.7305C25.5078 11.6758 26.0482 10.5365 26.4258 9.3125C26.8034 8.08854 26.9922 6.81901 26.9922 5.50391ZM6.23047 3.23828C6.76432 3.12109 7.33073 3.01693 7.92969 2.92578C8.54167 2.83464 9.17318 2.75651 9.82422 2.69141C10.4883 2.6263 11.1654 2.58073 11.8555 2.55469C12.5586 2.51562 13.2747 2.49609 14.0039 2.49609C14.7201 2.49609 15.4297 2.51562 16.1328 2.55469C16.8359 2.58073 17.513 2.6263 18.1641 2.69141C18.8281 2.75651 19.4596 2.83464 20.0586 2.92578C20.6706 3.01693 21.2435 3.12109 21.7773 3.23828C22.9232 3.4987 23.7174 3.7526 24.1602 4C24.6029 4.23438 24.8698 4.40365 24.9609 4.50781C24.8698 4.59896 24.6029 4.76823 24.1602 5.01562C23.7174 5.25 22.9232 5.4974 21.7773 5.75781C21.2435 5.875 20.6706 5.97917 20.0586 6.07031C19.4596 6.16146 18.8281 6.23958 18.1641 6.30469C17.513 6.36979 16.8359 6.42188 16.1328 6.46094C15.4297 6.48698 14.7201 6.5 14.0039 6.5C13.2747 6.5 12.5586 6.48698 11.8555 6.46094C11.1654 6.42188 10.4883 6.36979 9.82422 6.30469C9.17318 6.23958 8.54167 6.16146 7.92969 6.07031C7.33073 5.97917 6.76432 5.875 6.23047 5.75781C5.07161 5.4974 4.27083 5.25 3.82812 5.01562C3.39844 4.76823 3.13802 4.59896 3.04688 4.50781C3.13802 4.40365 3.39844 4.23438 3.82812 4C4.27083 3.7526 5.07161 3.4987 6.23047 3.23828ZM17.6758 23.1211C18.7695 23.5117 19.7656 24.0521 20.6641 24.7422C21.5625 25.4323 22.3307 26.2331 22.9688 27.1445C23.6198 28.056 24.1211 29.0521 24.4727 30.1328C24.8242 31.2135 25 32.3333 25 33.4922V34.4492C24.9609 34.5013 24.7331 34.6641 24.3164 34.9375C23.9128 35.1979 23.0664 35.4714 21.7773 35.7578C21.2435 35.875 20.6706 35.9792 20.0586 36.0703C19.4596 36.1615 18.8281 36.2396 18.1641 36.3047C17.513 36.3698 16.8359 36.4219 16.1328 36.4609C15.4297 36.487 14.7201 36.5 14.0039 36.5C13.2747 36.5 12.5586 36.487 11.8555 36.4609C11.1654 36.4219 10.4883 36.3698 9.82422 36.3047C9.17318 36.2396 8.54167 36.1615 7.92969 36.0703C7.33073 35.9792 6.76432 35.875 6.23047 35.7578C4.94141 35.4714 4.08854 35.1979 3.67188 34.9375C3.26823 34.6641 3.04688 34.5013 3.00781 34.4492V33.4922C3.00781 32.3333 3.18359 31.2135 3.53516 30.1328C3.88672 29.0521 4.38151 28.056 5.01953 27.1445C5.65755 26.2331 6.42578 25.4323 7.32422 24.7422C8.23568 24.0521 9.23828 23.5117 10.332 23.1211C10.5273 23.056 10.6836 22.9388 10.8008 22.7695C10.931 22.5872 10.9961 22.3919 10.9961 22.1836V16.8125C10.9961 16.6042 10.931 16.4154 10.8008 16.2461C10.6836 16.0638 10.5273 15.9401 10.332 15.875C9.34245 15.5234 8.43099 15.0482 7.59766 14.4492C6.77734 13.8503 6.04818 13.1602 5.41016 12.3789C4.78516 11.5977 4.27083 10.7383 3.86719 9.80078C3.47656 8.86328 3.21615 7.88672 3.08594 6.87109C3.38542 7.0013 3.71745 7.13151 4.08203 7.26172C4.44661 7.37891 4.84375 7.48958 5.27344 7.59375C5.85938 7.73698 6.49089 7.86719 7.16797 7.98438C7.84505 8.08854 8.54818 8.17969 9.27734 8.25781C10.0195 8.33594 10.7878 8.39453 11.582 8.43359C12.3763 8.47266 13.1836 8.49219 14.0039 8.49219C14.8242 8.49219 15.6315 8.47266 16.4258 8.43359C17.2201 8.39453 17.9818 8.33594 18.7109 8.25781C19.4531 8.17969 20.1628 8.08854 20.8398 7.98438C21.5169 7.86719 22.1484 7.73698 22.7344 7.59375C23.1641 7.48958 23.5612 7.37891 23.9258 7.26172C24.2904 7.13151 24.6224 7.0013 24.9219 6.87109C24.7917 7.88672 24.5247 8.86328 24.1211 9.80078C23.7174 10.7383 23.2031 11.5977 22.5781 12.3789C21.9531 13.1602 21.224 13.8503 20.3906 14.4492C19.5573 15.0482 18.6523 15.5234 17.6758 15.875C17.4674 15.9401 17.2982 16.0638 17.168 16.2461C17.0508 16.4154 16.9922 16.6042 16.9922 16.8125V22.1836C16.9922 22.3919 17.0508 22.5872 17.168 22.7695C17.2982 22.9388 17.4674 23.056 17.6758 23.1211ZM22.3242 31.5586C21.2044 31.1549 20.1888 30.6211 19.2773 29.957C18.3789 29.293 17.6107 28.5247 16.9727 27.6523C16.3346 26.7799 15.8464 25.8229 15.5078 24.7812C15.1693 23.7396 15 22.6458 15 21.5V15.4453C15.599 15.3932 16.1849 15.2826 16.7578 15.1133C17.3438 14.944 17.9036 14.7292 18.4375 14.4688C18.6849 14.3385 18.8542 14.1432 18.9453 13.8828C19.0365 13.6224 19.0169 13.3685 18.8867 13.1211C18.7695 12.8737 18.5807 12.7044 18.3203 12.6133C18.0599 12.5221 17.806 12.5417 17.5586 12.6719C16.9987 12.9453 16.4193 13.1536 15.8203 13.2969C15.2344 13.4271 14.6289 13.4922 14.0039 13.4922C13.3789 13.4922 12.7669 13.4271 12.168 13.2969C11.569 13.1536 10.9961 12.9453 10.4492 12.6719C10.2018 12.5417 9.94792 12.5221 9.6875 12.6133C9.42708 12.7044 9.23177 12.8737 9.10156 13.1211C8.98438 13.3685 8.96484 13.6224 9.04297 13.8828C9.13411 14.1432 9.30339 14.3385 9.55078 14.4688C10.0977 14.7292 10.6576 14.944 11.2305 15.1133C11.8034 15.2826 12.3958 15.3932 13.0078 15.4453V21.5C13.0078 22.6458 12.832 23.7396 12.4805 24.7812C12.1419 25.8229 11.6536 26.7799 11.0156 27.6523C10.3906 28.5247 9.6224 29.293 8.71094 29.957C7.8125 30.6211 6.79688 31.1549 5.66406 31.5586C5.45573 31.6367 5.28646 31.7669 5.15625 31.9492C5.03906 32.1315 4.98698 32.3333 5 32.5547C5.01302 32.776 5.09115 32.9714 5.23438 33.1406C5.3776 33.3099 5.5599 33.4206 5.78125 33.4727C6.27604 33.5898 6.82943 33.707 7.44141 33.8242C8.05339 33.9414 8.70443 34.0521 9.39453 34.1562C10.0977 34.2604 10.8333 34.3451 11.6016 34.4102C12.3828 34.4753 13.1836 34.5078 14.0039 34.5078C14.8112 34.5078 15.599 34.4753 16.3672 34.4102C17.1484 34.3451 17.8906 34.2604 18.5938 34.1562C19.2969 34.0521 19.9544 33.9414 20.5664 33.8242C21.1784 33.707 21.7318 33.5898 22.2266 33.4727C22.4349 33.4206 22.6107 33.3099 22.7539 33.1406C22.8971 32.9714 22.9818 32.776 23.0078 32.5547C23.0208 32.3333 22.9622 32.1315 22.832 31.9492C22.7148 31.7669 22.5456 31.6367 22.3242 31.5586ZM14.0039 32.4961C13.1185 32.4961 12.2656 32.457 11.4453 32.3789C10.638 32.3008 9.86328 32.2031 9.12109 32.0859C9.78516 31.6693 10.4036 31.2005 10.9766 30.6797C11.5625 30.1458 12.0833 29.5664 12.5391 28.9414C12.8385 28.5508 13.1055 28.1471 13.3398 27.7305C13.5872 27.3138 13.8086 26.8841 14.0039 26.4414C14.1862 26.8841 14.401 27.3138 14.6484 27.7305C14.8958 28.1471 15.1628 28.5508 15.4492 28.9414C15.918 29.5664 16.4388 30.1458 17.0117 30.6797C17.5846 31.2005 18.2031 31.6693 18.8672 32.0859C18.138 32.2031 17.3633 32.3008 16.543 32.3789C15.7227 32.457 14.8763 32.4961 14.0039 32.4961Z" fill="#14B2E2"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="27" height="35" viewBox="0 0 27 35" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M24.0039 13.0078H23.0078V10C23.0078 8.76302 22.7669 7.59766 22.2852 6.50391C21.8164 5.41016 21.1719 4.45964 20.3516 3.65234C19.5443 2.83203 18.5938 2.1875 17.5 1.71875C16.4062 1.23698 15.2409 0.996094 14.0039 0.996094C12.7669 0.996094 11.6016 1.23698 10.5078 1.71875C9.41406 2.1875 8.45703 2.83203 7.63672 3.65234C6.82943 4.45964 6.1849 5.41016 5.70312 6.50391C5.23438 7.59766 5 8.76302 5 10V13.0078H4.00391C3.17057 13.0078 2.46094 13.3008 1.875 13.8867C1.28906 14.4727 0.996094 15.1758 0.996094 15.9961V31.9922C0.996094 32.8255 1.28906 33.5352 1.875 34.1211C2.46094 34.707 3.17057 35 4.00391 35H24.0039C24.8242 35 25.5273 34.707 26.1133 34.1211C26.6992 33.5352 26.9922 32.8255 26.9922 31.9922V15.9961C26.9922 15.1758 26.6992 14.4727 26.1133 13.8867C25.5273 13.3008 24.8242 13.0078 24.0039 13.0078ZM6.99219 10C6.99219 9.03646 7.17448 8.13151 7.53906 7.28516C7.91667 6.42578 8.41797 5.68359 9.04297 5.05859C9.68099 4.42057 10.4232 3.91927 11.2695 3.55469C12.1289 3.1901 13.0404 3.00781 14.0039 3.00781C14.9674 3.00781 15.8724 3.1901 16.7188 3.55469C17.5651 3.91927 18.3073 4.42057 18.9453 5.05859C19.5833 5.68359 20.0846 6.42578 20.4492 7.28516C20.8138 8.13151 20.9961 9.03646 20.9961 10V13.0078H6.99219V10ZM25 31.9922C25 32.2786 24.9023 32.5195 24.707 32.7148C24.5117 32.9102 24.2773 33.0078 24.0039 33.0078H4.00391C3.73047 33.0078 3.49609 32.9102 3.30078 32.7148C3.10547 32.5195 3.00781 32.2786 3.00781 31.9922V15.9961C3.00781 15.7227 3.10547 15.4883 3.30078 15.293C3.49609 15.0977 3.73047 15 4.00391 15H24.0039C24.2773 15 24.5117 15.0977 24.707 15.293C24.9023 15.4883 25 15.7227 25 15.9961V31.9922Z" fill="#14B2E2"/>
3
+ </svg>
@@ -0,0 +1,9 @@
1
+ import "./ContractExpiredDialog.scss";
2
+ /**
3
+ * Full-screen lock shown once the backend denies requests because the organization's contract or the
4
+ * deployment license expired. Mirrors the dialog the standalone applications render for the same error.
5
+ */
6
+ export declare function ContractExpiredDialog({ tier }: {
7
+ tier: string;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=ContractExpiredDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContractExpiredDialog.d.ts","sourceRoot":"","sources":["../../src/components/ContractExpiredDialog.tsx"],"names":[],"mappings":"AAUA,OAAO,8BAA8B,CAAC;AAatC;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,2CAwB/D"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { defineMessages, useIntl } from "react-intl";
4
+ import { PantherTier } from "@gooddata/sdk-pluggable-application-model";
5
+ import { ErrorOverlay } from "@gooddata/sdk-ui-kit";
6
+ import hourglassIcon from "../assets/hourglass.svg";
7
+ import lockIcon from "../assets/lock.svg";
8
+ import "./ContractExpiredDialog.scss";
9
+ const CONTACT_US_URL = "https://www.gooddata.com/contact/?utm_source=GoodDataCloudTrial&utm_medium=free&utm_campaign=contact-us-click&utm_content=contact-us-click";
10
+ const messages = defineMessages({
11
+ trialTitle: { id: "gs.host.contractExpired.trial.title" },
12
+ trialDescription: { id: "gs.host.contractExpired.trial.description" },
13
+ nonTrialTitle: { id: "gs.host.contractExpired.nonTrial.title" },
14
+ nonTrialDescription: { id: "gs.host.contractExpired.nonTrial.description" },
15
+ buttonTitle: { id: "gs.host.contractExpired.buttonTitle" },
16
+ });
17
+ /**
18
+ * Full-screen lock shown once the backend denies requests because the organization's contract or the
19
+ * deployment license expired. Mirrors the dialog the standalone applications render for the same error.
20
+ */
21
+ export function ContractExpiredDialog({ tier }) {
22
+ const intl = useIntl();
23
+ const isTrial = tier.toUpperCase() === PantherTier.TRIAL;
24
+ return (_jsx(ErrorOverlay, { locale: intl.locale, className: "s-contract-expired-dialog", showButton: isTrial, onButtonClick: () => {
25
+ window.location.href = CONTACT_US_URL;
26
+ }, icon: _jsx("img", { src: isTrial ? hourglassIcon : lockIcon, alt: "", className: "gd-host-contract-expired-icon" }), title: intl.formatMessage(isTrial ? messages.trialTitle : messages.nonTrialTitle), text: intl.formatMessage(isTrial ? messages.trialDescription : messages.nonTrialDescription), buttonTitle: intl.formatMessage(messages.buttonTitle) }));
27
+ }
@@ -0,0 +1,5 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ .gd-host-contract-expired-icon {
4
+ margin-bottom: 20px;
5
+ }
@@ -235,6 +235,5 @@ export function HostUiContainer({ ctx, apps, pathname, routerNavigate }) {
235
235
  requestCloseAi,
236
236
  setAiAssistantContext,
237
237
  ]);
238
- return (_jsxs(_Fragment, { children: [
239
- _jsx("div", { ref: containerRef, className: "gd-host-ui-container" }), hostReady && !ctx.isExportMode ? (_jsx(HostChat, { ctx: ctx, resolvedApplications: apps, pathname: pathname, activeAppId: activeInternalApplication?.id, visibility: aiVisibility, context: aiContext, onOpenChange: setAiAssistantOpen, onChatStateChange: onChatStateChange, onAppLinkClick: onAppLinkClick, onAppEventReceive: onAppEventReceive })) : null] }));
238
+ return (_jsxs(_Fragment, { children: [_jsx("div", { ref: containerRef, className: "gd-host-ui-container" }), hostReady && !ctx.isExportMode ? (_jsx(HostChat, { ctx: ctx, resolvedApplications: apps, pathname: pathname, activeAppId: activeInternalApplication?.id, visibility: aiVisibility, context: aiContext, onOpenChange: setAiAssistantOpen, onChatStateChange: onChatStateChange, onAppLinkClick: onAppLinkClick, onAppEventReceive: onAppEventReceive })) : null] }));
240
239
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Root.d.ts","sourceRoot":"","sources":["../../src/components/Root.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAYlF,OAAO,sBAAsB,CAAC;AAE9B,OAAO,aAAa,CAAC;AAIrB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,cAAc,CAAA;CAAE,2CAqBjE"}
1
+ {"version":3,"file":"Root.d.ts","sourceRoot":"","sources":["../../src/components/Root.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAclF,OAAO,sBAAsB,CAAC;AAE9B,OAAO,aAAa,CAAC;AAIrB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,cAAc,CAAA;CAAE,2CAiDjE"}
@@ -1,13 +1,15 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
3
  import { useEffect } from "react";
4
4
  import { FormattedMessage } from "react-intl";
5
5
  import { useLocation, useNavigate } from "react-router";
6
6
  import { DEFAULT_LANGUAGE, resolveLocale } from "@gooddata/sdk-ui";
7
7
  import { bemFactory } from "@gooddata/sdk-ui-kit";
8
+ import { useContractExpiredTier } from "../platformContext/contractExpired.js";
8
9
  import { useLoadPlatformContext } from "../platformContext/useLoadPlatformContext.js";
9
10
  import { usePluggableApplications } from "../registry/pluggableApplicationsRegistry.js";
10
11
  import { HostIntlProvider } from "../ui/HostIntlProvider.js";
12
+ import { ContractExpiredDialog } from "./ContractExpiredDialog.js";
11
13
  import { FullScreenLoader } from "./FullScreenLoader.js";
12
14
  import { HostUiContainer } from "./HostUiContainer.js";
13
15
  import { useRedirectNavigation } from "./useRedirectNavigation.js";
@@ -20,15 +22,19 @@ const { e } = bemFactory("gd-host-root");
20
22
  */
21
23
  export function Root({ callbacks }) {
22
24
  const platformContext = useLoadPlatformContext();
25
+ const contractExpiredTier = useContractExpiredTier();
26
+ // The lock is deployment-wide, so it overlays whatever state the host is in. When the bootstrap
27
+ // itself was denied, the lock is the whole story and replaces the generic failure text.
28
+ const contractExpiredDialog = contractExpiredTier === undefined ? null : (_jsx(HostIntlProvider, { locale: platformContext.state === "ready"
29
+ ? resolveLocale(platformContext.ctx.preferredLocale)
30
+ : DEFAULT_LANGUAGE, children: _jsx(ContractExpiredDialog, { tier: contractExpiredTier }) }));
23
31
  if (platformContext.state === "loading") {
24
- return _jsx(FullScreenLoader, {});
32
+ return (_jsxs(_Fragment, { children: [contractExpiredDialog, _jsx(FullScreenLoader, {})] }));
25
33
  }
26
34
  if (platformContext.state === "error") {
27
- return (_jsx(HostIntlProvider, { locale: DEFAULT_LANGUAGE, children: _jsxs("main", { className: e("error"), children: [
28
- _jsx("h1", { children: _jsx(FormattedMessage, { id: "gs.host.error.failedToLoad" }) }), _jsx("p", { children: platformContext.error })
29
- ] }) }));
35
+ return (contractExpiredDialog ?? (_jsx(HostIntlProvider, { locale: DEFAULT_LANGUAGE, children: _jsxs("main", { className: e("error"), children: [_jsx("h1", { children: _jsx(FormattedMessage, { id: "gs.host.error.failedToLoad" }) }), _jsx("p", { children: platformContext.error })] }) })));
30
36
  }
31
- return _jsx(ReadyRoot, { ctx: platformContext.ctx, callbacks: callbacks });
37
+ return (_jsxs(_Fragment, { children: [contractExpiredDialog, _jsx(ReadyRoot, { ctx: platformContext.ctx, callbacks: callbacks })] }));
32
38
  }
33
39
  function ReadyRoot({ ctx, callbacks }) {
34
40
  useEffect(() => {
@@ -51,14 +57,10 @@ function ReadyRoot({ ctx, callbacks }) {
51
57
  return _jsx(FullScreenLoader, {});
52
58
  }
53
59
  if (redirect.state === "not-found") {
54
- return (_jsx(HostIntlProvider, { locale: resolveLocale(ctx.preferredLocale), children: _jsxs("main", { className: e("error"), children: [
55
- _jsx("h1", { children: _jsx(FormattedMessage, { id: "gs.host.error.pageNotFound" }) }), _jsx("p", { children: _jsx(FormattedMessage, { id: "gs.host.error.pageNotFoundDescription" }) })
56
- ] }) }));
60
+ return (_jsx(HostIntlProvider, { locale: resolveLocale(ctx.preferredLocale), children: _jsxs("main", { className: e("error"), children: [_jsx("h1", { children: _jsx(FormattedMessage, { id: "gs.host.error.pageNotFound" }) }), _jsx("p", { children: _jsx(FormattedMessage, { id: "gs.host.error.pageNotFoundDescription" }) })] }) }));
57
61
  }
58
62
  if (redirect.state === "error") {
59
- return (_jsx(HostIntlProvider, { locale: resolveLocale(ctx.preferredLocale), children: _jsxs("main", { className: e("error"), children: [
60
- _jsx("h1", { children: _jsx(FormattedMessage, { id: "gs.host.error.somethingWentWrong" }) }), _jsx("p", { children: redirect.error })
61
- ] }) }));
63
+ return (_jsx(HostIntlProvider, { locale: resolveLocale(ctx.preferredLocale), children: _jsxs("main", { className: e("error"), children: [_jsx("h1", { children: _jsx(FormattedMessage, { id: "gs.host.error.somethingWentWrong" }) }), _jsx("p", { children: redirect.error })] }) }));
62
64
  }
63
65
  return _jsx(HostUiContainer, { ctx: ctx, apps: apps, pathname: pathname, routerNavigate: routerNavigate });
64
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chunkReloadGuard.d.ts","sourceRoot":"","sources":["../../src/lib/chunkReloadGuard.ts"],"names":[],"mappings":"AAsBA;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IAClC,2EAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAoC7E;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,SAAS,GAAG,IAAI,CAEhG;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA2BzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAkBjD;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,GAAG,EACH,UAAuB,EACvB,eAAe,EAClB,EAAE,sBAAsB,GAAG,IAAI,CAsE/B"}
1
+ {"version":3,"file":"chunkReloadGuard.d.ts","sourceRoot":"","sources":["../../src/lib/chunkReloadGuard.ts"],"names":[],"mappings":"AAsBA;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IAClC,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAoC7E;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,SAAS,GAAG,IAAI,CAEhG;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA2BzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAkBjD;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,GAAG,EACH,UAAuB,EACvB,eAAe,EAClB,EAAE,sBAAsB,GAAG,IAAI,CAsE/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/platformContext/backend.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AASlG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAIlF,MAAM,WAAW,qBAAqB;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,kBAAkB,CAAC;IACrC,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;IAC3C,0BAA0B,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACvE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,0CAA0C,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtF;AAsCD,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,eAAe,CAiGzF;AAYD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,kBAAkB,CAE/C;AAED,wBAAgB,kBAAkB,IAAI,gBAAgB,CAErD;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAEjF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,0CAA0C,CAAC,EAAE,MAAM,GAAG,IAAI,CAE7F"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/platformContext/backend.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AASlG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAKlF,MAAM,WAAW,qBAAqB;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,kBAAkB,CAAC;IACrC,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;IAC3C,0BAA0B,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACvE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,0CAA0C,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtF;AAsCD,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,eAAe,CAkGzF;AAYD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,kBAAkB,CAE/C;AAED,wBAAgB,kBAAkB,IAAI,gBAAgB,CAErD;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAEjF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,0CAA0C,CAAC,EAAE,MAAM,GAAG,IAAI,CAE7F"}
@@ -1,6 +1,7 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { RecommendedCachingConfiguration, withCaching } from "@gooddata/sdk-backend-base";
3
3
  import { ContextDeferredAuthProvider, TigerJwtAuthProvider, TigerTokenAuthProvider, tigerFactory, } from "@gooddata/sdk-backend-tiger";
4
+ import { notifyContractExpired } from "./contractExpired.js";
4
5
  import { createNotAuthenticatedHandler } from "./tigerNotAuthenticatedHandler.js";
5
6
  const decorateBackend = (backend) => {
6
7
  return withCaching(backend, RecommendedCachingConfiguration);
@@ -44,6 +45,7 @@ export function createBackendFactory(options = {}) {
44
45
  const baseBackend = tigerFactory(undefined, {
45
46
  packageName: options.packageName ?? "@gooddata/sdk-ui-pluggable-host",
46
47
  packageVersion,
48
+ onContractExpired: notifyContractExpired,
47
49
  });
48
50
  const externalProviderId = currentAuth.type === "contextDeferred" ? currentAuth.externalProviderId : undefined;
49
51
  const defaultNotAuthenticatedHandler = createNotAuthenticatedHandler(externalProviderId);
@@ -0,0 +1,6 @@
1
+ export declare function notifyContractExpired(tier: string): void;
2
+ /**
3
+ * Returns the tier of the expired contract once the backend has reported one, otherwise `undefined`.
4
+ */
5
+ export declare function useContractExpiredTier(): string | undefined;
6
+ //# sourceMappingURL=contractExpired.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractExpired.d.ts","sourceRoot":"","sources":["../../src/platformContext/contractExpired.ts"],"names":[],"mappings":"AAeA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMxD;AAWD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAE3D"}
@@ -0,0 +1,32 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { useSyncExternalStore } from "react";
3
+ /**
4
+ * Host-wide latch for the tier of an expired contract or deployment license.
5
+ *
6
+ * @remarks
7
+ * The backend reports the denial through `onContractExpired`, which fires from any request made through
8
+ * the host backend (bootstrap included). The value is latched because the condition is deployment-wide
9
+ * and cannot clear without a reload; the first tier reported wins.
10
+ */
11
+ let expiredTier;
12
+ const listeners = new Set();
13
+ export function notifyContractExpired(tier) {
14
+ if (expiredTier !== undefined) {
15
+ return;
16
+ }
17
+ expiredTier = tier;
18
+ listeners.forEach((listener) => listener());
19
+ }
20
+ function subscribe(listener) {
21
+ listeners.add(listener);
22
+ return () => listeners.delete(listener);
23
+ }
24
+ function getSnapshot() {
25
+ return expiredTier;
26
+ }
27
+ /**
28
+ * Returns the tier of the expired contract once the backend has reported one, otherwise `undefined`.
29
+ */
30
+ export function useContractExpiredTier() {
31
+ return useSyncExternalStore(subscribe, getSnapshot);
32
+ }
@@ -59,6 +59,26 @@
59
59
  "text": "Application failed to load",
60
60
  "crowdinContext": "Heading displayed when a pluggable application module fails to mount or load."
61
61
  },
62
+ "gs.host.contractExpired.trial.title": {
63
+ "text": "Your trial has ended.",
64
+ "crowdinContext": "Title of the full-screen lock shown when a trial organization's contract has expired."
65
+ },
66
+ "gs.host.contractExpired.trial.description": {
67
+ "text": "Contact us if you would like to continue using GoodData Cloud.",
68
+ "crowdinContext": "Description under the title of the full-screen lock shown when a trial organization's contract has expired."
69
+ },
70
+ "gs.host.contractExpired.nonTrial.title": {
71
+ "text": "Your access is locked.",
72
+ "crowdinContext": "Title of the full-screen lock shown when the organization's contract or the deployment license has expired."
73
+ },
74
+ "gs.host.contractExpired.nonTrial.description": {
75
+ "text": "Contact the account administrator to regain access.",
76
+ "crowdinContext": "Description under the title of the full-screen lock shown when the organization's contract or the deployment license has expired."
77
+ },
78
+ "gs.host.contractExpired.buttonTitle": {
79
+ "text": "Contact us",
80
+ "crowdinContext": "Label of the button on the expired-trial lock screen that leads to the GoodData contact form."
81
+ },
62
82
  "gs.host.error.failedToLoad": {
63
83
  "text": "Failed to load",
64
84
  "crowdinContext": "Heading displayed when the application platform context fails to load during startup."
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChat.d.ts","sourceRoot":"","sources":["../../src/ui/GenAIChat.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GenAIChat.d.ts","sourceRoot":"","sources":["../../src/ui/GenAIChat.tsx"],"names":[],"mappings":"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"}
@@ -84,5 +84,6 @@ export function GenAIChat({ workspaceId, open, disabled, onOpen, onClose, askedQ
84
84
  break;
85
85
  }
86
86
  }, [addError, addSuccess, intl, onEvent]);
87
- return (_jsx(GenAIChatDialogConnected, { backend: backend, workspace: workspaceId, locale: intl.locale, isOpen: open, isDisabled: disabled, onOpen: onOpen, onClose: onClose, askedQuestion: askedQuestion, askSeq: askSeq, userContext: userContext, appendToChat: appendToChat, agentId: agentId, replaceUserContext: replaceUserContext, ambientUserContext: ambientUserContext, ambientUserContextLoading: ambientUserContextLoading, includeTags: includeTags, excludeTags: excludeTags, canManage: canManageProject, canAnalyze: canAnalyzeProject, canFullControl: canFullControl, settings: settings, dialogPosition: dialogPosition, className: embedded ? EMBEDDED_CHAT_CLASS : undefined, allowNativeLinks: false, onLinkClick: onLinkClick, onEvent: handleEvent, returnFocusTo: embedded ? EMBEDDED_AI_TRIGGER_ID : HEADER_CHAT_BUTTON_ID }));
87
+ const enableGenAiRightPanel = settings?.["enableGenAiRightPanel"];
88
+ return (_jsx(GenAIChatDialogConnected, { backend: backend, workspace: workspaceId, locale: intl.locale, isOpen: open, isDisabled: disabled, onOpen: onOpen, onClose: onClose, askedQuestion: askedQuestion, askSeq: askSeq, userContext: userContext, appendToChat: appendToChat, agentId: agentId, replaceUserContext: replaceUserContext, ambientUserContext: ambientUserContext, ambientUserContextLoading: ambientUserContextLoading, includeTags: includeTags, excludeTags: excludeTags, canManage: canManageProject, canAnalyze: canAnalyzeProject, canFullControl: canFullControl, settings: settings, dialogPosition: dialogPosition, className: embedded ? EMBEDDED_CHAT_CLASS : undefined, allowNativeLinks: false, onLinkClick: onLinkClick, onEvent: handleEvent, displayMode: embedded || !enableGenAiRightPanel ? "modal" : "inline", returnFocusTo: embedded ? EMBEDDED_AI_TRIGGER_ID : HEADER_CHAT_BUTTON_ID }));
88
89
  }
@@ -1,6 +1,7 @@
1
1
  import { type IGenAIUserContext, type PluggableApplicationRegistryItem } from "@gooddata/sdk-model";
2
2
  import { type IPlatformContext } from "@gooddata/sdk-pluggable-application-model";
3
3
  import { GenAIChatEvent } from "./GenAIChat.js";
4
+ import "./HostChat.scss";
4
5
  import "@gooddata/sdk-ui-gen-ai/styles/css/main.css";
5
6
  /**
6
7
  * AI-assistant open/close/toggle request. `seq` changes on every request so an identical repeat
@@ -1 +1 @@
1
- {"version":3,"file":"HostChat.d.ts","sourceRoot":"","sources":["../../src/ui/HostChat.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAOlF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,6CAA6C,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;CACf;AAED,+FAA+F;AAC/F,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,gBAAgB,CAAC;IACtB,oBAAoB,EAAE,gCAAgC,EAAE,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxC,oFAAoF;IACpF,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,mFAAmF;IACnF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,6FAA6F;IAC7F,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChF;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC;IAClD;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EACrB,GAAG,EACH,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,UAAiB,EACjB,OAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACpB,EAAE,cAAc,2CA+FhB"}
1
+ {"version":3,"file":"HostChat.d.ts","sourceRoot":"","sources":["../../src/ui/HostChat.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAOlF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,OAAO,iBAAiB,CAAC;AACzB,OAAO,6CAA6C,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;CACf;AAED,+FAA+F;AAC/F,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,gBAAgB,CAAC;IACtB,oBAAoB,EAAE,gCAAgC,EAAE,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxC,oFAAoF;IACpF,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,mFAAmF;IACnF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,6FAA6F;IAC7F,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChF;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC;IAClD;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EACrB,GAAG,EACH,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,UAAiB,EACjB,OAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACpB,EAAE,cAAc,2CAoHhB"}
@@ -1,13 +1,15 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
- import { useEffect, useMemo } from "react";
3
+ import { useCallback, useEffect, useMemo } from "react";
4
4
  import { BackendProvider, resolveLocale } from "@gooddata/sdk-ui";
5
5
  import { ToastsCenterContextProvider } from "@gooddata/sdk-ui-kit";
6
6
  import { getAppLifecycleCallbacks } from "../loader/pluggableApplicationsLoader.js";
7
7
  import { getBackend } from "../platformContext/backend.js";
8
+ import { e } from "./hostChromeBem.js";
8
9
  import { HostIntlProvider } from "./HostIntlProvider.js";
9
10
  import { useHostChromeChat } from "./useHostChromeChat.js";
10
11
  import { useHostChromeWorkspaceFeatures } from "./useHostChromeWorkspaceFeatures.js";
12
+ import "./HostChat.scss";
11
13
  import "@gooddata/sdk-ui-gen-ai/styles/css/main.css";
12
14
  /**
13
15
  * Owns and renders the host's single GenAI chat, decoupled from the host UI module.
@@ -81,5 +83,14 @@ export function HostChat({ ctx, resolvedApplications, pathname, activeAppId, vis
81
83
  // `seq` changes on every request, so a repeated identical open/ask/toggle still re-runs this.
82
84
  // eslint-disable-next-line react-hooks/exhaustive-deps
83
85
  }, [visibilitySeq, chatAskAiAssistant, chatOpenAiAssistant, chatOpen, chatClose, chatToggle]);
84
- return (_jsx(HostIntlProvider, { locale: resolveLocale(ctx.preferredLocale), children: _jsx(BackendProvider, { backend: getBackend(), children: _jsx(ToastsCenterContextProvider, { children: chat.element }) }) }));
86
+ const enableGenAiRightPanel = features.settings["enableGenAiRightPanel"];
87
+ const Wrapper = useCallback(({ chatIsOpen, children }) => {
88
+ if (enableGenAiRightPanel && !context?.embedded) {
89
+ return (_jsx("div", { className: e("ai-chat", {
90
+ chatIsOpen,
91
+ }), children: children }));
92
+ }
93
+ return children;
94
+ }, [context?.embedded, enableGenAiRightPanel]);
95
+ return (_jsx(HostIntlProvider, { locale: resolveLocale(ctx.preferredLocale), children: _jsx(BackendProvider, { backend: getBackend(), children: _jsx(ToastsCenterContextProvider, { children: _jsx(Wrapper, { chatIsOpen: chatIsOpen, children: chat.element }) }) }) }));
85
96
  }
@@ -0,0 +1,18 @@
1
+ // (C) 2026 GoodData Corporation
2
+
3
+ .gd-host-chrome__ai-chat {
4
+ position: fixed;
5
+ top: 0;
6
+ right: -400px;
7
+ bottom: 0;
8
+ width: 400px;
9
+ transition: right 0.2s ease-in-out;
10
+ margin-top: 44px;
11
+ display: flex;
12
+ flex-direction: row;
13
+
14
+ &--chatIsOpen {
15
+ right: 0;
16
+ border-left: 1px solid var(--gd-palette-complementary-3, #dde4eb);
17
+ }
18
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"HostChrome.d.ts","sourceRoot":"","sources":["../../src/ui/HostChrome.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAElG,OAAO,EACH,KAAK,iBAAiB,EAEtB,KAAK,gCAAgC,EACxC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACxB,MAAM,2CAA2C,CAAC;AA6BnD,OAAO,mBAAmB,CAAC;AAK3B,OAAO,0CAA0C,CAAC;AAClD,OAAO,6CAA6C,CAAC;AACrD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,0DAA0D,CAAC;AAelE,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,gBAAgB,CAAC;IACtB,oBAAoB,EAAE,gCAAgC,EAAE,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,YAAY,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,YAAY,CAAC,EAAE,OAAO,EACtB,kBAAkB,CAAC,EAAE,OAAO,KAC3B,IAAI,CAAC;IACV;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,EACvB,GAAG,EACH,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,SAAS,EAAE,UAAU,EACrB,aAAa,EACb,YAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACX,EAAE,gBAAgB,2CA8NlB"}
1
+ {"version":3,"file":"HostChrome.d.ts","sourceRoot":"","sources":["../../src/ui/HostChrome.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAElG,OAAO,EACH,KAAK,iBAAiB,EAEtB,KAAK,gCAAgC,EACxC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACxB,MAAM,2CAA2C,CAAC;AA6BnD,OAAO,mBAAmB,CAAC;AAK3B,OAAO,0CAA0C,CAAC;AAClD,OAAO,6CAA6C,CAAC;AACrD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,0DAA0D,CAAC;AAelE,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,gBAAgB,CAAC;IACtB,oBAAoB,EAAE,gCAAgC,EAAE,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,YAAY,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,YAAY,CAAC,EAAE,OAAO,EACtB,kBAAkB,CAAC,EAAE,OAAO,KAC3B,IAAI,CAAC;IACV;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,EACvB,GAAG,EACH,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,SAAS,EAAE,UAAU,EACrB,aAAa,EACb,YAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACX,EAAE,gBAAgB,2CAiPlB"}
@@ -138,7 +138,14 @@ export function HostChrome({ ctx, resolvedApplications, pathname, onNavigate, on
138
138
  const headerTextColor = ctx.theme?.header?.color ?? defaultHeaderTheme.color;
139
139
  const activeColor = ctx.theme?.header?.activeColor ?? defaultHeaderTheme.activeColor;
140
140
  const hideChrome = ctx.embeddingMode === "iframe" || ctx.isExportMode === true;
141
- return (_jsx(HostIntlProvider, { locale: locale, additionalMessages: appMessages, children: _jsx(BackendProvider, { backend: getBackend(), children: _jsx(ToastsCenterContextProvider, { children: _jsxs("div", { className: b({ export: ctx.isExportMode === true }), children: [
142
- _jsx(DocumentHeader, { pageTitle: documentPageTitle, brandTitle: documentBrandTitle, faviconUrl: faviconUrl, appleTouchIconUrl: ctx.whiteLabeling?.appleTouchIconUrl }), hideChrome ? null : (_jsx("div", { className: e("header"), onMouseOver: appPreloadOnHover.onMouseOver, onMouseLeave: appPreloadOnHover.onMouseLeave, children: _jsx(AppHeader, { logoUrl: ctx.whiteLabeling?.logoUrl || defaultLogoUrl, logoHref: LOGO_HREF, onLogoClick: handleLogoClick, logoTitle: logoTitle, headerColor: headerColor, headerTextColor: headerTextColor, activeColor: activeColor, userName: userName, organizationName: ctx.organization?.title, isAccessibilityCompliant: true, workspacePicker: workspacePicker, menuItemsGroups: menuItemsGroups, helpMenuItems: helpMenuItems, accountMenuItems: accountMenuItems, onMenuItemClick: handleMenuItemClick, showUpsellButton: pricing.isTrial, onUpsellButtonClick: pricing.onUpsellButtonClick, expiredDate: pricing.isTrial ? pricing.expiredDate : undefined, search: search.element, showChatItem: showChatItem, isChatOpen: chatIsOpen, onChatItemClick: onChatToggle, notificationsPanel: ({ isMobile, closeNotificationsOverlay }) => (_jsx(AppHeaderNotifications, { locale: locale, isMobile: isMobile, closeNotificationsOverlay: closeNotificationsOverlay, useAsOfDateParam: true, enableExportToDocumentStorage: ctx.userSettings.enableExportToDocumentStorage ?? false })) }) })), _jsx("main", { className: e("content"), children: children }), pricing.element, _jsx(HostNotificationDispatcher, { notification: notification })
143
- ] }) }) }) }));
141
+ const enableGenAiRightPanel = features.settings["enableGenAiRightPanel"];
142
+ const Wrapper = useCallback(({ children, chatIsOpen }) => {
143
+ if (enableGenAiRightPanel && ctx.embeddingMode === "none") {
144
+ return (_jsx("main", { className: e("content", {
145
+ chatIsOpen,
146
+ }), children: children }));
147
+ }
148
+ return _jsx("main", { className: e("content"), children: children });
149
+ }, [ctx.embeddingMode, enableGenAiRightPanel]);
150
+ return (_jsx(HostIntlProvider, { locale: locale, additionalMessages: appMessages, children: _jsx(BackendProvider, { backend: getBackend(), children: _jsx(ToastsCenterContextProvider, { children: _jsxs("div", { className: b({ export: ctx.isExportMode === true }), children: [_jsx(DocumentHeader, { pageTitle: documentPageTitle, brandTitle: documentBrandTitle, faviconUrl: faviconUrl, appleTouchIconUrl: ctx.whiteLabeling?.appleTouchIconUrl }), hideChrome ? null : (_jsx("div", { className: e("header"), onMouseOver: appPreloadOnHover.onMouseOver, onMouseLeave: appPreloadOnHover.onMouseLeave, children: _jsx(AppHeader, { logoUrl: ctx.whiteLabeling?.logoUrl || defaultLogoUrl, logoHref: LOGO_HREF, onLogoClick: handleLogoClick, logoTitle: logoTitle, headerColor: headerColor, headerTextColor: headerTextColor, activeColor: activeColor, userName: userName, organizationName: ctx.organization?.title, isAccessibilityCompliant: true, workspacePicker: workspacePicker, menuItemsGroups: menuItemsGroups, helpMenuItems: helpMenuItems, accountMenuItems: accountMenuItems, onMenuItemClick: handleMenuItemClick, showUpsellButton: pricing.isTrial, onUpsellButtonClick: pricing.onUpsellButtonClick, expiredDate: pricing.isTrial ? pricing.expiredDate : undefined, search: search.element, showChatItem: showChatItem, isChatOpen: chatIsOpen, onChatItemClick: onChatToggle, notificationsPanel: ({ isMobile, closeNotificationsOverlay }) => (_jsx(AppHeaderNotifications, { locale: locale, isMobile: isMobile, closeNotificationsOverlay: closeNotificationsOverlay, useAsOfDateParam: true, enableExportToDocumentStorage: ctx.userSettings.enableExportToDocumentStorage ?? false })) }) })), _jsx(Wrapper, { chatIsOpen: chatIsOpen, children: children }), pricing.element, _jsx(HostNotificationDispatcher, { notification: notification })] }) }) }) }));
144
151
  }
@@ -19,6 +19,12 @@
19
19
  // trap the embedded application's z-indexes in their own stacking
20
20
  // context so they cannot paint over the host header and its dropdowns
21
21
  isolation: isolate;
22
+ margin-right: 0;
23
+ transition: margin-right 0.2s ease-in-out;
24
+
25
+ &--chatIsOpen {
26
+ margin-right: 400px;
27
+ }
22
28
  }
23
29
 
24
30
  &__app-container {
@@ -258,9 +258,7 @@ export function PluggableApplicationRenderer({ app, ctx, pathname, aiAssistantOp
258
258
  ref.current = undefined;
259
259
  };
260
260
  }, [aiEventReceiveRef]);
261
- return (_jsxs("section", { className: b(), children: [viewState.state === "loading" ? (_jsx("div", { className: e("loading"), children: _jsx(LoadingComponent, { height: 40 }) })) : null, viewState.state === "error" ? (_jsxs("div", { className: e("error"), children: [
262
- _jsx("h2", { children: _jsx(FormattedMessage, { id: "gs.host.error.applicationFailedToLoad" }) }), _jsx("p", { children: viewState.message })
263
- ] })) : null, _jsx("div", { ref: containerRef, className: e("container", { visible: viewState.state === "ready" }) }), viewState.state === "ready" && viewState.validUntil !== undefined ? (_jsx("div", { className: e("demoBadge"), role: "status", children: _jsx(FormattedMessage, { id: "gs.host.demoApp.validUntil", values: {
261
+ return (_jsxs("section", { className: b(), children: [viewState.state === "loading" ? (_jsx("div", { className: e("loading"), children: _jsx(LoadingComponent, { height: 40 }) })) : null, viewState.state === "error" ? (_jsxs("div", { className: e("error"), children: [_jsx("h2", { children: _jsx(FormattedMessage, { id: "gs.host.error.applicationFailedToLoad" }) }), _jsx("p", { children: viewState.message })] })) : null, _jsx("div", { ref: containerRef, className: e("container", { visible: viewState.state === "ready" }) }), viewState.state === "ready" && viewState.validUntil !== undefined ? (_jsx("div", { className: e("demoBadge"), role: "status", children: _jsx(FormattedMessage, { id: "gs.host.demoApp.validUntil", values: {
264
262
  date: intl.formatDate(viewState.validUntil, {
265
263
  year: "numeric",
266
264
  month: "long",
@@ -1,2 +1,2 @@
1
- export declare const b: (props?: import("@gooddata/sdk-ui-kit").StyleProps | undefined) => string, e: (element: string, props?: import("@gooddata/sdk-ui-kit").StyleProps | undefined) => string;
1
+ export declare const b: (props?: import("@gooddata/sdk-ui-kit").StyleProps) => string, e: (element: string, props?: import("@gooddata/sdk-ui-kit").StyleProps) => string;
2
2
  //# sourceMappingURL=hostChromeBem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hostChromeBem.d.ts","sourceRoot":"","sources":["../../src/ui/hostChromeBem.ts"],"names":[],"mappings":"AAIA,eAAO,MAAQ,CAAC,6EAAE,CAAC,4FAAiC,CAAC"}
1
+ {"version":3,"file":"hostChromeBem.d.ts","sourceRoot":"","sources":["../../src/ui/hostChromeBem.ts"],"names":[],"mappings":"AAIA,eAAO,MAAQ,CAAC,iEAAE,CAAC,gFAAiC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useHostChromeChat.d.ts","sourceRoot":"","sources":["../../src/ui/useHostChromeChat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,+BAA+B,EACvC,MAAM,2CAA2C,CAAC;AAKnD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAExF,MAAM,WAAW,eAAe;IAC5B,4EAA4E;IAC5E,OAAO,EAAE,SAAS,CAAC;IACnB,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,6EAA2E;IAC3E,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB;;;OAGG;IACH,cAAc,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,YAAY,CAAC,EAAE,OAAO,EACtB,kBAAkB,CAAC,EAAE,OAAO,KAC3B,IAAI,CAAC;IACV;;;OAGG;IACH,eAAe,EAAE,CACb,WAAW,CAAC,EAAE,iBAAiB,EAC/B,kBAAkB,CAAC,EAAE,OAAO,EAC5B,OAAO,CAAC,EAAE,MAAM,KACf,IAAI,CAAC;IACV;;;OAGG;IACH,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClE;;;OAGG;IACH,qBAAqB,EAAE,CAAC,WAAW,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjE;;OAEG;IACH,4BAA4B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,4BAA4B,CAAC;IACvC,GAAG,EAAE,gBAAgB,CAAC;IACtB,SAAS,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACvD,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC;IACvG,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACvD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,QAAQ,EACR,GAAG,EACH,SAAS,EACT,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,iBAAiB,EACpB,EAAE,sBAAsB,GAAG,eAAe,CA6H1C"}
1
+ {"version":3,"file":"useHostChromeChat.d.ts","sourceRoot":"","sources":["../../src/ui/useHostChromeChat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,+BAA+B,EACvC,MAAM,2CAA2C,CAAC;AAKnD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAExF,MAAM,WAAW,eAAe;IAC5B,4EAA4E;IAC5E,OAAO,EAAE,SAAS,CAAC;IACnB,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB;;;OAGG;IACH,cAAc,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,iBAAiB,EAC/B,YAAY,CAAC,EAAE,OAAO,EACtB,kBAAkB,CAAC,EAAE,OAAO,KAC3B,IAAI,CAAC;IACV;;;OAGG;IACH,eAAe,EAAE,CACb,WAAW,CAAC,EAAE,iBAAiB,EAC/B,kBAAkB,CAAC,EAAE,OAAO,EAC5B,OAAO,CAAC,EAAE,MAAM,KACf,IAAI,CAAC;IACV;;;OAGG;IACH,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClE;;;OAGG;IACH,qBAAqB,EAAE,CAAC,WAAW,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjE;;OAEG;IACH,4BAA4B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,4BAA4B,CAAC;IACvC,GAAG,EAAE,gBAAgB,CAAC;IACtB,SAAS,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACvD,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC;IACvG,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACvD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,QAAQ,EACR,GAAG,EACH,SAAS,EACT,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,iBAAiB,EACpB,EAAE,sBAAsB,GAAG,eAAe,CA6H1C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-pluggable-host",
3
- "version": "11.55.0",
3
+ "version": "11.56.0-alpha.1",
4
4
  "description": "GoodData SDK runtime for hosting pluggable applications — registry, loader, routing, platform context, default UI chrome",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -29,20 +29,20 @@
29
29
  "dependencies": {
30
30
  "@module-federation/runtime": "2.6.0",
31
31
  "lodash-es": "^4.17.23",
32
- "@gooddata/sdk-backend-base": "11.55.0",
33
- "@gooddata/sdk-backend-spi": "11.55.0",
34
- "@gooddata/sdk-backend-tiger": "11.55.0",
35
- "@gooddata/sdk-embedding": "11.55.0",
36
- "@gooddata/sdk-pluggable-application-model": "11.55.0",
37
- "@gooddata/sdk-model": "11.55.0",
38
- "@gooddata/sdk-ui": "11.55.0",
39
- "@gooddata/sdk-ui-application-header": "11.55.0",
40
- "@gooddata/sdk-ui-ext": "11.55.0",
41
- "@gooddata/sdk-ui-gen-ai": "11.55.0",
42
- "@gooddata/sdk-ui-kit": "11.55.0",
43
- "@gooddata/sdk-ui-semantic-search": "11.55.0",
44
- "@gooddata/sdk-ui-theme-provider": "11.55.0",
45
- "@gooddata/util": "11.55.0"
32
+ "@gooddata/sdk-backend-base": "11.56.0-alpha.1",
33
+ "@gooddata/sdk-backend-spi": "11.56.0-alpha.1",
34
+ "@gooddata/sdk-backend-tiger": "11.56.0-alpha.1",
35
+ "@gooddata/sdk-embedding": "11.56.0-alpha.1",
36
+ "@gooddata/sdk-model": "11.56.0-alpha.1",
37
+ "@gooddata/sdk-pluggable-application-model": "11.56.0-alpha.1",
38
+ "@gooddata/sdk-ui": "11.56.0-alpha.1",
39
+ "@gooddata/sdk-ui-application-header": "11.56.0-alpha.1",
40
+ "@gooddata/sdk-ui-gen-ai": "11.56.0-alpha.1",
41
+ "@gooddata/sdk-ui-ext": "11.56.0-alpha.1",
42
+ "@gooddata/sdk-ui-kit": "11.56.0-alpha.1",
43
+ "@gooddata/sdk-ui-theme-provider": "11.56.0-alpha.1",
44
+ "@gooddata/sdk-ui-semantic-search": "11.56.0-alpha.1",
45
+ "@gooddata/util": "11.56.0-alpha.1"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@microsoft/api-documenter": "7.30.10",
@@ -55,7 +55,7 @@
55
55
  "@types/react-dom": "19.1.7",
56
56
  "@typescript-eslint/eslint-plugin": "8.58.0",
57
57
  "@typescript-eslint/parser": "8.58.0",
58
- "@typescript/native-preview": "7.0.0-dev.20260202.1",
58
+ "@typescript/native-preview": "7.0.0-dev.20260501.1",
59
59
  "@vitest/coverage-v8": "4.1.8",
60
60
  "eslint": "^9.39.2",
61
61
  "eslint-plugin-headers": "1.3.3",
@@ -76,14 +76,14 @@
76
76
  "react-intl": "7.1.11",
77
77
  "react-router": "7.18.1",
78
78
  "rolldown": "1.0.3",
79
- "sass": "1.77.1",
79
+ "sass": "1.78.0",
80
80
  "tslib": "2.8.1",
81
81
  "typescript": "5.9.3",
82
82
  "vite": "8.0.16",
83
83
  "vitest": "4.1.8",
84
84
  "vitest-dom": "0.1.1",
85
- "@gooddata/eslint-config": "11.55.0",
86
- "@gooddata/oxlint-config": "11.55.0"
85
+ "@gooddata/eslint-config": "11.56.0-alpha.1",
86
+ "@gooddata/oxlint-config": "11.56.0-alpha.1"
87
87
  },
88
88
  "peerDependencies": {
89
89
  "react": ">=18.3.1",