@gooddata/sdk-ui-dashboard 11.56.0-alpha.6 → 11.56.0-alpha.8

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 (323) hide show
  1. package/NOTICE +1 -1
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/_staging/catalog/computedAttributes.d.ts +43 -0
  5. package/esm/_staging/catalog/computedAttributes.d.ts.map +1 -0
  6. package/esm/_staging/catalog/computedAttributes.js +93 -0
  7. package/esm/_staging/catalog/displayFormMap.d.ts +3 -2
  8. package/esm/_staging/catalog/displayFormMap.d.ts.map +1 -1
  9. package/esm/_staging/catalog/displayFormMap.js +9 -3
  10. package/esm/_staging/metadata/objRefMap.d.ts.map +1 -1
  11. package/esm/_staging/metadata/objRefMap.js +11 -1
  12. package/esm/index.d.ts +9 -5
  13. package/esm/index.d.ts.map +1 -1
  14. package/esm/index.js +7 -3
  15. package/esm/kdaDialog/composition/hooks/useKdaValidAttributes.js +2 -2
  16. package/esm/kdaDialog/dialog/hooks/useValidAttributes.d.ts.map +1 -1
  17. package/esm/kdaDialog/dialog/hooks/useValidAttributes.js +21 -6
  18. package/esm/kdaDialog/hooks/useAttribute.d.ts.map +1 -1
  19. package/esm/kdaDialog/hooks/useAttribute.js +16 -8
  20. package/esm/locales.d.ts +3 -0
  21. package/esm/locales.d.ts.map +1 -1
  22. package/esm/locales.js +3 -0
  23. package/esm/model/commandHandlers/dashboard/common/loadAvailableDisplayFormRefs.d.ts.map +1 -1
  24. package/esm/model/commandHandlers/dashboard/common/loadAvailableDisplayFormRefs.js +15 -6
  25. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts +2 -3
  26. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
  27. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +26 -17
  28. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.d.ts +6 -1
  29. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.d.ts.map +1 -1
  30. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.js +37 -4
  31. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts +7 -2
  32. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
  33. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +15 -3
  34. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/filterDisplayFormValidation.d.ts.map +1 -1
  35. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/filterDisplayFormValidation.js +10 -3
  36. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/uniqueFiltersValidation.d.ts.map +1 -1
  37. package/esm/model/commandHandlers/filterContext/attributeFilter/validation/uniqueFiltersValidation.js +24 -14
  38. package/esm/model/commandHandlers/scheduledEmail/createScheduledEmailHandler.js +2 -2
  39. package/esm/model/commandHandlers/scheduledEmail/saveScheduledEmailHandler.js +2 -2
  40. package/esm/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.d.ts.map +1 -1
  41. package/esm/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.js +6 -0
  42. package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.d.ts.map +1 -1
  43. package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.js +2 -2
  44. package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js +2 -2
  45. package/esm/model/queries/base.d.ts +1 -1
  46. package/esm/model/queries/base.d.ts.map +1 -1
  47. package/esm/model/queries/base.js +1 -1
  48. package/esm/model/queries/computedAttributeExpression.d.ts +27 -0
  49. package/esm/model/queries/computedAttributeExpression.d.ts.map +1 -0
  50. package/esm/model/queries/computedAttributeExpression.js +21 -0
  51. package/esm/model/queries/connectedAttributes.d.ts +19 -1
  52. package/esm/model/queries/connectedAttributes.d.ts.map +1 -1
  53. package/esm/model/queries/connectedAttributes.js +3 -1
  54. package/esm/model/queries/index.d.ts +2 -1
  55. package/esm/model/queries/index.d.ts.map +1 -1
  56. package/esm/model/queryServices/index.d.ts +1 -1
  57. package/esm/model/queryServices/index.d.ts.map +1 -1
  58. package/esm/model/queryServices/index.js +2 -0
  59. package/esm/model/queryServices/queryAttributeByDisplayForm.d.ts.map +1 -1
  60. package/esm/model/queryServices/queryAttributeByDisplayForm.js +12 -3
  61. package/esm/model/queryServices/queryAttributeDataset.d.ts.map +1 -1
  62. package/esm/model/queryServices/queryAttributeDataset.js +9 -1
  63. package/esm/model/queryServices/queryComputedAttributeExpression.d.ts +4 -0
  64. package/esm/model/queryServices/queryComputedAttributeExpression.d.ts.map +1 -0
  65. package/esm/model/queryServices/queryComputedAttributeExpression.js +17 -0
  66. package/esm/model/queryServices/queryConnectedAttributes.d.ts.map +1 -1
  67. package/esm/model/queryServices/queryConnectedAttributes.js +20 -5
  68. package/esm/model/queryServices/queryInsightAttributesMeta.d.ts.map +1 -1
  69. package/esm/model/queryServices/queryInsightAttributesMeta.js +20 -11
  70. package/esm/model/react/useIsWidgetRestricted.d.ts +9 -0
  71. package/esm/model/react/useIsWidgetRestricted.d.ts.map +1 -0
  72. package/esm/model/react/useIsWidgetRestricted.js +14 -0
  73. package/esm/model/store/catalog/catalogReducers.d.ts +2 -1
  74. package/esm/model/store/catalog/catalogReducers.d.ts.map +1 -1
  75. package/esm/model/store/catalog/catalogReducers.js +2 -1
  76. package/esm/model/store/catalog/catalogSelectors.d.ts +21 -1
  77. package/esm/model/store/catalog/catalogSelectors.d.ts.map +1 -1
  78. package/esm/model/store/catalog/catalogSelectors.js +26 -2
  79. package/esm/model/store/catalog/catalogState.d.ts +8 -1
  80. package/esm/model/store/catalog/catalogState.d.ts.map +1 -1
  81. package/esm/model/store/catalog/catalogState.js +1 -0
  82. package/esm/model/store/config/configSelectors.d.ts +11 -0
  83. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  84. package/esm/model/store/config/configSelectors.js +13 -0
  85. package/esm/model/store/insights/insightsSelectors.js +3 -3
  86. package/esm/model/store/tabs/filterContext/filterContextSelectors.d.ts.map +1 -1
  87. package/esm/model/store/tabs/filterContext/filterContextSelectors.js +8 -4
  88. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts +8 -0
  89. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts.map +1 -1
  90. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.js +8 -0
  91. package/esm/model/utils/displayFormResolver.d.ts.map +1 -1
  92. package/esm/model/utils/displayFormResolver.js +11 -1
  93. package/esm/plugins/customizationApis/customizationBuilder.d.ts.map +1 -1
  94. package/esm/plugins/customizationApis/customizationBuilder.js +1 -0
  95. package/esm/plugins/customizationApis/insightCustomizer.d.ts +4 -2
  96. package/esm/plugins/customizationApis/insightCustomizer.d.ts.map +1 -1
  97. package/esm/plugins/customizationApis/insightCustomizer.js +43 -3
  98. package/esm/plugins/customizer.d.ts +14 -1
  99. package/esm/plugins/customizer.d.ts.map +1 -1
  100. package/esm/presentation/automations/alerting/AlertingDialog.d.ts +2 -0
  101. package/esm/presentation/automations/alerting/AlertingDialog.d.ts.map +1 -1
  102. package/esm/presentation/automations/alerting/AlertingDialog.js +12 -2
  103. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  104. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +1 -1
  105. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -1
  106. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +23 -58
  107. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts +33 -0
  108. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts.map +1 -0
  109. package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.js +61 -0
  110. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts +3 -17
  111. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts.map +1 -1
  112. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.js +3 -52
  113. package/esm/presentation/automations/alerting/state/useAlertFormState.js +1 -1
  114. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +2 -2
  115. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  116. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +1 -1
  117. package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.d.ts +3 -1
  118. package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.d.ts.map +1 -1
  119. package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.js +13 -3
  120. package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogShell.js +2 -5
  121. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts.map +1 -1
  122. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +22 -40
  123. package/esm/presentation/automations/scheduledEmail/state/useSaveScheduledEmailToBackend.d.ts.map +1 -1
  124. package/esm/presentation/automations/scheduledEmail/state/useSaveScheduledEmailToBackend.js +14 -3
  125. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts +27 -0
  126. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts.map +1 -0
  127. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.js +142 -0
  128. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts +4 -6
  129. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts.map +1 -1
  130. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.js +9 -151
  131. package/esm/presentation/automations/shared/filters/conversions.d.ts +4 -0
  132. package/esm/presentation/automations/shared/filters/conversions.d.ts.map +1 -1
  133. package/esm/presentation/automations/shared/filters/conversions.js +28 -24
  134. package/esm/presentation/automations/shared/hooks/useDecoratorContractCheck.d.ts +16 -0
  135. package/esm/presentation/automations/shared/hooks/useDecoratorContractCheck.d.ts.map +1 -0
  136. package/esm/presentation/automations/shared/hooks/useDecoratorContractCheck.js +38 -0
  137. package/esm/presentation/automations/shared/hooks/useShallowStable.d.ts +10 -0
  138. package/esm/presentation/automations/shared/hooks/useShallowStable.d.ts.map +1 -0
  139. package/esm/presentation/automations/shared/hooks/useShallowStable.js +18 -0
  140. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.d.ts.map +1 -1
  141. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.js +17 -4
  142. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.d.ts +10 -0
  143. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.d.ts.map +1 -0
  144. package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.js +19 -0
  145. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.d.ts.map +1 -1
  146. package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.js +8 -2
  147. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.d.ts.map +1 -1
  148. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.js +4 -2
  149. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.d.ts +8 -3
  150. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.d.ts.map +1 -1
  151. package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.js +65 -25
  152. package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
  153. package/esm/presentation/dashboard/components/DashboardInner.js +4 -4
  154. package/esm/presentation/dashboard/components/DashboardRenderer.d.ts.map +1 -1
  155. package/esm/presentation/dashboard/components/DashboardRenderer.js +2 -2
  156. package/esm/presentation/dashboard/hooks/useDashboard.d.ts +2 -1
  157. package/esm/presentation/dashboard/hooks/useDashboard.d.ts.map +1 -1
  158. package/esm/presentation/dashboard/hooks/useDashboard.js +7 -1
  159. package/esm/presentation/dashboard/types.d.ts +14 -1
  160. package/esm/presentation/dashboard/types.d.ts.map +1 -1
  161. package/esm/presentation/dashboardContexts/DashboardComponentsContext.d.ts +2 -1
  162. package/esm/presentation/dashboardContexts/DashboardComponentsContext.d.ts.map +1 -1
  163. package/esm/presentation/dashboardContexts/DashboardComponentsContext.js +1 -0
  164. package/esm/presentation/dashboardContexts/types.d.ts +20 -0
  165. package/esm/presentation/dashboardContexts/types.d.ts.map +1 -1
  166. package/esm/presentation/dragAndDrop/draggableAttributeFilter/DefaultAttributeFilterDraggingComponent.d.ts.map +1 -1
  167. package/esm/presentation/dragAndDrop/draggableAttributeFilter/DefaultAttributeFilterDraggingComponent.js +4 -3
  168. package/esm/presentation/export/useExportData.js +2 -2
  169. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltip.d.ts.map +1 -1
  170. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltip.js +8 -2
  171. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.d.ts +12 -1
  172. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.d.ts.map +1 -1
  173. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.js +19 -2
  174. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/displayForms/AttributeDisplayFormsDropdown.d.ts.map +1 -1
  175. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/displayForms/AttributeDisplayFormsDropdown.js +3 -2
  176. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.d.ts +14 -0
  177. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.d.ts.map +1 -0
  178. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.js +28 -0
  179. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useDisplayFormConfiguration.js +2 -2
  180. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useValidNeighbourAttributes.d.ts.map +1 -1
  181. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useValidNeighbourAttributes.js +12 -2
  182. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/shared/limitingItemsHook.d.ts.map +1 -1
  183. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/shared/limitingItemsHook.js +6 -5
  184. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/parentFilters/ParentFiltersDisabledItem.js +2 -2
  185. package/esm/presentation/filterBar/filterBar/DefaultFilterBarItem.js +2 -2
  186. package/esm/presentation/filterBar/filterBar/useFiltersWithAddedPlaceholder.js +2 -2
  187. package/esm/presentation/filterBar/measureValueFilter/useDashboardMeasureValueFilterData.d.ts.map +1 -1
  188. package/esm/presentation/filterBar/measureValueFilter/useDashboardMeasureValueFilterData.js +55 -17
  189. package/esm/presentation/flexibleLayout/DashboardLayoutWidget.d.ts.map +1 -1
  190. package/esm/presentation/flexibleLayout/DashboardLayoutWidget.js +6 -1
  191. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +5 -4
  192. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  193. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +5 -4
  194. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +5 -4
  195. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  196. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +5 -4
  197. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +5 -4
  198. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  199. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +5 -4
  200. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +40 -0
  201. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  202. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +40 -0
  203. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +5 -4
  204. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  205. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +5 -4
  206. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +5 -4
  207. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  208. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +5 -4
  209. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +5 -4
  210. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  211. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +5 -4
  212. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +5 -4
  213. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  214. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +5 -4
  215. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +5 -4
  216. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  217. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +5 -4
  218. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +5 -4
  219. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  220. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +5 -4
  221. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +5 -4
  222. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  223. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +5 -4
  224. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +5 -4
  225. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  226. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +33 -32
  227. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +5 -4
  228. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  229. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +5 -4
  230. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +5 -4
  231. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  232. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +5 -4
  233. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +5 -4
  234. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  235. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +5 -4
  236. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +5 -4
  237. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  238. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +5 -4
  239. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +5 -4
  240. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  241. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +5 -4
  242. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +5 -4
  243. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  244. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +5 -4
  245. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +5 -4
  246. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  247. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +5 -4
  248. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +5 -4
  249. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  250. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +5 -4
  251. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +5 -4
  252. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  253. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +5 -4
  254. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +5 -4
  255. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  256. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +5 -4
  257. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +5 -4
  258. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  259. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +5 -4
  260. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +5 -4
  261. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  262. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +5 -4
  263. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +5 -4
  264. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  265. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +5 -4
  266. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +5 -4
  267. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  268. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +5 -4
  269. package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts +54 -0
  270. package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts.map +1 -0
  271. package/esm/presentation/widget/common/RestrictedPlaceholder.js +49 -0
  272. package/esm/presentation/widget/common/configuration/DateDatasetFilter.d.ts +6 -1
  273. package/esm/presentation/widget/common/configuration/DateDatasetFilter.d.ts.map +1 -1
  274. package/esm/presentation/widget/common/configuration/DateDatasetFilter.js +2 -2
  275. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.d.ts +6 -1
  276. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.d.ts.map +1 -1
  277. package/esm/presentation/widget/common/configuration/DateFilterCheckbox.js +10 -3
  278. package/esm/presentation/widget/insight/DefaultInsightBody/DefaultInsightBody.js +2 -2
  279. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.js +2 -2
  280. package/esm/presentation/widget/insight/configuration/InsightDateDataSetFilter.d.ts.map +1 -1
  281. package/esm/presentation/widget/insight/configuration/InsightDateDataSetFilter.js +1 -1
  282. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.d.ts +6 -1
  283. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.d.ts.map +1 -1
  284. package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.js +13 -2
  285. package/esm/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.d.ts.map +1 -1
  286. package/esm/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.js +5 -1
  287. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.d.ts +1 -1
  288. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.d.ts.map +1 -1
  289. package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.js +2 -2
  290. package/esm/presentation/widget/richText/configuration/RichTextDateDataSetFilter.d.ts.map +1 -1
  291. package/esm/presentation/widget/richText/configuration/RichTextDateDataSetFilter.js +1 -1
  292. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.d.ts.map +1 -1
  293. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js +8 -0
  294. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.d.ts +16 -0
  295. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.d.ts.map +1 -0
  296. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.js +19 -0
  297. package/esm/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.d.ts.map +1 -1
  298. package/esm/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.js +11 -1
  299. package/esm/presentation/widget/widget/InsightWidget/DefaultDashboardInsightWidget.js +2 -2
  300. package/esm/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.d.ts.map +1 -1
  301. package/esm/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js +25 -12
  302. package/esm/sdk-ui-dashboard.d.ts +206 -4
  303. package/package.json +22 -22
  304. package/styles/css/alerting.css +3 -1
  305. package/styles/css/alerting.css.map +1 -1
  306. package/styles/css/configurationPanel.css +1 -5
  307. package/styles/css/configurationPanel.css.map +1 -1
  308. package/styles/css/dashboard.css +5 -3
  309. package/styles/css/dashboard.css.map +1 -1
  310. package/styles/css/export.css +10 -8
  311. package/styles/css/export.css.map +1 -1
  312. package/styles/css/filterBar.css +29 -0
  313. package/styles/css/filterBar.css.map +1 -1
  314. package/styles/css/main.css +230 -22
  315. package/styles/css/main.css.map +1 -1
  316. package/styles/css/sidebar.css +165 -0
  317. package/styles/css/sidebar.css.map +1 -1
  318. package/styles/css/visualizationSwitcherWidget.css +8 -0
  319. package/styles/css/visualizationSwitcherWidget.css.map +1 -1
  320. package/styles/scss/configurationPanel.scss +1 -7
  321. package/styles/scss/filterBar.scss +38 -0
  322. package/styles/scss/sidebar.scss +215 -0
  323. package/styles/scss/visualizationSwitcherWidget.scss +9 -0
@@ -5,7 +5,7 @@ import { messages } from "../../../../locales.js";
5
5
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
6
6
  import { selectSupportsAttributeHierarchies } from "../../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
7
7
  import { DRILL_TARGET_TYPE } from "../../../drill/types.js";
8
- export const useDrillTargetTypeItems = (disableDrillDown) => {
8
+ export const useDrillTargetTypeItems = (disableDrillDown, disableDrillDownTooltip) => {
9
9
  const intl = useIntl();
10
10
  const supportsAttributeHierarchies = useDashboardSelector(selectSupportsAttributeHierarchies);
11
11
  const dropdownItems = [
@@ -28,7 +28,7 @@ export const useDrillTargetTypeItems = (disableDrillDown) => {
28
28
  title: intl.formatMessage(messages.drillDownConfig),
29
29
  disabled: disableDrillDown,
30
30
  disableTooltipMessage: disableDrillDown
31
- ? intl.formatMessage(messages.disableDrillDownToolTip)
31
+ ? (disableDrillDownTooltip ?? intl.formatMessage(messages.disableDrillDownToolTip))
32
32
  : undefined,
33
33
  tooltipMessage: uiMessages["drilldownTooltip"].id,
34
34
  documentUrl: "https://www.gooddata.com/docs/cloud/create-dashboards/drilling-in-dashboards/set-drill-down/",
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/richText/configuration/RichTextDateDataSetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,qBAAqB,CAAC;AAatE,MAAM,WAAW,+BAA+B;IAC5C,MAAM,EAAE,eAAe,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,+BAA+B,2CAoCpF"}
1
+ {"version":3,"file":"RichTextDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/richText/configuration/RichTextDateDataSetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,qBAAqB,CAAC;AAatE,MAAM,WAAW,+BAA+B;IAC5C,MAAM,EAAE,eAAe,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,+BAA+B,2CAqCpF"}
@@ -17,5 +17,5 @@ export function RichTextDateDataSetFilter({ widget }) {
17
17
  queryDateDatasets();
18
18
  }, [queryDateDatasets]);
19
19
  const { handleDateDatasetChanged, shouldOpenDateDatasetPicker } = useDateDatasetFilter(result?.dateDatasets);
20
- return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
20
+ return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, datasetsLoadFailed: status === "error", isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ViewModeDashboardVisualizationSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;AAyB7B,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAGvE;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,EACnD,MAAM,EACN,qBAAqB,EAAE,4BAA4B,EACnD,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,UAAU,GACb,EAAE,oCAAoC,2CAyCtC;AAED,wBAAgB,2CAA2C,4CAE1D;AAED,MAAM,WAAW,mDAAoD,SAAQ,oCAAoC;IAC7G,OAAO,EAAE,QAAQ,CAAC;IAClB,mBAAmB,EAAE,cAAc,CAAC;IACpC,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,6CAA6C,CAAC,EAC1D,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,UAAU,GACb,EAAE,mDAAmD,2CAmOrD"}
1
+ {"version":3,"file":"ViewModeDashboardVisualizationSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;AA0B7B,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAIvE;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,EACnD,MAAM,EACN,qBAAqB,EAAE,4BAA4B,EACnD,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,UAAU,GACb,EAAE,oCAAoC,2CAwDtC;AAED,wBAAgB,2CAA2C,4CAE1D;AAED,MAAM,WAAW,mDAAoD,SAAQ,oCAAoC;IAC7G,OAAO,EAAE,QAAQ,CAAC;IAClB,mBAAmB,EAAE,cAAc,CAAC;IACpC,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,6CAA6C,CAAC,EAC1D,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,UAAU,GACb,EAAE,mDAAmD,2CAmOrD"}
@@ -12,6 +12,7 @@ import { useDashboardAlerts } from "../../../model/react/useDashboardAlerting/us
12
12
  import { useDashboardCommand } from "../../../model/react/useDashboardCommand.js";
13
13
  import { selectInsightsMap } from "../../../model/store/insights/insightsSelectors.js";
14
14
  import { selectVisualizationSwitcherActiveVisualizationByWidgetRef } from "../../../model/store/ui/uiSelectors.js";
15
+ import { selectRestrictedInsightsMap } from "../../../model/store/unavailableObjects/unavailableObjectsSelectors.js";
15
16
  import { useDashboardComponentsContext } from "../../dashboardContexts/DashboardComponentsContext.js";
16
17
  import { DashboardItem } from "../../presentationComponents/DashboardItems/DashboardItem.js";
17
18
  import { DashboardItemVisualization } from "../../presentationComponents/DashboardItems/DashboardItemVisualization.js";
@@ -26,6 +27,7 @@ import { useInsightMenu } from "../widget/InsightWidget/useInsightMenu.js";
26
27
  import { VisualizationSwitcherNavigationHeader } from "../widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js";
27
28
  import { AllVisualizationsDashInsights } from "./AllVisualizationsDashInsights.js";
28
29
  import { useExecutionProgress } from "./useExecutionProgress.js";
30
+ import { ViewModeDashboardVisualizationSwitcherRestricted } from "./ViewModeDashboardVisualizationSwitcherRestricted.js";
29
31
  /**
30
32
  * @internal
31
33
  */
@@ -40,7 +42,13 @@ export function ViewModeDashboardVisualizationSwitcher({ widget, activeVisualiza
40
42
  const activeVisualization = widget.visualizations.find((visualization) => visualization.identifier === activeVisualizationId) ??
41
43
  widget.visualizations[0];
42
44
  const insights = useDashboardSelector(selectInsightsMap);
45
+ const restrictedInsights = useDashboardSelector(selectRestrictedInsightsMap);
43
46
  const insight = activeVisualization ? insights.get(activeVisualization.insight) : undefined;
47
+ // a restricted insight is withheld from the insights map, so this must be decided before the
48
+ // missing-insight branch below, which would otherwise render the empty switcher
49
+ if (activeVisualization && restrictedInsights.has(activeVisualization.insight)) {
50
+ return (_jsx(ViewModeDashboardVisualizationSwitcherRestricted, { widget: widget, activeVisualization: activeVisualization, screen: screen, exportData: exportData, onActiveVisualizationChange: setActiveVisualizationId }));
51
+ }
44
52
  if (!activeVisualization || !insight) {
45
53
  return _jsx(ViewModeDashboardVisualizationSwitcherEmpty, {});
46
54
  }
@@ -0,0 +1,16 @@
1
+ import { type IInsightWidget, type IVisualizationSwitcherWidget, type ScreenSize } from "@gooddata/sdk-model";
2
+ import { type WidgetExportData } from "../../export/types.js";
3
+ export interface IViewModeDashboardVisualizationSwitcherRestrictedProps {
4
+ widget: IVisualizationSwitcherWidget;
5
+ activeVisualization: IInsightWidget;
6
+ screen: ScreenSize;
7
+ exportData?: WidgetExportData;
8
+ onActiveVisualizationChange: (activeVisualizationId: string) => void;
9
+ }
10
+ /**
11
+ * The switcher with a restricted visualization active. The switcher keeps its entry list, so the user
12
+ * can move to a readable visualization; only the body becomes the access placeholder, and no widget
13
+ * menu is offered, which leaves the widget without drill and without export.
14
+ */
15
+ export declare function ViewModeDashboardVisualizationSwitcherRestricted({ widget, activeVisualization, screen, exportData, onActiveVisualizationChange, }: IViewModeDashboardVisualizationSwitcherRestrictedProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=ViewModeDashboardVisualizationSwitcherRestricted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewModeDashboardVisualizationSwitcherRestricted.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,4BAA4B,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI9G,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,MAAM,WAAW,sDAAsD;IACnE,MAAM,EAAE,4BAA4B,CAAC;IACrC,mBAAmB,EAAE,cAAc,CAAC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED;;;;GAIG;AACH,wBAAgB,gDAAgD,CAAC,EAC7D,MAAM,EACN,mBAAmB,EACnB,MAAM,EACN,UAAU,EACV,2BAA2B,GAC9B,EAAE,sDAAsD,2CAqCxD"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import cx from "classnames";
4
+ import { useId } from "@gooddata/sdk-ui-kit";
5
+ import { useDashboardComponentsContext } from "../../dashboardContexts/DashboardComponentsContext.js";
6
+ import { DashboardItem } from "../../presentationComponents/DashboardItems/DashboardItem.js";
7
+ import { DashboardItemVisualization } from "../../presentationComponents/DashboardItems/DashboardItemVisualization.js";
8
+ import { VisualizationSwitcherNavigationHeader } from "../widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js";
9
+ /**
10
+ * The switcher with a restricted visualization active. The switcher keeps its entry list, so the user
11
+ * can move to a readable visualization; only the body becomes the access placeholder, and no widget
12
+ * menu is offered, which leaves the widget without drill and without export.
13
+ */
14
+ export function ViewModeDashboardVisualizationSwitcherRestricted({ widget, activeVisualization, screen, exportData, onActiveVisualizationChange, }) {
15
+ const titleId = useId();
16
+ const { RestrictedPlaceholderComponentProvider } = useDashboardComponentsContext();
17
+ const Content = RestrictedPlaceholderComponentProvider(activeVisualization);
18
+ return (_jsx(DashboardItem, { className: cx("type-visualization", "gd-dashboard-view-widget"), screen: screen, titleId: titleId, children: _jsx(DashboardItemVisualization, { isExport: !!exportData, renderHeadline: (clientHeight, clientWidth) => (_jsx(VisualizationSwitcherNavigationHeader, { widget: widget, clientHeight: clientHeight, clientWidth: clientWidth, titleId: titleId, activeVisualization: activeVisualization, onActiveVisualizationChange: onActiveVisualizationChange, exportData: exportData?.title })), children: ({ clientHeight, clientWidth }) => (_jsx("div", { className: "gd-visualization-switcher-visible-visualization", children: _jsx("div", { className: "visualization-content", children: _jsx(Content, { width: clientWidth, height: clientHeight }) }) })) }) }));
19
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardWidgetInsightGuard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAK3C,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,UAAU,iCAAkC,SAAQ,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC;IACpG,SAAS,EAAE,aAAa,CAAC,mCAAmC,CAAC,CAAC;CACjE;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iCAAiC,2CAMnF"}
1
+ {"version":3,"file":"DashboardWidgetInsightGuard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,UAAU,iCAAkC,SAAQ,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC;IACpG,SAAS,EAAE,aAAa,CAAC,mCAAmC,CAAC,CAAC;CACjE;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iCAAiC,2CAsBnF"}
@@ -1,12 +1,22 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
3
+ import { useIsWidgetRestricted } from "../../../../model/react/useIsWidgetRestricted.js";
3
4
  import { selectInsightsMap } from "../../../../model/store/insights/insightsSelectors.js";
5
+ import { useDashboardComponentsContext } from "../../../dashboardContexts/DashboardComponentsContext.js";
6
+ import { RestrictedPlaceholder } from "../../common/RestrictedPlaceholder.js";
4
7
  // Sometimes this component is rendered even before insights are ready, which blows up.
5
8
  // Since the behavior is nearly impossible to replicate reliably, let's be defensive here and not render
6
9
  // anything until the insights "catch up".
7
10
  export function DashboardWidgetInsightGuard(props) {
8
- const { widget, Component } = props;
11
+ const { widget, screen, dashboardItemClasses, exportData, Component } = props;
9
12
  const insights = useDashboardSelector(selectInsightsMap);
13
+ const isRestricted = useIsWidgetRestricted(widget);
14
+ const { RestrictedPlaceholderComponentProvider } = useDashboardComponentsContext();
15
+ // view, edit and export modes all reach the widget through this guard, so short-circuiting here is
16
+ // what strips the config panel, menu and selection from a restricted widget in edit mode
17
+ if (isRestricted) {
18
+ return (_jsx(RestrictedPlaceholder, { screen: screen, dashboardItemClasses: dashboardItemClasses, exportData: exportData, Content: RestrictedPlaceholderComponentProvider(widget) }));
19
+ }
10
20
  const insight = insights.get(widget.insight);
11
21
  return _jsx(Component, { ...props, insight: insight });
12
22
  }
@@ -8,7 +8,7 @@ import { useId } from "@gooddata/sdk-ui-kit";
8
8
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
9
9
  import { useDashboardScheduledEmails } from "../../../../model/react/useDasboardScheduledEmails/useDashboardScheduledEmails.js";
10
10
  import { useDashboardAlerts } from "../../../../model/react/useDashboardAlerting/useDashboardAlerts.js";
11
- import { selectCatalogAttributes } from "../../../../model/store/catalog/catalogSelectors.js";
11
+ import { selectCatalogAttributesWithComputed } from "../../../../model/store/catalog/catalogSelectors.js";
12
12
  import { selectSettings } from "../../../../model/store/config/configSelectors.js";
13
13
  import { selectRenderMode } from "../../../../model/store/renderMode/renderModeSelectors.js";
14
14
  import { selectPreloadedAttributesWithReferences } from "../../../../model/store/tabs/filterContext/filterContextSelectors.js";
@@ -39,7 +39,7 @@ export function DefaultDashboardInsightWidget(props) {
39
39
  function DefaultDashboardInsightWidgetCore({ widget, insight, screen, onError, onExportReady, onLoadingChanged, dashboardItemClasses, exportData, }) {
40
40
  const intl = useIntl();
41
41
  const settings = useDashboardSelector(selectSettings);
42
- const catalogAttributes = useDashboardSelector(selectCatalogAttributes);
42
+ const catalogAttributes = useDashboardSelector(selectCatalogAttributesWithComputed);
43
43
  const preloadedAttributesWithReferences = useDashboardSelector(selectPreloadedAttributesWithReferences);
44
44
  const renderMode = useDashboardSelector(selectRenderMode);
45
45
  const isExportMode = renderMode === "export";
@@ -1 +1 @@
1
- {"version":3,"file":"VisualizationSwitcherNavigationHeader.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAU7F,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAG3E,UAAU,2CAA2C;IACjD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mBAAmB,EAAE,cAAc,CAAC;IACpC,MAAM,EAAE,4BAA4B,CAAC;IACrC,2BAA2B,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,qCAAqC,CAAC,EAClD,MAAM,EACN,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,OAAO,GACV,EAAE,2CAA2C,2CAmD7C"}
1
+ {"version":3,"file":"VisualizationSwitcherNavigationHeader.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAa7F,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAG3E,UAAU,2CAA2C;IACjD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mBAAmB,EAAE,cAAc,CAAC;IACpC,MAAM,EAAE,4BAA4B,CAAC;IACrC,2BAA2B,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,qCAAqC,CAAC,EAClD,MAAM,EACN,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,OAAO,GACV,EAAE,2CAA2C,2CAiE7C"}
@@ -1,9 +1,12 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2020-2026 GoodData Corporation
3
3
  import { forwardRef, useCallback, useMemo } from "react";
4
4
  import cx from "classnames";
5
- import { Dropdown, UiListbox, } from "@gooddata/sdk-ui-kit";
5
+ import { useIntl } from "react-intl";
6
+ import { Dropdown, UiIcon, UiListbox, } from "@gooddata/sdk-ui-kit";
7
+ import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
6
8
  import { useDashboardUserInteraction } from "../../../../model/react/useDashboardUserInteraction.js";
9
+ import { selectRestrictedInsightsMap } from "../../../../model/store/unavailableObjects/unavailableObjectsSelectors.js";
7
10
  import { DashboardItemHeadline } from "../../../presentationComponents/DashboardItems/DashboardItemHeadline.js";
8
11
  const alignPoints = [
9
12
  {
@@ -17,23 +20,33 @@ const alignPoints = [
17
20
  ];
18
21
  export function VisualizationSwitcherNavigationHeader({ widget, clientWidth, clientHeight, activeVisualization, onActiveVisualizationChange, exportData, titleId, }) {
19
22
  const userInteraction = useDashboardUserInteraction();
23
+ const intl = useIntl();
24
+ const restrictedInsights = useDashboardSelector(selectRestrictedInsightsMap);
25
+ const restrictedEntryTitle = intl.formatMessage({ id: "visualizationSwitcher.restrictedEntry" });
20
26
  const items = useMemo(() => {
21
- return widget.visualizations.map((visualization) => ({
22
- type: "interactive",
23
- id: visualization.identifier,
24
- stringTitle: visualization.title,
25
- data: visualization,
26
- }));
27
- }, [widget.visualizations]);
27
+ return widget.visualizations.map((visualization) => {
28
+ // a stored entry title names the visualization, so a restricted entry must never show it
29
+ const isRestricted = restrictedInsights.has(visualization.insight);
30
+ return {
31
+ type: "interactive",
32
+ id: visualization.identifier,
33
+ stringTitle: isRestricted ? restrictedEntryTitle : visualization.title,
34
+ icon: isRestricted ? "lock" : undefined,
35
+ data: visualization,
36
+ };
37
+ });
38
+ }, [widget.visualizations, restrictedInsights, restrictedEntryTitle]);
28
39
  const handleSelectVisualization = useCallback((item) => {
29
40
  onActiveVisualizationChange(item.id);
30
41
  userInteraction.visualizationSwitcherInteraction("visualizationSwitcherSwitched");
31
42
  }, [onActiveVisualizationChange, userInteraction]);
32
- return (_jsx(Dropdown, { alignPoints: alignPoints, accessibilityConfig: { popupRole: "listbox" }, autofocusOnOpen: true, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiListbox, { items: items, selectedItemId: activeVisualization.identifier, onSelect: handleSelectVisualization, onClose: closeDropdown, ariaAttributes: ariaAttributes, maxWidth: clientWidth ?? 200, dataTestId: "s-visualization-switcher-widget-list", itemDataTestId: "s-visualization-switcher-widget-list-item" })), renderButton: ({ toggleDropdown, isOpen, ariaAttributes, buttonRef }) => (_jsx(VisualizationSwitcherNavigationHeaderButton, { title: activeVisualization.title, isOpen: isOpen, toggleDropdown: toggleDropdown, clientHeight: clientHeight, exportData: exportData, ariaAttributes: ariaAttributes, titleId: titleId, ref: buttonRef })) }));
43
+ return (_jsx(Dropdown, { alignPoints: alignPoints, accessibilityConfig: { popupRole: "listbox" }, autofocusOnOpen: true, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiListbox, { items: items, selectedItemId: activeVisualization.identifier, onSelect: handleSelectVisualization, onClose: closeDropdown, ariaAttributes: ariaAttributes, maxWidth: clientWidth ?? 200, dataTestId: "s-visualization-switcher-widget-list", itemDataTestId: "s-visualization-switcher-widget-list-item" })), renderButton: ({ toggleDropdown, isOpen, ariaAttributes, buttonRef }) => (_jsx(VisualizationSwitcherNavigationHeaderButton, { isRestricted: restrictedInsights.has(activeVisualization.insight), title: restrictedInsights.has(activeVisualization.insight)
44
+ ? restrictedEntryTitle
45
+ : activeVisualization.title, isOpen: isOpen, toggleDropdown: toggleDropdown, clientHeight: clientHeight, exportData: exportData, ariaAttributes: ariaAttributes, titleId: titleId, ref: buttonRef })) }));
33
46
  }
34
- const VisualizationSwitcherNavigationHeaderButton = forwardRef(function VisualizationSwitcherNavigationHeaderButton({ isOpen, toggleDropdown, title, clientHeight, ariaAttributes, exportData, titleId }, ref) {
47
+ const VisualizationSwitcherNavigationHeaderButton = forwardRef(function VisualizationSwitcherNavigationHeaderButton({ isOpen, toggleDropdown, title, isRestricted, clientHeight, ariaAttributes, exportData, titleId }, ref) {
35
48
  const classNames = cx("gd-visualization-switcher-widget-header s-visualization-switcher-widget-header", {
36
49
  "is-open": isOpen,
37
50
  });
38
- return (_jsx("div", { ref: ref, className: classNames, onClick: toggleDropdown, tabIndex: 0, ...exportData, ...ariaAttributes, children: _jsx(DashboardItemHeadline, { clientHeight: clientHeight, title: title, titleId: titleId }) }));
51
+ return (_jsx("div", { ref: ref, className: classNames, onClick: toggleDropdown, tabIndex: 0, ...exportData, ...ariaAttributes, children: _jsxs("div", { className: "gd-visualization-switcher-widget-header-title", children: [isRestricted ? _jsx(UiIcon, { type: "lock", size: 14, color: "complementary-7" }) : null, _jsx(DashboardItemHeadline, { clientHeight: clientHeight, title: title, titleId: titleId })] }) }));
39
52
  });
@@ -87,6 +87,7 @@ import { IBackendCapabilities } from '@gooddata/sdk-backend-spi';
87
87
  import { IBaseWidget } from '@gooddata/sdk-model';
88
88
  import { ICatalogAttribute } from '@gooddata/sdk-model';
89
89
  import { ICatalogAttributeHierarchy } from '@gooddata/sdk-model';
90
+ import { ICatalogComputedAttribute } from '@gooddata/sdk-model';
90
91
  import { ICatalogDateAttribute } from '@gooddata/sdk-model';
91
92
  import { ICatalogDateAttributeHierarchy } from '@gooddata/sdk-model';
92
93
  import { ICatalogDateDataset } from '@gooddata/sdk-model';
@@ -559,6 +560,8 @@ export declare type AlertAttribute = {
559
560
  * Resolves the dialog component from DashboardComponentsContext and mounts it under the
560
561
  * alerting dialog's state contexts, inside the resolved context decorator — so a decorated
561
562
  * dialog context is what both the state seeding and the dialog (default or replacement) read.
563
+ * A contract check between the decorator and the state provider warns once per dialog open
564
+ * when the decorated value forces `isLoading` false during loading or drops connector keys.
562
565
  *
563
566
  * @internal
564
567
  */
@@ -1334,6 +1337,13 @@ export declare type CatalogState = {
1334
1337
  facts?: ICatalogFact[];
1335
1338
  /** @beta */
1336
1339
  attributeHierarchies?: ICatalogAttributeHierarchy[];
1340
+ /**
1341
+ * Computed attributes of the workspace; loaded only when the `enableComputedAttributes`
1342
+ * setting is on, empty otherwise.
1343
+ *
1344
+ * @beta
1345
+ */
1346
+ computedAttributes?: ICatalogComputedAttribute[];
1337
1347
  /** @beta */
1338
1348
  dateHierarchyTemplates?: IDateHierarchyTemplate[];
1339
1349
  /** @alpha */
@@ -2598,6 +2608,15 @@ export declare type CustomInsightBodyComponent = ComponentType<IInsightBodyProps
2598
2608
  */
2599
2609
  export declare type CustomMenuButtonComponent = ComponentType<IMenuButtonProps>;
2600
2610
 
2611
+ /**
2612
+ * Content shown inside a restricted placeholder. The dashboard owns the surrounding tile, and for a
2613
+ * visualization switcher also its entry list, so this component supplies only the inner content and
2614
+ * is therefore usable in both places.
2615
+ *
2616
+ * @alpha
2617
+ */
2618
+ export declare type CustomRestrictedPlaceholderComponent = ComponentType<IRestrictedPlaceholderContentProps>;
2619
+
2601
2620
  /**
2602
2621
  * @alpha
2603
2622
  */
@@ -3874,12 +3893,12 @@ export declare abstract class DashboardPluginV1 implements IDashboardPluginContr
3874
3893
  /**
3875
3894
  * @alpha
3876
3895
  */
3877
- export declare type DashboardQueries = IQueryInsightDateDatasets | IQueryMeasureDateDatasets | IQueryInsightAttributesMeta | IQueryWidgetFilters | IQueryWidgetBrokenAlerts | IQueryWidgetAlertCount | IQueryConnectingAttributes | IQueryAttributeByDisplayForm | IQueryAttributeDataSet | IQueryAttributeElements | IQueryConnectedAttributes | IQueryMetricsAndFacts | IQueryAvailableDatasetsForItems;
3896
+ export declare type DashboardQueries = IQueryInsightDateDatasets | IQueryMeasureDateDatasets | IQueryInsightAttributesMeta | IQueryWidgetFilters | IQueryWidgetBrokenAlerts | IQueryWidgetAlertCount | IQueryConnectingAttributes | IQueryAttributeByDisplayForm | IQueryAttributeDataSet | IQueryAttributeElements | IQueryComputedAttributeExpression | IQueryConnectedAttributes | IQueryMetricsAndFacts | IQueryAvailableDatasetsForItems;
3878
3897
 
3879
3898
  /**
3880
3899
  * @beta
3881
3900
  */
3882
- export declare type DashboardQueryType = "GDC.DASH/QUERY.INSIGHT.DATE.DATASETS" | "GDC.DASH/QUERY.INSIGHT.ATTRIBUTE.META" | "GDC.DASH/QUERY.MEASURE.DATE.DATASETS" | "GDC.DASH/QUERY.WIDGET.FILTERS" | "GDC.DASH/QUERY.WIDGET.BROKEN_ALERTS" | "GDC.DASH/QUERY.WIDGET.ALERT_COUNT" | "GDC.DASH/QUERY.CONNECTING.ATTRIBUTES" | "GDC.DASH/QUERY.DISPLAY.FORM.ATTRIBUTE" | "GDC.DASH/QUERY.DATA.SET.ATTRIBUTE" | "GDC.DASH/QUERY.ELEMENTS.ATTRIBUTE" | "GDC.DASH/QUERY.CONNECTED.ATTRIBUTES" | "GDC.DASH/QUERY.METRICS_AND_FACTS" | "GDC.DASH/QUERY.AVAILABLE.DATA.SETS.FOR.ITEMS";
3901
+ export declare type DashboardQueryType = "GDC.DASH/QUERY.INSIGHT.DATE.DATASETS" | "GDC.DASH/QUERY.INSIGHT.ATTRIBUTE.META" | "GDC.DASH/QUERY.MEASURE.DATE.DATASETS" | "GDC.DASH/QUERY.WIDGET.FILTERS" | "GDC.DASH/QUERY.WIDGET.BROKEN_ALERTS" | "GDC.DASH/QUERY.WIDGET.ALERT_COUNT" | "GDC.DASH/QUERY.CONNECTING.ATTRIBUTES" | "GDC.DASH/QUERY.DISPLAY.FORM.ATTRIBUTE" | "GDC.DASH/QUERY.DATA.SET.ATTRIBUTE" | "GDC.DASH/QUERY.ELEMENTS.ATTRIBUTE" | "GDC.DASH/QUERY.CONNECTED.ATTRIBUTES" | "GDC.DASH/QUERY.COMPUTED.ATTRIBUTE.EXPRESSION" | "GDC.DASH/QUERY.METRICS_AND_FACTS" | "GDC.DASH/QUERY.AVAILABLE.DATA.SETS.FOR.ITEMS";
3883
3902
 
3884
3903
  /**
3885
3904
  * @alpha
@@ -10174,6 +10193,19 @@ export declare interface IDashboardCustomComponentProps {
10174
10193
  * @public
10175
10194
  */
10176
10195
  RichTextComponentProvider?: OptionalRichTextComponentProvider;
10196
+ /**
10197
+ * Specify function to obtain a custom component standing in for an insight widget the current
10198
+ * user is not allowed to see.
10199
+ *
10200
+ * @remarks
10201
+ * - If not provided, the default access placeholder is used.
10202
+ * - If the factory function returns undefined, the default is used for that widget. This is
10203
+ * useful to customize the placeholder for particular widgets only.
10204
+ * - The insight is deliberately not passed to the factory: it is the object being withheld.
10205
+ *
10206
+ * @alpha
10207
+ */
10208
+ RestrictedPlaceholderComponentProvider?: OptionalRestrictedPlaceholderComponentProvider;
10177
10209
  /**
10178
10210
  * Specify function to obtain custom component to use for rendering a visualization switcher.
10179
10211
  *
@@ -11852,6 +11884,19 @@ export declare interface IDashboardInsightCustomizer {
11852
11884
  * @returns self, for call chaining sakes
11853
11885
  */
11854
11886
  withCustomProvider(provider: OptionalInsightComponentProvider): IDashboardInsightCustomizer;
11887
+ /**
11888
+ * Register a provider for the component standing in for an insight widget the current user is
11889
+ * not allowed to see.
11890
+ *
11891
+ * @remarks
11892
+ * The insight is deliberately not passed to the provider — it is the object being withheld.
11893
+ * Returning undefined keeps the default placeholder for that widget.
11894
+ *
11895
+ * @param provider - provider of the replacement component
11896
+ * @returns self, for call chaining
11897
+ * @alpha
11898
+ */
11899
+ withRestrictedPlaceholderProvider(provider: OptionalRestrictedPlaceholderComponentProvider): IDashboardInsightCustomizer;
11855
11900
  /**
11856
11901
  * Register a provider for React components to render insight body inside of the {@link DefaultDashboardInsight}.
11857
11902
  *
@@ -18097,6 +18142,19 @@ export declare interface IQueryAvailableDatasetsForItems extends IDashboardQuery
18097
18142
  };
18098
18143
  }
18099
18144
 
18145
+ /**
18146
+ * @internal
18147
+ */
18148
+ export declare interface IQueryComputedAttributeExpression extends IDashboardQuery {
18149
+ type: "GDC.DASH/QUERY.COMPUTED.ATTRIBUTE.EXPRESSION";
18150
+ payload: {
18151
+ /**
18152
+ * Reference of the computed attribute.
18153
+ */
18154
+ readonly ref: ObjRef;
18155
+ };
18156
+ }
18157
+
18100
18158
  /**
18101
18159
  * @alpha
18102
18160
  */
@@ -18104,9 +18162,27 @@ export declare interface IQueryConnectedAttributes extends IDashboardQuery {
18104
18162
  type: "GDC.DASH/QUERY.CONNECTED.ATTRIBUTES";
18105
18163
  payload: {
18106
18164
  readonly ref: ObjRef;
18165
+ /**
18166
+ * Also count computed attributes among the connected attributes. The query creator
18167
+ * defaults this to false; pass the enableComputedAttributes setting of the dashboard
18168
+ * to opt in.
18169
+ */
18170
+ readonly includeComputedAttributes?: boolean;
18107
18171
  };
18108
18172
  }
18109
18173
 
18174
+ /**
18175
+ * Options for {@link queryConnectedAttributes}.
18176
+ *
18177
+ * @alpha
18178
+ */
18179
+ export declare interface IQueryConnectedAttributesOptions {
18180
+ /**
18181
+ * Also count computed attributes among the connected attributes. Defaults to false.
18182
+ */
18183
+ includeComputedAttributes?: boolean;
18184
+ }
18185
+
18110
18186
  /**
18111
18187
  * @alpha
18112
18188
  */
@@ -18948,6 +19024,34 @@ export declare interface IResolvedFilterValues {
18948
19024
  };
18949
19025
  }
18950
19026
 
19027
+ /**
19028
+ * Props of the replaceable content of a restricted placeholder. The dashboard owns the tile and,
19029
+ * for a visualization switcher, the entry list; a consumer supplies only what goes inside.
19030
+ *
19031
+ * @alpha
19032
+ */
19033
+ export declare interface IRestrictedPlaceholderContentProps {
19034
+ /** Width of the area the content is given, in pixels; absent before it is measured. */
19035
+ width?: number;
19036
+ /** Height of the area the content is given, in pixels; absent before it is measured. */
19037
+ height?: number;
19038
+ }
19039
+
19040
+ /**
19041
+ * Props of the component standing in for a widget the current user is not allowed to see.
19042
+ *
19043
+ * @alpha
19044
+ */
19045
+ export declare interface IRestrictedPlaceholderProps {
19046
+ screen: ScreenSize;
19047
+ dashboardItemClasses: string;
19048
+ /**
19049
+ * Present only while the dashboard is being exported; carries the attributes the export
19050
+ * pipeline reads off the rendered item.
19051
+ */
19052
+ exportData?: WidgetExportData;
19053
+ }
19054
+
18951
19055
  /**
18952
19056
  * Set of functions you can use to customize some aspects of the RichText.
18953
19057
  *
@@ -20437,6 +20541,15 @@ export declare interface IScheduleTimezoneSelection {
20437
20541
  shouldSave: boolean;
20438
20542
  }
20439
20543
 
20544
+ /**
20545
+ * Whether the error signals that computed attributes are not available (disabled, missing or not
20546
+ * visible) as opposed to a genuine failure (network, server, authentication). Loads degrading to
20547
+ * "no computed attributes" must do so only for the former and rethrow the latter.
20548
+ *
20549
+ * @internal
20550
+ */
20551
+ export declare function isComputedAttributesUnavailableError(reason: unknown): boolean;
20552
+
20440
20553
  /**
20441
20554
  * Tests whether the provided object is an instance of {@link ICreateAttributeHierarchyRequested}.
20442
20555
  *
@@ -24858,6 +24971,11 @@ export declare type OptionalMeasureValueFilterComponentProvider = OptionalProvid
24858
24971
  */
24859
24972
  export declare type OptionalProvider<T> = T extends (...args: infer TArgs) => infer TRes ? (...args: TArgs) => TRes | undefined : never;
24860
24973
 
24974
+ /**
24975
+ * @alpha
24976
+ */
24977
+ export declare type OptionalRestrictedPlaceholderComponentProvider = OptionalProvider<RestrictedPlaceholderComponentProvider>;
24978
+
24861
24979
  /**
24862
24980
  * @public
24863
24981
  */
@@ -25096,19 +25214,33 @@ export declare type QueryCacheEntryResult<TResult> = {
25096
25214
  */
25097
25215
  export declare type QueryCacheReducer<TQuery extends IDashboardQuery, TResult, TPayload> = CaseReducer<EntityState<QueryCacheEntry<TQuery, TResult>, EntityId>, PayloadAction<TPayload>>;
25098
25216
 
25217
+ /**
25218
+ * Creates action through which you can query the MAQL expression of a computed attribute, tokenized
25219
+ * with the referenced objects resolved to their metadata (titles) instead of raw id references.
25220
+ *
25221
+ * @param ref - computed attribute reference
25222
+ * @param correlationId - specify correlation id to use for this command. this will be included in all
25223
+ * events that will be emitted during the command processing
25224
+ * @returns tokenized computed attribute expression
25225
+ *
25226
+ * @internal
25227
+ */
25228
+ export declare function queryComputedAttributeExpression(ref: ObjRef, correlationId?: string): IQueryComputedAttributeExpression;
25229
+
25099
25230
  /**
25100
25231
  * Creates action through which you can query connected attributes for the information about
25101
25232
  * possibility of parent-child attribute filter relationship as only connected attributes may
25102
25233
  * be dependent on each other.
25103
25234
  *
25104
25235
  * @param ref - reference of the attribute filter display form
25236
+ * @param options - query options
25105
25237
  * @param correlationId - specify correlation id to use for this command. this will be included in all
25106
25238
  * events that will be emitted during the command processing
25107
25239
  * @returns array of connected attributes for given reference
25108
25240
  *
25109
25241
  * @alpha
25110
25242
  */
25111
- export declare function queryConnectedAttributes(ref: ObjRef, correlationId?: string): IQueryConnectedAttributes;
25243
+ export declare function queryConnectedAttributes(ref: ObjRef, options?: IQueryConnectedAttributesOptions, correlationId?: string): IQueryConnectedAttributes;
25112
25244
 
25113
25245
  /**
25114
25246
  * Creates action through which you can query connecting attributes for the information about
@@ -26042,6 +26174,22 @@ export declare function resolveFilterValues(filters: ResolvableFilter[], backend
26042
26174
  */
26043
26175
  export declare const resolveMessages: (locale: string) => Promise<ITranslations>;
26044
26176
 
26177
+ /**
26178
+ * Provides the content shown in place of a widget the current user may not see. The insight itself
26179
+ * is deliberately not passed — it is the object being withheld.
26180
+ *
26181
+ * @alpha
26182
+ */
26183
+ export declare type RestrictedPlaceholderComponentProvider = (widget: IInsightWidget) => CustomRestrictedPlaceholderComponent;
26184
+
26185
+ /**
26186
+ * The built-in restricted placeholder content: a lock with the reason and the recovery step, scaled
26187
+ * to the room available.
26188
+ *
26189
+ * @alpha
26190
+ */
26191
+ export declare function RestrictedPlaceholderContent({ width, height }: IRestrictedPlaceholderContentProps): JSX.Element;
26192
+
26045
26193
  /**
26046
26194
  * A convenience function to create UndoLayoutChanges command that will revert the very last command and toss it out
26047
26195
  * of history.
@@ -26300,7 +26448,9 @@ export declare type SavingState = {
26300
26448
  * Resolves the dialog component from DashboardComponentsContext and mounts it under the
26301
26449
  * scheduled-export dialog's state contexts, inside the resolved context decorator — so a
26302
26450
  * decorated dialog context is what both the state seeding and the dialog (default or
26303
- * replacement) read.
26451
+ * replacement) read. A contract check between the decorator and the state provider warns once
26452
+ * per dialog open when the decorated value forces `isLoading` false during loading or drops
26453
+ * connector keys.
26304
26454
  *
26305
26455
  * @internal
26306
26456
  */
@@ -27225,6 +27375,28 @@ export declare const selectCatalogAttributeHierarchies: DashboardSelector<ICatal
27225
27375
  */
27226
27376
  export declare const selectCatalogAttributes: DashboardSelector<ICatalogAttribute[]>;
27227
27377
 
27378
+ /**
27379
+ * Returns catalog attributes together with computed attributes adapted to the catalog attribute
27380
+ * shape. The adapted items keep their honest `computedAttribute`-typed refs; use
27381
+ * {@link @gooddata/sdk-model#isComputedAttributeRef} on the attribute or display form ref to tell
27382
+ * them apart. This is the list to offer wherever an attribute can be picked (e.g. for filtering).
27383
+ *
27384
+ * The merged list is sorted alphabetically by title: the catalog holds attributes and computed
27385
+ * attributes as separate lists, each sorted on its own, and a plain concatenation would strand
27386
+ * every computed attribute at the tail of a picker instead of filing it in among the attributes.
27387
+ *
27388
+ * @beta
27389
+ */
27390
+ export declare const selectCatalogAttributesWithComputed: DashboardSelector<ICatalogAttribute[]>;
27391
+
27392
+ /**
27393
+ * Returns the computed attributes loaded into the dashboard catalog. Computed attributes are
27394
+ * loaded only when the `enableComputedAttributes` setting is on; otherwise this is empty.
27395
+ *
27396
+ * @beta
27397
+ */
27398
+ export declare const selectCatalogComputedAttributes: DashboardSelector<ICatalogComputedAttribute[]>;
27399
+
27228
27400
  /**
27229
27401
  * @public
27230
27402
  */
@@ -28035,6 +28207,18 @@ export declare const selectEnableAnomalyDetectionAlert: DashboardSelector<boolea
28035
28207
  */
28036
28208
  export declare const selectEnableAutomationEvaluationMode: DashboardSelector<boolean>;
28037
28209
 
28210
+ /**
28211
+ * Returns whether computed attributes are enabled. When on, computed attributes are loaded into
28212
+ * the dashboard catalog and offered wherever an attribute can be picked (e.g. attribute filters).
28213
+ *
28214
+ * Unlike most config selectors this one tolerates an uninitialized config and answers false: it
28215
+ * is read by the KDA dialog, which can render (e.g. from the chatbot) while its dashboard store
28216
+ * is still initializing.
28217
+ *
28218
+ * @alpha
28219
+ */
28220
+ export declare const selectEnableComputedAttributes: DashboardSelector<boolean>;
28221
+
28038
28222
  /**
28039
28223
  * Returns whether the dashboard density setting is enabled.
28040
28224
  *
@@ -29825,6 +30009,15 @@ export declare const selectRawExportOverridesForInsightByRef: (ref: ObjRef | und
29825
30009
  */
29826
30010
  export declare const selectRenderMode: DashboardSelector<RenderMode>;
29827
30011
 
30012
+ /**
30013
+ * Selects the insights the current user is not allowed to see, in a mapping of obj ref to the
30014
+ * unavailability entry. Insights that are merely deleted are not included — those keep rendering the
30015
+ * missing-visualization tile instead of the restricted placeholder.
30016
+ *
30017
+ * @alpha
30018
+ */
30019
+ export declare const selectRestrictedInsightsMap: DashboardSelector<ObjRefMap<IUnavailableDashboardReference>>;
30020
+
29828
30021
  /**
29829
30022
  * Selects whether the save as new button is visible.
29830
30023
  *
@@ -30452,6 +30645,7 @@ export declare type SetCatalogItemsPayload = {
30452
30645
  facts?: ICatalogFact[];
30453
30646
  dateDatasets?: ICatalogDateDataset[];
30454
30647
  attributeHierarchies?: ICatalogAttributeHierarchy[];
30648
+ computedAttributes?: ICatalogComputedAttribute[];
30455
30649
  dateHierarchyTemplates?: IDateHierarchyTemplate[];
30456
30650
  };
30457
30651
 
@@ -32406,6 +32600,14 @@ export declare function useInsightWidgetDataView({ insightWidget, onCancel, onEr
32406
32600
  */
32407
32601
  export declare type UseInsightWidgetInsightDataViewCallbacks = UseCancelablePromiseCallbacks<DataViewFacade, GoodDataSdkError>;
32408
32602
 
32603
+ /**
32604
+ * Tells whether the widget renders an insight the current user is not allowed to see. A widget whose
32605
+ * insight is merely deleted is not restricted — that one keeps rendering the missing-visualization tile.
32606
+ *
32607
+ * @alpha
32608
+ */
32609
+ export declare function useIsWidgetRestricted(widget: ExtendedDashboardWidget): boolean;
32610
+
32409
32611
  /**
32410
32612
  * @alpha
32411
32613
  */