@gooddata/sdk-ui-dashboard 11.51.0-alpha.1 → 11.51.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/NOTICE +4 -4
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/assets/timezone.svg +1 -0
  5. package/esm/index.d.ts +11 -2
  6. package/esm/index.d.ts.map +1 -1
  7. package/esm/index.js +10 -2
  8. package/esm/model/react/useWidgetExecConfig.d.ts +9 -0
  9. package/esm/model/react/useWidgetExecConfig.d.ts.map +1 -1
  10. package/esm/model/react/useWidgetExecConfig.js +21 -3
  11. package/esm/model/store/config/configSelectors.d.ts +6 -0
  12. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  13. package/esm/model/store/config/configSelectors.js +8 -0
  14. package/esm/model/store/meta/index.d.ts +1 -0
  15. package/esm/model/store/meta/index.d.ts.map +1 -1
  16. package/esm/model/store/meta/metaReducers.d.ts +5 -1
  17. package/esm/model/store/meta/metaReducers.d.ts.map +1 -1
  18. package/esm/model/store/meta/metaReducers.js +9 -0
  19. package/esm/model/store/meta/metaSelectors.d.ts +35 -1
  20. package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
  21. package/esm/model/store/meta/metaSelectors.js +51 -2
  22. package/esm/model/store/meta/metaState.d.ts +1 -1
  23. package/esm/model/store/meta/metaState.d.ts.map +1 -1
  24. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +1 -1
  25. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  26. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +9 -9
  27. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.d.ts +7 -2
  28. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.d.ts.map +1 -1
  29. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.js +1 -1
  30. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +6 -8
  31. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
  32. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +5 -2
  33. package/esm/presentation/automations/alerting/types.d.ts +30 -5
  34. package/esm/presentation/automations/alerting/types.d.ts.map +1 -1
  35. package/esm/presentation/automations/connectors/AlertingConnector.d.ts.map +1 -1
  36. package/esm/presentation/automations/connectors/AlertingConnector.js +22 -25
  37. package/esm/presentation/automations/connectors/AlertingConnector.test.js +71 -5
  38. package/esm/presentation/automations/connectors/ScheduledEmailConnector.d.ts.map +1 -1
  39. package/esm/presentation/automations/connectors/ScheduledEmailConnector.js +30 -32
  40. package/esm/presentation/automations/connectors/ScheduledEmailConnector.test.js +90 -9
  41. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.d.ts +7 -1
  42. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.d.ts.map +1 -1
  43. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.js +12 -2
  44. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.test.js +28 -2
  45. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.d.ts +8 -1
  46. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.d.ts.map +1 -1
  47. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.js +12 -3
  48. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.test.js +38 -8
  49. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.d.ts +6 -1
  50. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.d.ts.map +1 -1
  51. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.js +6 -1
  52. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.test.js +7 -1
  53. package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts +29 -1
  54. package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts.map +1 -1
  55. package/esm/presentation/automations/contexts/AlertingDialogContext.js +12 -0
  56. package/esm/presentation/automations/contexts/AlertingManagementDialogContext.d.ts +14 -0
  57. package/esm/presentation/automations/contexts/AlertingManagementDialogContext.d.ts.map +1 -1
  58. package/esm/presentation/automations/contexts/AlertingManagementDialogContext.js +12 -0
  59. package/esm/presentation/automations/contexts/AutomationsContext.d.ts +13 -0
  60. package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
  61. package/esm/presentation/automations/contexts/AutomationsContext.js +9 -0
  62. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts +35 -1
  63. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts.map +1 -1
  64. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.js +14 -0
  65. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts +20 -1
  66. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts.map +1 -1
  67. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.js +12 -0
  68. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultLoadingScheduledEmailDialog.d.ts +7 -2
  69. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultLoadingScheduledEmailDialog.d.ts.map +1 -1
  70. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts +1 -1
  71. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  72. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +17 -25
  73. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts +6 -12
  74. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts.map +1 -1
  75. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.js +5 -1
  76. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.d.ts +12 -0
  77. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.d.ts.map +1 -0
  78. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.js +41 -0
  79. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.d.ts +1 -1
  80. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.d.ts.map +1 -1
  81. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.js +2 -2
  82. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.d.ts +1 -3
  83. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.d.ts.map +1 -1
  84. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.js +2 -2
  85. package/esm/presentation/automations/scheduledEmail/types.d.ts +35 -5
  86. package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
  87. package/esm/presentation/automations/scheduledEmail/utils/timezone.d.ts +4 -1
  88. package/esm/presentation/automations/scheduledEmail/utils/timezone.d.ts.map +1 -1
  89. package/esm/presentation/automations/scheduledEmail/utils/timezone.js +14 -138
  90. package/esm/presentation/dashboard/DashboardHeader/SettingsDialogProvider.d.ts.map +1 -1
  91. package/esm/presentation/dashboard/DashboardHeader/SettingsDialogProvider.js +1 -0
  92. package/esm/presentation/dashboard/components/DashboardLoading.js +1 -1
  93. package/esm/presentation/dashboardContexts/useSlideData.d.ts +5 -10
  94. package/esm/presentation/dashboardContexts/useSlideData.d.ts.map +1 -1
  95. package/esm/presentation/dashboardContexts/useSlideData.js +16 -10
  96. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
  97. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +52 -14
  98. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts +11 -0
  99. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -0
  100. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +36 -0
  101. package/esm/presentation/dashboardSettingsDialog/types.d.ts +2 -1
  102. package/esm/presentation/dashboardSettingsDialog/types.d.ts.map +1 -1
  103. package/esm/presentation/dashboardSettingsDialog/useDialogData.d.ts.map +1 -1
  104. package/esm/presentation/dashboardSettingsDialog/useDialogData.js +4 -1
  105. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts.map +1 -1
  106. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.js +30 -1
  107. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.d.ts.map +1 -1
  108. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.js +29 -8
  109. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSectionHeaderDescription.d.ts.map +1 -1
  110. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSectionHeaderDescription.js +3 -5
  111. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/EditableHeader/SectionHeaderEditable.d.ts.map +1 -1
  112. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/EditableHeader/SectionHeaderEditable.js +3 -5
  113. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.d.ts +1 -1
  114. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.d.ts.map +1 -1
  115. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.js +2 -5
  116. package/esm/presentation/insightList/InsightList.d.ts.map +1 -1
  117. package/esm/presentation/insightList/InsightList.js +4 -5
  118. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +11 -0
  119. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  120. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +11 -0
  121. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +11 -0
  122. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  123. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +11 -0
  124. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +11 -0
  125. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  126. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +11 -0
  127. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +48 -0
  128. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  129. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +48 -0
  130. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +11 -0
  131. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  132. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +11 -0
  133. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +11 -0
  134. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  135. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +11 -0
  136. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +11 -0
  137. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  138. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +11 -0
  139. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +11 -0
  140. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  141. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +11 -0
  142. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +11 -0
  143. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  144. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +11 -0
  145. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +11 -0
  146. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  147. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +11 -0
  148. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +11 -0
  149. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  150. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +11 -0
  151. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +11 -0
  152. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  153. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +11 -0
  154. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +11 -0
  155. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  156. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +11 -0
  157. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +11 -0
  158. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  159. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +11 -0
  160. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +11 -0
  161. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  162. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +11 -0
  163. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +11 -0
  164. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  165. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +11 -0
  166. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +11 -0
  167. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  168. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +11 -0
  169. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +11 -0
  170. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  171. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +11 -0
  172. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +11 -0
  173. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  174. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +11 -0
  175. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +11 -0
  176. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  177. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +11 -0
  178. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +11 -0
  179. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  180. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +11 -0
  181. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +11 -0
  182. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  183. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +13 -2
  184. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +11 -0
  185. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  186. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +11 -0
  187. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +11 -0
  188. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  189. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +11 -0
  190. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +11 -0
  191. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  192. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +11 -0
  193. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +11 -0
  194. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  195. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +12 -1
  196. package/esm/presentation/topBar/timezoneIndicator/DefaultTimezoneIndicator.d.ts +10 -0
  197. package/esm/presentation/topBar/timezoneIndicator/DefaultTimezoneIndicator.d.ts.map +1 -0
  198. package/esm/presentation/topBar/timezoneIndicator/DefaultTimezoneIndicator.js +19 -0
  199. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.d.ts +13 -0
  200. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.d.ts.map +1 -0
  201. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.js +27 -0
  202. package/esm/presentation/topBar/timezoneIndicator/resolveDashboardTimezoneInfo.d.ts +13 -0
  203. package/esm/presentation/topBar/timezoneIndicator/resolveDashboardTimezoneInfo.d.ts.map +1 -0
  204. package/esm/presentation/topBar/timezoneIndicator/resolveDashboardTimezoneInfo.js +20 -0
  205. package/esm/presentation/topBar/timezoneIndicator/types.d.ts +47 -0
  206. package/esm/presentation/topBar/timezoneIndicator/types.d.ts.map +1 -0
  207. package/esm/presentation/topBar/timezoneIndicator/types.js +2 -0
  208. package/esm/presentation/topBar/topBar/DefaultTopBar.d.ts.map +1 -1
  209. package/esm/presentation/topBar/topBar/DefaultTopBar.js +15 -4
  210. package/esm/presentation/topBar/topBar/types.d.ts +2 -0
  211. package/esm/presentation/topBar/topBar/types.d.ts.map +1 -1
  212. package/esm/presentation/widget/description/ExportModeInsightWidgetDescription.d.ts.map +1 -1
  213. package/esm/presentation/widget/description/ExportModeInsightWidgetDescription.js +3 -5
  214. package/esm/presentation/widget/description/InsightWidgetDescriptionTrigger.d.ts.map +1 -1
  215. package/esm/presentation/widget/description/InsightWidgetDescriptionTrigger.js +3 -6
  216. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.d.ts.map +1 -1
  217. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.js +5 -6
  218. package/esm/presentation/widget/insight/configuration/InsightDescriptionConfig/InsightDescription.d.ts.map +1 -1
  219. package/esm/presentation/widget/insight/configuration/InsightDescriptionConfig/InsightDescription.js +3 -6
  220. package/esm/presentation/widget/richText/EditModeDashboardRichText.d.ts.map +1 -1
  221. package/esm/presentation/widget/richText/EditModeDashboardRichText.js +3 -5
  222. package/esm/presentation/widget/richText/ViewModeDashboardRichText.d.ts.map +1 -1
  223. package/esm/presentation/widget/richText/ViewModeDashboardRichText.js +3 -5
  224. package/esm/sdk-ui-dashboard.d.ts +528 -12
  225. package/package.json +21 -21
  226. package/styles/css/main.css +28 -1
  227. package/styles/css/main.css.map +1 -1
  228. package/styles/css/timezoneIndicator.css +20 -0
  229. package/styles/css/timezoneIndicator.css.map +1 -0
  230. package/styles/css/topBar.css +9 -1
  231. package/styles/css/topBar.css.map +1 -1
  232. package/styles/scss/main.scss +1 -0
  233. package/styles/scss/timezoneIndicator.scss +23 -0
  234. package/styles/scss/topBar.scss +13 -2
@@ -6,30 +6,25 @@ export declare function useSlideData(renderMode: RenderMode | undefined): {
6
6
  slideWidth: number;
7
7
  slideHeight: number;
8
8
  } | undefined;
9
- export declare function useSlideSizeStyle(renderMode: RenderMode | undefined, type: LayoutElementType, parentLayoutPath?: ILayoutItemPath): {
9
+ export declare function useSlideSizeStyle(renderMode: RenderMode | undefined, type: LayoutElementType, parentLayoutPath?: ILayoutItemPath, hasHeaderRow?: boolean): {
10
10
  width?: undefined;
11
- gridTemplateRows?: undefined;
12
- overflow?: undefined;
13
11
  height?: undefined;
14
12
  } | {
15
13
  width: string;
16
- gridTemplateRows?: undefined;
17
- overflow?: undefined;
18
14
  height?: undefined;
19
15
  } | {
20
16
  width?: undefined;
21
- gridTemplateRows: string;
17
+ gridTemplateRows?: string | undefined;
18
+ gridAutoRows: string;
22
19
  height: string;
23
- overflow?: undefined;
24
20
  } | {
25
21
  width?: undefined;
26
- gridTemplateRows?: undefined;
22
+ gridTemplateRows?: string | undefined;
23
+ gridAutoRows: string;
27
24
  height: string;
28
25
  overflow: string;
29
26
  } | {
30
27
  width?: undefined;
31
- gridTemplateRows?: undefined;
32
- overflow?: undefined;
33
28
  height: string;
34
29
  };
35
30
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"useSlideData.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardContexts/useSlideData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIvE,KAAK,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS;;;cAW9D;AAED,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,IAAI,EAAE,iBAAiB,EACvB,gBAAgB,CAAC,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;EA6BrC"}
1
+ {"version":3,"file":"useSlideData.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardContexts/useSlideData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIvE,KAAK,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS;;;cAW9D;AAED,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,IAAI,EAAE,iBAAiB,EACvB,gBAAgB,CAAC,EAAE,eAAe,EAClC,YAAY,UAAQ;;;;;;;;;;;;;;;;;;;;EAmCvB"}
@@ -12,7 +12,7 @@ export function useSlideData(renderMode) {
12
12
  slideHeight: slideConfig?.height ?? DEFAULT_SLIDE_HEIGHT,
13
13
  };
14
14
  }
15
- export function useSlideSizeStyle(renderMode, type, parentLayoutPath) {
15
+ export function useSlideSizeStyle(renderMode, type, parentLayoutPath, hasHeaderRow = false) {
16
16
  const data = useSlideData(renderMode);
17
17
  if (!data) {
18
18
  return {};
@@ -23,15 +23,21 @@ export function useSlideSizeStyle(renderMode, type, parentLayoutPath) {
23
23
  };
24
24
  }
25
25
  if (type === "section") {
26
- return parentLayoutPath && parentLayoutPath.length > 0
27
- ? {
28
- gridTemplateRows: "max-content",
29
- height: "100%",
30
- }
31
- : {
32
- height: `${data.slideHeight}px`,
33
- overflow: "hidden",
34
- };
26
+ return {
27
+ // Widgets in export mode have no min-height, their height comes solely from the
28
+ // `height: 100%` chain below the grid item, so the row tracks must have a definite size.
29
+ // Tracks sized from content (`auto`, `max-content`) collapse to the widget title only,
30
+ // because visualizations are absolutely positioned and contribute no intrinsic height.
31
+ //
32
+ // The section header, when rendered, is the first grid item and must take just the space
33
+ // it needs; the remaining rows split what is left. `minmax(0, 1fr)` (rather than plain
34
+ // `1fr`) keeps tall content from pushing the rows over the slide height.
35
+ ...(hasHeaderRow ? { gridTemplateRows: "max-content" } : {}),
36
+ gridAutoRows: "minmax(0, 1fr)",
37
+ ...(parentLayoutPath && parentLayoutPath.length > 0
38
+ ? { height: "100%" }
39
+ : { height: `${data.slideHeight}px`, overflow: "hidden" }),
40
+ };
35
41
  }
36
42
  return {
37
43
  height: "100%",
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDashboardSettingsDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,OAAO,CAAC;AAqC5F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAGhE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,SAAS,EACT,OAAO,EACP,QAAQ,EACX,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CAiNrD"}
1
+ {"version":3,"file":"DefaultDashboardSettingsDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,OAAO,CAAC;AA2C5F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAGhE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,SAAS,EACT,OAAO,EACP,QAAQ,EACX,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CA+QrD"}
@@ -2,13 +2,14 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  // (C) 2020-2026 GoodData Corporation
3
3
  import { useCallback, useEffect, useState } from "react";
4
4
  import { FormattedMessage, useIntl } from "react-intl";
5
- import { objRefToString } from "@gooddata/sdk-model";
5
+ import { normalizeDashboardTimezoneConfig, objRefToString, } from "@gooddata/sdk-model";
6
6
  import { Bubble, BubbleHoverTrigger, ConfirmDialog, DialogListHeader, Dropdown, RecurrenceForm, SingleSelectListItem, UiButton, UiListbox, simpleRecurrenceTypeMappingFn, } from "@gooddata/sdk-ui-kit";
7
7
  import { queryDateDatasetsForInsight, } from "../../model/queries/insights.js";
8
8
  import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
9
9
  import { useDashboardQueryProcessing } from "../../model/react/useDashboardQueryProcessing.js";
10
10
  import { selectDateFormat, selectEnableDashboardPersistentFiltersAcrossTabs, selectEnableDashboardSectionHeadersDateDataSet, selectIsWhiteLabeled, selectLocale, selectSettings, selectWeekStart, } from "../../model/store/config/configSelectors.js";
11
11
  import { selectCrossFilteringEnabledAndSupported } from "../../model/store/topBar/topBarSelectors.js";
12
+ import { TimezoneOption } from "./TimezoneOption.js";
12
13
  import { useDialogData } from "./useDialogData.js";
13
14
  /**
14
15
  * @alpha
@@ -46,45 +47,45 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
46
47
  id: "filters.configurationPanel.crossFiltering.toggle",
47
48
  }), tooltip: intl.formatMessage({
48
49
  id: "filters.configurationPanel.crossFiltering.toggle.tooltip",
49
- }), isChecked: !currentData.disableCrossFiltering, onChange: (newValue) => {
50
+ }), isChecked: !currentData.disableCrossFiltering, onChange: (isChecked) => {
50
51
  setCurrentData({
51
52
  ...currentData,
52
- disableCrossFiltering: newValue,
53
+ disableCrossFiltering: !isChecked,
53
54
  });
54
55
  } }), _jsx(ConfigurationOption, { label: intl.formatMessage({
55
56
  id: "filters.configurationPanel.userFilterReset.toggle",
56
57
  }), tooltip: intl.formatMessage({
57
58
  id: "filters.configurationPanel.userFilterReset.toggle.tooltip",
58
- }), isChecked: !currentData.disableUserFilterReset, onChange: (newValue) => {
59
+ }), isChecked: !currentData.disableUserFilterReset, onChange: (isChecked) => {
59
60
  setCurrentData({
60
61
  ...currentData,
61
- disableUserFilterReset: newValue,
62
+ disableUserFilterReset: !isChecked,
62
63
  });
63
64
  } })
64
65
  ] })) : null, _jsx(ConfigurationOption, { label: intl.formatMessage({
65
66
  id: "filters.configurationPanel.filterViews.toggle",
66
67
  }), tooltip: intl.formatMessage({ id: "filters.configurationPanel.filterViews.toggle.tooltip" }, {
67
68
  p: (chunks) => _jsx("p", { children: chunks }),
68
- }), isChecked: !currentData.disableFilterViews, onChange: (newValue) => {
69
+ }), isChecked: !currentData.disableFilterViews, onChange: (isChecked) => {
69
70
  setCurrentData({
70
71
  ...currentData,
71
- disableFilterViews: newValue,
72
+ disableFilterViews: !isChecked,
72
73
  });
73
74
  } }), _jsx(ConfigurationOption, { label: intl.formatMessage({ id: "filters.configurationPanel.userFilterSave.toggle" }), tooltip: intl.formatMessage({
74
75
  id: "filters.configurationPanel.userFilterSave.toggle.tooltip",
75
- }), isChecked: !currentData.disableUserFilterSave, onChange: (newValue) => {
76
+ }), isChecked: !currentData.disableUserFilterSave, onChange: (isChecked) => {
76
77
  setCurrentData({
77
78
  ...currentData,
78
- disableUserFilterSave: newValue,
79
+ disableUserFilterSave: !isChecked,
79
80
  });
80
81
  } }), enableDashboardPersistentFiltersAcrossTabs ? (_jsx(ConfigurationOption, { label: intl.formatMessage({
81
82
  id: "filters.configurationPanel.persistentFiltersAcrossTabs.toggle",
82
83
  }), tooltip: intl.formatMessage({
83
84
  id: "filters.configurationPanel.persistentFiltersAcrossTabs.toggle.tooltip",
84
- }), isChecked: !currentData.disablePersistentFiltersAcrossTabs, onChange: (newValue) => {
85
+ }), isChecked: !currentData.disablePersistentFiltersAcrossTabs, onChange: (isChecked) => {
85
86
  setCurrentData({
86
87
  ...currentData,
87
- disablePersistentFiltersAcrossTabs: newValue,
88
+ disablePersistentFiltersAcrossTabs: !isChecked,
88
89
  });
89
90
  } })) : null, enableDashboardSectionHeadersDateDataSet ? (_jsx(DateDatasetDropdown, { label: intl.formatMessage({
90
91
  id: "settingsDashboardDialog.sectionHeaders.dateDataset",
@@ -107,14 +108,51 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
107
108
  }), showRepeatTypeDescription: true, showTimezoneInOccurrence: true, dateFormat: dateFormat, weekStart: weekStart, locale: locale, showInheritValue: true, isWhiteLabeled: isWhiteLabeled, customRecurrenceTypeMappingFn: simpleRecurrenceTypeMappingFn }), _jsx("div", { className: "gd-dashboard-settings-evaluation-note", children: currentData.evaluationFrequency === undefined ? (_jsx(FormattedMessage, { id: "settingsDashboardDialog.section.alert.inherit" })) : (_jsx(FormattedMessage, { id: "settingsDashboardDialog.section.alert.note", values: {
108
109
  strong: (chunks) => _jsx("strong", { children: chunks }),
109
110
  } })) })
110
- ] })
111
- ] }) }));
111
+ ] }), settings.enableDashboardTimezone ? (_jsxs("div", { className: "gd-dashboard-settings-dialog-section s-dashboard-settings-timezone", children: [
112
+ _jsx(DialogListHeader, { title: intl.formatMessage({ id: "settingsDashboardDialog.section.timezone" }), className: "gd-dashboard-settings-filters" }), _jsx(TimezoneOption, { label: intl.formatMessage({
113
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone",
114
+ }), tooltip: intl.formatMessage({
115
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip",
116
+ }), timezoneConfig: currentData.timezoneConfig, onChange: (timezoneId) => {
117
+ setCurrentData({
118
+ ...currentData,
119
+ timezoneConfig: normalizeDashboardTimezoneConfig({
120
+ ...currentData.timezoneConfig,
121
+ timezoneId,
122
+ }),
123
+ });
124
+ } }), _jsx(ConfigurationOption, { label: intl.formatMessage({
125
+ id: "settingsDashboardDialog.section.timezone.allowUserOverride.toggle",
126
+ }), tooltip: intl.formatMessage({
127
+ id: "settingsDashboardDialog.section.timezone.allowUserOverride.toggle.tooltip",
128
+ }), isChecked: currentData.timezoneConfig?.allowUserOverrideInViewMode ?? false, onChange: (isChecked) => {
129
+ setCurrentData({
130
+ ...currentData,
131
+ timezoneConfig: normalizeDashboardTimezoneConfig({
132
+ ...currentData.timezoneConfig,
133
+ allowUserOverrideInViewMode: isChecked,
134
+ }),
135
+ });
136
+ } }), _jsx(ConfigurationOption, { label: intl.formatMessage({
137
+ id: "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle",
138
+ }), tooltip: intl.formatMessage({
139
+ id: "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle.tooltip",
140
+ }), isChecked: currentData.timezoneConfig?.showTimezoneInfo ?? false, onChange: (isChecked) => {
141
+ setCurrentData({
142
+ ...currentData,
143
+ timezoneConfig: normalizeDashboardTimezoneConfig({
144
+ ...currentData.timezoneConfig,
145
+ showTimezoneInfo: isChecked,
146
+ }),
147
+ });
148
+ } })
149
+ ] })) : null] }) }));
112
150
  }
113
151
  const BUBBLE_ALIGN_POINTS = [{ align: "bc tl" }];
114
152
  function ConfigurationOption({ label, tooltip, isChecked, onChange }) {
115
153
  return (_jsx("div", { className: "configuration-category-item", children: _jsxs("label", { className: "input-checkbox-toggle", children: [
116
154
  _jsx("input", { type: "checkbox", checked: isChecked, onChange: (e) => {
117
- onChange(!e.currentTarget.checked);
155
+ onChange(e.currentTarget.checked);
118
156
  } }), _jsxs("span", { className: "input-label-text", children: [label, _jsxs(BubbleHoverTrigger, { showDelay: 0, hideDelay: 0, eventsOnBubble: true, className: "configuration-category-item-tooltip-icon", children: [
119
157
  _jsx("span", { className: "gd-icon-circle-question gd-filter-configuration__help-icon" }), _jsx(Bubble, { alignPoints: BUBBLE_ALIGN_POINTS, children: _jsx("div", { className: "gd-filter-configuration__help-tooltip", children: tooltip }) })
120
158
  ] })
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from "react";
2
+ import { type IDashboardTimezoneConfig } from "@gooddata/sdk-model";
3
+ interface ITimezoneOptionProps {
4
+ label: ReactNode;
5
+ tooltip: ReactNode;
6
+ timezoneConfig: IDashboardTimezoneConfig | undefined;
7
+ onChange: (timezoneId: string | undefined) => void;
8
+ }
9
+ export declare function TimezoneOption({ label, tooltip, timezoneConfig, onChange }: ITimezoneOptionProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=TimezoneOption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimezoneOption.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/TimezoneOption.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAIhD,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAWtF,UAAU,oBAAoB;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAsDhG"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useMemo } from "react";
4
+ import { useIntl } from "react-intl";
5
+ import { BROWSER_DETECTED } from "@gooddata/sdk-model";
6
+ import { Bubble, BubbleHoverTrigger, TimezoneSelect, } from "@gooddata/sdk-ui-kit";
7
+ const BUBBLE_ALIGN_POINTS = [{ align: "bc tl" }];
8
+ export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
9
+ const intl = useIntl();
10
+ const specialItems = useMemo(() => {
11
+ // TODO INE (CQ-2726): resolve the effective workspace timezone and include it in the item label
12
+ const workspaceItemLabel = intl.formatMessage({
13
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone.workspace",
14
+ });
15
+ // plain ID here — the label template already brackets the value, so the "id (offset)"
16
+ // display label would produce nested brackets
17
+ const browserTimezoneId = Intl.DateTimeFormat().resolvedOptions().timeZone;
18
+ const browserItemLabel = intl.formatMessage({ id: "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser" }, { timezone: browserTimezoneId });
19
+ return [
20
+ { id: undefined, label: workspaceItemLabel },
21
+ { id: BROWSER_DETECTED, label: browserItemLabel },
22
+ ];
23
+ }, [intl]);
24
+ return (_jsxs("div", { className: "configuration-category-item", children: [
25
+ _jsxs("span", { className: "input-label-text", children: [label, _jsxs(BubbleHoverTrigger, { showDelay: 0, hideDelay: 0, eventsOnBubble: true, className: "configuration-category-item-tooltip-icon", children: [
26
+ _jsx("span", { className: "gd-icon-circle-question gd-filter-configuration__help-icon" }), _jsx(Bubble, { alignPoints: BUBBLE_ALIGN_POINTS, children: _jsx("div", { className: "gd-filter-configuration__help-tooltip", children: tooltip }) })
27
+ ] })
28
+ ] }), _jsx(TimezoneSelect, { value: timezoneConfig?.timezoneId, onChange: onChange, specialItems: specialItems, searchPlaceholder: intl.formatMessage({
29
+ id: "settingsDashboardDialog.section.timezone.select.searchPlaceholder",
30
+ }), ariaLabel: intl.formatMessage({
31
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone",
32
+ }), noMatchLabel: intl.formatMessage({
33
+ id: "settingsDashboardDialog.section.timezone.select.noMatch",
34
+ }) })
35
+ ] }));
36
+ }
@@ -1,6 +1,6 @@
1
1
  import { type ComponentType } from "react";
2
2
  import { type IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
3
- import { type ObjRef } from "@gooddata/sdk-model";
3
+ import { type IDashboardTimezoneConfig, type ObjRef } from "@gooddata/sdk-model";
4
4
  import { type GoodDataSdkError } from "@gooddata/sdk-ui";
5
5
  /**
6
6
  * @alpha
@@ -13,6 +13,7 @@ export interface IDashboardSettingsApplyPayload {
13
13
  evaluationFrequency: string | undefined;
14
14
  sectionHeadersDateDataSet: ObjRef | undefined;
15
15
  disablePersistentFiltersAcrossTabs: boolean;
16
+ timezoneConfig?: IDashboardTimezoneConfig;
16
17
  }
17
18
  /**
18
19
  * @alpha
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,kCAAkC,EAAE,OAAO,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C;;OAEG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAE5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAE3D;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG,aAAa,CAAC,6BAA6B,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,kCAAkC,EAAE,OAAO,CAAC;IAC5C,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C;;OAEG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAE5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAE3D;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG,aAAa,CAAC,6BAA6B,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDialogData.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/useDialogData.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,aAAa;;;;;EA4B5B"}
1
+ {"version":3,"file":"useDialogData.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/useDialogData.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,aAAa;;;;;EAgC5B"}
@@ -1,8 +1,9 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { useState } from "react";
3
3
  import { isEqual } from "lodash-es";
4
+ import { normalizeDashboardTimezoneConfig } from "@gooddata/sdk-model";
4
5
  import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
5
- import { selectDisableDashboardCrossFiltering, selectDisableDashboardPersistentFiltersAcrossTabs, selectDisableDashboardUserFilterReset, selectDisableDashboardUserFilterSave, selectDisableFilterViews, selectEvaluationFrequency, selectSectionHeadersDateDataSet, } from "../../model/store/meta/metaSelectors.js";
6
+ import { selectDashboardTimezoneConfig, selectDisableDashboardCrossFiltering, selectDisableDashboardPersistentFiltersAcrossTabs, selectDisableDashboardUserFilterReset, selectDisableDashboardUserFilterSave, selectDisableFilterViews, selectEvaluationFrequency, selectSectionHeadersDateDataSet, } from "../../model/store/meta/metaSelectors.js";
6
7
  export function useDialogData() {
7
8
  const disableCrossFiltering = useDashboardSelector(selectDisableDashboardCrossFiltering) ?? false;
8
9
  const disableUserFilterReset = useDashboardSelector(selectDisableDashboardUserFilterReset) ?? false;
@@ -11,6 +12,7 @@ export function useDialogData() {
11
12
  const disablePersistentFiltersAcrossTabs = useDashboardSelector(selectDisableDashboardPersistentFiltersAcrossTabs) ?? false;
12
13
  const evaluationFrequency = useDashboardSelector(selectEvaluationFrequency) ?? undefined;
13
14
  const sectionHeadersDateDataSet = useDashboardSelector(selectSectionHeadersDateDataSet) ?? undefined;
15
+ const timezoneConfig = normalizeDashboardTimezoneConfig(useDashboardSelector(selectDashboardTimezoneConfig));
14
16
  const [currentData, setCurrentData] = useState({
15
17
  disableCrossFiltering,
16
18
  disableUserFilterSave,
@@ -19,6 +21,7 @@ export function useDialogData() {
19
21
  disablePersistentFiltersAcrossTabs,
20
22
  evaluationFrequency,
21
23
  sectionHeadersDateDataSet,
24
+ timezoneConfig,
22
25
  });
23
26
  const [originalData] = useState(currentData);
24
27
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDashboardDateFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAiC1E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,MAAM,EACN,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,KAAK,EACR,EAAE,yBAAyB,GAAG,YAAY,CAgK1C"}
1
+ {"version":3,"file":"DefaultDashboardDateFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAmC1E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAmB5D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,MAAM,EACN,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,KAAK,EACR,EAAE,yBAAyB,GAAG,YAAY,CA0L1C"}
@@ -14,6 +14,17 @@ import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSe
14
14
  import { useCurrentDateFilterConfig } from "../../dragAndDrop/useCurrentDateFilterConfig.js";
15
15
  import { getVisibilityIcon } from "../utils.js";
16
16
  import { DateFilterConfigurationBody } from "./configuration/DateFilterConfigurationBody.js";
17
+ /**
18
+ * Whether the date dimension relevant to the filter exposes the second-level attribute (`GDC.time.second`):
19
+ * a dimension-scoped filter checks its own dataset, a common (dataset-less) filter checks whether any date
20
+ * dimension has seconds enabled.
21
+ */
22
+ function relevantDateDimensionHasSeconds(dateDatasets, dataSetRef) {
23
+ const datasetHasSeconds = (dateDataset) => dateDataset.dateAttributes.some((attribute) => attribute.granularity === "GDC.time.second");
24
+ return dataSetRef
25
+ ? dateDatasets.some((ds) => areObjRefsEqual(ds.dataSet.ref, dataSetRef) && datasetHasSeconds(ds))
26
+ : dateDatasets.some(datasetHasSeconds);
27
+ }
17
28
  /**
18
29
  * Default implementation of the date filter to use on the dashboard's filter bar.
19
30
  *
@@ -70,6 +81,24 @@ export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChan
70
81
  const hoursMinutesGranularities = ["GDC.time.minute", "GDC.time.hour"];
71
82
  const hasHoursMinutesGranularities = hoursMinutesGranularities.every((granularity) => config.availableGranularities.includes(granularity));
72
83
  const isTimeForAbsoluteRangeEnabled = !!capabilities.supportsTimeGranularities && hasHoursMinutesGranularities;
84
+ // Second-level relative granularities ship in the default config but are surfaced only when the
85
+ // enableSecondGranularities feature flag is on AND the backend supports time granularities; otherwise
86
+ // strip them from the tabs the relative form shows.
87
+ const availableGranularities = useMemo(() => settings.enableSecondGranularities && capabilities.supportsTimeGranularities
88
+ ? config.availableGranularities
89
+ : config.availableGranularities.filter((granularity) => granularity !== "GDC.time.second"), [
90
+ config.availableGranularities,
91
+ settings.enableSecondGranularities,
92
+ capabilities.supportsTimeGranularities,
93
+ ]);
94
+ // Seconds precision in the absolute date filter time field is offered only when the backend supports time
95
+ // granularities, the enableSecondGranularities feature flag is on, and the relevant date dimension exposes
96
+ // the GDC.time.second attribute. This is a stricter, dimension-aware gate than the relative form's seconds
97
+ // tab (which follows availableGranularities); the absolute time field must not appear for a dimension that
98
+ // has no second attribute.
99
+ const isSecondsForAbsoluteRangeEnabled = isTimeForAbsoluteRangeEnabled &&
100
+ !!settings.enableSecondGranularities &&
101
+ relevantDateDimensionHasSeconds(allDateDatasets, filter?.dateFilter.dataSet);
73
102
  const isConfigurationEnabled = isInEditMode &&
74
103
  (!!capabilities.supportsHiddenAndLockedFiltersOnUI || !!capabilities.supportsMultipleDateFilters);
75
104
  const FilterConfigurationComponent = useMemo(() => {
@@ -80,5 +109,5 @@ export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChan
80
109
  }, [intl, filter?.dateFilter.dataSet, defaultDateFilterName]);
81
110
  return (_jsx(DateFilter, { excludeCurrentPeriod: excludeCurrentPeriod, selectedFilterOption: dateFilterOption, workingExcludeCurrentPeriod: isApplyAllAtOnceEnabledAndSet ? workingExcludeCurrentPeriod : undefined, workingSelectedFilterOption: isApplyAllAtOnceEnabledAndSet ? workingFilterOption : undefined, dateFilterMode: readonly
82
111
  ? DashboardDateFilterConfigModeValues.READONLY
83
- : DashboardDateFilterConfigModeValues.ACTIVE, filterOptions: dateFilterOptions, availableGranularities: config.availableGranularities, customFilterName: title, onApply: onApply, onSelect: isApplyAllAtOnceEnabledAndSet ? onSelect : undefined, dateFormat: dateFormat, locale: locale, isTimeForAbsoluteRangeEnabled: isTimeForAbsoluteRangeEnabled, isEditMode: isInEditMode, openOnInit: autoOpen, weekStart: weekStart, customIcon: visibilityIcon, showDropDownHeaderMessage: !filter?.dateFilter.dataSet, FilterConfigurationComponent: isConfigurationEnabled ? FilterConfigurationComponent : undefined, withoutApply: isApplyAllAtOnceEnabledAndSet, ButtonComponent: ButtonComponent, overlayPositionType: overlayPositionType, activeCalendars: activeCalendars, enableEmptyDateValues: enableEmptyDateValues, hideDisabledExclude: true }));
112
+ : DashboardDateFilterConfigModeValues.ACTIVE, filterOptions: dateFilterOptions, availableGranularities: availableGranularities, customFilterName: title, onApply: onApply, onSelect: isApplyAllAtOnceEnabledAndSet ? onSelect : undefined, dateFormat: dateFormat, locale: locale, isTimeForAbsoluteRangeEnabled: isTimeForAbsoluteRangeEnabled, isSecondsForAbsoluteRangeEnabled: isSecondsForAbsoluteRangeEnabled, isEditMode: isInEditMode, openOnInit: autoOpen, weekStart: weekStart, customIcon: visibilityIcon, showDropDownHeaderMessage: !filter?.dateFilter.dataSet, FilterConfigurationComponent: isConfigurationEnabled ? FilterConfigurationComponent : undefined, withoutApply: isApplyAllAtOnceEnabledAndSet, ButtonComponent: ButtonComponent, overlayPositionType: overlayPositionType, activeCalendars: activeCalendars, enableEmptyDateValues: enableEmptyDateValues, hideDisabledExclude: true }));
84
113
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardLayoutSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAEH,KAAK,6BAA6B,EACrC,MAAM,iEAAiE,CAAC;AAEzE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS1E,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,qCAAqC,EAC1C,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACtC,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,4BAA4B,CAAC,OAAO;IACjD,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACrD,cAAc,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,mBAAmB,EAAE,MAAM,OAAO,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;IACxD,gBAAgB,EAAE,eAAe,GAAG,SAAS,CAAC;CACjD;AAaD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,EAC5C,OAAO,EACP,eAAwC,EACxC,qBAA6C,EAC7C,aAAoC,EACpC,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EACnB,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAAG,YAAY,CA+FtD"}
1
+ {"version":3,"file":"DashboardLayoutSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,OAAO,CAAC;AAInD,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAEH,KAAK,6BAA6B,EACrC,MAAM,iEAAiE,CAAC;AAGzE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS1E,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,qCAAqC,EAC1C,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACtC,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,4BAA4B,CAAC,OAAO;IACjD,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACrD,cAAc,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,mBAAmB,EAAE,MAAM,OAAO,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;IACxD,gBAAgB,EAAE,eAAe,GAAG,SAAS,CAAC;CACjD;AA2BD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,EAC5C,OAAO,EACP,eAAwC,EACxC,qBAA6C,EAC7C,aAAoC,EACpC,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EACnB,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAAG,YAAY,CAwGtD"}
@@ -1,6 +1,8 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2007-2026 GoodData Corporation
3
3
  import { useMemo } from "react";
4
+ import { isEmpty } from "lodash-es";
5
+ import { getLayoutConfiguration } from "../../../_staging/dashboard/flexibleLayout/layoutConfiguration.js";
4
6
  import { getItemIndex, serializeLayoutItemPath } from "../../../_staging/layout/coordinates.js";
5
7
  import { useScreenSize } from "../../dashboard/components/DashboardScreenSizeContext.js";
6
8
  import { useSlideSizeStyle } from "../../dashboardContexts/useSlideData.js";
@@ -12,10 +14,35 @@ import { DashboardLayoutSectionRenderer } from "./DashboardLayoutSectionRenderer
12
14
  const defaultSectionRenderer = (props) => (_jsx(DashboardLayoutSectionRenderer, { ...props }));
13
15
  const defaultHeaderRenderer = (props) => (_jsx(DashboardLayoutSectionHeaderRenderer, { ...props }));
14
16
  const defaultItemKeyGetter = ({ item }) => serializeLayoutItemPath(item.index());
17
+ /**
18
+ * Whether the section header has anything to render, i.e. whether it occupies a grid row of the
19
+ * section. Mirrors the conditions of {@link DashboardLayoutViewSectionHeader} and of the section
20
+ * header renderers, which for an empty header emit a grid item that `.gd-grid-layout__item:empty`
21
+ * takes out of the flow.
22
+ *
23
+ * The export slide sizing needs this to know which grid row is the header one. Only ever consulted
24
+ * together with the node the header renderer actually returned - see `hasHeaderRow` below.
25
+ */
26
+ function hasVisibleSectionHeader(section) {
27
+ const { sections } = getLayoutConfiguration(section.layout().raw());
28
+ return sections.areHeadersEnabled && (!isEmpty(section.title()) || !isEmpty(section.description()));
29
+ }
15
30
  export function DashboardLayoutSection({ section, sectionRenderer = defaultSectionRenderer, sectionHeaderRenderer = defaultHeaderRenderer, itemKeyGetter = defaultItemKeyGetter, gridRowRenderer, itemRenderer, widgetRenderer, getLayoutDimensions, renderMode, parentLayoutItemSize, parentLayoutPath, }) {
16
31
  const showBorders = parentLayoutPath === undefined || parentLayoutPath.length === 0;
17
32
  const exportData = useSectionExportData(parentLayoutPath?.length ?? 0);
18
- const exportStyles = useSlideSizeStyle(renderMode, "section", parentLayoutPath);
33
+ const header = sectionHeaderRenderer({
34
+ section,
35
+ DefaultSectionHeaderRenderer: DashboardLayoutSectionHeaderRenderer,
36
+ parentLayoutItemSize,
37
+ parentLayoutPath,
38
+ exportData,
39
+ });
40
+ // sectionHeaderRenderer is a swappable callback, so the section metadata alone does not decide
41
+ // whether a header row exists - a custom renderer may return null for a section that has a title.
42
+ // Require both, so we never reserve a content-sized row that then gets filled by the first
43
+ // widget (which would collapse it, the very thing the export row sizing is fixing).
44
+ const hasHeaderRow = header !== null && header !== undefined && hasVisibleSectionHeader(section);
45
+ const exportStyles = useSlideSizeStyle(renderMode, "section", parentLayoutPath, hasHeaderRow);
19
46
  const renderProps = {
20
47
  section,
21
48
  renderMode,
@@ -57,12 +84,6 @@ export function DashboardLayoutSection({ section, sectionRenderer = defaultSecti
57
84
  ...renderProps,
58
85
  exportStyles,
59
86
  DefaultSectionRenderer: DashboardLayoutSectionRenderer,
60
- children: (_jsxs(_Fragment, { children: [sectionHeaderRenderer({
61
- section,
62
- DefaultSectionHeaderRenderer: DashboardLayoutSectionHeaderRenderer,
63
- parentLayoutItemSize,
64
- parentLayoutPath,
65
- exportData,
66
- }), items] })),
87
+ children: (_jsxs(_Fragment, { children: [header, items] })),
67
88
  });
68
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardLayoutSectionHeaderDescription.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSectionHeaderDescription.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOvE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,6CAA6C;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,uCAAuC,CAAC,EACpD,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACV,EAAE,6CAA6C,2CA6B/C"}
1
+ {"version":3,"file":"DashboardLayoutSectionHeaderDescription.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSectionHeaderDescription.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOvE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,6CAA6C;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,uCAAuC,CAAC,EACpD,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACV,EAAE,6CAA6C,2CA2B/C"}
@@ -3,17 +3,15 @@ import cx from "classnames";
3
3
  import { RichText } from "@gooddata/sdk-ui-kit";
4
4
  import { useSectionDescriptionFilters } from "../../../_staging/sharedHooks/useRichTextFilters.js";
5
5
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
6
+ import { useDashboardExecConfig } from "../../../model/react/useWidgetExecConfig.js";
6
7
  import { selectSeparators } from "../../../model/store/config/configSelectors.js";
7
- import { selectExecutionTimestamp } from "../../../model/store/ui/uiSelectors.js";
8
8
  export function DashboardLayoutSectionHeaderDescription({ description, exportData, LoadingComponent, onLoadingChanged, onError, }) {
9
9
  const { loading, filters } = useSectionDescriptionFilters();
10
10
  const separators = useDashboardSelector(selectSeparators);
11
- const executionTimestamp = useDashboardSelector(selectExecutionTimestamp);
11
+ const execConfig = useDashboardExecConfig();
12
12
  const className = cx("gd-paragraph", "description", "s-fluid-layout-row-description");
13
13
  return (_jsx("div", { className: className, ...exportData?.description, children: _jsx(RichText, { className: "gd-layout-row-description-richtext", value: description, renderMode: "view", rawContent: {
14
14
  show: !!exportData?.richText,
15
15
  dataAttributes: exportData?.richText?.markdown,
16
- }, execConfig: {
17
- timestamp: executionTimestamp,
18
- }, referencesEnabled: true, filters: filters, isFiltersLoading: loading, separators: separators, LoadingComponent: LoadingComponent, onLoadingChanged: onLoadingChanged, onError: onError }) }));
16
+ }, execConfig: execConfig, referencesEnabled: true, filters: filters, isFiltersLoading: loading, separators: separators, LoadingComponent: LoadingComponent, onLoadingChanged: onLoadingChanged, onError: onError }) }));
19
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SectionHeaderEditable.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/EditableHeader/SectionHeaderEditable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoC,MAAM,OAAO,CAAC;AAO5E,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,oEAAoE,CAAC;AAkBxH,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,wBAAgB,qBAAqB,CAAC,EAClC,KAAK,EAAE,QAAa,EACpB,WAAW,EAAE,cAAmB,EAChC,OAAO,EACV,EAAE,2BAA2B,GAAG,YAAY,CA0H5C"}
1
+ {"version":3,"file":"SectionHeaderEditable.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/EditableHeader/SectionHeaderEditable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoC,MAAM,OAAO,CAAC;AAO5E,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,oEAAoE,CAAC;AAkBxH,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,wBAAgB,qBAAqB,CAAC,EAClC,KAAK,EAAE,QAAa,EACpB,WAAW,EAAE,cAAmB,EAChC,OAAO,EACV,EAAE,2BAA2B,GAAG,YAAY,CAwH5C"}
@@ -8,9 +8,9 @@ import { serializeLayoutSectionPath } from "../../../../_staging/layout/coordina
8
8
  import { useSectionDescriptionFilters } from "../../../../_staging/sharedHooks/useRichTextFilters.js";
9
9
  import { changeNestedLayoutSectionHeader } from "../../../../model/commands/layout.js";
10
10
  import { useDashboardDispatch, useDashboardSelector, } from "../../../../model/react/DashboardStoreProvider.js";
11
+ import { useDashboardExecConfig } from "../../../../model/react/useWidgetExecConfig.js";
11
12
  import { selectSeparators } from "../../../../model/store/config/configSelectors.js";
12
13
  import { uiActions } from "../../../../model/store/ui/index.js";
13
- import { selectExecutionTimestamp } from "../../../../model/store/ui/uiSelectors.js";
14
14
  import { useDashboardComponentsContext } from "../../../dashboardContexts/DashboardComponentsContext.js";
15
15
  import { EditableLabelWithBubble } from "./EditableLabelWithBubble.js";
16
16
  import { MAX_TITLE_LENGTH, TITLE_LENGTH_WARNING_LIMIT, getTitle } from "./sectionHeaderHelper.js";
@@ -58,15 +58,13 @@ export function SectionHeaderEditable({ title: rawTitle = "", description: rawDe
58
58
  }, [rawDescription]);
59
59
  const serializedSectionIndex = serializeLayoutSectionPath(section.index());
60
60
  const isNestedLayout = section.layout().path() !== undefined;
61
- const executionTimestamp = useDashboardSelector(selectExecutionTimestamp);
61
+ const execConfig = useDashboardExecConfig();
62
62
  return (_jsxs("div", { className: cx("gd-row-header-edit", { "gd-row-header-edit--nested": isNestedLayout }), children: [
63
63
  _jsx("div", { className: "gd-editable-label-container gd-row-header-title-wrapper", children: _jsx(EditableLabelWithBubble, { className: cx(`gd-title-for-${serializedSectionIndex}`, "s-fluid-layout-row-title-input", "title", {
64
64
  "gd-heading-2": !isNestedLayout,
65
65
  "gd-heading-3": isNestedLayout,
66
66
  }), maxRows: 10, value: title || "", maxLength: MAX_TITLE_LENGTH, warningLimit: TITLE_LENGTH_WARNING_LIMIT, placeholderMessage: intl.formatMessage({ id: "layout.header.add.title.placeholder" }), alignTo: `.gd-title-for-${serializedSectionIndex}`, onSubmit: onTitleSubmit, onEditingStart: onEditingStart, onCancel: onEditingEnd }) }), _jsx("div", { className: "gd-editable-label-container gd-row-header-description-wrapper", children: _jsx("div", { className: cx("gd-editable-label-richtext s-fluid-layout-row-description-input", {
67
67
  "is-editing": isRichTextEditing,
68
- }), onClick: onDescriptionClick, onBlur: onDescriptionBlur, children: _jsx(RichTextWithTooltip, { value: richTextValue, renderMode: isRichTextEditing ? "edit" : "view", onChange: onRichTextChange, editRows: 10, editPlaceholder: placeholder, emptyElement: _jsx("div", { className: "gd-editable-label-richtext-empty", children: placeholder }), showTooltip: isRichTextEditing, tooltipAlignPoints: richTextTooltipAlignPoints, autoResize: true, referencesEnabled: true, filters: filters, isFiltersLoading: loading, separators: separators, LoadingComponent: LoadingComponent, execConfig: {
69
- timestamp: executionTimestamp,
70
- } }) }) })
68
+ }), onClick: onDescriptionClick, onBlur: onDescriptionBlur, children: _jsx(RichTextWithTooltip, { value: richTextValue, renderMode: isRichTextEditing ? "edit" : "view", onChange: onRichTextChange, editRows: 10, editPlaceholder: placeholder, emptyElement: _jsx("div", { className: "gd-editable-label-richtext-empty", children: placeholder }), showTooltip: isRichTextEditing, tooltipAlignPoints: richTextTooltipAlignPoints, autoResize: true, referencesEnabled: true, filters: filters, isFiltersLoading: loading, separators: separators, LoadingComponent: LoadingComponent, execConfig: execConfig }) }) })
71
69
  ] }));
72
70
  }
@@ -1,3 +1,3 @@
1
1
  import { type IDashboardLayoutSectionRenderProps } from "./interfaces.js";
2
- export declare function ExportableDashboardLayoutSectionRenderer({ children, parentLayoutItemSize, parentLayoutPath, className, isHidden, exportData }: IDashboardLayoutSectionRenderProps<unknown> & object): import("react/jsx-runtime").JSX.Element;
2
+ export declare function ExportableDashboardLayoutSectionRenderer({ children, parentLayoutItemSize, className, isHidden, exportData, exportStyles }: IDashboardLayoutSectionRenderProps<unknown> & object): import("react/jsx-runtime").JSX.Element;
3
3
  //# sourceMappingURL=ExportableDashboardLayoutSectionRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExportableDashboardLayoutSectionRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,kCAAkC,EAAE,MAAM,iBAAiB,CAAC;AAK1E,wBAAgB,wCAAwC,CAAC,EACrD,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,UAAU,EACb,EAAE,kCAAkC,CAAC,OAAO,CAAC,GAAG,MAAM,2CAiBtD"}
1
+ {"version":3,"file":"ExportableDashboardLayoutSectionRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kCAAkC,EAAE,MAAM,iBAAiB,CAAC;AAK1E,wBAAgB,wCAAwC,CAAC,EACrD,QAAQ,EACR,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACf,EAAE,kCAAkC,CAAC,OAAO,CAAC,GAAG,MAAM,2CAetD"}
@@ -1,12 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2007-2026 GoodData Corporation
3
- import { useSlideSizeStyle } from "../../dashboardContexts/useSlideData.js";
4
3
  import { GridLayoutElement } from "./GridLayoutElement.js";
5
4
  const isHiddenStyle = { height: 0, width: 0, overflow: "hidden", flex: 0 };
6
5
  const defaultStyle = {};
7
- export function ExportableDashboardLayoutSectionRenderer({ children, parentLayoutItemSize, parentLayoutPath, className, isHidden, exportData, }) {
6
+ export function ExportableDashboardLayoutSectionRenderer({ children, parentLayoutItemSize, className, isHidden, exportData, exportStyles, }) {
8
7
  const style = isHidden ? isHiddenStyle : defaultStyle;
9
- const type = "section";
10
- const exportStyles = useSlideSizeStyle("export", type, parentLayoutPath);
11
- return (_jsx(GridLayoutElement, { type: type, layoutItemSize: parentLayoutItemSize, className: className, style: style, exportData: exportData, exportStyles: exportStyles, children: children }));
8
+ return (_jsx(GridLayoutElement, { type: "section", layoutItemSize: parentLayoutItemSize, className: className, style: style, exportData: exportData, exportStyles: exportStyles, children: children }));
12
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InsightList.d.ts","sourceRoot":"","sources":["../../../src/presentation/insightList/InsightList.tsx"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,QAAQ,EAShB,MAAM,qBAAqB,CAAC;AAkC7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKpD,UAAU,gBAAgB;IACtB,OAAO,EAAE,QAAQ,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,GAAG,gBAAgB,CAO5E;AAsCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,KAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,QAAQ,EACX,EAAE,iBAAiB,2CA0OnB"}
1
+ {"version":3,"file":"InsightList.d.ts","sourceRoot":"","sources":["../../../src/presentation/insightList/InsightList.tsx"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,QAAQ,EAShB,MAAM,qBAAqB,CAAC;AAgC7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKpD,UAAU,gBAAgB;IACtB,OAAO,EAAE,QAAQ,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,GAAG,gBAAgB,CAO5E;AAsCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,KAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,QAAQ,EACX,EAAE,iBAAiB,2CAwOnB"}
@@ -11,10 +11,11 @@ import { messages } from "../../locales.js";
11
11
  import { createInsightRequested } from "../../model/events/lab.js";
12
12
  import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
13
13
  import { useDashboardEventDispatch } from "../../model/react/useDashboardEventDispatch.js";
14
+ import { useDashboardExecConfig } from "../../model/react/useWidgetExecConfig.js";
14
15
  import { selectBackendCapabilities } from "../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
15
16
  import { selectAllowCreateInsightRequest, selectEnableCatalogSmartSearchResults, selectEnableVisualizationFilteringByTags, selectObjectAvailabilityConfig, selectSettings, } from "../../model/store/config/configSelectors.js";
16
17
  import { selectCanCreateVisualization } from "../../model/store/permissions/permissionsSelectors.js";
17
- import { selectExecutionTimestamp, selectInsightListLastUpdateRequested, } from "../../model/store/ui/uiSelectors.js";
18
+ import { selectInsightListLastUpdateRequested } from "../../model/store/ui/uiSelectors.js";
18
19
  import { selectCurrentUser } from "../../model/store/user/userSelectors.js";
19
20
  import { getAuthor } from "../../model/utils/author.js";
20
21
  import { useDashboardComponentsContext } from "../dashboardContexts/DashboardComponentsContext.js";
@@ -65,7 +66,7 @@ export function InsightList({ height, width = LIST_WIDTH, searchAutofocus, rende
65
66
  const canCreateVisualization = useDashboardSelector(selectCanCreateVisualization);
66
67
  const allowCreateInsightRequest = useDashboardSelector(selectAllowCreateInsightRequest);
67
68
  const settings = useDashboardSelector(selectSettings);
68
- const executionTimestamp = useDashboardSelector(selectExecutionTimestamp);
69
+ const execConfig = useDashboardExecConfig();
69
70
  const objectAvailability = useDashboardSelector(selectObjectAvailabilityConfig);
70
71
  const isFilteringByTagsEnabled = useDashboardSelector(selectEnableVisualizationFilteringByTags);
71
72
  const enableCatalogSmartSearchResults = useDashboardSelector(selectEnableCatalogSmartSearchResults);
@@ -159,8 +160,6 @@ export function InsightList({ height, width = LIST_WIDTH, searchAutofocus, rende
159
160
  const insightListSourceItem = getInsightListSourceItem(insight);
160
161
  const isSelected = areObjRefsEqual(insight.insight.ref, selectedRef);
161
162
  return (_jsx(InsightListItem, { title: title, description: description, showDescriptionPanel: true, type: insightListSourceItem.insightType, width: width, isSelected: isSelected, updated: insightUpdated(insightListSourceItem.insight) ??
162
- insightCreated(insightListSourceItem.insight), isLocked: insightIsLocked(insightListSourceItem.insight), onClick: () => onSelect?.(insight), metadataTimeZone: settings?.metadataTimeZone, useReferences: true, richTextExecConfig: {
163
- timestamp: executionTimestamp,
164
- }, LoadingComponent: LoadingComponent }));
163
+ insightCreated(insightListSourceItem.insight), isLocked: insightIsLocked(insightListSourceItem.insight), onClick: () => onSelect?.(insight), metadataTimeZone: settings?.metadataTimeZone, useReferences: true, richTextExecConfig: execConfig, LoadingComponent: LoadingComponent }));
165
164
  }), renderNoData: ({ hasNoMatchingData }) => (_jsx(InsightListNoData, { isUserInsights: selectedTabId === messages.tabsMy.id, hasNoMatchingData: hasNoMatchingData, showNoDataCreateButton: showNoDataCreateButton, onCreateButtonClick: createInsightRequestedEvent })), loadNextPage: loadNextPage, hasNextPage: hasNextPage || isRelatedLoading, skeletonItemsCount: loadingItemsCount, shouldLoadNextPage: shouldLoadNextPage, isNextPageLoading: isNextPageLoading, SkeletonItem: () => (_jsx(UiSkeleton, { itemWidth: ["100%"], direction: "row", itemPadding: 15, itemHeight: 30, itemsCount: 1, itemsGap: 0 })) }));
166
165
  }