@gooddata/sdk-ui-dashboard 11.53.0-alpha.6 → 11.53.0

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 (143) hide show
  1. package/esm/__version.d.ts +1 -1
  2. package/esm/__version.d.ts.map +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +3 -3
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +2 -2
  7. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.d.ts.map +1 -1
  8. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.js +3 -1
  9. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.d.ts.map +1 -1
  10. package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.js +3 -1
  11. package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.d.ts.map +1 -1
  12. package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.js +3 -1
  13. package/esm/model/commandHandlers/dashboard/exportToTabularHandler.d.ts.map +1 -1
  14. package/esm/model/commandHandlers/dashboard/exportToTabularHandler.js +5 -3
  15. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
  16. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +9 -2
  17. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadExportTimezone.d.ts +12 -0
  18. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadExportTimezone.d.ts.map +1 -0
  19. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadExportTimezone.js +25 -0
  20. package/esm/model/commandHandlers/timezone/changeDashboardTimezoneOverrideHandler.d.ts.map +1 -1
  21. package/esm/model/commandHandlers/timezone/changeDashboardTimezoneOverrideHandler.js +4 -3
  22. package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.d.ts.map +1 -1
  23. package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.js +3 -1
  24. package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.d.ts.map +1 -1
  25. package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.js +4 -2
  26. package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.d.ts.map +1 -1
  27. package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js +7 -1
  28. package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.d.ts.map +1 -1
  29. package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.js +3 -1
  30. package/esm/model/store/config/configSelectors.d.ts +6 -0
  31. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  32. package/esm/model/store/config/configSelectors.js +8 -0
  33. package/esm/model/store/meta/metaSelectors.d.ts +16 -0
  34. package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
  35. package/esm/model/store/meta/metaSelectors.js +28 -1
  36. package/esm/presentation/automations/alerting/DefaultAlertingDialog/utils/convertors.d.ts +1 -1
  37. package/esm/presentation/automations/alerting/DefaultAlertingDialog/utils/convertors.d.ts.map +1 -1
  38. package/esm/presentation/automations/alerting/DefaultAlertingDialog/utils/convertors.js +6 -1
  39. package/esm/presentation/automations/alerting/state/useAlertFormState.d.ts.map +1 -1
  40. package/esm/presentation/automations/alerting/state/useAlertFormState.js +6 -2
  41. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.d.ts.map +1 -1
  42. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +29 -3
  43. package/esm/presentation/automations/contexts/AutomationsContext.d.ts +39 -0
  44. package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
  45. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  46. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +33 -10
  47. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduleTimezoneSelect/ScheduleTimezoneSelect.d.ts +15 -0
  48. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduleTimezoneSelect/ScheduleTimezoneSelect.d.ts.map +1 -0
  49. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/ScheduleTimezoneSelect/ScheduleTimezoneSelect.js +58 -0
  50. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useExportTimezones.d.ts +52 -0
  51. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useExportTimezones.d.ts.map +1 -0
  52. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useExportTimezones.js +46 -0
  53. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleTimezone.d.ts +47 -0
  54. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleTimezone.d.ts.map +1 -0
  55. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleTimezone.js +90 -0
  56. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts.map +1 -1
  57. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +21 -0
  58. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.d.ts +2 -1
  59. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.d.ts.map +1 -1
  60. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.d.ts +5 -2
  61. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.d.ts.map +1 -1
  62. package/esm/presentation/automations/scheduledEmail/state/exportDefinitions.d.ts +19 -2
  63. package/esm/presentation/automations/scheduledEmail/state/exportDefinitions.d.ts.map +1 -1
  64. package/esm/presentation/automations/scheduledEmail/state/exportDefinitions.js +35 -2
  65. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailExportSettings.d.ts +9 -1
  66. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailExportSettings.d.ts.map +1 -1
  67. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailExportSettings.js +10 -1
  68. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.d.ts.map +1 -1
  69. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.js +14 -2
  70. package/esm/presentation/automations/scheduledEmail/types.d.ts +64 -0
  71. package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
  72. package/esm/presentation/automations/shared/automationFilters/components/ApplyLatestFiltersConfirmDialog.d.ts +12 -1
  73. package/esm/presentation/automations/shared/automationFilters/components/ApplyLatestFiltersConfirmDialog.d.ts.map +1 -1
  74. package/esm/presentation/automations/shared/automationFilters/components/ApplyLatestFiltersConfirmDialog.js +17 -2
  75. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
  76. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +3 -1
  77. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -1
  78. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +5 -6
  79. package/esm/presentation/filterBar/filterBar/useExecutionTimestampMessage.d.ts.map +1 -1
  80. package/esm/presentation/filterBar/filterBar/useExecutionTimestampMessage.js +6 -1
  81. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +48 -4
  82. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  83. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +51 -7
  84. package/esm/presentation/timezoneDialog/TimezoneDialog.d.ts +1 -1
  85. package/esm/presentation/timezoneDialog/TimezoneDialog.d.ts.map +1 -1
  86. package/esm/presentation/timezoneDialog/TimezoneDialog.js +7 -6
  87. package/esm/presentation/topBar/menuButton/useDefaultMenuItems.d.ts.map +1 -1
  88. package/esm/presentation/topBar/menuButton/useDefaultMenuItems.js +6 -2
  89. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.d.ts +4 -3
  90. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.d.ts.map +1 -1
  91. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.js +10 -9
  92. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useEditAlert.d.ts.map +1 -1
  93. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useEditAlert.js +6 -1
  94. package/esm/sdk-ui-dashboard.d.ts +134 -3
  95. package/package.json +21 -21
  96. package/styles/css/main.css +29 -0
  97. package/styles/css/main.css.map +1 -1
  98. package/styles/css/scheduleTimezone.css +30 -0
  99. package/styles/css/scheduleTimezone.css.map +1 -0
  100. package/styles/scss/main.scss +1 -0
  101. package/styles/scss/scheduleTimezone.scss +37 -0
  102. package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/components/PauseAlertRunner.test.d.ts +0 -2
  103. package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/components/PauseAlertRunner.test.d.ts.map +0 -1
  104. package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/components/PauseAlertRunner.test.js +0 -39
  105. package/esm/presentation/automations/connectors/AlertingConnector.test.d.ts +0 -2
  106. package/esm/presentation/automations/connectors/AlertingConnector.test.d.ts.map +0 -1
  107. package/esm/presentation/automations/connectors/AlertingConnector.test.js +0 -201
  108. package/esm/presentation/automations/connectors/ScheduledEmailConnector.test.d.ts +0 -2
  109. package/esm/presentation/automations/connectors/ScheduledEmailConnector.test.d.ts.map +0 -1
  110. package/esm/presentation/automations/connectors/ScheduledEmailConnector.test.js +0 -225
  111. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.test.d.ts +0 -2
  112. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.test.d.ts.map +0 -1
  113. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.test.js +0 -95
  114. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.test.d.ts +0 -2
  115. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.test.d.ts.map +0 -1
  116. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.test.js +0 -185
  117. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.test.d.ts +0 -2
  118. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.test.d.ts.map +0 -1
  119. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.test.js +0 -175
  120. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.test.d.ts +0 -2
  121. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.test.d.ts.map +0 -1
  122. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.test.js +0 -48
  123. package/esm/presentation/automations/contexts/AutomationsContext.test.d.ts +0 -2
  124. package/esm/presentation/automations/contexts/AutomationsContext.test.d.ts.map +0 -1
  125. package/esm/presentation/automations/contexts/AutomationsContext.test.js +0 -9
  126. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.test.d.ts +0 -2
  127. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.test.d.ts.map +0 -1
  128. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.test.js +0 -159
  129. package/esm/presentation/export/DefaultDashboardExportVariables.test.d.ts +0 -2
  130. package/esm/presentation/export/DefaultDashboardExportVariables.test.d.ts.map +0 -1
  131. package/esm/presentation/export/DefaultDashboardExportVariables.test.js +0 -58
  132. package/esm/presentation/widget/insight/LayeredTableView.test.d.ts +0 -2
  133. package/esm/presentation/widget/insight/LayeredTableView.test.d.ts.map +0 -1
  134. package/esm/presentation/widget/insight/LayeredTableView.test.js +0 -149
  135. package/esm/presentation/widget/insight/configuration/InsightAlertsNew.test.d.ts +0 -2
  136. package/esm/presentation/widget/insight/configuration/InsightAlertsNew.test.d.ts.map +0 -1
  137. package/esm/presentation/widget/insight/configuration/InsightAlertsNew.test.js +0 -124
  138. package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.test.d.ts +0 -2
  139. package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.test.d.ts.map +0 -1
  140. package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.test.js +0 -139
  141. package/esm/presentation/widget/insight/insightToTable.test.d.ts +0 -2
  142. package/esm/presentation/widget/insight/insightToTable.test.d.ts.map +0 -1
  143. package/esm/presentation/widget/insight/insightToTable.test.js +0 -325
@@ -445,6 +445,10 @@ export const en_US = {
445
445
  "text": "Time zone used for date filters and date values on this dashboard.",
446
446
  "crowdinContext": "Tooltip of the default time zone picker in the dashboard settings dialog"
447
447
  },
448
+ "settingsDashboardDialog.section.timezone.defaultTimezone.help": {
449
+ "text": "More information",
450
+ "crowdinContext": "Screen-reader label of the help icon next to the time zone picker label in the dashboard settings dialog; focusing the icon reads the tooltip with details."
451
+ },
448
452
  "settingsDashboardDialog.section.timezone.defaultTimezone.workspace": {
449
453
  "text": "Default",
450
454
  "crowdinContext": "Time zone picker item meaning the workspace default time zone is used."
@@ -478,7 +482,7 @@ export const en_US = {
478
482
  "crowdinContext": "Tooltip of the toggle controlling whether the used time zone is shown on the dashboard"
479
483
  },
480
484
  "settingsDashboardDialog.section.timezone.select.searchPlaceholder": {
481
- "text": "Search ...",
485
+ "text": "Search…",
482
486
  "crowdinContext": "Placeholder of the search input in the time zone picker"
483
487
  },
484
488
  "settingsDashboardDialog.section.timezone.select.noMatch": {
@@ -493,10 +497,6 @@ export const en_US = {
493
497
  "text": "<b>Note:</b> Time zone resets to the default when you reload the page.",
494
498
  "crowdinContext": "Note in the dialog for temporarily changing the dashboard time zone in view mode. The <b> tags wrap the 'Note:' label."
495
499
  },
496
- "timezoneDialog.description.ariaLabel": {
497
- "text": "Change timezone dialog information message",
498
- "crowdinContext": "Aria label for the change timezone dialog information message"
499
- },
500
500
  "timezoneDialog.default": {
501
501
  "text": "Default",
502
502
  "crowdinContext": "Time zone picker item meaning the dashboard's configured time zone is used."
@@ -506,7 +506,7 @@ export const en_US = {
506
506
  "crowdinContext": "Time zone picker item meaning the time zone is detected from the viewer's browser. The {timezone} placeholder shows the detected time zone."
507
507
  },
508
508
  "timezoneDialog.select.searchPlaceholder": {
509
- "text": "Search ...",
509
+ "text": "Search…",
510
510
  "crowdinContext": "Placeholder of the search input in the time zone picker of the change time zone dialog"
511
511
  },
512
512
  "timezoneDialog.select.noMatch": {
@@ -957,6 +957,38 @@ export const en_US = {
957
957
  "text": "Note: These filters will always be used for future exports.",
958
958
  "crowdinContext": "Informational message about filters being permanently applied to exports"
959
959
  },
960
+ "dialogs.schedule.email.timezone": {
961
+ "text": "Time zone",
962
+ "crowdinContext": "Label of the time zone section in the scheduled export dialog"
963
+ },
964
+ "dialogs.automation.timezone.default": {
965
+ "text": "Default",
966
+ "crowdinContext": "Time zone picker item in the scheduled export dialog meaning the persisted dashboard or workspace/organization time zone setting is used"
967
+ },
968
+ "dialogs.automation.timezone.default.tooltip": {
969
+ "text": "Follows the time zone set for the dashboard or, when the dashboard has none, for your organization, workspace, or user account. It updates automatically if that setting changes.",
970
+ "crowdinContext": "Tooltip of the Default time zone picker item in the scheduled export dialog"
971
+ },
972
+ "dialogs.automation.timezone.select.searchPlaceholder": {
973
+ "text": "Search ...",
974
+ "crowdinContext": "Placeholder of the search input in the time zone picker of the scheduled export dialog"
975
+ },
976
+ "dialogs.automation.timezone.select.noMatch": {
977
+ "text": "No matching time zone.",
978
+ "crowdinContext": "Message shown when the time zone search yields no results in the scheduled export dialog"
979
+ },
980
+ "dialogs.automation.timezone.now": {
981
+ "text": "Now: {time}",
982
+ "crowdinContext": "Live clock preview next to the time zone picker in the scheduled export dialog. Example: 'Now: 14:45'. The {time} placeholder is replaced with the current time in the selected time zone."
983
+ },
984
+ "dialogs.automation.timezone.defaultNow": {
985
+ "text": "{timezone}, Now: {time}",
986
+ "crowdinContext": "Live clock preview next to the time zone picker in the scheduled export dialog when the Default option is selected. Example: 'Prague (GMT+01:00), Now: 14:45'. The {timezone} placeholder shows the time zone the Default option currently resolves to, the {time} placeholder shows the current time in it."
987
+ },
988
+ "dialogs.automation.timezone.usage": {
989
+ "text": "Used to calculate dates in the exported data.",
990
+ "crowdinContext": "Helper text under the time zone picker in the scheduled export dialog"
991
+ },
960
992
  "dialogs.automation.filters.missing": {
961
993
  "text": "<b>Warning:</b> Some filters couldn't be applied — they're no longer available on the dashboard.",
962
994
  "crowdinContext": "Warning message when saved filters are no longer available on the dashboard"
@@ -993,6 +1025,14 @@ export const en_US = {
993
1025
  "text": "<b>Warning</b>: Some filters used when this schedule was created are no longer available or valid. Editing will apply the current dashboard filters.",
994
1026
  "crowdinContext": "Warning message when editing a schedule with outdated filters"
995
1027
  },
1028
+ "dialogs.automation.applyCurrentFilters.schedule.timezone.confirm": {
1029
+ "text": "<b>Warning</b>: The time zone used when this schedule was created no longer matches the dashboard. Editing will apply the dashboard's current time zone.",
1030
+ "crowdinContext": "Warning message when editing a schedule whose stored time zone no longer matches the dashboard"
1031
+ },
1032
+ "dialogs.automation.applyCurrentFilters.schedule.filtersAndTimezone.confirm": {
1033
+ "text": "<b>Warning</b>: Some filters and the time zone used when this schedule was created are no longer available or valid. Editing will apply the current dashboard filters and time zone.",
1034
+ "crowdinContext": "Warning message when editing a schedule with outdated filters and an outdated time zone"
1035
+ },
996
1036
  "dialogs.automation.filters.schedule.ariaLabel": {
997
1037
  "text": "Information about the option: Always use these filters for future exports.",
998
1038
  "crowdinContext": "Aria label for Schedule Dialog Automation Filters tooltip"
@@ -1525,9 +1565,13 @@ export const en_US = {
1525
1565
  "text": "The creator can edit this dashboard. Other users with appropriate user roles can edit this dashboard when they drill to it.",
1526
1566
  "crowdinContext": "Tooltip explaining that while the dashboard is private, users with proper roles can edit it when accessing through drill navigation"
1527
1567
  },
1568
+ "topBar.timezoneIndicator.label": {
1569
+ "text": "Time zone: ",
1570
+ "crowdinContext": "Screen-reader-only prefix of the time zone indicator badge in the dashboard top bar; read before the friendly time zone name (e.g. Prague). Keep the trailing space."
1571
+ },
1528
1572
  "topBar.timezoneIndicator.tooltip": {
1529
1573
  "text": "Time zone",
1530
- "crowdinContext": "Tooltip of the time zone indicator in the dashboard top bar. The {name} placeholder is the friendly time zone name (e.g. Prague), the {offset} placeholder is its UTC offset (e.g. GMT+02:00)."
1574
+ "crowdinContext": "Tooltip of the time zone indicator in the dashboard top bar, shown when hovering the indicator badge."
1531
1575
  },
1532
1576
  "dashboard.shareDialog.removeAccessGranteeTooltip": {
1533
1577
  "text": "Remove access to this dashboard.",
@@ -4,7 +4,7 @@ import { type ReactElement } from "react";
4
4
  *
5
5
  * @remarks
6
6
  * The dialog hosts the shared timezone picker with two special items: "Default" (clears the
7
- * override so the dashboard/workspace configuration applies again) and "From browser". Applying
7
+ * override so the dashboard/workspace configuration applies again) and "Device time zone". Applying
8
8
  * a selection dispatches the ChangeDashboardTimezoneOverride command; its handler resolves the
9
9
  * browser-detected sentinel, so the session-only ui state always ends up with a concrete IANA
10
10
  * timezone ID. The override is never persisted with the dashboard.
@@ -1 +1 @@
1
- {"version":3,"file":"TimezoneDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/timezoneDialog/TimezoneDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAgD,MAAM,OAAO,CAAC;AAsBxF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,IAAI,YAAY,GAAG,IAAI,CAiGpD"}
1
+ {"version":3,"file":"TimezoneDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/timezoneDialog/TimezoneDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAgD,MAAM,OAAO,CAAC;AAsBxF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,IAAI,YAAY,GAAG,IAAI,CA+FpD"}
@@ -15,7 +15,7 @@ import { selectTimezoneOverride } from "../../model/store/ui/uiSelectors.js";
15
15
  *
16
16
  * @remarks
17
17
  * The dialog hosts the shared timezone picker with two special items: "Default" (clears the
18
- * override so the dashboard/workspace configuration applies again) and "From browser". Applying
18
+ * override so the dashboard/workspace configuration applies again) and "Device time zone". Applying
19
19
  * a selection dispatches the ChangeDashboardTimezoneOverride command; its handler resolves the
20
20
  * browser-detected sentinel, so the session-only ui state always ends up with a concrete IANA
21
21
  * timezone ID. The override is never persisted with the dashboard.
@@ -38,8 +38,6 @@ export function TimezoneDialog() {
38
38
  const defaultTimezoneId = resolveTimezoneId(timezoneConfig?.timezoneId) ?? workspaceTimezone;
39
39
  const specialItems = useMemo(() => {
40
40
  const defaultItemLabel = intl.formatMessage({ id: "timezoneDialog.default" });
41
- // plain ID here — the label template already brackets the value, so the "id (offset)"
42
- // display label would produce nested brackets
43
41
  const browserTimezoneId = Intl.DateTimeFormat().resolvedOptions().timeZone;
44
42
  const browserTimezoneName = getTimezoneDisplayLabel(browserTimezoneId);
45
43
  const browserItemLabel = intl.formatMessage({ id: "timezoneDialog.fromBrowser" }, { timezone: browserTimezoneName });
@@ -71,8 +69,11 @@ export function TimezoneDialog() {
71
69
  _jsxs("div", { className: "gd-timezone-dialog-picker", children: [
72
70
  _jsx(TimezoneSelect, { value: selected, onChange: setSelected, specialItems: specialItems, searchPlaceholder: intl.formatMessage({
73
71
  id: "timezoneDialog.select.searchPlaceholder",
74
- }), ariaLabel: intl.formatMessage({ id: "timezoneDialog.title" }), noMatchLabel: intl.formatMessage({ id: "timezoneDialog.select.noMatch" }) }), currentTimeOfTimezone ? (_jsx("span", { className: "gd-timezone-dialog-current-time", children: intl.formatMessage({ id: "timezoneDialog.currentTime" }, { time: currentTimeOfTimezone }) })) : null] }), _jsx(Message, { type: "progress", className: "gd-timezone-dialog-description s-timezone-dialog-description", children: _jsx("span", { "aria-label": intl.formatMessage({ id: "timezoneDialog.description.ariaLabel" }), children: _jsx(FormattedMessage, { id: "timezoneDialog.description", values: {
75
- b: (chunks) => _jsx("strong", { children: chunks }),
76
- } }) }) })
72
+ }), ariaLabel: intl.formatMessage({ id: "timezoneDialog.title" }), noMatchLabel: intl.formatMessage({ id: "timezoneDialog.select.noMatch" }) }), _jsx("span", { className: "gd-timezone-dialog-current-time", "aria-live": "polite", children: currentTimeOfTimezone
73
+ ? intl.formatMessage({ id: "timezoneDialog.currentTime" }, { time: currentTimeOfTimezone })
74
+ : null })
75
+ ] }), _jsx(Message, { type: "progress", className: "gd-timezone-dialog-description s-timezone-dialog-description", children: _jsx(FormattedMessage, { id: "timezoneDialog.description", values: {
76
+ b: (chunks) => _jsx("strong", { children: chunks }),
77
+ } }) })
77
78
  ] }));
78
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useDefaultMenuItems.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/useDefaultMenuItems.tsx"],"names":[],"mappings":"AAgDA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AA8BlD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CA6avD"}
1
+ {"version":3,"file":"useDefaultMenuItems.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/menuButton/useDefaultMenuItems.tsx"],"names":[],"mappings":"AAkDA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AA8BlD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAgbvD"}
@@ -2,12 +2,13 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2022-2026 GoodData Corporation
3
3
  import { useCallback, useMemo } from "react";
4
4
  import { useIntl } from "react-intl";
5
+ import { resolveDashboardTimezoneUserOverrideAllowed } from "@gooddata/sdk-model";
5
6
  import { UiIcon, useMediaQuery } from "@gooddata/sdk-ui-kit";
6
7
  import { requestOpenDensityDialog } from "../../../model/commands/density.js";
7
8
  import { useDashboardDispatch, useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
8
9
  import { useDashboardScheduledEmails } from "../../../model/react/useDasboardScheduledEmails/useDashboardScheduledEmails.js";
9
10
  import { useDashboardAlerts } from "../../../model/react/useDashboardAlerting/useDashboardAlerts.js";
10
- import { selectEnableDashboardDensitySetting, selectEnableDashboardTabularExport, selectEnableDashboardTimezone, selectEnableSnapshotExport, selectIsReadOnly, selectSettings, } from "../../../model/store/config/configSelectors.js";
11
+ import { selectEnableDashboardDensitySetting, selectEnableDashboardTabularExport, selectEnableDashboardTimezone, selectEnableSnapshotExport, selectEnableTimezoneChange, selectIsReadOnly, selectSettings, } from "../../../model/store/config/configSelectors.js";
11
12
  import { selectHasAnyExecutionResultLimitBreaks } from "../../../model/store/executionResults/executionResultsSelectors.js";
12
13
  import { selectDashboardTimezoneConfig, selectDashboardTitle, selectIsNewDashboard, } from "../../../model/store/meta/metaSelectors.js";
13
14
  import { selectCanCreateAutomation, selectCanExportPdf, selectCanExportTabular, } from "../../../model/store/permissions/permissionsSelectors.js";
@@ -154,9 +155,12 @@ export function useDefaultMenuItems() {
154
155
  const isInEditMode = useDashboardSelector(selectIsInEditMode);
155
156
  const openDensityDialog = useCallback(() => dispatch(requestOpenDensityDialog()), [dispatch]);
156
157
  const isTimezoneEnabled = useDashboardSelector(selectEnableDashboardTimezone);
158
+ const enableTimezoneChange = useDashboardSelector(selectEnableTimezoneChange);
157
159
  const timezoneConfig = useDashboardSelector(selectDashboardTimezoneConfig);
158
160
  const isInViewMode = useDashboardSelector(selectIsInViewMode);
159
- const isTimezoneChangeVisible = isTimezoneEnabled && !!timezoneConfig?.allowUserOverrideInViewMode && isInViewMode;
161
+ const isTimezoneChangeVisible = isTimezoneEnabled &&
162
+ resolveDashboardTimezoneUserOverrideAllowed(timezoneConfig, enableTimezoneChange) &&
163
+ isInViewMode;
160
164
  const openTimezoneDialog = useCallback(() => dispatch(uiActions.openTimezoneDialog()), [dispatch]);
161
165
  // Do not show save as new button in menu item when it is already shown as a standalone top bar button.
162
166
  const isSaveAsVisible = useDashboardSelector(selectSaveAsVisible);
@@ -3,9 +3,10 @@ import { type ITimezoneIndicatorProps } from "./types.js";
3
3
  /**
4
4
  * Read-only indicator of the time zone effective on the dashboard, shown in the top bar.
5
5
  *
6
- * The badge label is the friendly timezone name only (e.g. "Prague"); the UTC offset is shown
7
- * only in the hover tooltip and is available via {@link ITimezoneIndicatorProps.timezone} for
8
- * custom renderings.
6
+ * The badge label is the friendly timezone name only (e.g. "Prague"); the hover tooltip shows
7
+ * a generic "Time zone" label. The full timezone info is available via
8
+ * {@link ITimezoneIndicatorProps.timezone} for custom renderings. Screen readers get an sr-only
9
+ * "Time zone: " prefix instead of the tooltip.
9
10
  *
10
11
  * @alpha
11
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TimezoneIndicator.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/timezoneIndicator/TimezoneIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAO1C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,cAAc,EACd,eAAe,EACf,QAAQ,EACX,EAAE,uBAAuB,GAAG,YAAY,GAAG,IAAI,CAyB/C"}
1
+ {"version":3,"file":"TimezoneIndicator.d.ts","sourceRoot":"","sources":["../../../../src/presentation/topBar/timezoneIndicator/TimezoneIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAO1C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,cAAc,EACd,eAAe,EACf,QAAQ,EACX,EAAE,uBAAuB,GAAG,YAAY,GAAG,IAAI,CAgC/C"}
@@ -1,17 +1,19 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { FormattedMessage } from "react-intl";
3
- import { Bubble, BubbleHoverTrigger } from "@gooddata/sdk-ui-kit";
2
+ import { FormattedMessage, useIntl } from "react-intl";
3
+ import { UiTooltip } from "@gooddata/sdk-ui-kit";
4
4
  import { resolveDashboardTimezoneInfo } from "./resolveDashboardTimezoneInfo.js";
5
5
  /**
6
6
  * Read-only indicator of the time zone effective on the dashboard, shown in the top bar.
7
7
  *
8
- * The badge label is the friendly timezone name only (e.g. "Prague"); the UTC offset is shown
9
- * only in the hover tooltip and is available via {@link ITimezoneIndicatorProps.timezone} for
10
- * custom renderings.
8
+ * The badge label is the friendly timezone name only (e.g. "Prague"); the hover tooltip shows
9
+ * a generic "Time zone" label. The full timezone info is available via
10
+ * {@link ITimezoneIndicatorProps.timezone} for custom renderings. Screen readers get an sr-only
11
+ * "Time zone: " prefix instead of the tooltip.
11
12
  *
12
13
  * @alpha
13
14
  */
14
15
  export function TimezoneIndicator({ timezoneConfig, defaultTimezone, timezone, }) {
16
+ const intl = useIntl();
15
17
  if (!timezoneConfig?.showTimezoneInfo) {
16
18
  return null;
17
19
  }
@@ -20,8 +22,7 @@ export function TimezoneIndicator({ timezoneConfig, defaultTimezone, timezone, }
20
22
  return null;
21
23
  }
22
24
  const { name } = resolvedTimezone;
23
- return (_jsx("div", { className: "s-timezone-indicator gd-timezone-indicator", children: _jsxs(BubbleHoverTrigger, { children: [
24
- _jsxs("div", { className: "gd-timezone-indicator-content", children: [
25
- _jsx("i", { "aria-hidden": "true", className: "gd-timezone-indicator-icon" }), name] }), _jsx(Bubble, { alignPoints: [{ align: "bc tc" }], alignTo: ".gd-timezone-indicator-icon", children: _jsx(FormattedMessage, { id: "topBar.timezoneIndicator.tooltip" }) })
26
- ] }) }));
25
+ return (_jsx("div", { className: "s-timezone-indicator gd-timezone-indicator", children: _jsx(UiTooltip, { arrowPlacement: "top-start", content: intl.formatMessage({ id: "topBar.timezoneIndicator.tooltip" }), triggerBy: ["hover"], anchor: _jsxs("div", { className: "gd-timezone-indicator-content", children: [
26
+ _jsx("i", { "aria-hidden": "true", className: "gd-timezone-indicator-icon" }), _jsx("span", { className: "sr-only", children: _jsx(FormattedMessage, { id: "topBar.timezoneIndicator.label" }) }), _jsx("span", { children: name })
27
+ ] }) }) }));
27
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useEditAlert.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useEditAlert.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,WAAW,EAInB,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EACH,KAAK,iBAAiB,EAEzB,MAAM,4EAA4E,CAAC;AAiBpF,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EACjC,MAAM,8CAA8C,CAAC;AAMtD,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,yBAAyB,CAAC;IACjC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;IAC3C,YAAY,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IACtF,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mCAAmC,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACzD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgRxB,CAAC"}
1
+ {"version":3,"file":"useEditAlert.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useEditAlert.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,WAAW,EAInB,MAAM,qBAAqB,CAAC;AAY7B,OAAO,EACH,KAAK,iBAAiB,EAEzB,MAAM,4EAA4E,CAAC;AAiBpF,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EACjC,MAAM,8CAA8C,CAAC;AAMtD,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,yBAAyB,CAAC;IACjC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;IAC3C,YAAY,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IACtF,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mCAAmC,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACzD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoRxB,CAAC"}
@@ -6,6 +6,7 @@ import { isAutomationExternalUserRecipient, isAutomationUnknownUserRecipient, is
6
6
  import { useDashboardSelector } from "../../../../../../model/react/DashboardStoreProvider.js";
7
7
  import { selectEnableAnomalyDetectionAlert, selectTimezone, selectWeekStart, } from "../../../../../../model/store/config/configSelectors.js";
8
8
  import { selectEntitlementMinimumRecurrenceMinutes } from "../../../../../../model/store/entitlements/entitlementsSelectors.js";
9
+ import { selectEffectiveDashboardTimezone } from "../../../../../../model/store/meta/metaSelectors.js";
9
10
  import { selectCanUseAiAssistant } from "../../../../../../model/store/permissions/permissionsSelectors.js";
10
11
  import { selectCurrentUser } from "../../../../../../model/store/user/userSelectors.js";
11
12
  import { getDescription, } from "../../../../../automations/alerting/DefaultAlertingDialog/utils/getters.js";
@@ -22,7 +23,11 @@ export const useEditAlert = ({ metrics, attributes, alert, onCreate, onUpdate, m
22
23
  const enableAnomalyDetectionAlert = useDashboardSelector(selectEnableAnomalyDetectionAlert);
23
24
  const enableAiAssistant = useDashboardSelector(selectCanUseAiAssistant);
24
25
  const weekStart = useDashboardSelector(selectWeekStart);
25
- const timezone = useDashboardSelector(selectTimezone);
26
+ // the custom dashboard timezone (view-mode override or dashboard configuration) wins over
27
+ // the workspace setting for the alert comparison-window computation
28
+ const workspaceTimezone = useDashboardSelector(selectTimezone);
29
+ const customTimezone = useDashboardSelector(selectEffectiveDashboardTimezone);
30
+ const timezone = customTimezone ?? workspaceTimezone;
26
31
  const intl = useIntl();
27
32
  const minimumRecurrenceMinutesEntitlement = useDashboardSelector(selectEntitlementMinimumRecurrenceMinutes);
28
33
  const allowHourlyRecurrence = parseInt(minimumRecurrenceMinutesEntitlement?.value ?? DEFAULT_MIN_RECURRENCE_MINUTES, 10) === 60;
@@ -6385,7 +6385,46 @@ export declare interface IAutomationsContextValue {
6385
6385
  allowHourlyRecurrence: boolean;
6386
6386
  currentUser: IUser;
6387
6387
  weekStart: WeekStart;
6388
+ /**
6389
+ * Automation timezone to display and compute schedule ("Starts on", alert crons, next-run):
6390
+ * the effective dashboard timezone when one is defined, otherwise the workspace setting.
6391
+ * Initial value for new schedule is same as exportTimezones.effectiveTimezone,
6392
+ * but then can be never changed for existing schedule.
6393
+ * Logic that needs to know where the timezone came from should use {@link IAutomationsContextValue.exportTimezones} instead.
6394
+ */
6388
6395
  timezone: string | undefined;
6396
+ /**
6397
+ * Timezone inputs of the scheduled-export "Time zone" section, read from the dashboard store
6398
+ * by the connectors layer — the scheduledEmail tree must not touch the store itself.
6399
+ */
6400
+ exportTimezones?: {
6401
+ /**
6402
+ * The enableDashboardTimezone feature flag.
6403
+ */
6404
+ isTimezoneFeatureEnabled: boolean;
6405
+ /**
6406
+ * Whether the dashboard allows the view-mode timezone override; gates the whole section.
6407
+ */
6408
+ allowUserOverrideInViewMode: boolean;
6409
+ /**
6410
+ * The dashboard's stored timezone configuration id (may be the browser-detected sentinel).
6411
+ */
6412
+ configuredTimezoneId: string | undefined;
6413
+ /**
6414
+ * The workspace/organization settings-hierarchy timezone.
6415
+ */
6416
+ workspaceTimezone: string | undefined;
6417
+ /**
6418
+ * The effective dashboard execution timezone (override wins over config, sentinel
6419
+ * resolved).
6420
+ */
6421
+ effectiveTimezone: string | undefined;
6422
+ /**
6423
+ * Timezone only when the backend cannot derive it at run time (view-mode override or
6424
+ * resolved browser detection); undefined for an explicitly configured dashboard timezone.
6425
+ */
6426
+ scheduledExportTimezone: string | undefined;
6427
+ };
6389
6428
  isWhiteLabeled: boolean;
6390
6429
  isSecondaryTitleVisible: boolean;
6391
6430
  externalRecipient: string | undefined;
@@ -17654,6 +17693,42 @@ export declare interface IScheduledEmailDialogSlots {
17654
17693
  * passed the current filters — see {@link IScheduledEmailDialogFiltersProps}.
17655
17694
  */
17656
17695
  Filters?: ComponentType<ISlotProps<IScheduledEmailDialogFiltersProps>>;
17696
+ /**
17697
+ * Wraps or replaces the "Time zone" section on the General tab. Must have a stable reference
17698
+ * identity — see {@link ISlotProps}.
17699
+ *
17700
+ * Renders only when the dialog shows the section at all: the dashboard-timezone feature is
17701
+ * enabled and the dashboard allows the view-mode timezone override. When the section is
17702
+ * hidden, the slot is not rendered either.
17703
+ */
17704
+ Timezone?: ComponentType<ISlotProps<ScheduledEmailDialogTimezoneDefaultProps>>;
17705
+ }
17706
+
17707
+ /**
17708
+ * Props of the default scheduled email dialog's "Time zone" section (the export-content timezone
17709
+ * picker on the General tab; unrelated to the schedule cron timezone).
17710
+ *
17711
+ * @alpha
17712
+ */
17713
+ export declare interface IScheduledEmailDialogTimezoneProps {
17714
+ /**
17715
+ * Whether the dialog schedules a single-widget export. Widget schedules always show a concrete
17716
+ * resolved timezone — they have no Default option, because the backend cannot derive anything
17717
+ * dashboard-scoped for them.
17718
+ */
17719
+ isWidget: boolean;
17720
+ /**
17721
+ * Current selection; an undefined id is the Default option (dashboard schedules only).
17722
+ */
17723
+ selection: IScheduleTimezoneSelection;
17724
+ /**
17725
+ * Concrete timezone the Default option currently resolves to (display only).
17726
+ */
17727
+ defaultResolvedTimezone: string | undefined;
17728
+ /**
17729
+ * Called with the picked timezone; undefined selects the Default option.
17730
+ */
17731
+ onTimezoneChange: (timezoneId: string | undefined) => void;
17657
17732
  }
17658
17733
 
17659
17734
  /**
@@ -17781,6 +17856,30 @@ export declare interface IScheduleEmailContext {
17781
17856
  schedule?: IAutomationMetadataObject;
17782
17857
  }
17783
17858
 
17859
+ /**
17860
+ * A timezone selection of the schedule dialog's "Time zone" section.
17861
+ *
17862
+ * `shouldSave` decides whether the value is baked into the export definitions. Values the backend
17863
+ * derives itself at run time are displayed but not saved: the Default option of a dashboard
17864
+ * schedule (id undefined; persisted dashboard configuration → settings hierarchy) and a widget
17865
+ * schedule showing the settings-hierarchy resolution (concrete id). Everything the backend cannot
17866
+ * derive is saved: the view-mode override and browser resolution always, the dashboard's stored
17867
+ * configuration for widget schedules, and any timezone picked manually in the dropdown.
17868
+ *
17869
+ * @alpha
17870
+ */
17871
+ export declare interface IScheduleTimezoneSelection {
17872
+ /**
17873
+ * Selected timezone (IANA ID); undefined represents the Default option.
17874
+ */
17875
+ id: string | undefined;
17876
+ /**
17877
+ * Whether the selection is baked into the export definitions or left for the backend to
17878
+ * derive at run time.
17879
+ */
17880
+ shouldSave: boolean;
17881
+ }
17882
+
17784
17883
  /**
17785
17884
  * Tests whether the provided object is an instance of {@link ICreateAttributeHierarchyRequested}.
17786
17885
  *
@@ -23478,6 +23577,13 @@ export declare type ScheduledEmailDialogHeaderDefaultProps = IScheduledEmailDial
23478
23577
  ref?: Ref<HTMLInputElement>;
23479
23578
  };
23480
23579
 
23580
+ /**
23581
+ * The exact props the default dialog renders its "Time zone" section with.
23582
+ *
23583
+ * @alpha
23584
+ */
23585
+ export declare type ScheduledEmailDialogTimezoneDefaultProps = IScheduledEmailDialogTimezoneProps;
23586
+
23481
23587
  /**
23482
23588
  * @internal
23483
23589
  */
@@ -25075,6 +25181,13 @@ export declare const selectEnableSnapshotExport: DashboardSelector<boolean>;
25075
25181
  */
25076
25182
  export declare const selectEnableSnapshotExportAccessibility: DashboardSelector<boolean>;
25077
25183
 
25184
+ /**
25185
+ * Returns whether end users may change the timezone in Analytical Designer and, by default, on dashboards.
25186
+ *
25187
+ * @alpha
25188
+ */
25189
+ export declare const selectEnableTimezoneChange: DashboardSelector<boolean>;
25190
+
25078
25191
  /**
25079
25192
  * Returns whether the unrelated data datasets are shown.
25080
25193
  *
@@ -26694,6 +26807,23 @@ export declare const selectRenderMode: DashboardSelector<RenderMode>;
26694
26807
  */
26695
26808
  export declare const selectSaveAsVisible: DashboardSelector<boolean>;
26696
26809
 
26810
+ /**
26811
+ * Selects the timezone to store into a scheduled export definition, as a concrete IANA timezone ID.
26812
+ *
26813
+ * @remarks
26814
+ * Unlike {@link selectEffectiveDashboardTimezone}, this returns a value only when the timezone
26815
+ * cannot be derived by the backend at schedule run time: when the viewer has an ad-hoc view-mode
26816
+ * override active, or when the dashboard is configured with the browser-detected sentinel (the
26817
+ * exporter service has no browser to detect from, so the resolution made here must be persisted).
26818
+ * When the dashboard has an explicit configured timezone — or none, falling back to workspace or
26819
+ * organization settings — this returns undefined and the schedule stores no timezone: the backend
26820
+ * reads the dashboard's stored timezone itself, so schedules stay up to date when the dashboard
26821
+ * or organization configuration changes without having to be recreated.
26822
+ *
26823
+ * @alpha
26824
+ */
26825
+ export declare const selectScheduledExportTimezone: DashboardSelector<string | undefined>;
26826
+
26697
26827
  /**
26698
26828
  * @alpha
26699
26829
  */
@@ -28280,9 +28410,10 @@ export declare type TabsReducer<A extends Action> = CaseReducer<ITabsState, A>;
28280
28410
  /**
28281
28411
  * Read-only indicator of the time zone effective on the dashboard, shown in the top bar.
28282
28412
  *
28283
- * The badge label is the friendly timezone name only (e.g. "Prague"); the UTC offset is shown
28284
- * only in the hover tooltip and is available via {@link ITimezoneIndicatorProps.timezone} for
28285
- * custom renderings.
28413
+ * The badge label is the friendly timezone name only (e.g. "Prague"); the hover tooltip shows
28414
+ * a generic "Time zone" label. The full timezone info is available via
28415
+ * {@link ITimezoneIndicatorProps.timezone} for custom renderings. Screen readers get an sr-only
28416
+ * "Time zone: " prefix instead of the tooltip.
28286
28417
  *
28287
28418
  * @alpha
28288
28419
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-dashboard",
3
- "version": "11.53.0-alpha.6",
3
+ "version": "11.53.0",
4
4
  "description": "GoodData SDK - Dashboard Component",
5
5
  "license": "LicenseRef-LICENSE",
6
6
  "author": "GoodData Corporation",
@@ -60,20 +60,20 @@
60
60
  "ts-invariant": "0.10.3",
61
61
  "tslib": "2.8.1",
62
62
  "uuid": "11.1.1",
63
- "@gooddata/sdk-backend-base": "11.53.0-alpha.6",
64
- "@gooddata/sdk-backend-spi": "11.53.0-alpha.6",
65
- "@gooddata/sdk-ui-charts": "11.53.0-alpha.6",
66
- "@gooddata/sdk-model": "11.53.0-alpha.6",
67
- "@gooddata/sdk-ui": "11.53.0-alpha.6",
68
- "@gooddata/sdk-ui-ext": "11.53.0-alpha.6",
69
- "@gooddata/sdk-ui-geo": "11.53.0-alpha.6",
70
- "@gooddata/sdk-ui-kit": "11.53.0-alpha.6",
71
- "@gooddata/sdk-ui-filters": "11.53.0-alpha.6",
72
- "@gooddata/sdk-ui-semantic-search": "11.53.0-alpha.6",
73
- "@gooddata/sdk-ui-pivot": "11.53.0-alpha.6",
74
- "@gooddata/sdk-ui-theme-provider": "11.53.0-alpha.6",
75
- "@gooddata/sdk-ui-vis-commons": "11.53.0-alpha.6",
76
- "@gooddata/util": "11.53.0-alpha.6"
63
+ "@gooddata/sdk-backend-base": "11.53.0",
64
+ "@gooddata/sdk-backend-spi": "11.53.0",
65
+ "@gooddata/sdk-model": "11.53.0",
66
+ "@gooddata/sdk-ui": "11.53.0",
67
+ "@gooddata/sdk-ui-charts": "11.53.0",
68
+ "@gooddata/sdk-ui-ext": "11.53.0",
69
+ "@gooddata/sdk-ui-filters": "11.53.0",
70
+ "@gooddata/sdk-ui-geo": "11.53.0",
71
+ "@gooddata/sdk-ui-kit": "11.53.0",
72
+ "@gooddata/sdk-ui-pivot": "11.53.0",
73
+ "@gooddata/sdk-ui-semantic-search": "11.53.0",
74
+ "@gooddata/sdk-ui-theme-provider": "11.53.0",
75
+ "@gooddata/sdk-ui-vis-commons": "11.53.0",
76
+ "@gooddata/util": "11.53.0"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@microsoft/api-documenter": "^7.17.0",
@@ -119,12 +119,12 @@
119
119
  "typescript": "5.9.3",
120
120
  "vitest": "4.1.8",
121
121
  "vitest-dom": "0.1.1",
122
- "@gooddata/i18n-toolkit": "11.53.0-alpha.6",
123
- "@gooddata/oxlint-config": "11.53.0-alpha.6",
124
- "@gooddata/eslint-config": "11.53.0-alpha.6",
125
- "@gooddata/reference-workspace": "11.53.0-alpha.6",
126
- "@gooddata/sdk-backend-mockingbird": "11.53.0-alpha.6",
127
- "@gooddata/stylelint-config": "11.53.0-alpha.6"
122
+ "@gooddata/eslint-config": "11.53.0",
123
+ "@gooddata/i18n-toolkit": "11.53.0",
124
+ "@gooddata/oxlint-config": "11.53.0",
125
+ "@gooddata/reference-workspace": "11.53.0",
126
+ "@gooddata/stylelint-config": "11.53.0",
127
+ "@gooddata/sdk-backend-mockingbird": "11.53.0"
128
128
  },
129
129
  "peerDependencies": {
130
130
  "react": "^18.0.0 || ^19.0.0",
@@ -31798,6 +31798,35 @@ figure {
31798
31798
  width: 100%;
31799
31799
  }
31800
31800
 
31801
+ .gd-schedule-timezone-field {
31802
+ align-items: flex-start;
31803
+ }
31804
+ .gd-schedule-timezone-field .gd-label {
31805
+ line-height: 28px;
31806
+ }
31807
+ .gd-schedule-timezone-field__content {
31808
+ display: flex;
31809
+ flex-direction: column;
31810
+ min-width: 0;
31811
+ flex: 1 1 auto;
31812
+ }
31813
+ .gd-schedule-timezone-field__row {
31814
+ display: flex;
31815
+ align-items: center;
31816
+ gap: 10px;
31817
+ }
31818
+ .gd-schedule-timezone-field__current-time {
31819
+ white-space: nowrap;
31820
+ }
31821
+ .gd-schedule-timezone-field__message {
31822
+ color: var(--gd-palette-complementary-7);
31823
+ font-size: 12px;
31824
+ font-style: normal;
31825
+ font-weight: 400;
31826
+ line-height: 21px;
31827
+ margin-top: 5px;
31828
+ }
31829
+
31801
31830
  .gd-pdf-export-dialog {
31802
31831
  min-width: 300px;
31803
31832
  }