@gooddata/sdk-ui-dashboard 11.65.0-alpha.1 → 11.65.0-alpha.10

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 (391) hide show
  1. package/NOTICE +72077 -4
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.d.ts.map +1 -1
  4. package/esm/__version.js +1 -1
  5. package/esm/assets/type-csv-formatted.svg +1 -1
  6. package/esm/assets/type-csv-raw.svg +1 -1
  7. package/esm/index.d.ts +7 -4
  8. package/esm/index.d.ts.map +1 -1
  9. package/esm/index.js +3 -2
  10. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
  11. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +1 -3
  12. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.d.ts.map +1 -1
  13. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.js +8 -7
  14. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.d.ts.map +1 -1
  15. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.js +19 -28
  16. package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.d.ts.map +1 -1
  17. package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.js +4 -5
  18. package/esm/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.d.ts.map +1 -1
  19. package/esm/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.js +14 -15
  20. package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.d.ts +4 -1
  21. package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.d.ts.map +1 -1
  22. package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.js +11 -2
  23. package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.d.ts.map +1 -1
  24. package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.js +23 -45
  25. package/esm/model/commandHandlers/filterContext/common.d.ts +6 -5
  26. package/esm/model/commandHandlers/filterContext/common.d.ts.map +1 -1
  27. package/esm/model/commandHandlers/filterContext/common.js +12 -18
  28. package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.d.ts.map +1 -1
  29. package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js +30 -36
  30. package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.d.ts.map +1 -1
  31. package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.js +11 -17
  32. package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.d.ts.map +1 -1
  33. package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.js +7 -10
  34. package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.d.ts +15 -0
  35. package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.d.ts.map +1 -0
  36. package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.js +88 -0
  37. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.d.ts +11 -0
  38. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.d.ts.map +1 -0
  39. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.js +335 -0
  40. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.d.ts +52 -0
  41. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.d.ts.map +1 -0
  42. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.js +60 -0
  43. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.d.ts +69 -0
  44. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.d.ts.map +1 -0
  45. package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.js +2 -0
  46. package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.d.ts +2 -1
  47. package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.d.ts.map +1 -1
  48. package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.js +41 -10
  49. package/esm/model/commands/parameters.d.ts +11 -1
  50. package/esm/model/commands/parameters.d.ts.map +1 -1
  51. package/esm/model/commands/parameters.js +2 -1
  52. package/esm/model/events/base.d.ts +1 -1
  53. package/esm/model/events/base.d.ts.map +1 -1
  54. package/esm/model/events/index.d.ts +2 -1
  55. package/esm/model/events/index.d.ts.map +1 -1
  56. package/esm/model/events/insightEditor.d.ts +128 -0
  57. package/esm/model/events/insightEditor.d.ts.map +1 -0
  58. package/esm/model/events/insightEditor.js +74 -0
  59. package/esm/model/react/useInitializeDashboardStore.d.ts.map +1 -1
  60. package/esm/model/react/useInitializeDashboardStore.js +4 -9
  61. package/esm/model/store/config/configReducers.d.ts +4 -8
  62. package/esm/model/store/config/configReducers.d.ts.map +1 -1
  63. package/esm/model/store/config/configReducers.js +6 -12
  64. package/esm/model/store/config/configSelectors.d.ts +24 -0
  65. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  66. package/esm/model/store/config/configSelectors.js +30 -4
  67. package/esm/model/store/config/index.d.ts +2 -3
  68. package/esm/model/store/config/index.d.ts.map +1 -1
  69. package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts +75 -5
  70. package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts.map +1 -1
  71. package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js +35 -60
  72. package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.js +1 -1
  73. package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts +139 -31
  74. package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts.map +1 -1
  75. package/esm/model/store/tabs/filterContext/filterContextReducers.js +314 -529
  76. package/esm/model/store/tabs/filterContext/filterSync.d.ts +35 -13
  77. package/esm/model/store/tabs/filterContext/filterSync.d.ts.map +1 -1
  78. package/esm/model/store/tabs/filterContext/filterSync.js +79 -58
  79. package/esm/model/store/tabs/index.d.ts +10 -12
  80. package/esm/model/store/tabs/index.d.ts.map +1 -1
  81. package/esm/model/store/tabs/layout/layoutReducers.d.ts +1 -0
  82. package/esm/model/store/tabs/layout/layoutReducers.d.ts.map +1 -1
  83. package/esm/model/store/tabs/measureValueFilterConfigs/measureValueFilterConfigsReducers.d.ts.map +1 -1
  84. package/esm/model/store/tabs/parameters/parametersReducers.d.ts +0 -5
  85. package/esm/model/store/tabs/parameters/parametersReducers.d.ts.map +1 -1
  86. package/esm/model/store/tabs/parameters/parametersReducers.js +8 -7
  87. package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +7 -0
  88. package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
  89. package/esm/model/store/tabs/parameters/parametersSelectors.js +16 -0
  90. package/esm/model/store/tabs/tabsReducers.d.ts +8 -4
  91. package/esm/model/store/tabs/tabsReducers.d.ts.map +1 -1
  92. package/esm/model/store/tabs/tabsReducers.js +15 -18
  93. package/esm/model/store/tabs/tabsState.d.ts +0 -10
  94. package/esm/model/store/tabs/tabsState.d.ts.map +1 -1
  95. package/esm/model/store/tabs/tabsState.js +0 -20
  96. package/esm/model/store/ui/index.d.ts +2 -0
  97. package/esm/model/store/ui/index.d.ts.map +1 -1
  98. package/esm/model/store/ui/uiReducers.d.ts +6 -0
  99. package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
  100. package/esm/model/store/ui/uiReducers.js +8 -0
  101. package/esm/model/store/ui/uiSelectors.d.ts +7 -0
  102. package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
  103. package/esm/model/store/ui/uiSelectors.js +6 -0
  104. package/esm/model/store/ui/uiState.d.ts +5 -0
  105. package/esm/model/store/ui/uiState.d.ts.map +1 -1
  106. package/esm/model/store/ui/uiState.js +1 -0
  107. package/esm/model/types/commonTypes.d.ts +38 -22
  108. package/esm/model/types/commonTypes.d.ts.map +1 -1
  109. package/esm/model/types/insightEditorTypes.d.ts +43 -0
  110. package/esm/model/types/insightEditorTypes.d.ts.map +1 -0
  111. package/esm/model/types/insightEditorTypes.js +2 -0
  112. package/esm/model/utils/attributeFilterMatching.d.ts +10 -0
  113. package/esm/model/utils/attributeFilterMatching.d.ts.map +1 -1
  114. package/esm/model/utils/attributeFilterMatching.js +14 -3
  115. package/esm/model/utils/attributeFilterSelectionTypeCompatibility.d.ts +8 -0
  116. package/esm/model/utils/attributeFilterSelectionTypeCompatibility.d.ts.map +1 -1
  117. package/esm/model/utils/attributeFilterSelectionTypeCompatibility.js +14 -4
  118. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.d.ts +9 -0
  119. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.d.ts.map +1 -0
  120. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.js +12 -0
  121. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.d.ts.map +1 -1
  122. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js +3 -3
  123. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.d.ts.map +1 -1
  124. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.js +14 -7
  125. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.d.ts +12 -0
  126. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.d.ts.map +1 -0
  127. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.js +30 -0
  128. package/esm/presentation/automations/scheduledEmail/utils/users.d.ts +1 -0
  129. package/esm/presentation/automations/scheduledEmail/utils/users.d.ts.map +1 -1
  130. package/esm/presentation/automations/scheduledEmail/utils/users.js +3 -0
  131. package/esm/presentation/automations/shared/automationFilters/utils.d.ts +4 -0
  132. package/esm/presentation/automations/shared/automationFilters/utils.d.ts.map +1 -1
  133. package/esm/presentation/automations/shared/automationFilters/utils.js +12 -5
  134. package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.d.ts +1 -1
  135. package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.d.ts.map +1 -1
  136. package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.js +2 -11
  137. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.d.ts.map +1 -1
  138. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.js +10 -1
  139. package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.d.ts +5 -0
  140. package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.d.ts.map +1 -0
  141. package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.js +27 -0
  142. package/esm/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.d.ts.map +1 -1
  143. package/esm/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.js +7 -2
  144. package/esm/presentation/dashboard/components/DashboardAiComposingOverlay.d.ts +4 -0
  145. package/esm/presentation/dashboard/components/DashboardAiComposingOverlay.d.ts.map +1 -0
  146. package/esm/presentation/dashboard/components/DashboardAiComposingOverlay.js +151 -0
  147. package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
  148. package/esm/presentation/dashboard/components/DashboardInner.js +17 -14
  149. package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts +8 -0
  150. package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts.map +1 -0
  151. package/esm/presentation/dashboard/components/DashboardInteractionComposing.js +23 -0
  152. package/esm/presentation/dashboard/components/DashboardInteractionLock.d.ts +8 -0
  153. package/esm/presentation/dashboard/components/DashboardInteractionLock.d.ts.map +1 -0
  154. package/esm/presentation/dashboard/components/DashboardInteractionLock.js +29 -0
  155. package/esm/presentation/dashboard/hooks/useDashboard.d.ts.map +1 -1
  156. package/esm/presentation/dashboard/hooks/useDashboard.js +3 -2
  157. package/esm/presentation/dashboard/types.d.ts +5 -0
  158. package/esm/presentation/dashboard/types.d.ts.map +1 -1
  159. package/esm/presentation/dragAndDrop/draggableWidget/AddDashboardLayoutWidgetButton.d.ts.map +1 -1
  160. package/esm/presentation/dragAndDrop/draggableWidget/AddDashboardLayoutWidgetButton.js +2 -4
  161. package/esm/presentation/dragAndDrop/draggableWidget/AddRichTextWidgetButton.d.ts.map +1 -1
  162. package/esm/presentation/dragAndDrop/draggableWidget/AddRichTextWidgetButton.js +3 -3
  163. package/esm/presentation/dragAndDrop/draggableWidget/AddVisualizationSwitcherWidgetButton.d.ts.map +1 -1
  164. package/esm/presentation/dragAndDrop/draggableWidget/AddVisualizationSwitcherWidgetButton.js +2 -4
  165. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.d.ts.map +1 -1
  166. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.js +3 -2
  167. package/esm/presentation/filterBar/filterBar/hooks/useResetFiltersButton.d.ts.map +1 -1
  168. package/esm/presentation/filterBar/filterBar/hooks/useResetFiltersButton.js +4 -1
  169. package/esm/presentation/insightEditor/InsightEditorContent.d.ts +26 -0
  170. package/esm/presentation/insightEditor/InsightEditorContent.d.ts.map +1 -0
  171. package/esm/presentation/insightEditor/InsightEditorContent.js +158 -0
  172. package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.d.ts +7 -0
  173. package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.d.ts.map +1 -0
  174. package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.js +25 -0
  175. package/esm/presentation/insightEditor/InsightEditorOverlay.d.ts +6 -0
  176. package/esm/presentation/insightEditor/InsightEditorOverlay.d.ts.map +1 -0
  177. package/esm/presentation/insightEditor/InsightEditorOverlay.js +110 -0
  178. package/esm/presentation/insightEditor/InsightEditorPermissionsContext.d.ts +10 -0
  179. package/esm/presentation/insightEditor/InsightEditorPermissionsContext.d.ts.map +1 -0
  180. package/esm/presentation/insightEditor/InsightEditorPermissionsContext.js +18 -0
  181. package/esm/presentation/insightEditor/InsightEditorPlaceholder.d.ts +7 -0
  182. package/esm/presentation/insightEditor/InsightEditorPlaceholder.d.ts.map +1 -0
  183. package/esm/presentation/insightEditor/InsightEditorPlaceholder.js +15 -0
  184. package/esm/presentation/insightEditor/filterContext/attributeFilters.d.ts +4 -0
  185. package/esm/presentation/insightEditor/filterContext/attributeFilters.d.ts.map +1 -0
  186. package/esm/presentation/insightEditor/filterContext/attributeFilters.js +115 -0
  187. package/esm/presentation/insightEditor/filterContext/dateFilters.d.ts +5 -0
  188. package/esm/presentation/insightEditor/filterContext/dateFilters.d.ts.map +1 -0
  189. package/esm/presentation/insightEditor/filterContext/dateFilters.js +117 -0
  190. package/esm/presentation/insightEditor/filterContext/filterIntersection.d.ts +7 -0
  191. package/esm/presentation/insightEditor/filterContext/filterIntersection.d.ts.map +1 -0
  192. package/esm/presentation/insightEditor/filterContext/filterIntersection.js +149 -0
  193. package/esm/presentation/insightEditor/filterContext/insightFilterContext.d.ts +26 -0
  194. package/esm/presentation/insightEditor/filterContext/insightFilterContext.d.ts.map +1 -0
  195. package/esm/presentation/insightEditor/filterContext/insightFilterContext.js +72 -0
  196. package/esm/presentation/insightEditor/filterContext/measureValueFilters.d.ts +20 -0
  197. package/esm/presentation/insightEditor/filterContext/measureValueFilters.d.ts.map +1 -0
  198. package/esm/presentation/insightEditor/filterContext/measureValueFilters.js +76 -0
  199. package/esm/presentation/insightEditor/filterContext/objQualifiers.d.ts +11 -0
  200. package/esm/presentation/insightEditor/filterContext/objQualifiers.d.ts.map +1 -0
  201. package/esm/presentation/insightEditor/filterContext/objQualifiers.js +18 -0
  202. package/esm/presentation/insightEditor/insightEditorEscapeGuard.d.ts +18 -0
  203. package/esm/presentation/insightEditor/insightEditorEscapeGuard.d.ts.map +1 -0
  204. package/esm/presentation/insightEditor/insightEditorEscapeGuard.js +24 -0
  205. package/esm/presentation/insightEditor/insightEditorRoute.d.ts +34 -0
  206. package/esm/presentation/insightEditor/insightEditorRoute.d.ts.map +1 -0
  207. package/esm/presentation/insightEditor/insightEditorRoute.js +48 -0
  208. package/esm/presentation/insightEditor/types.d.ts +7 -0
  209. package/esm/presentation/insightEditor/types.d.ts.map +1 -0
  210. package/esm/presentation/insightEditor/types.js +2 -0
  211. package/esm/presentation/insightEditor/useCanCreateInsightInEditor.d.ts +5 -0
  212. package/esm/presentation/insightEditor/useCanCreateInsightInEditor.d.ts.map +1 -0
  213. package/esm/presentation/insightEditor/useCanCreateInsightInEditor.js +14 -0
  214. package/esm/presentation/insightEditor/useExploreFilterTransfer.d.ts +21 -0
  215. package/esm/presentation/insightEditor/useExploreFilterTransfer.d.ts.map +1 -0
  216. package/esm/presentation/insightEditor/useExploreFilterTransfer.js +193 -0
  217. package/esm/presentation/insightEditor/useInsightEditPermissions.d.ts +17 -0
  218. package/esm/presentation/insightEditor/useInsightEditPermissions.d.ts.map +1 -0
  219. package/esm/presentation/insightEditor/useInsightEditPermissions.js +42 -0
  220. package/esm/presentation/insightEditor/useInsightEditorMenuItems.d.ts +23 -0
  221. package/esm/presentation/insightEditor/useInsightEditorMenuItems.d.ts.map +1 -0
  222. package/esm/presentation/insightEditor/useInsightEditorMenuItems.js +126 -0
  223. package/esm/presentation/insightEditor/useInsightEditorSession.d.ts +19 -0
  224. package/esm/presentation/insightEditor/useInsightEditorSession.d.ts.map +1 -0
  225. package/esm/presentation/insightEditor/useInsightEditorSession.js +141 -0
  226. package/esm/presentation/insightList/InsightList.d.ts.map +1 -1
  227. package/esm/presentation/insightList/InsightList.js +10 -5
  228. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +6 -0
  229. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  230. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +48 -42
  231. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +6 -0
  232. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  233. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +6 -0
  234. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +6 -0
  235. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  236. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +11 -5
  237. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +56 -0
  238. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  239. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +56 -0
  240. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +6 -0
  241. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  242. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +6 -0
  243. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +6 -0
  244. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  245. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +6 -0
  246. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +6 -0
  247. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  248. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +6 -0
  249. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +6 -0
  250. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  251. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +6 -0
  252. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +6 -0
  253. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  254. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +187 -181
  255. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +6 -0
  256. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  257. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +6 -0
  258. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +6 -0
  259. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  260. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +6 -0
  261. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +6 -0
  262. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  263. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +6 -0
  264. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +6 -0
  265. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  266. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +6 -0
  267. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +6 -0
  268. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  269. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +6 -0
  270. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +6 -0
  271. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  272. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +6 -0
  273. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +6 -0
  274. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  275. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +6 -0
  276. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +6 -0
  277. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  278. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +6 -0
  279. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +6 -0
  280. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  281. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +6 -0
  282. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +6 -0
  283. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  284. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +6 -0
  285. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +6 -0
  286. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  287. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +6 -0
  288. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +6 -0
  289. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  290. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +6 -0
  291. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +6 -0
  292. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  293. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +6 -0
  294. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +6 -0
  295. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  296. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +6 -0
  297. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +6 -0
  298. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  299. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +6 -0
  300. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +6 -0
  301. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  302. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +6 -0
  303. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +6 -0
  304. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  305. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +7 -1
  306. package/esm/presentation/topBar/buttonBar/button/saveAsButton/DefaultSaveAsNewButton.d.ts.map +1 -1
  307. package/esm/presentation/topBar/buttonBar/button/saveAsButton/DefaultSaveAsNewButton.js +3 -2
  308. package/esm/presentation/topBar/buttonBar/button/saveButton/DefaultSaveButton.d.ts.map +1 -1
  309. package/esm/presentation/topBar/buttonBar/button/saveButton/DefaultSaveButton.js +3 -2
  310. package/esm/presentation/topBar/buttonBar/button/settingButton/DefaultSettingButton.d.ts.map +1 -1
  311. package/esm/presentation/topBar/buttonBar/button/settingButton/DefaultSettingButton.js +3 -2
  312. package/esm/presentation/topBar/buttonBar/button/shareButton/DefaultShareButton.d.ts.map +1 -1
  313. package/esm/presentation/topBar/buttonBar/button/shareButton/DefaultShareButton.js +3 -2
  314. package/esm/presentation/topBar/title/EditableTitle.d.ts.map +1 -1
  315. package/esm/presentation/topBar/title/EditableTitle.js +6 -0
  316. package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.d.ts +1 -1
  317. package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.d.ts.map +1 -1
  318. package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.js +13 -1
  319. package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/index.d.ts.map +1 -1
  320. package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/index.js +10 -1
  321. package/esm/presentation/widget/richText/EditModeDashboardRichText.js +1 -1
  322. package/esm/presentation/widget/visualizationSwitcher/EditModeDashboardVisualizationSwitcher.js +1 -1
  323. package/esm/presentation/widget/visualizationSwitcher/configuration/ToolbarTop.js +2 -2
  324. package/esm/presentation/widget/widget/InsightWidget/useEditableInsightMenu.d.ts.map +1 -1
  325. package/esm/presentation/widget/widget/InsightWidget/useEditableInsightMenu.js +5 -1
  326. package/esm/presentation/widget/widget/InsightWidget/useInsightMenu.d.ts.map +1 -1
  327. package/esm/presentation/widget/widget/InsightWidget/useInsightMenu.js +4 -1
  328. package/esm/sdk-ui-dashboard.d.ts +523 -68
  329. package/package.json +23 -21
  330. package/styles/css/alerting.css +1 -1
  331. package/styles/css/alerting.css.map +1 -1
  332. package/styles/css/attributeFilterConfig.css +3 -3
  333. package/styles/css/automationFilters.css +1 -1
  334. package/styles/css/configurationPanel.css +2 -2
  335. package/styles/css/configurationPanel.css.map +1 -1
  336. package/styles/css/dashboard.css +141 -87
  337. package/styles/css/dashboard.css.map +1 -1
  338. package/styles/css/dashboardContentLoader.css +45 -0
  339. package/styles/css/dashboardContentLoader.css.map +1 -0
  340. package/styles/css/dashboardNestedLayoutToolbar.css.map +1 -1
  341. package/styles/css/dashboardNestedLayoutWidget.css +1 -1
  342. package/styles/css/dashboardSettingsDialog.css +1 -1
  343. package/styles/css/dragAndDrop.css +0 -8
  344. package/styles/css/dragAndDrop.css.map +1 -1
  345. package/styles/css/drillConfigPanel.css +7 -7
  346. package/styles/css/drillConfigPanel.css.map +1 -1
  347. package/styles/css/filterBar.css +4 -4
  348. package/styles/css/filterBar.css.map +1 -1
  349. package/styles/css/grouped-navigation.css +2 -2
  350. package/styles/css/grouped-navigation.css.map +1 -1
  351. package/styles/css/icons.css.map +1 -1
  352. package/styles/css/insightConfiguration.css +1 -1
  353. package/styles/css/insightConfiguration.css.map +1 -1
  354. package/styles/css/insightEditor.css +46 -0
  355. package/styles/css/insightEditor.css.map +1 -0
  356. package/styles/css/kpi.css +2 -2
  357. package/styles/css/kpi.css.map +1 -1
  358. package/styles/css/kpi_alert_dialog.css +2 -2
  359. package/styles/css/layout.css +5 -5
  360. package/styles/css/layout.css.map +1 -1
  361. package/styles/css/main.css +335 -219
  362. package/styles/css/main.css.map +1 -1
  363. package/styles/css/notifications_channels_dialog.css +2 -2
  364. package/styles/css/notifications_channels_dialog.css.map +1 -1
  365. package/styles/css/resizing.css.map +1 -1
  366. package/styles/css/richTextWidget.css.map +1 -1
  367. package/styles/css/saveAsDialog.css.map +1 -1
  368. package/styles/css/sidebar.css +35 -10
  369. package/styles/css/sidebar.css.map +1 -1
  370. package/styles/css/topBar.css.map +1 -1
  371. package/styles/css/visualization.css.map +1 -1
  372. package/styles/css/visualizationSwitcherHeader.css.map +1 -1
  373. package/styles/css/visualizationSwitcherToolbar.css +1 -1
  374. package/styles/css/visualizationSwitcherToolbar.css.map +1 -1
  375. package/styles/css/visualizationSwitcherWidget.css +1 -1
  376. package/styles/css/visualizationSwitcherWidget.css.map +1 -1
  377. package/styles/scss/_variables.scss +3 -2
  378. package/styles/scss/_zIndexes.scss +4 -0
  379. package/styles/scss/attributeFilterConfig.scss +1 -1
  380. package/styles/scss/configurationPanel.scss +1 -1
  381. package/styles/scss/dashboard.scss +104 -96
  382. package/styles/scss/dashboardContentLoader.scss +45 -0
  383. package/styles/scss/dragAndDrop.scss +2 -9
  384. package/styles/scss/drillConfigPanel.scss +3 -3
  385. package/styles/scss/insightEditor.scss +53 -0
  386. package/styles/scss/layout.scss +1 -1
  387. package/styles/scss/main.scss +1 -0
  388. package/styles/scss/sidebar.scss +47 -12
  389. package/esm/presentation/dashboard/components/DashboardSkeleton.d.ts +0 -5
  390. package/esm/presentation/dashboard/components/DashboardSkeleton.d.ts.map +0 -1
  391. package/esm/presentation/dashboard/components/DashboardSkeleton.js +0 -20
@@ -9,7 +9,10 @@ import { isAutomationUserRecipient, } from "@gooddata/sdk-model";
9
9
  import { ValidationContextStore, createInvalidDatapoint, createInvalidNode, useValidationContextValue, } from "@gooddata/sdk-ui";
10
10
  import { LoadingMask, Message, Overlay, OverlayController, OverlayControllerProvider, UiIcon, UiTooltip, isEscapeKey, makeKeyboardNavigation, } from "@gooddata/sdk-ui-kit";
11
11
  import { DASHBOARD_DIALOG_OVERS_Z_INDEX } from "../../../../../constants/zIndex.js";
12
+ import { getRecipientLabel } from "../../../utils/users.js";
12
13
  import { isEmail } from "../../../utils/validate.js";
14
+ import { LiveRegionLastSelectContainer } from "./LiveRegionLastSelectContainer.js";
15
+ import { RecipientsSelectionDescription } from "./RecipientsSelectionDescription.js";
13
16
  const MAXIMUM_RECIPIENTS_RECEIVE = 60;
14
17
  const PADDING = 16;
15
18
  const LOADING_MENU_HEIGHT = 50;
@@ -113,12 +116,12 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
113
116
  const invalidUnknownRecipients = value.filter((v) => v.type === "unknownUser");
114
117
  const invalidUnknownError = !!invalidUnknownRecipients.length;
115
118
  const invalidRecipientsValues = [...invalidExternalRecipients, ...invalidUnknownRecipients]
116
- .map((v) => v.name || v.id)
119
+ .map(getRecipientLabel)
117
120
  .join(", ");
118
121
  const authorOnlyError = allowOnlyLoggedUserRecipients &&
119
122
  ((value.length === 1 && value[0].id !== loggedUser?.id) || value.length > 1);
120
123
  const missingEmailRecipients = value.filter((v) => !getHasEmail(v));
121
- const missingEmailRecipientsValues = missingEmailRecipients.map((v) => v.name || v.id).join(", ");
124
+ const missingEmailRecipientsValues = missingEmailRecipients.map(getRecipientLabel).join(", ");
122
125
  const missingEmailError = !!missingEmailRecipients.length;
123
126
  return {
124
127
  maxRecipientsError,
@@ -229,7 +232,7 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
229
232
  const { data, children } = multiValueProps;
230
233
  // MultiValueRemove component from react-select
231
234
  const removeIcon = children[1];
232
- const name = data.name || data.id;
235
+ const name = getRecipientLabel(data);
233
236
  const hasEmail = getHasEmail(data);
234
237
  const noExternal = data.type === "externalUser" && !allowExternalRecipients;
235
238
  const invalidExternal = data.type === "unknownUser";
@@ -260,13 +263,16 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
260
263
  return renderEmptyContainer();
261
264
  }, [renderEmptyContainer]);
262
265
  const renderOptionLabel = useCallback((recipient) => {
263
- const displayName = recipient.name || recipient.id;
266
+ const displayName = getRecipientLabel(recipient);
264
267
  const email = isAutomationUserRecipient(recipient) ? (recipient.email ?? "") : "";
265
268
  const renderValue = renderRecipientValue(recipient);
266
269
  return (_jsx(UiTooltip, { anchor: _jsxs("div", { className: "gd-recipient-option-item s-gd-recipient-option-item", children: [_jsx("span", { className: "gd-recipient-option-label-item s-gd-recipient-option-label-item", children: displayName }), allowExternalRecipients && recipient.type === "externalUser" ? (_jsxs("span", { className: "gd-recipient-quest", children: ["\u00A0", _jsx(FormattedMessage, { id: "dialogs.schedule.email.user.guest" })] })) : (renderValue), !externalRecipientOverride &&
267
270
  allowExternalRecipients &&
268
271
  recipient.type === "externalUser" ? (_jsx("div", { className: "gd-recipient-option-label-external-warning", children: _jsx(Message, { type: "warning", children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.user.warning.external", values: { email: displayName } }) }) })) : null] }), content: isEmail(email) ? `${displayName} (${email})` : displayName, variant: "default", arrowPlacement: "right", triggerBy: ["hover", "focus"] }));
269
272
  }, [allowExternalRecipients, externalRecipientOverride, renderRecipientValue]);
273
+ const descriptionId = `${id}-description`;
274
+ const errorId = `${id}-error`;
275
+ const ariaDescribedBy = isValid ? descriptionId : `${descriptionId} ${errorId}`;
270
276
  const renderInputContainer = useCallback((inputProps) => {
271
277
  if (!isMulti) {
272
278
  return renderEmptyContainer();
@@ -287,8 +293,8 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
287
293
  inputProps.innerRef(ref);
288
294
  }
289
295
  }, autoComplete: "new-password" // common hack for Safari to not autocomplete
290
- , "aria-invalid": !isValid, "aria-describedby": isValid ? undefined : "gd-recipients-field-error" }) }));
291
- }, [isMulti, id, isValid, renderEmptyContainer]);
296
+ , "aria-invalid": !isValid, "aria-describedby": ariaDescribedBy }) }));
297
+ }, [isMulti, id, isValid, ariaDescribedBy, renderEmptyContainer]);
292
298
  const handleKeyboardRecipientRemove = useCallback((index) => {
293
299
  if (index < 0 || index >= value.length) {
294
300
  return;
@@ -437,6 +443,7 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
437
443
  }, [canListUsersInProject, onActivate]);
438
444
  const creatableSelectComponent = {
439
445
  ...ReactSelectComponents,
446
+ SelectContainer: LiveRegionLastSelectContainer,
440
447
  IndicatorsContainer: renderEmptyContainer,
441
448
  Input: renderInputContainer,
442
449
  MultiValueContainer: renderMultiValueContainer,
@@ -496,5 +503,5 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
496
503
  // Options arrive pre-filtered (server search, or the owner's options memo).
497
504
  filterOption: null, isClearable: false, isDisabled: !isMulti, isMulti: isMulti, onChange:
498
505
  // using as any as it would be too tricky to type properly
499
- handleOnChange, onInputChange: handleSearchChange, onMenuOpen: onMenuOpen, onMenuClose: () => setState((prev) => ({ ...prev, menuOpen: false })), onKeyDown: handleKeyDown, options: options, onBlur: onBlur, value: value, getOptionValue: (o) => o.id, getOptionLabel: (o) => o.name || o.id, "aria-describedby": isValid ? undefined : "gd-recipients-field-error", "aria-invalid": !isValid }), isValid ? (renderExternalRecipientsNote ? (_jsx("div", { className: "gd-recipients-field-note", children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.recipients.note" }) })) : allowOnlyLoggedUserRecipients ? (_jsx("div", { className: "gd-recipients-field-note", children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.destinationWarning" }) })) : null) : (_jsx("div", { id: "gd-recipients-field-error", className: "gd-recipients-field-error", children: getInvalidDatapoints().map((invalidDatapoint) => (_jsx("div", { id: invalidDatapoint.id, className: "gd-recipients-field-error-item", children: invalidDatapoint.message }, invalidDatapoint.id))) }))] })] }) }));
506
+ handleOnChange, onInputChange: handleSearchChange, onMenuOpen: onMenuOpen, onMenuClose: () => setState((prev) => ({ ...prev, menuOpen: false })), onKeyDown: handleKeyDown, options: options, onBlur: onBlur, value: value, getOptionValue: (o) => o.id, getOptionLabel: getRecipientLabel, "aria-invalid": !isValid }), _jsx(RecipientsSelectionDescription, { id: descriptionId, recipients: value }), isValid ? (renderExternalRecipientsNote ? (_jsx("div", { className: "gd-recipients-field-note", children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.recipients.note" }) })) : allowOnlyLoggedUserRecipients ? (_jsx("div", { className: "gd-recipients-field-note", children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.destinationWarning" }) })) : null) : (_jsx("div", { id: errorId, className: "gd-recipients-field-error", children: getInvalidDatapoints().map((invalidDatapoint) => (_jsx("div", { id: invalidDatapoint.id, className: "gd-recipients-field-error-item", children: invalidDatapoint.message }, invalidDatapoint.id))) }))] })] }) }));
500
507
  });
@@ -0,0 +1,12 @@
1
+ import { type ReactElement } from "react";
2
+ import { type IAutomationRecipient } from "@gooddata/sdk-model";
3
+ interface IRecipientsSelectionDescriptionProps {
4
+ id: string;
5
+ recipients: readonly IAutomationRecipient[];
6
+ }
7
+ /**
8
+ * Hidden screen reader description of the selected recipients, referenced by the recipients input.
9
+ */
10
+ export declare function RecipientsSelectionDescription({ id, recipients, }: IRecipientsSelectionDescriptionProps): ReactElement;
11
+ export {};
12
+ //# sourceMappingURL=RecipientsSelectionDescription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecipientsSelectionDescription.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AA8BhE,UAAU,oCAAoC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,EAAE,EACF,UAAU,GACb,EAAE,oCAAoC,GAAG,YAAY,CAQrD"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { defineMessages, useIntl } from "react-intl";
3
+ import { DETAILED_ANNOUNCEMENT_THRESHOLD } from "@gooddata/sdk-ui-kit";
4
+ import { getRecipientLabel } from "../../../utils/users.js";
5
+ const messages = defineMessages({
6
+ selectedNone: { id: "dialogs.schedule.email.recipients.selected.none" },
7
+ selectedFew: { id: "dialogs.schedule.email.recipients.selected.few" },
8
+ selectedMany: { id: "dialogs.schedule.email.recipients.selected.many" },
9
+ navigationHint: { id: "dialogs.schedule.email.recipients.navigationHint" },
10
+ });
11
+ function describeRecipients(intl, recipients) {
12
+ const count = recipients.length;
13
+ if (count === 0) {
14
+ return intl.formatMessage(messages.selectedNone);
15
+ }
16
+ const selection = count <= DETAILED_ANNOUNCEMENT_THRESHOLD
17
+ ? intl.formatMessage(messages.selectedFew, {
18
+ count,
19
+ names: intl.formatList(recipients.map(getRecipientLabel), { type: "unit" }),
20
+ })
21
+ : intl.formatMessage(messages.selectedMany, { count });
22
+ return `${selection} ${intl.formatMessage(messages.navigationHint)}`;
23
+ }
24
+ /**
25
+ * Hidden screen reader description of the selected recipients, referenced by the recipients input.
26
+ */
27
+ export function RecipientsSelectionDescription({ id, recipients, }) {
28
+ const intl = useIntl();
29
+ return (_jsx("span", { id: id, hidden: true, children: describeRecipients(intl, recipients) }));
30
+ }
@@ -1,4 +1,5 @@
1
1
  import { type IAutomationRecipient } from "@gooddata/sdk-model";
2
2
  export declare function matchRecipient(user: IAutomationRecipient, search: string): boolean;
3
+ export declare function getRecipientLabel(recipient: IAutomationRecipient): string;
3
4
  export declare function createUser(search: string): IAutomationRecipient;
4
5
  //# sourceMappingURL=users.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/utils/users.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,qBAAqB,CAAC;AAIhG,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAexE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAQ/D"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/utils/users.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,qBAAqB,CAAC;AAIhG,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAexE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,GAAG,MAAM,CAEzE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAQ/D"}
@@ -14,6 +14,9 @@ export function matchRecipient(user, search) {
14
14
  lowerCaseId?.includes(lowerCaseSearch)) ??
15
15
  false);
16
16
  }
17
+ export function getRecipientLabel(recipient) {
18
+ return recipient.name || recipient.id;
19
+ }
17
20
  export function createUser(search) {
18
21
  const hasEmail = isEmail(search);
19
22
  return {
@@ -39,6 +39,10 @@ export declare const getFilterByLocalIdentifier: (localIdentifier: string | unde
39
39
  */
40
40
  export declare function isAllTimeDateFilterFixed(f: IFilter): boolean;
41
41
  export declare function areFiltersEqual(filter1: IFilter, filter2: IFilter): boolean;
42
+ /**
43
+ * Values to compare date filters by. A bounded range never matches an empty date, so a missing
44
+ * `emptyValueHandling` counts as "exclude" there; on an all-time filter it means no filtering at all.
45
+ */
42
46
  export declare function dateFilterValues(filter: IDateFilter): import("@gooddata/sdk-model").IAbsoluteDateFilterValues | import("@gooddata/sdk-model").IRelativeDateFilterValues;
43
47
  export declare function isFilterIgnoredByWidget(filter: FilterContextItem, widget: ExtendedDashboardWidget): boolean;
44
48
  export declare function isFilterMatch(filter1: IFilter, filter2: IFilter): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/utils.ts"],"names":[],"mappings":"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"}
@@ -226,8 +226,8 @@ export function areFiltersEqual(filter1, filter2) {
226
226
  else if (isAbsoluteDateFilter(filter1) && isAbsoluteDateFilter(filter2)) {
227
227
  // An automation does not store a granularity that has no period literal, so the granularity counts
228
228
  // only when both filters have one.
229
- const { granularity: granularity1, ...values1 } = absoluteDateFilterValues(filter1);
230
- const { granularity: granularity2, ...values2 } = absoluteDateFilterValues(filter2);
229
+ const { granularity: granularity1, ...values1 } = dateFilterValues(filter1);
230
+ const { granularity: granularity2, ...values2 } = dateFilterValues(filter2);
231
231
  return (isEqual(values1, values2) &&
232
232
  (granularity1 === undefined || granularity2 === undefined || granularity1 === granularity2));
233
233
  }
@@ -237,11 +237,18 @@ export function areFiltersEqual(filter1, filter2) {
237
237
  // Filter types are different
238
238
  return isEqual(filter1, filter2);
239
239
  }
240
+ /**
241
+ * Values to compare date filters by. A bounded range never matches an empty date, so a missing
242
+ * `emptyValueHandling` counts as "exclude" there; on an all-time filter it means no filtering at all.
243
+ */
240
244
  export function dateFilterValues(filter) {
241
- if (isAbsoluteDateFilter(filter)) {
242
- return absoluteDateFilterValues(filter);
245
+ const values = isAbsoluteDateFilter(filter)
246
+ ? absoluteDateFilterValues(filter)
247
+ : relativeDateFilterValues(filter);
248
+ if (values.emptyValueHandling !== undefined || isAllTimeDateFilterFixed(filter)) {
249
+ return values;
243
250
  }
244
- return relativeDateFilterValues(filter);
251
+ return { ...values, emptyValueHandling: "exclude" };
245
252
  }
246
253
  export function isFilterIgnoredByWidget(filter, widget) {
247
254
  if (!isInsightWidget(widget)) {
@@ -1,4 +1,4 @@
1
1
  import { type ReactElement } from "react";
2
- export declare function DashboardTabsWrapper(): import("react/jsx-runtime").JSX.Element | null;
2
+ export declare function DashboardTabsWrapper(): import("react/jsx-runtime").JSX.Element;
3
3
  export declare function DashboardHeader(): ReactElement;
4
4
  //# sourceMappingURL=DashboardHeader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardHeader.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardHeader/DashboardHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAiF1C,wBAAgB,oBAAoB,mDAOnC;AAID,wBAAgB,eAAe,IAAI,YAAY,CA2B9C"}
1
+ {"version":3,"file":"DashboardHeader.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardHeader/DashboardHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AA6E1C,wBAAgB,oBAAoB,4CAInC;AAID,wBAAgB,eAAe,IAAI,YAAY,CA6B9C"}
@@ -1,6 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
3
- import { selectIsAiLoading } from "../../../model/store/config/configSelectors.js";
4
2
  import { ScheduledEmailAutomationsProvider, ScheduledEmailConnector, } from "../../automations/connectors/ScheduledEmailConnector.js";
5
3
  import { CancelEditDialog } from "../../cancelEditDialog/CancelEditDialog.js";
6
4
  import { useCancelEditDialog } from "../../cancelEditDialog/DefaultCancelEditDialog.js";
@@ -21,6 +19,7 @@ import { useTopBarProps } from "../../topBar/topBar/DefaultTopBar.js";
21
19
  import { TopBar } from "../../topBar/topBar/TopBar.js";
22
20
  import { useWidgetDeleteDialogProps } from "../../widgetDeleteDialog/DefaultWidgetDeleteDialog.js";
23
21
  import { WidgetDeleteDialog } from "../../widgetDeleteDialog/WidgetDeleteDialog.js";
22
+ import { DashboardInteractionLock } from "../components/DashboardInteractionLock.js";
24
23
  import { ToastMessages } from "../components/ToastMessages.js";
25
24
  import { AlertingDialogProvider } from "./AlertingDialogProvider.js";
26
25
  import { DashboardTabs, useDashboardTabsProps } from "./DashboardTabs.js";
@@ -55,10 +54,6 @@ function TopBarWrapper() {
55
54
  }
56
55
  function FilterBarWrapper() {
57
56
  const filterBarProps = useFilterBarProps();
58
- const isAiLoading = useDashboardSelector(selectIsAiLoading);
59
- if (isAiLoading) {
60
- return null;
61
- }
62
57
  return _jsx(FilterBar, { ...filterBarProps });
63
58
  }
64
59
  function CancelEditDialogWrapper() {
@@ -67,14 +62,10 @@ function CancelEditDialogWrapper() {
67
62
  }
68
63
  export function DashboardTabsWrapper() {
69
64
  const dashboardTabsProps = useDashboardTabsProps();
70
- const isAiLoading = useDashboardSelector(selectIsAiLoading);
71
- if (isAiLoading) {
72
- return null;
73
- }
74
65
  return _jsx(DashboardTabs, { ...dashboardTabsProps });
75
66
  }
76
67
  // split the header parts of the dashboard so that changes to their state
77
68
  // (e.g. opening email dialog) do not re-render the dashboard body
78
69
  export function DashboardHeader() {
79
- return (_jsxs(_Fragment, { children: [_jsx(ToastMessages, {}), _jsx(ExportXlsxDialogProvider, {}), _jsx(ExportCsvDialogProvider, {}), _jsx(ExportTabularPdfDialogProvider, {}), _jsx(ExportTemplateDialogProvider, {}), _jsx(ScheduledEmailAutomationsProvider, { children: _jsx(ScheduledEmailConnector, {}) }), _jsx(AlertingDialogProvider, {}), _jsx(ShareDialogDashboardHeader, {}), _jsx(SettingsDialogProvider, {}), _jsx(DensityDialogProvider, {}), _jsx(TimezoneDialogProvider, {}), _jsx(DeleteDialogWrapper, {}), _jsx(WidgetDeleteDialogWrapper, {}), _jsx(KpiDeleteDialogWrapper, {}), _jsx(SaveAsDialogWrapper, {}), _jsx(InsightNotSavedDialogWrapper, {}), _jsx(TopBarWrapper, {}), _jsx(DashboardTabsWrapper, {}), _jsx(FilterBarWrapper, {}), _jsx(CancelEditDialogWrapper, {})] }));
70
+ return (_jsxs(_Fragment, { children: [_jsx(ToastMessages, {}), _jsx(ExportXlsxDialogProvider, {}), _jsx(ExportCsvDialogProvider, {}), _jsx(ExportTabularPdfDialogProvider, {}), _jsx(ExportTemplateDialogProvider, {}), _jsx(ScheduledEmailAutomationsProvider, { children: _jsx(ScheduledEmailConnector, {}) }), _jsx(AlertingDialogProvider, {}), _jsx(ShareDialogDashboardHeader, {}), _jsx(SettingsDialogProvider, {}), _jsx(DensityDialogProvider, {}), _jsx(TimezoneDialogProvider, {}), _jsx(DeleteDialogWrapper, {}), _jsx(WidgetDeleteDialogWrapper, {}), _jsx(KpiDeleteDialogWrapper, {}), _jsx(SaveAsDialogWrapper, {}), _jsx(InsightNotSavedDialogWrapper, {}), _jsx(TopBarWrapper, {}), _jsxs(DashboardInteractionLock, { children: [_jsx(DashboardTabsWrapper, {}), _jsx(FilterBarWrapper, {})] }), _jsx(CancelEditDialogWrapper, {})] }));
80
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CreationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/CreationPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEH,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC7C,MAAM,4BAA4B,CAAC;AAepC,UAAU,mBAAmB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,uCAAuC,CAAC,EAAE,uCAAuC,CAAC;IAClF,iCAAiC,CAAC,EAAE,iCAAiC,CAAC;CACzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,2CAiIvD"}
1
+ {"version":3,"file":"CreationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/CreationPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEH,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC7C,MAAM,4BAA4B,CAAC;AAkBpC,UAAU,mBAAmB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,uCAAuC,CAAC,EAAE,uCAAuC,CAAC;IAClF,iCAAiC,CAAC,EAAE,iCAAiC,CAAC;CACzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,2CAyIvD"}
@@ -9,6 +9,9 @@ import { useDashboardSelector } from "../../../model/react/DashboardStoreProvide
9
9
  import { selectSupportsRichTextWidgets } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
10
10
  import { selectIsAiLoading } from "../../../model/store/config/configSelectors.js";
11
11
  import { selectIsNewDashboard } from "../../../model/store/meta/metaSelectors.js";
12
+ import { InsightEditorCreatePanelItem } from "../../insightEditor/InsightEditorCreatePanelItem.js";
13
+ import { InsightEditorPlaceholder } from "../../insightEditor/InsightEditorPlaceholder.js";
14
+ import { useCanCreateInsightInEditor } from "../../insightEditor/useCanCreateInsightInEditor.js";
12
15
  import { DraggableInsightList } from "./DraggableInsightList/DraggableInsightList.js";
13
16
  import { SidebarCollapseToggle } from "./SidebarCollapseToggle.js";
14
17
  import { useResizableSidebar } from "./useResizableSidebarState.js";
@@ -35,9 +38,14 @@ export function CreationPanel(props) {
35
38
  const RichTextWidgetComponentSet = props.RichTextWidgetComponentSet;
36
39
  const VisualizationSwitcherWidgetComponentSet = props.VisualizationSwitcherWidgetComponentSet;
37
40
  const DashboardLayoutWidgetComponentSet = props.DashboardLayoutWidgetComponentSet;
41
+ const canCreateInsightInEditor = useCanCreateInsightInEditor();
38
42
  const addItemPanelItems = useMemo(() => {
43
+ // A customization can wrap one of the two editor components, so either of them marks the editor.
44
+ const creating = InsightWidgetComponentSet.creating;
45
+ const isInsightEditorItem = creating?.CreatePanelListItemComponent === InsightEditorCreatePanelItem ||
46
+ creating?.CreatingPlaceholderComponent === InsightEditorPlaceholder;
39
47
  const items = compact([
40
- InsightWidgetComponentSet.creating,
48
+ (!isInsightEditorItem || canCreateInsightInEditor) && InsightWidgetComponentSet.creating,
41
49
  AttributeFilterComponentSet.creating,
42
50
  DashboardLayoutWidgetComponentSet.creating,
43
51
  VisualizationSwitcherWidgetComponentSet.creating,
@@ -61,6 +69,7 @@ export function CreationPanel(props) {
61
69
  WrapCreatePanelItemWithDragComponent,
62
70
  isAiLoading,
63
71
  isRailCollapsed,
72
+ canCreateInsightInEditor,
64
73
  ]);
65
74
  return (_jsx("div", { className: cx("configuration-panel creation-panel", className), children: _jsxs("div", { className: "configuration-panel-content", children: [_jsxs("div", { className: "gd-creation-panel-header flex-panel-item-nostretch", children: [canCollapse ? (_jsx(SidebarCollapseToggle, { isCollapsed: isCollapsed, onToggle: () => {
66
75
  setFocusSearch(false);
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @internal
3
+ */
4
+ export declare function DashboardContentLoader(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=DashboardContentLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardContentLoader.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.tsx"],"names":[],"mappings":"AA0BA;;GAEG;AACH,wBAAgB,sBAAsB,4CAgCrC"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useState } from "react";
4
+ import { FormattedMessage } from "react-intl";
5
+ import { UiSkeleton } from "@gooddata/sdk-ui-kit";
6
+ function createDashboardContentLoaderRow() {
7
+ if (Math.random() < 0.5) {
8
+ return { widths: [50, 50] };
9
+ }
10
+ const firstDivider = Math.floor(Math.random() * 41);
11
+ const secondDivider = Math.floor(Math.random() * 41);
12
+ const [lowerDivider, upperDivider] = [firstDivider, secondDivider].sort((a, b) => a - b);
13
+ return {
14
+ widths: [20 + lowerDivider, 20 + upperDivider - lowerDivider, 60 - upperDivider],
15
+ };
16
+ }
17
+ /**
18
+ * @internal
19
+ */
20
+ export function DashboardContentLoader() {
21
+ const [row] = useState(() => createDashboardContentLoaderRow());
22
+ return (_jsxs("div", { className: "gd-dashboard-content-loader", role: "status", children: [_jsx("span", { className: "gd-dashboard-content-loader__status", children: _jsx(FormattedMessage, { id: "loading" }) }), _jsx("div", { className: "gd-dashboard-content-loader__charts", "data-testid": "dashboard-content-loader-row", "aria-hidden": "true", style: {
23
+ "--dashboard-content-loader-columns": row.widths
24
+ .map((width) => `minmax(0, ${width}fr)`)
25
+ .join(" "),
26
+ }, children: Array.from({ length: row.widths.length }, (_, index) => (_jsx("div", { className: "gd-dashboard-content-loader__chart", "data-testid": "dashboard-content-loader-chart", children: _jsx(UiSkeleton, { itemHeight: 440, itemWidth: "45%" }) }, index))) })] }));
27
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDashboardMainContent.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,eAAe,2CAuD7D"}
1
+ {"version":3,"file":"DefaultDashboardMainContent.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,eAAe,2CA+D7D"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2023-2026 GoodData Corporation
3
3
  import { useEffect } from "react";
4
4
  import cx from "classnames";
@@ -6,12 +6,15 @@ import { changeFilterContextSelection } from "../../../model/commands/filters.js
6
6
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
7
7
  import { useDispatchDashboardCommand } from "../../../model/react/useDispatchDashboardCommand.js";
8
8
  import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
9
+ import { selectIsAiLoading } from "../../../model/store/config/configSelectors.js";
10
+ import { selectIsNewDashboard } from "../../../model/store/meta/metaSelectors.js";
9
11
  import { selectRenderMode } from "../../../model/store/renderMode/renderModeSelectors.js";
10
12
  import { useDashboardDrop } from "../../dragAndDrop/useDashboardDrop.js";
11
13
  import { ExportThemeProvider } from "../../export/ExportThemeProvider.js";
12
14
  import { useWidgetDragHoverHandlers as useFlexibleWidgetDragHoverHandlers } from "../../flexibleLayout/dragAndDrop/draggableWidget/useWidgetDragHoverHandlers.js";
13
15
  import { DashboardLayout } from "../../widget/dashboardLayout/DashboardLayout.js";
14
16
  import { DateFilterConfigWarnings } from "../components/DateFilterConfigWarnings.js";
17
+ import { DashboardContentLoader } from "./DashboardContentLoader.js";
15
18
  /**
16
19
  * @internal
17
20
  */
@@ -19,6 +22,8 @@ export function DefaultDashboardMainContent(_) {
19
22
  const onFiltersChange = useDispatchDashboardCommand(changeFilterContextSelection);
20
23
  const { deselectWidgets } = useWidgetSelection();
21
24
  const renderMode = useDashboardSelector(selectRenderMode);
25
+ const isAiLoading = useDashboardSelector(selectIsAiLoading);
26
+ const isNewDashboard = useDashboardSelector(selectIsNewDashboard);
22
27
  const { handleDragHoverEnd } = useFlexibleWidgetDragHoverHandlers();
23
28
  const [{ isOver }, dropRef] = useDashboardDrop([
24
29
  "insight",
@@ -40,7 +45,7 @@ export function DefaultDashboardMainContent(_) {
40
45
  }, [handleDragHoverEnd, isOver]);
41
46
  const classNames = cx("gd-flex-container", "root-flex-maincontent", "gd-grid-layout", "gd-auto-resized-dashboard-descriptions");
42
47
  const renderContent = () => {
43
- return (_jsxs("div", { className: classNames, ref: dropRef, onClick: deselectWidgets, children: [_jsx(DateFilterConfigWarnings, {}), _jsx(DashboardLayout, { onFiltersChange: onFiltersChange })] }));
48
+ return (_jsx("div", { className: classNames, ref: dropRef, onClick: deselectWidgets, children: isNewDashboard && isAiLoading ? (_jsx(DashboardContentLoader, {})) : (_jsxs(_Fragment, { children: [_jsx(DateFilterConfigWarnings, {}), _jsx(DashboardLayout, { onFiltersChange: onFiltersChange })] })) }));
44
49
  };
45
50
  if (renderMode === "export") {
46
51
  return _jsx(ExportThemeProvider, { children: renderContent() });
@@ -0,0 +1,4 @@
1
+ export declare function DashboardAiComposingOverlay({ isWaiting }: {
2
+ isWaiting: boolean;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=DashboardAiComposingOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardAiComposingOverlay.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardAiComposingOverlay.tsx"],"names":[],"mappings":"AAmBA,wBAAgB,2BAA2B,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,2CAuKhF"}
@@ -0,0 +1,151 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useLayoutEffect, useRef } from "react";
4
+ const speed = 1 / 3.6;
5
+ const springAt = 0.05;
6
+ const stiffness = 7;
7
+ const damping = 0.55;
8
+ export function DashboardAiComposingOverlay({ isWaiting }) {
9
+ const overlayRef = useRef(null);
10
+ const stateRef = useRef(null);
11
+ useLayoutEffect(() => {
12
+ const overlay = overlayRef.current;
13
+ if (!overlay) {
14
+ return;
15
+ }
16
+ const rects = Array.from(overlay.querySelectorAll("rect"));
17
+ const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
18
+ let state = stateRef.current;
19
+ let width = 0;
20
+ let perimeter = 0;
21
+ let previousTime;
22
+ let frame;
23
+ const segment = (rect, start, length) => {
24
+ rect.style.strokeDasharray = `${length} ${Math.max(0, perimeter - length)}`;
25
+ rect.style.strokeDashoffset = String(-(((start % perimeter) + perimeter) % perimeter));
26
+ };
27
+ const animate = (time) => {
28
+ frame = undefined;
29
+ if (!state || !perimeter) {
30
+ return;
31
+ }
32
+ const dt = Math.min(0.05, (time - (previousTime ?? time)) / 1000);
33
+ previousTime = time;
34
+ const top = width / 2 / perimeter;
35
+ const runningLength = Math.min(600, perimeter * 0.25);
36
+ const waitingLength = Math.min(120, runningLength);
37
+ let settled = false;
38
+ if (isWaiting && state.mode === "run") {
39
+ state.mode = "cruise";
40
+ state.lap = Math.ceil(state.center + springAt - top);
41
+ }
42
+ else if (!isWaiting && state.mode !== "run") {
43
+ state.mode = "run";
44
+ state.speed = 0;
45
+ }
46
+ if (reducedMotion.matches) {
47
+ state.center = top;
48
+ state.length = isWaiting ? waitingLength : runningLength;
49
+ state.head = isWaiting ? 0 : 1;
50
+ state.lap = 0;
51
+ state.velocity = 0;
52
+ state.speed = 0;
53
+ state.mode = isWaiting ? "spring" : "run";
54
+ settled = true;
55
+ }
56
+ else if (state.mode === "cruise") {
57
+ state.center += speed * dt;
58
+ if (state.lap + top - state.center <= springAt) {
59
+ state.mode = "spring";
60
+ state.velocity = speed;
61
+ }
62
+ }
63
+ else if (state.mode === "spring") {
64
+ // Keep the spring target aligned with the top center while the dashboard resizes.
65
+ const target = state.lap + top;
66
+ const steps = Math.max(1, Math.ceil(dt * 240));
67
+ const step = dt / steps;
68
+ for (let i = 0; i < steps; i++) {
69
+ const acceleration = -stiffness * stiffness * (state.center - target) -
70
+ 2 * damping * stiffness * state.velocity;
71
+ state.velocity += acceleration * step;
72
+ state.center += state.velocity * step;
73
+ }
74
+ const easing = 1 - Math.exp(-dt * 3.2);
75
+ state.length += (waitingLength - state.length) * easing;
76
+ state.head += -state.head * easing;
77
+ settled =
78
+ Math.abs(state.center - target) < 0.00001 &&
79
+ Math.abs(state.velocity) < 0.00001 &&
80
+ Math.abs(state.length - waitingLength) < 0.01 &&
81
+ state.head < 0.0001;
82
+ if (settled) {
83
+ state.center = target;
84
+ state.length = waitingLength;
85
+ state.head = 0;
86
+ }
87
+ }
88
+ else {
89
+ state.speed = Math.min(1, state.speed + dt / 0.9);
90
+ state.center += speed * dt * state.speed * state.speed;
91
+ const easing = 1 - Math.exp(-dt * 2.5);
92
+ state.length += (runningLength - state.length) * easing;
93
+ state.head += (1 - state.head) * easing;
94
+ }
95
+ const start = state.center * perimeter - state.length / 2;
96
+ const coreLength = state.length * 0.55;
97
+ const coreStart = start + (state.length - coreLength) * (0.5 + 0.5 * state.head);
98
+ const [bloom, glow, tail, core] = rects;
99
+ segment(tail, start, state.length);
100
+ for (const rect of [bloom, glow, core]) {
101
+ segment(rect, coreStart, coreLength);
102
+ }
103
+ if (!settled) {
104
+ frame = requestAnimationFrame(animate);
105
+ }
106
+ };
107
+ const refresh = () => {
108
+ if (frame !== undefined) {
109
+ cancelAnimationFrame(frame);
110
+ }
111
+ previousTime = undefined;
112
+ animate(performance.now());
113
+ };
114
+ const fit = () => {
115
+ width = Math.max(0, overlay.clientWidth - 2);
116
+ const height = Math.max(0, overlay.clientHeight - 2);
117
+ perimeter = width && height ? 2 * (width + height) : 0;
118
+ for (const rect of rects) {
119
+ rect.setAttribute("width", String(width));
120
+ rect.setAttribute("height", String(height));
121
+ }
122
+ if (!state && perimeter) {
123
+ state = {
124
+ center: isWaiting ? width / 2 / perimeter : 0.62,
125
+ length: isWaiting ? Math.min(120, perimeter * 0.25) : Math.min(600, perimeter * 0.25),
126
+ head: isWaiting ? 0 : 1,
127
+ speed: 1,
128
+ mode: isWaiting ? "spring" : "run",
129
+ lap: 0,
130
+ velocity: 0,
131
+ };
132
+ stateRef.current = state;
133
+ }
134
+ refresh();
135
+ };
136
+ const observer = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(fit);
137
+ observer?.observe(overlay);
138
+ window.addEventListener("resize", fit);
139
+ reducedMotion.addEventListener("change", refresh);
140
+ fit();
141
+ return () => {
142
+ if (frame !== undefined) {
143
+ cancelAnimationFrame(frame);
144
+ }
145
+ observer?.disconnect();
146
+ window.removeEventListener("resize", fit);
147
+ reducedMotion.removeEventListener("change", refresh);
148
+ };
149
+ }, [isWaiting]);
150
+ return (_jsx("div", { "data-testid": "gd-dashboard-ai-composing-overlay", className: "gd-dashboard-ai-composing-overlay", ref: overlayRef, "aria-hidden": "true", children: ["bloom", "glow", "tail", "core"].map((layer) => (_jsx("svg", { className: `gd-dashboard-ai-composing-overlay__${layer}`, focusable: "false", children: _jsx("rect", { x: "1", y: "1", width: "0", height: "0" }) }, layer))) }));
151
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardInner.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardInner.tsx"],"names":[],"mappings":"AA0CA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,2CAyHpD"}
1
+ {"version":3,"file":"DashboardInner.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardInner.tsx"],"names":[],"mappings":"AAwCA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AASnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,2CAuHpD"}