@gooddata/sdk-ui-dashboard 11.52.0-alpha.6 → 11.52.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 (177) 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 +5 -4
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +5 -4
  7. package/esm/kdaDialog/composition/hooks/usePeriodChangeHandler.js +5 -0
  8. package/esm/model/store/config/configSelectors.d.ts +6 -0
  9. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  10. package/esm/model/store/config/configSelectors.js +8 -0
  11. package/esm/model/store/keyDriverAnalysis/const.d.ts +6 -6
  12. package/esm/model/store/keyDriverAnalysis/const.d.ts.map +1 -1
  13. package/esm/model/store/keyDriverAnalysis/const.js +12 -26
  14. package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
  15. package/esm/model/store/widgetDrills/widgetDrillSelectors.js +5 -5
  16. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +1 -1
  17. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  18. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +3 -4
  19. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts +5 -1
  20. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -1
  21. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +5 -1
  22. package/esm/presentation/automations/alerting/types.d.ts +15 -1
  23. package/esm/presentation/automations/alerting/types.d.ts.map +1 -1
  24. package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts +26 -0
  25. package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts.map +1 -1
  26. package/esm/presentation/automations/contexts/AlertingDialogContext.js +26 -0
  27. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts +10 -1
  28. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts.map +1 -1
  29. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.js +9 -0
  30. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts +1 -1
  31. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  32. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +19 -17
  33. package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.d.ts +3 -0
  34. package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.d.ts.map +1 -1
  35. package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.js +5 -1
  36. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts +22 -0
  37. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts.map +1 -0
  38. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +150 -0
  39. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.d.ts +28 -0
  40. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.d.ts.map +1 -0
  41. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.js +20 -0
  42. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.d.ts +25 -0
  43. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.d.ts.map +1 -0
  44. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.js +20 -0
  45. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.d.ts +25 -0
  46. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.d.ts.map +1 -0
  47. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.js +20 -0
  48. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.d.ts +26 -0
  49. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.d.ts.map +1 -0
  50. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.js +20 -0
  51. package/esm/presentation/automations/scheduledEmail/state/exportDefinitions.d.ts.map +1 -0
  52. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/utils → state}/exportDefinitions.js +1 -1
  53. package/esm/presentation/automations/scheduledEmail/state/missingScheduledExportStateProvider.d.ts +7 -0
  54. package/esm/presentation/automations/scheduledEmail/state/missingScheduledExportStateProvider.d.ts.map +1 -0
  55. package/esm/presentation/automations/scheduledEmail/state/missingScheduledExportStateProvider.js +9 -0
  56. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailEffectiveFilters.d.ts +2 -2
  57. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailEffectiveFilters.d.ts.map +1 -0
  58. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailEffectiveFilters.js +4 -4
  59. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailExportSettings.d.ts +12 -25
  60. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailExportSettings.d.ts.map +1 -0
  61. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailExportSettings.js +38 -86
  62. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks/useScheduledEmailFilters.d.ts → state/useScheduledEmailFiltersModel.d.ts} +7 -7
  63. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts.map +1 -0
  64. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks/useScheduledEmailFilters.js → state/useScheduledEmailFiltersModel.js} +26 -9
  65. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.d.ts.map +1 -0
  66. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailFormState.js +25 -25
  67. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormValidity.d.ts.map +1 -0
  68. package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailFormValidity.js +3 -3
  69. package/esm/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.d.ts +39 -0
  70. package/esm/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.d.ts.map +1 -0
  71. package/esm/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.js +102 -0
  72. package/esm/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.d.ts +13 -0
  73. package/esm/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.d.ts.map +1 -0
  74. package/esm/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.js +34 -0
  75. package/esm/presentation/automations/scheduledEmail/types.d.ts +15 -1
  76. package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
  77. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts +2 -1
  78. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts.map +1 -1
  79. package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.js +6 -2
  80. package/esm/presentation/drill/utils/kdaUtils.d.ts +1 -1
  81. package/esm/presentation/drill/utils/kdaUtils.d.ts.map +1 -1
  82. package/esm/presentation/drill/utils/kdaUtils.js +6 -5
  83. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts +1 -1
  84. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts.map +1 -1
  85. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.js +2 -2
  86. package/esm/presentation/filterBar/dateFilter/types.d.ts +8 -1
  87. package/esm/presentation/filterBar/dateFilter/types.d.ts.map +1 -1
  88. package/esm/presentation/filterBar/dateFilter/types.js +1 -1
  89. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +2 -0
  90. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  91. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +9 -7
  92. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +2 -0
  93. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  94. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +9 -7
  95. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +2 -0
  96. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  97. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +9 -7
  98. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +2 -0
  99. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  100. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +9 -7
  101. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +2 -0
  102. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  103. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +9 -7
  104. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +2 -0
  105. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  106. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +9 -7
  107. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +2 -0
  108. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  109. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +9 -7
  110. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +2 -0
  111. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  112. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +9 -7
  113. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +2 -0
  114. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  115. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +9 -7
  116. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +2 -0
  117. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  118. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +9 -7
  119. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +2 -0
  120. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  121. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +9 -7
  122. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +2 -0
  123. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  124. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +9 -7
  125. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +2 -0
  126. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  127. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +9 -7
  128. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +2 -0
  129. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  130. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +9 -7
  131. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +2 -0
  132. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  133. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +9 -7
  134. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +2 -0
  135. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  136. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +9 -7
  137. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +2 -0
  138. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  139. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +9 -7
  140. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +2 -0
  141. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  142. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +9 -7
  143. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +2 -0
  144. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  145. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +9 -7
  146. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +2 -0
  147. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  148. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +9 -7
  149. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +2 -0
  150. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  151. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +9 -7
  152. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +2 -0
  153. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  154. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +9 -7
  155. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +2 -0
  156. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  157. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +9 -7
  158. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +2 -0
  159. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  160. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +9 -7
  161. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +2 -0
  162. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  163. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +9 -7
  164. package/esm/sdk-ui-dashboard.d.ts +126 -18
  165. package/package.json +21 -21
  166. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts +0 -89
  167. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts.map +0 -1
  168. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.js +0 -131
  169. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailEffectiveFilters.d.ts.map +0 -1
  170. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailExportSettings.d.ts.map +0 -1
  171. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailFilters.d.ts.map +0 -1
  172. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailFormState.d.ts.map +0 -1
  173. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailFormValidity.d.ts.map +0 -1
  174. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/utils/exportDefinitions.d.ts.map +0 -1
  175. /package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/utils → state}/exportDefinitions.d.ts +0 -0
  176. /package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailFormState.d.ts +0 -0
  177. /package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailFormValidity.d.ts +0 -0
@@ -1,12 +1,12 @@
1
1
  // (C) 2026 GoodData Corporation
2
- import { useState } from "react";
3
- import { setExportParametersByTab } from "../../../../../_staging/automation/index.js";
4
- import { useAutomationsContext } from "../../../contexts/AutomationsContext.js";
5
- import { useScheduledEmailDialogContext } from "../../../contexts/ScheduledEmailDialogContext.js";
6
- import { convertExternalRecipientToAutomationRecipient, convertUserToAutomationRecipient, } from "../../../shared/utils/automationUtils.js";
7
- import { toModifiedISOStringToTimezone, toNormalizedFirstRunAndCron, toNormalizedStartDate, } from "../../utils/date.js";
8
- import { getUserTimezone } from "../../utils/timezone.js";
9
- import { newDashboardExportDefinitionMetadataObjectDefinition, newWidgetExportDefinitionMetadataObjectDefinition, } from "../utils/exportDefinitions.js";
2
+ import { useCallback, useMemo, useState } from "react";
3
+ import { setExportParametersByTab } from "../../../../_staging/automation/index.js";
4
+ import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
5
+ import { useScheduledEmailDialogContext } from "../../contexts/ScheduledEmailDialogContext.js";
6
+ import { convertExternalRecipientToAutomationRecipient, convertUserToAutomationRecipient, } from "../../shared/utils/automationUtils.js";
7
+ import { toModifiedISOStringToTimezone, toNormalizedFirstRunAndCron, toNormalizedStartDate, } from "../utils/date.js";
8
+ import { getUserTimezone } from "../utils/timezone.js";
9
+ import { newDashboardExportDefinitionMetadataObjectDefinition, newWidgetExportDefinitionMetadataObjectDefinition, } from "./exportDefinitions.js";
10
10
  /**
11
11
  * Owns the scheduled-email dialog's `editedAutomation` draft (initialized either from
12
12
  * `scheduledExportToEdit` or via `newAutomationMetadataObjectDefinition`), its `originalAutomation`
@@ -27,10 +27,10 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
27
27
  const isWidget = !!widget && !!insight;
28
28
  // Determine target tab ID if widget is present
29
29
  const targetTabId = widget?.localIdentifier ? widgetTabMap[widget.localIdentifier] : undefined;
30
- const defaultUser = convertUserToAutomationRecipient(currentUser);
31
- const defaultRecipient = externalRecipientOverride
30
+ const defaultUser = useMemo(() => convertUserToAutomationRecipient(currentUser), [currentUser]);
31
+ const defaultRecipient = useMemo(() => externalRecipientOverride
32
32
  ? convertExternalRecipientToAutomationRecipient(externalRecipientOverride)
33
- : convertUserToAutomationRecipient(currentUser);
33
+ : convertUserToAutomationRecipient(currentUser), [externalRecipientOverride, currentUser]);
34
34
  const firstChannel = notificationChannels[0]?.id;
35
35
  const [editedAutomation, setEditedAutomation] = useState(() => scheduledExportToEdit ??
36
36
  newAutomationMetadataObjectDefinition(isWidget
@@ -70,11 +70,11 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
70
70
  const [isTitleValid, setIsTitleValid] = useState(true);
71
71
  const [isSubjectValid, setIsSubjectValid] = useState(true);
72
72
  const [isOnMessageValid, setIsOnMessageValid] = useState(true);
73
- const onTitleChange = (value, isValid) => {
73
+ const onTitleChange = useCallback((value, isValid) => {
74
74
  setIsTitleValid(isValid);
75
75
  setEditedAutomation((s) => ({ ...s, title: value }));
76
- };
77
- const onRecurrenceChange = (cronExpression, startDate, isValid) => {
76
+ }, []);
77
+ const onRecurrenceChange = useCallback((cronExpression, startDate, isValid) => {
78
78
  setIsCronValid(isValid);
79
79
  setEditedAutomation((s) => ({
80
80
  ...s,
@@ -84,26 +84,26 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
84
84
  firstRun: toModifiedISOStringToTimezone(startDate ?? new Date(), timezone).iso,
85
85
  },
86
86
  }));
87
- };
88
- const onEvaluationModeChange = (isShared) => {
87
+ }, [timezone]);
88
+ const onEvaluationModeChange = useCallback((isShared) => {
89
89
  setEditedAutomation((s) => ({
90
90
  ...s,
91
91
  evaluationMode: isShared ? "SHARED" : "PER_RECIPIENT",
92
92
  }));
93
- };
94
- const onDestinationChange = (notificationChannelId) => {
93
+ }, []);
94
+ const onDestinationChange = useCallback((notificationChannelId) => {
95
95
  setEditedAutomation((s) => ({
96
96
  ...s,
97
97
  notificationChannel: notificationChannelId,
98
98
  }));
99
- };
100
- const onRecipientsChange = (updatedRecipients) => {
99
+ }, []);
100
+ const onRecipientsChange = useCallback((updatedRecipients) => {
101
101
  setEditedAutomation((s) => ({
102
102
  ...s,
103
103
  recipients: updatedRecipients,
104
104
  }));
105
- };
106
- const onSubjectChange = (value, isValid) => {
105
+ }, []);
106
+ const onSubjectChange = useCallback((value, isValid) => {
107
107
  setIsSubjectValid(isValid);
108
108
  setEditedAutomation((s) => ({
109
109
  ...s,
@@ -112,8 +112,8 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
112
112
  subject: value,
113
113
  },
114
114
  }));
115
- };
116
- const onMessageChange = (value, isValid) => {
115
+ }, []);
116
+ const onMessageChange = useCallback((value, isValid) => {
117
117
  setIsOnMessageValid(isValid);
118
118
  setEditedAutomation((s) => ({
119
119
  ...s,
@@ -122,7 +122,7 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
122
122
  message: value,
123
123
  },
124
124
  }));
125
- };
125
+ }, []);
126
126
  return {
127
127
  editedAutomation,
128
128
  setEditedAutomation,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScheduledEmailFormValidity.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/useScheduledEmailFormValidity.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAI1C,MAAM,qBAAqB,CAAC;AAM7B,MAAM,WAAW,mCAAmC;IAChD,gBAAgB,EAAE,mCAAmC,CAAC;IACtD,kBAAkB,EAAE,mCAAmC,CAAC;IACxD,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,mCAAmC,GAAG;IAIvF,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,6BAA6B,EAAE,OAAO,CAAC;CAC1C,CAsEA"}
@@ -1,9 +1,9 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { useIntl } from "react-intl";
3
3
  import { isAutomationExternalUserRecipient, isAutomationUnknownUserRecipient, isAutomationUserRecipient, } from "@gooddata/sdk-model";
4
- import { areAutomationsEqual } from "../../../shared/utils/automationUtils.js";
5
- import { isEmail } from "../../utils/validate.js";
6
- import { useScheduleValidation } from "./useScheduleValidation.js";
4
+ import { areAutomationsEqual } from "../../shared/utils/automationUtils.js";
5
+ import { useScheduleValidation } from "../DefaultScheduledEmailDialog/hooks/useScheduleValidation.js";
6
+ import { isEmail } from "../utils/validate.js";
7
7
  export function useScheduledEmailFormValidity(props) {
8
8
  const { editedAutomation, originalAutomation, scheduledExportToEdit, notificationChannels, defaultRecipient, maxAutomationsRecipients, isCronValid, isTitleValid, isSubjectValid, isOnMessageValid, } = props;
9
9
  const intl = useIntl();
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Reads what the scheduled-export dialog's attachment section displays: the selected formats, which
3
+ * export kinds are present, the per-format settings with their fallbacks, and the slides template
4
+ * chosen per format.
5
+ *
6
+ * Derived per consumer rather than published on a context: every value is a pure function of the
7
+ * draft and of workspace settings, and no consumer observes their identity. The handlers that
8
+ * *change* attachments are on {@link useScheduledExportActions}, because they capture the stored
9
+ * export-parameter wire, which must exist once per dialog.
10
+ *
11
+ * @internal
12
+ */
13
+ export declare function useScheduledExportAttachments(): {
14
+ selectedAttachments: ("CSV" | "CSV_RAW" | "HTML" | "PDF" | "PDF_SLIDES" | "PDF_TABULAR" | "PNG" | "PPTX" | "XLSX")[];
15
+ isDashboardExportSelected: boolean;
16
+ isCsvExportSelected: boolean;
17
+ isXlsxExportSelected: boolean;
18
+ xlsxSettings: {
19
+ mergeHeaders: boolean;
20
+ exportInfo: boolean;
21
+ };
22
+ pdfSettings: {
23
+ pageSize: import("../utils/pdfPageSize.js").PdfPageSize;
24
+ orientation: "landscape" | "portrait";
25
+ exportInfo: boolean;
26
+ };
27
+ csvSettings: {
28
+ delimiter: string;
29
+ };
30
+ csvRawSettings: {
31
+ delimiter: string;
32
+ };
33
+ slidesTemplateIds: {
34
+ PPTX: string | undefined;
35
+ PDF_SLIDES: string | undefined;
36
+ PDF: string | undefined;
37
+ };
38
+ };
39
+ //# sourceMappingURL=useScheduledExportAttachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScheduledExportAttachments.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;EAwH5C"}
@@ -0,0 +1,102 @@
1
+ // (C) 2019-2026 GoodData Corporation
2
+ import { useMemo } from "react";
3
+ import { DEFAULT_CSV_DELIMITER, isExportDefinitionDashboardRequestPayload, isExportDefinitionVisualizationObjectRequestPayload, } from "@gooddata/sdk-model";
4
+ import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
5
+ import { useScheduledEmailDialogContext } from "../../contexts/ScheduledEmailDialogContext.js";
6
+ import { getDefaultPdfPageSize } from "../utils/pdfPageSize.js";
7
+ import { useScheduledExportDraft } from "./ScheduledExportDraftContext.js";
8
+ /**
9
+ * Reads what the scheduled-export dialog's attachment section displays: the selected formats, which
10
+ * export kinds are present, the per-format settings with their fallbacks, and the slides template
11
+ * chosen per format.
12
+ *
13
+ * Derived per consumer rather than published on a context: every value is a pure function of the
14
+ * draft and of workspace settings, and no consumer observes their identity. The handlers that
15
+ * *change* attachments are on {@link useScheduledExportActions}, because they capture the stored
16
+ * export-parameter wire, which must exist once per dialog.
17
+ *
18
+ * @internal
19
+ */
20
+ export function useScheduledExportAttachments() {
21
+ const { settings } = useAutomationsContext();
22
+ const { widget, insight } = useScheduledEmailDialogContext();
23
+ const { editedAutomation } = useScheduledExportDraft();
24
+ const resolvedDefaultCsvDelimiter = settings?.exportCsvCustomDelimiter ?? DEFAULT_CSV_DELIMITER;
25
+ const defaultPdfPageSize = getDefaultPdfPageSize(settings?.formatLocale);
26
+ const isWidget = !!widget && !!insight;
27
+ const selectedAttachments = useMemo(() => {
28
+ return (editedAutomation.exportDefinitions
29
+ ?.map((exportDefinition) => exportDefinition.requestPayload.format)
30
+ .filter(Boolean) ?? []);
31
+ }, [editedAutomation.exportDefinitions]);
32
+ const isDashboardExportSelected = editedAutomation.exportDefinitions?.some((exportDefinition) => isExportDefinitionDashboardRequestPayload(exportDefinition.requestPayload)) ?? true;
33
+ const isCsvExportSelected = editedAutomation.exportDefinitions?.some((exportDefinition) => {
34
+ if (isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload)) {
35
+ return exportDefinition.requestPayload.format === "CSV";
36
+ }
37
+ return false;
38
+ }) ?? false;
39
+ const isXlsxExportSelected = editedAutomation.exportDefinitions?.some((exportDefinition) => {
40
+ if (isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload)) {
41
+ return exportDefinition.requestPayload.format === "XLSX";
42
+ }
43
+ return false;
44
+ }) ?? false;
45
+ const xlsxExportSettings = editedAutomation.exportDefinitions?.find((exportDefinition) => exportDefinition.requestPayload.format === "XLSX")?.requestPayload.settings;
46
+ const xlsxSettings = {
47
+ mergeHeaders: xlsxExportSettings?.mergeHeaders ?? true,
48
+ exportInfo: xlsxExportSettings?.exportInfo ?? true,
49
+ };
50
+ const pdfVisualizationSettings = editedAutomation.exportDefinitions?.find((exportDefinition) => isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload) &&
51
+ exportDefinition.requestPayload.format === "PDF_TABULAR")?.requestPayload.settings;
52
+ const pdfTabularSettings = pdfVisualizationSettings && "pageSize" in pdfVisualizationSettings
53
+ ? pdfVisualizationSettings
54
+ : undefined;
55
+ const pdfSettings = {
56
+ pageSize: pdfTabularSettings?.pageSize ?? defaultPdfPageSize ?? "A4",
57
+ orientation: pdfTabularSettings?.orientation ?? "portrait",
58
+ exportInfo: pdfTabularSettings?.exportInfo ?? true,
59
+ };
60
+ const csvExportDefinition = editedAutomation.exportDefinitions?.find((exportDefinition) => isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload) &&
61
+ exportDefinition.requestPayload.format === "CSV");
62
+ const csvExportSettings = csvExportDefinition &&
63
+ isExportDefinitionVisualizationObjectRequestPayload(csvExportDefinition.requestPayload)
64
+ ? csvExportDefinition.requestPayload.settings
65
+ : undefined;
66
+ const csvSettings = {
67
+ delimiter: csvExportSettings?.delimiter ?? resolvedDefaultCsvDelimiter,
68
+ };
69
+ const csvRawExportDefinition = editedAutomation.exportDefinitions?.find((exportDefinition) => isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload) &&
70
+ exportDefinition.requestPayload.format === "CSV_RAW");
71
+ const csvRawExportSettings = csvRawExportDefinition &&
72
+ isExportDefinitionVisualizationObjectRequestPayload(csvRawExportDefinition.requestPayload)
73
+ ? csvRawExportDefinition.requestPayload.settings
74
+ : undefined;
75
+ const csvRawSettings = {
76
+ delimiter: csvRawExportSettings?.delimiter ?? resolvedDefaultCsvDelimiter,
77
+ };
78
+ // Extract templateId per slides format, scoped to the current dialog mode
79
+ const getTemplateIdForFormat = (format) => {
80
+ const def = editedAutomation.exportDefinitions?.find((ed) => ed.requestPayload.format === format &&
81
+ (isWidget
82
+ ? isExportDefinitionVisualizationObjectRequestPayload(ed.requestPayload)
83
+ : isExportDefinitionDashboardRequestPayload(ed.requestPayload)));
84
+ return def?.requestPayload.templateId;
85
+ };
86
+ const slidesTemplateIds = {
87
+ PPTX: getTemplateIdForFormat("PPTX"),
88
+ PDF_SLIDES: getTemplateIdForFormat("PDF_SLIDES"),
89
+ PDF: getTemplateIdForFormat("PDF"),
90
+ };
91
+ return {
92
+ selectedAttachments,
93
+ isDashboardExportSelected,
94
+ isCsvExportSelected,
95
+ isXlsxExportSelected,
96
+ xlsxSettings,
97
+ pdfSettings,
98
+ csvSettings,
99
+ csvRawSettings,
100
+ slidesTemplateIds,
101
+ };
102
+ }
@@ -0,0 +1,13 @@
1
+ import { useScheduledEmailFormValidity } from "./useScheduledEmailFormValidity.js";
2
+ /**
3
+ * Reads the scheduled-export dialog's validity: whether submit is enabled, the validation message to
4
+ * show, whether the schedule's source widget still exists, and which recipient kinds the selected
5
+ * notification channel permits.
6
+ *
7
+ * Derived per consumer rather than published on a context: it is a pure function of the draft, the
8
+ * recipient defaults and the dialog's own context, and no consumer observes its identity.
9
+ *
10
+ * @internal
11
+ */
12
+ export declare function useScheduledExportDialogValidity(): ReturnType<typeof useScheduledEmailFormValidity>;
13
+ //# sourceMappingURL=useScheduledExportDialogValidity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScheduledExportDialogValidity.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,IAAI,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAyBnG"}
@@ -0,0 +1,34 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
3
+ import { useScheduledEmailDialogContext } from "../../contexts/ScheduledEmailDialogContext.js";
4
+ import { useScheduledExportData } from "./ScheduledExportDataContext.js";
5
+ import { useScheduledExportDraft } from "./ScheduledExportDraftContext.js";
6
+ import { useScheduledEmailFormValidity } from "./useScheduledEmailFormValidity.js";
7
+ /**
8
+ * Reads the scheduled-export dialog's validity: whether submit is enabled, the validation message to
9
+ * show, whether the schedule's source widget still exists, and which recipient kinds the selected
10
+ * notification channel permits.
11
+ *
12
+ * Derived per consumer rather than published on a context: it is a pure function of the draft, the
13
+ * recipient defaults and the dialog's own context, and no consumer observes its identity.
14
+ *
15
+ * @internal
16
+ */
17
+ export function useScheduledExportDialogValidity() {
18
+ const { maxAutomationsRecipients } = useAutomationsContext();
19
+ const { scheduledExportToEdit, notificationChannels } = useScheduledEmailDialogContext();
20
+ const { editedAutomation, originalAutomation, isCronValid, isTitleValid, isSubjectValid, isOnMessageValid, } = useScheduledExportDraft();
21
+ const { defaultRecipient } = useScheduledExportData();
22
+ return useScheduledEmailFormValidity({
23
+ editedAutomation,
24
+ originalAutomation,
25
+ scheduledExportToEdit,
26
+ notificationChannels,
27
+ defaultRecipient,
28
+ maxAutomationsRecipients,
29
+ isCronValid,
30
+ isTitleValid,
31
+ isSubjectValid,
32
+ isOnMessageValid,
33
+ });
34
+ }
@@ -1,4 +1,4 @@
1
- import { type ComponentType } from "react";
1
+ import { type ComponentType, type ReactNode } from "react";
2
2
  import { type FilterContextItem, type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IFilter, type IInsight, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type IWidget } from "@gooddata/sdk-model";
3
3
  import { type GoodDataSdkError } from "@gooddata/sdk-ui";
4
4
  /**
@@ -73,6 +73,20 @@ export interface IScheduledEmailDialogProps {
73
73
  * @deprecated read `isLoading` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
74
74
  */
75
75
  isLoading?: boolean;
76
+ /**
77
+ * Custom content rendered as the first child of the dialog content area, above the default form.
78
+ *
79
+ * @remarks
80
+ * Use this to surface an application-specific banner or warning without replacing the whole dialog.
81
+ */
82
+ topContent?: ReactNode;
83
+ /**
84
+ * Custom content rendered as the last child of the dialog content area, below the default form.
85
+ *
86
+ * @remarks
87
+ * Use this to surface an application-specific note or disclaimer without replacing the whole dialog.
88
+ */
89
+ bottomContent?: ReactNode;
76
90
  /**
77
91
  * Callback to be called, when user submits the scheduled email dialog.
78
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/automations/scheduledEmail/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAElD;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAE/F;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB;;;;;;;;;;;;;OAaG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAEvC;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAE1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,CACP,wBAAwB,EAAE,yBAAyB,GAAG,mCAAmC,KACxF,IAAI,CAAC;IAEV;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAEvE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAE1E;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAEhD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAE3B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,oCAAoC;IACjD;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAErC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAE/F;;;;;OAKG;IACH,WAAW,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAE1C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAE5D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrD;AAMD;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAC;AAE5F;;GAEG;AACH,MAAM,MAAM,6CAA6C,GACrD,aAAa,CAAC,oCAAoC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/automations/scheduledEmail/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAElD;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAE/F;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB;;;;;;;;;;;;;OAaG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAEvC;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAE1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,EAAE,CACP,wBAAwB,EAAE,yBAAyB,GAAG,mCAAmC,KACxF,IAAI,CAAC;IAEV;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAEvE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAE1E;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAEhD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAE3B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,oCAAoC;IACjD;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAErC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAE/F;;;;;OAKG;IACH,WAAW,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAE1C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAE5D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrD;AAMD;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAC;AAE5F;;GAEG;AACH,MAAM,MAAM,6CAA6C,GACrD,aAAa,CAAC,oCAAoC,CAAC,CAAC"}
@@ -12,7 +12,7 @@ export interface IDrillSelectDropdownProps extends IDrillSelectContext {
12
12
  onSelect: (item: DashboardDrillDefinition, context: unknown) => void;
13
13
  }
14
14
  export declare function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCloseReturnFocus, onSelect, drillDefinitions, drillEvent }: IDrillSelectDropdownProps): import("react/jsx-runtime").JSX.Element | null;
15
- export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, }: {
15
+ export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities, }: {
16
16
  drillDefinitions: DashboardDrillDefinition[];
17
17
  drillEvent: IDrillEvent;
18
18
  insights: ObjRefMap<IInsight>;
@@ -21,5 +21,6 @@ export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, in
21
21
  intl: IntlShape;
22
22
  widget?: IWidget | undefined;
23
23
  attributeDisplayForms: Record<string, IAttributeDisplayFormMetadataObject>;
24
+ enableSecondGranularities?: boolean | undefined;
24
25
  }) => IDrillSelectItem[];
25
26
  //# sourceMappingURL=DrillSelectDropdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DrillSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/DrillSelectDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAGrD,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAcf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAIxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,OAAO,EAAE,KAAK,wBAAwB,EAAyB,MAAM,mBAAmB,CAAC;AAazF,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IAClE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,mBAAmB,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACb,EAAE,yBAAyB,kDAuK3B;AAqFD,eAAO,MAAM,sBAAsB;;;;;;;;;wBA2JlC,CAAC"}
1
+ {"version":3,"file":"DrillSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/DrillSelectDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAGrD,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAcf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAIxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,OAAO,EAAE,KAAK,wBAAwB,EAAyB,MAAM,mBAAmB,CAAC;AAazF,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IAClE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,mBAAmB,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACb,EAAE,yBAAyB,kDA0K3B;AAqFD,eAAO,MAAM,sBAAsB;;;;;;;;;;wBA6JlC,CAAC"}
@@ -12,6 +12,7 @@ import { getDrillOriginLocalIdentifier } from "../../../_staging/drills/drilling
12
12
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
13
13
  import { selectAccessibleDashboards } from "../../../model/store/accessibleDashboards/accessibleDashboardsSelectors.js";
14
14
  import { selectCatalogAttributeDisplayFormsById } from "../../../model/store/catalog/catalogSelectors.js";
15
+ import { selectEnableSecondGranularities } from "../../../model/store/config/configSelectors.js";
15
16
  import { selectInsightsMap } from "../../../model/store/insights/insightsSelectors.js";
16
17
  import { selectDashboardTitle } from "../../../model/store/meta/metaSelectors.js";
17
18
  import { selectWidgetByRef } from "../../../model/store/tabs/layout/layoutSelectors.js";
@@ -31,6 +32,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
31
32
  const insights = useDashboardSelector(selectInsightsMap);
32
33
  const widget = useDashboardSelector(selectWidgetByRef(drillEvent.widgetRef));
33
34
  const attributeDisplayForms = useDashboardSelector(selectCatalogAttributeDisplayFormsById);
35
+ const enableSecondGranularities = useDashboardSelector(selectEnableSecondGranularities);
34
36
  const stopPropagation = useCallback((e) => {
35
37
  e.stopPropagation();
36
38
  }, []);
@@ -77,6 +79,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
77
79
  attributeDisplayForms,
78
80
  intl,
79
81
  widget: widget,
82
+ enableSecondGranularities,
80
83
  }), [
81
84
  drillDefinitions,
82
85
  drillEvent,
@@ -86,6 +89,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
86
89
  intl,
87
90
  widget,
88
91
  attributeDisplayForms,
92
+ enableSecondGranularities,
89
93
  ]);
90
94
  const grouped = groupBy(drillSelectItems, (item) => {
91
95
  if (isDrillDownDefinition(item.drillDefinition)) {
@@ -208,7 +212,7 @@ function calculateAlignPoints(anchorClass, drillEvent) {
208
212
  },
209
213
  ];
210
214
  }
211
- export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, }) => {
215
+ export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities = false, }) => {
212
216
  const totalDrillToUrls = getTotalDrillToUrlCount(drillDefinitions);
213
217
  return drillDefinitions.flatMap((drillDefinition) => {
214
218
  invariant(!isDrillToLegacyDashboard(drillDefinition), "Drill to pixel perfect dashboards from insight is not supported.");
@@ -296,7 +300,7 @@ export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights,
296
300
  };
297
301
  }
298
302
  if (isKeyDriveAnalysis(drillDefinition)) {
299
- const items = getKdaKeyDriverCombinations(drillDefinition, drillEvent);
303
+ const items = getKdaKeyDriverCombinations(drillDefinition, drillEvent, enableSecondGranularities);
300
304
  return items.map((item) => {
301
305
  return {
302
306
  name: getKeyDriverCombinationItemTitle(intl, item),
@@ -5,7 +5,7 @@ import type { IDashboardKeyDriverCombinationItem } from "../../../model/events/d
5
5
  /**
6
6
  * @internal
7
7
  */
8
- export declare function getKdaKeyDriverCombinations(drillDefinition: IKeyDriveAnalysis, drillEvent: IDrillEvent): IDashboardKeyDriverCombinationItem[];
8
+ export declare function getKdaKeyDriverCombinations(drillDefinition: IKeyDriveAnalysis, drillEvent: IDrillEvent, enableSecondGranularities?: boolean): IDashboardKeyDriverCombinationItem[];
9
9
  /**
10
10
  * @internal
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"kdaUtils.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/utils/kdaUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAEH,KAAK,iBAAiB,EAKzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEH,KAAK,WAAW,EAgBnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAC;AAMzF;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,WAAW,GACxB,kCAAkC,EAAE,CA2DtC;AAiVD;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,kCAAkC,UAsCzG"}
1
+ {"version":3,"file":"kdaUtils.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/utils/kdaUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAEH,KAAK,iBAAiB,EAMzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEH,KAAK,WAAW,EAgBnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAC;AAGzF;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,WAAW,EACvB,yBAAyB,UAAQ,GAClC,kCAAkC,EAAE,CA6DtC;AAiVD;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,kCAAkC,UAsCzG"}
@@ -1,11 +1,11 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
- import { isAttributeDescriptor, isMeasureDescriptor, isMeasureGroupDescriptor, } from "@gooddata/sdk-model";
2
+ import { isAttributeDescriptor, isMeasureDescriptor, isMeasureGroupDescriptor, isYearGranularity, } from "@gooddata/sdk-model";
3
3
  import { DataViewFacade, isAttributeScope, isDrillIntersectionAttributeItem, isDrillIntersectionDateAttributeItem, isMeasureScope, isTableMeasureValue, isValueColumnDefinition, isValueRowDefinition, } from "@gooddata/sdk-ui";
4
- import { keyDriverAnalysisSupportedStringGranularities, keyDriverYearGranularity, } from "../../../model/store/keyDriverAnalysis/const.js";
4
+ import { getKeyDriverAnalysisSupportedStringGranularities } from "../../../model/store/keyDriverAnalysis/const.js";
5
5
  /**
6
6
  * @internal
7
7
  */
8
- export function getKdaKeyDriverCombinations(drillDefinition, drillEvent) {
8
+ export function getKdaKeyDriverCombinations(drillDefinition, drillEvent, enableSecondGranularities = false) {
9
9
  //TODO: Special implementation for headline
10
10
  const dv = DataViewFacade.for(drillEvent.dataView);
11
11
  const combinations = findHeadersCombinations(dv, drillDefinition, drillEvent);
@@ -14,7 +14,8 @@ export function getKdaKeyDriverCombinations(drillDefinition, drillEvent) {
14
14
  return [];
15
15
  }
16
16
  //Find granularity
17
- const validGranularity = keyDriverAnalysisSupportedStringGranularities.includes(combinations.dateHeader.attributeHeader.granularity ?? "");
17
+ const supportedStringGranularities = getKeyDriverAnalysisSupportedStringGranularities(enableSecondGranularities);
18
+ const validGranularity = supportedStringGranularities.includes(combinations.dateHeader.attributeHeader.granularity ?? "");
18
19
  if (!validGranularity) {
19
20
  return [];
20
21
  }
@@ -265,7 +266,7 @@ function createYearToYear(combinations, table, rows, columns, dims, current) {
265
266
  }
266
267
  const attribute = current.scope.descriptor.attributeHeader;
267
268
  const attributeItem = current.scope.header.attributeHeaderItem;
268
- const isYear = keyDriverYearGranularity.includes(attribute.granularity ?? "");
269
+ const isYear = isYearGranularity(attribute.granularity);
269
270
  // Year to year is not available for year granularity, it not makes sense
270
271
  if (isYear) {
271
272
  return undefined;
@@ -7,5 +7,5 @@ import { type IDashboardDateFilterProps } from "./types.js";
7
7
  *
8
8
  * @alpha
9
9
  */
10
- export declare function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChanged, config, readonly, autoOpen, ButtonComponent, overlayPositionType, tabId }: IDashboardDateFilterProps): ReactElement;
10
+ export declare function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChanged, config, readonly, autoOpen, ButtonComponent, overlayPositionType, tabId, customRangeHint }: IDashboardDateFilterProps): ReactElement;
11
11
  //# sourceMappingURL=DefaultDashboardDateFilter.d.ts.map
@@ -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;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"}
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,EACL,eAAe,EAClB,EAAE,yBAAyB,GAAG,YAAY,CA2L1C"}
@@ -32,7 +32,7 @@ function relevantDateDimensionHasSeconds(dateDatasets, dataSetRef) {
32
32
  *
33
33
  * @alpha
34
34
  */
35
- export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChanged, config, readonly, autoOpen, ButtonComponent, overlayPositionType, tabId, }) {
35
+ export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChanged, config, readonly, autoOpen, ButtonComponent, overlayPositionType, tabId, customRangeHint, }) {
36
36
  const intl = useIntl();
37
37
  const settings = useDashboardSelector(selectSettings);
38
38
  const capabilities = useDashboardSelector(selectBackendCapabilities);
@@ -109,5 +109,5 @@ export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChan
109
109
  }, [intl, filter?.dateFilter.dataSet, defaultDateFilterName]);
110
110
  return (_jsx(DateFilter, { excludeCurrentPeriod: excludeCurrentPeriod, selectedFilterOption: dateFilterOption, workingExcludeCurrentPeriod: isApplyAllAtOnceEnabledAndSet ? workingExcludeCurrentPeriod : undefined, workingSelectedFilterOption: isApplyAllAtOnceEnabledAndSet ? workingFilterOption : undefined, dateFilterMode: readonly
111
111
  ? DashboardDateFilterConfigModeValues.READONLY
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 }));
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, customRangeHint: customRangeHint }));
113
113
  }
@@ -1,4 +1,4 @@
1
- import { type ComponentType } from "react";
1
+ import { type ComponentType, type ReactNode } from "react";
2
2
  import { type DateFilterGranularity, type IDashboardDateFilter } from "@gooddata/sdk-model";
3
3
  import { type IDateFilterButtonProps, type IDateFilterOptionsByType } from "@gooddata/sdk-ui-filters";
4
4
  import { type OverlayPositionType } from "@gooddata/sdk-ui-kit";
@@ -82,6 +82,13 @@ export interface IDashboardDateFilterProps {
82
82
  * @internal
83
83
  */
84
84
  tabId?: string;
85
+ /**
86
+ * Custom content rendered at the end of the hint area of the static period (absolute range) form,
87
+ * after the default date/time format hints.
88
+ *
89
+ * @alpha
90
+ */
91
+ customRangeHint?: ReactNode;
85
92
  }
86
93
  /**
87
94
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;OAGG;IACH,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;IAEhD;;;OAGG;IACH,iBAAiB,EAAE,wBAAwB,CAAC;IAE5C;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAEzC;;OAEG;IACH,aAAa,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAEhD;;;;;;;OAOG;IACH,eAAe,EAAE,CACb,MAAM,EAAE,oBAAoB,GAAG,SAAS,EACxC,uBAAuB,CAAC,EAAE,MAAM,EAChC,wBAAwB,CAAC,EAAE,OAAO,KACjC,IAAI,CAAC;IAEV;;OAEG;IACH,MAAM,EAAE,0BAA0B,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAExD;;OAEG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAE1C;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;OAGG;IACH,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;IAEhD;;;OAGG;IACH,iBAAiB,EAAE,wBAAwB,CAAC;IAE5C;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAEzC;;OAEG;IACH,aAAa,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAEhD;;;;;;;OAOG;IACH,eAAe,EAAE,CACb,MAAM,EAAE,oBAAoB,GAAG,SAAS,EACxC,uBAAuB,CAAC,EAAE,MAAM,EAChC,wBAAwB,CAAC,EAAE,OAAO,KACjC,IAAI,CAAC;IAEV;;OAEG;IACH,MAAM,EAAE,0BAA0B,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAExD;;OAEG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAE1C;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- // (C) 2021-2025 GoodData Corporation
1
+ // (C) 2021-2026 GoodData Corporation
2
2
  export {};
@@ -111,7 +111,9 @@ export declare const de_DE: {
111
111
  "settingsDashboardDialog.section.timezone.defaultTimezone": string;
112
112
  "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": string;
113
113
  "settingsDashboardDialog.section.timezone.defaultTimezone.workspace": string;
114
+ "settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip": string;
114
115
  "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": string;
116
+ "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip": string;
115
117
  "settingsDashboardDialog.section.timezone.allowUserOverride.toggle": string;
116
118
  "settingsDashboardDialog.section.timezone.allowUserOverride.toggle.tooltip": string;
117
119
  "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle": string;
@@ -1 +1 @@
1
- {"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA83BjB,CAAC"}
1
+ {"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAg4BjB,CAAC"}
@@ -110,10 +110,12 @@ export const de_DE = {
110
110
  "settingsDashboardDialog.section.alert.note": "<strong>Hinweis:</strong> Gilt nur für neue Warnungen — verwenden Sie die API, um vorhandene zu aktualisieren.",
111
111
  "settingsDashboardDialog.section.alert.label": "Bewertungshäufigkeit",
112
112
  "settingsDashboardDialog.section.timezone": "Zeitzone",
113
- "settingsDashboardDialog.section.timezone.defaultTimezone": "Standardzeitzone",
114
- "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": "Zeitzone, die zum Auswerten von Datumsfiltern und zum Anzeigen von Datumsangaben auf diesem Dashboard verwendet wird.",
115
- "settingsDashboardDialog.section.timezone.defaultTimezone.workspace": "Workspace-Standard ({timezone})",
116
- "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": "Lokale Benutzerzeit (vom Browser erkannt)",
113
+ "settingsDashboardDialog.section.timezone.defaultTimezone": "Dashboard-Zeitzone",
114
+ "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": "Zeitzone, die für Datumsfilter und Datumswerte auf diesem Dashboard verwendet wird.",
115
+ "settingsDashboardDialog.section.timezone.defaultTimezone.workspace": "Standard",
116
+ "settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip": "Folgt der Zeitzone, die für Ihre Organisation, Ihren Workspace oder Ihr Benutzerkonto festgelegt ist. Sie wird automatisch aktualisiert, wenn sich diese Einstellung ändert.",
117
+ "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": "Gerätezeitzone",
118
+ "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip": "Verwendet die vom Browser des Betrachters gemeldete Zeitzone. Kann für jeden Betrachter unterschiedlich sein.",
117
119
  "settingsDashboardDialog.section.timezone.allowUserOverride.toggle": "Benutzern erlauben, die Dashboard-Zeitzone zu ändern",
118
120
  "settingsDashboardDialog.section.timezone.allowUserOverride.toggle.tooltip": "Wenn aktiviert, können Betrachtende die Dashboard-Zeitzone vorübergehend ändern. Die Änderung wird nicht gespeichert.",
119
121
  "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle": "Zeitzone anzeigen",
@@ -121,10 +123,10 @@ export const de_DE = {
121
123
  "settingsDashboardDialog.section.timezone.select.searchPlaceholder": "Suchen…",
122
124
  "settingsDashboardDialog.section.timezone.select.noMatch": "Keine passende Zeitzone.",
123
125
  "timezoneDialog.title": "Zeitzone ändern",
124
- "timezoneDialog.description": "<b>Hinweis:</b> Beim Neuladen der Seite wird die Zeitzone auf den Standard ({timezone}) zurückgesetzt.",
126
+ "timezoneDialog.description": "<b>Hinweis:</b> Beim Neuladen der Seite wird die Zeitzone auf den Standard zurückgesetzt.",
125
127
  "timezoneDialog.description.ariaLabel": "Informationsmeldung im Dialog zum Ändern der Zeitzone",
126
- "timezoneDialog.default": "Standard ({timezone})",
127
- "timezoneDialog.fromBrowser": "Meine lokale Zeit ({timezone})",
128
+ "timezoneDialog.default": "Standard",
129
+ "timezoneDialog.fromBrowser": "Gerätezeitzone ({timezone})",
128
130
  "timezoneDialog.select.searchPlaceholder": "Suchen…",
129
131
  "timezoneDialog.select.noMatch": "Keine passende Zeitzone.",
130
132
  "timezoneDialog.currentTime": "Jetzt {time}",