@splunk/dashboard-toolbar 29.3.4 → 29.4.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 (249) hide show
  1. package/.storybook/index.ts +2 -0
  2. package/.storybook/withDashboardApiContext.tsx +18 -0
  3. package/.storybook/withDashboardContext.tsx +34 -0
  4. package/CollapsibleToolbar.js +22 -6
  5. package/CollapsibleToolbar.js.map +2 -2
  6. package/IconButton.js +1 -1
  7. package/IconButton.js.map +2 -2
  8. package/Item.js +1 -1
  9. package/Item.js.map +2 -2
  10. package/ItemGroup.js +1 -1
  11. package/ItemGroup.js.map +2 -2
  12. package/PopoverItemButton.js +1 -1
  13. package/PopoverItemButton.js.map +2 -2
  14. package/Toolbar.js +1 -1
  15. package/Toolbar.js.map +2 -2
  16. package/buttons/Charts.js +1 -1
  17. package/buttons/Charts.js.map +2 -2
  18. package/buttons/Config.js +1 -1
  19. package/buttons/Config.js.map +2 -2
  20. package/buttons/ContentExport.js +1 -1
  21. package/buttons/ContentExport.js.map +2 -2
  22. package/buttons/Data.js +1 -1
  23. package/buttons/Data.js.map +2 -2
  24. package/buttons/EmptyVisualization.js +1 -1
  25. package/buttons/EmptyVisualization.js.map +2 -2
  26. package/buttons/ExportDashboardButton.js +22 -9
  27. package/buttons/ExportDashboardButton.js.map +4 -4
  28. package/buttons/Fullscreen.js +43 -4
  29. package/buttons/Fullscreen.js.map +3 -3
  30. package/buttons/GridLineSwitch.js +1 -1
  31. package/buttons/GridLineSwitch.js.map +2 -2
  32. package/buttons/HelpButton.js +2 -2
  33. package/buttons/HelpButton.js.map +2 -2
  34. package/buttons/IconGallery.js +1 -1
  35. package/buttons/IconGallery.js.map +2 -2
  36. package/buttons/Image.js +1 -1
  37. package/buttons/Image.js.map +2 -2
  38. package/buttons/ImageGallery.js +1 -1
  39. package/buttons/ImageGallery.js.map +2 -2
  40. package/buttons/Inputs.js +1 -1
  41. package/buttons/Inputs.js.map +2 -2
  42. package/buttons/Markdown.js +1 -1
  43. package/buttons/Markdown.js.map +2 -2
  44. package/buttons/ModeSwitch.js +1 -1
  45. package/buttons/ModeSwitch.js.map +2 -2
  46. package/buttons/Redo.js +1 -1
  47. package/buttons/Redo.js.map +2 -2
  48. package/buttons/Shapes.js +1 -1
  49. package/buttons/Shapes.js.map +2 -2
  50. package/buttons/Source.js +1 -1
  51. package/buttons/Source.js.map +2 -2
  52. package/buttons/Undo.js +1 -1
  53. package/buttons/Undo.js.map +2 -2
  54. package/buttons/index.js +74 -11
  55. package/buttons/index.js.map +3 -3
  56. package/groups/ActionsGroup.js.map +2 -2
  57. package/groups/ControlGroup.js +52 -4
  58. package/groups/ControlGroup.js.map +3 -3
  59. package/groups/EditingGroup.js +12 -2
  60. package/groups/EditingGroup.js.map +3 -3
  61. package/groups/EditorGroup.js +10 -1
  62. package/groups/EditorGroup.js.map +3 -3
  63. package/groups/EditorsControlGroup.js +10 -1
  64. package/groups/EditorsControlGroup.js.map +3 -3
  65. package/groups/HistoryGroup.js +10 -1
  66. package/groups/HistoryGroup.js.map +3 -3
  67. package/groups/SidebarControlGroup.js +10 -1
  68. package/groups/SidebarControlGroup.js.map +3 -3
  69. package/groups/VisualizationGroup.js +10 -1
  70. package/groups/VisualizationGroup.js.map +3 -3
  71. package/groups/index.js +34 -5
  72. package/groups/index.js.map +3 -3
  73. package/index.js +95 -16
  74. package/index.js.map +3 -3
  75. package/module/CollapsibleToolbar.js +10 -10
  76. package/module/IconButton.js +5 -5
  77. package/module/Item.js +2 -2
  78. package/module/ItemGroup.js +6 -6
  79. package/module/PopoverItemButton.js +3 -3
  80. package/module/Toolbar.js +5 -5
  81. package/module/buttons/Charts.js +14 -14
  82. package/module/buttons/Config.js +8 -8
  83. package/module/buttons/ContentExport.js +8 -8
  84. package/module/buttons/Data.js +9 -9
  85. package/module/buttons/EmptyVisualization.js +8 -8
  86. package/module/buttons/ExportDashboardButton.js +7 -6
  87. package/module/buttons/Fullscreen.js +8 -8
  88. package/module/buttons/GridLineSwitch.js +7 -7
  89. package/module/buttons/HelpButton.js +10 -10
  90. package/module/buttons/IconGallery.js +10 -10
  91. package/module/buttons/Image.js +8 -8
  92. package/module/buttons/ImageGallery.js +11 -11
  93. package/module/buttons/Inputs.js +10 -10
  94. package/module/buttons/Markdown.js +7 -7
  95. package/module/buttons/ModeSwitch.js +8 -8
  96. package/module/buttons/Redo.js +7 -7
  97. package/module/buttons/Shapes.js +12 -12
  98. package/module/buttons/Source.js +8 -8
  99. package/module/buttons/Undo.js +7 -7
  100. package/module/buttons/index.js +39 -39
  101. package/module/chunks/{chunk-ODHRJQTV.js → chunk-2MOF5ZP7.js} +15 -7
  102. package/module/chunks/chunk-2MOF5ZP7.js.map +7 -0
  103. package/module/chunks/{chunk-VCWH2JHM.js → chunk-4SWPK2TU.js} +2 -2
  104. package/module/chunks/chunk-4SWPK2TU.js.map +7 -0
  105. package/module/chunks/{chunk-ZSBWP6MR.js → chunk-53UCFOI6.js} +13 -13
  106. package/module/chunks/chunk-53UCFOI6.js.map +7 -0
  107. package/module/chunks/{chunk-K4QITIOD.js → chunk-5DYPICGQ.js} +5 -5
  108. package/module/chunks/chunk-5DYPICGQ.js.map +7 -0
  109. package/module/chunks/{chunk-RQY6BB7F.js → chunk-6NLVLUCU.js} +1 -1
  110. package/module/chunks/chunk-6NLVLUCU.js.map +7 -0
  111. package/module/chunks/{chunk-QSKQE2FQ.js → chunk-AYEBOQ6B.js} +61 -21
  112. package/module/chunks/chunk-AYEBOQ6B.js.map +7 -0
  113. package/module/chunks/{chunk-XIZP3DYZ.js → chunk-C3GFY32L.js} +2 -2
  114. package/module/chunks/{chunk-JOFJS4UX.js → chunk-C7TXRFKI.js} +8 -8
  115. package/module/chunks/chunk-C7TXRFKI.js.map +7 -0
  116. package/module/chunks/{chunk-5FZAZ2XU.js → chunk-CMTNN2GG.js} +5 -5
  117. package/module/chunks/{chunk-3MBRWVZS.js → chunk-DQPRUHAE.js} +9 -9
  118. package/module/chunks/chunk-DQPRUHAE.js.map +7 -0
  119. package/module/chunks/{chunk-FREEN2T3.js → chunk-EZJSIK72.js} +3 -3
  120. package/module/chunks/{chunk-C3NA7YCT.js → chunk-EZS4433X.js} +5 -5
  121. package/module/chunks/{chunk-PVT2JFAW.js → chunk-F3BPX66Z.js} +4 -4
  122. package/module/chunks/{chunk-4NRVBOUP.js → chunk-GD75KGSO.js} +5 -5
  123. package/module/chunks/{chunk-GFSNM45K.js → chunk-GMMN7SOC.js} +1 -1
  124. package/module/chunks/chunk-GMMN7SOC.js.map +7 -0
  125. package/module/chunks/{chunk-MWYPBMHI.js → chunk-GPLJNXKE.js} +10 -10
  126. package/module/chunks/chunk-GPLJNXKE.js.map +7 -0
  127. package/module/chunks/{chunk-KUPEYUWA.js → chunk-I6AJG47U.js} +1 -1
  128. package/module/chunks/chunk-I6AJG47U.js.map +7 -0
  129. package/module/chunks/{chunk-OSX3RDKV.js → chunk-IHFVJPGQ.js} +1 -1
  130. package/module/chunks/chunk-IHFVJPGQ.js.map +7 -0
  131. package/module/chunks/{chunk-MTPPRK4H.js → chunk-IWFH2PBS.js} +10 -10
  132. package/module/chunks/{chunk-56627Y63.js → chunk-J7M7QRC7.js} +9 -9
  133. package/module/chunks/chunk-J7M7QRC7.js.map +7 -0
  134. package/module/chunks/{chunk-GAXH7J77.js → chunk-JIIPUMEA.js} +1 -1
  135. package/module/chunks/chunk-JIIPUMEA.js.map +7 -0
  136. package/module/chunks/{chunk-6SUOFSGJ.js → chunk-JW4TMLMZ.js} +5 -5
  137. package/module/chunks/{chunk-VE4HUG27.js → chunk-KGSEQL62.js} +1 -1
  138. package/module/chunks/chunk-KGSEQL62.js.map +7 -0
  139. package/module/chunks/{chunk-WADWICSE.js → chunk-LEEGJTZT.js} +5 -5
  140. package/module/chunks/{chunk-X4VCE6GS.js → chunk-MUXHFVOC.js} +7 -7
  141. package/module/chunks/chunk-MUXHFVOC.js.map +7 -0
  142. package/module/chunks/{chunk-Q67T3UVN.js → chunk-NGEW5KQQ.js} +28 -8
  143. package/module/chunks/chunk-NGEW5KQQ.js.map +7 -0
  144. package/module/chunks/{chunk-ACSHFRXI.js → chunk-NNGZB36V.js} +4 -4
  145. package/module/chunks/{chunk-NKC5QFQ5.js.map → chunk-NNGZB36V.js.map} +3 -3
  146. package/module/chunks/{chunk-BSXRAEA2.js → chunk-NSCDFVBR.js} +6 -6
  147. package/module/chunks/chunk-NSCDFVBR.js.map +7 -0
  148. package/module/chunks/{chunk-6MLJBCIJ.js → chunk-NTQBWCZU.js} +7 -7
  149. package/module/chunks/{chunk-47MSCQAS.js → chunk-OC4QIR2D.js} +5 -5
  150. package/module/chunks/chunk-OC4QIR2D.js.map +7 -0
  151. package/module/chunks/{chunk-NKC5QFQ5.js → chunk-PFHSMP6M.js} +4 -4
  152. package/module/chunks/chunk-PFHSMP6M.js.map +7 -0
  153. package/module/chunks/{chunk-L3N7HHJU.js → chunk-QEDHGXUU.js} +7 -7
  154. package/module/chunks/{chunk-5D7CUYUH.js → chunk-RFWUOGJ3.js} +1 -1
  155. package/module/chunks/chunk-RFWUOGJ3.js.map +7 -0
  156. package/module/chunks/{chunk-JGTSF7O4.js → chunk-RJ5FWZWY.js} +5 -5
  157. package/module/chunks/{chunk-2KBENXG3.js → chunk-RKJ7RKNK.js} +1 -1
  158. package/module/chunks/chunk-RKJ7RKNK.js.map +7 -0
  159. package/module/chunks/{chunk-MFIWFQAS.js → chunk-RP26L2VP.js} +6 -6
  160. package/module/chunks/{chunk-IIPBKMJD.js → chunk-RPNGCVZL.js} +1 -1
  161. package/module/chunks/chunk-RPNGCVZL.js.map +7 -0
  162. package/module/chunks/{chunk-4Y6PRJOC.js → chunk-S6LWLEQ4.js} +4 -4
  163. package/module/chunks/chunk-S6LWLEQ4.js.map +7 -0
  164. package/module/chunks/{chunk-D27CPPHI.js → chunk-SFYQQARV.js} +3 -3
  165. package/module/chunks/{chunk-YMZGQ7CB.js → chunk-UCI2OCYF.js} +5 -5
  166. package/module/chunks/chunk-UCI2OCYF.js.map +7 -0
  167. package/module/chunks/{chunk-PMZ2AWNS.js → chunk-UDFZF6TG.js} +8 -8
  168. package/module/chunks/{chunk-O74T4JNL.js → chunk-V3YGNO27.js} +2 -2
  169. package/module/chunks/chunk-V3YGNO27.js.map +7 -0
  170. package/module/chunks/{chunk-HOKI2CUB.js → chunk-VITMNUKV.js} +1 -1
  171. package/module/chunks/chunk-VITMNUKV.js.map +7 -0
  172. package/module/chunks/{chunk-UOT4CE2C.js → chunk-VSD7VGBN.js} +6 -6
  173. package/module/chunks/{chunk-RIR6YMJC.js → chunk-WLLGLYOO.js} +30 -14
  174. package/module/chunks/chunk-WLLGLYOO.js.map +7 -0
  175. package/module/chunks/{chunk-MRXRYL4Y.js → chunk-WSTQTULM.js} +3 -3
  176. package/module/chunks/{chunk-IITJ2NKO.js → chunk-XIT2UXG2.js} +5 -5
  177. package/module/chunks/chunk-XIT2UXG2.js.map +7 -0
  178. package/module/chunks/{chunk-2QBSLWJJ.js → chunk-XWRMHLAP.js} +1 -1
  179. package/module/chunks/chunk-XWRMHLAP.js.map +7 -0
  180. package/module/chunks/{chunk-LGNNSZ2O.js → chunk-YDVHOHRE.js} +10 -10
  181. package/module/chunks/{chunk-RZJ2PCV4.js → chunk-ZV4AQ5DL.js} +1 -1
  182. package/module/chunks/chunk-ZV4AQ5DL.js.map +7 -0
  183. package/module/groups/ActionsGroup.js +6 -6
  184. package/module/groups/ControlGroup.js +41 -41
  185. package/module/groups/EditingGroup.js +41 -41
  186. package/module/groups/EditorGroup.js +41 -41
  187. package/module/groups/EditorsControlGroup.js +41 -41
  188. package/module/groups/HistoryGroup.js +41 -41
  189. package/module/groups/SidebarControlGroup.js +41 -41
  190. package/module/groups/VisualizationGroup.js +41 -41
  191. package/module/groups/index.js +48 -48
  192. package/module/index.js +50 -50
  193. package/package.json +29 -29
  194. package/types/CollapsibleToolbar.d.ts.map +1 -1
  195. package/types/buttons/Display/Display.d.ts.map +1 -1
  196. package/types/buttons/ExportDashboardButton.d.ts.map +1 -1
  197. package/types/buttons/Fullscreen.d.ts.map +1 -1
  198. package/types/buttons/Zoom/ZoomNumber.d.ts.map +1 -1
  199. package/types/hooks/useToolbarButtonClick.d.ts +2 -0
  200. package/types/hooks/useToolbarButtonClick.d.ts.map +1 -0
  201. package/module/chunks/chunk-2KBENXG3.js.map +0 -7
  202. package/module/chunks/chunk-2QBSLWJJ.js.map +0 -7
  203. package/module/chunks/chunk-3MBRWVZS.js.map +0 -7
  204. package/module/chunks/chunk-47MSCQAS.js.map +0 -7
  205. package/module/chunks/chunk-4Y6PRJOC.js.map +0 -7
  206. package/module/chunks/chunk-56627Y63.js.map +0 -7
  207. package/module/chunks/chunk-5D7CUYUH.js.map +0 -7
  208. package/module/chunks/chunk-ACSHFRXI.js.map +0 -7
  209. package/module/chunks/chunk-BSXRAEA2.js.map +0 -7
  210. package/module/chunks/chunk-GAXH7J77.js.map +0 -7
  211. package/module/chunks/chunk-GFSNM45K.js.map +0 -7
  212. package/module/chunks/chunk-HOKI2CUB.js.map +0 -7
  213. package/module/chunks/chunk-IIPBKMJD.js.map +0 -7
  214. package/module/chunks/chunk-IITJ2NKO.js.map +0 -7
  215. package/module/chunks/chunk-JOFJS4UX.js.map +0 -7
  216. package/module/chunks/chunk-K4QITIOD.js.map +0 -7
  217. package/module/chunks/chunk-KUPEYUWA.js.map +0 -7
  218. package/module/chunks/chunk-MWYPBMHI.js.map +0 -7
  219. package/module/chunks/chunk-O74T4JNL.js.map +0 -7
  220. package/module/chunks/chunk-ODHRJQTV.js.map +0 -7
  221. package/module/chunks/chunk-OSX3RDKV.js.map +0 -7
  222. package/module/chunks/chunk-Q67T3UVN.js.map +0 -7
  223. package/module/chunks/chunk-QSKQE2FQ.js.map +0 -7
  224. package/module/chunks/chunk-RIR6YMJC.js.map +0 -7
  225. package/module/chunks/chunk-RQY6BB7F.js.map +0 -7
  226. package/module/chunks/chunk-RZJ2PCV4.js.map +0 -7
  227. package/module/chunks/chunk-VCWH2JHM.js.map +0 -7
  228. package/module/chunks/chunk-VE4HUG27.js.map +0 -7
  229. package/module/chunks/chunk-X4VCE6GS.js.map +0 -7
  230. package/module/chunks/chunk-YMZGQ7CB.js.map +0 -7
  231. package/module/chunks/chunk-ZSBWP6MR.js.map +0 -7
  232. /package/module/chunks/{chunk-XIZP3DYZ.js.map → chunk-C3GFY32L.js.map} +0 -0
  233. /package/module/chunks/{chunk-5FZAZ2XU.js.map → chunk-CMTNN2GG.js.map} +0 -0
  234. /package/module/chunks/{chunk-FREEN2T3.js.map → chunk-EZJSIK72.js.map} +0 -0
  235. /package/module/chunks/{chunk-C3NA7YCT.js.map → chunk-EZS4433X.js.map} +0 -0
  236. /package/module/chunks/{chunk-PVT2JFAW.js.map → chunk-F3BPX66Z.js.map} +0 -0
  237. /package/module/chunks/{chunk-4NRVBOUP.js.map → chunk-GD75KGSO.js.map} +0 -0
  238. /package/module/chunks/{chunk-MTPPRK4H.js.map → chunk-IWFH2PBS.js.map} +0 -0
  239. /package/module/chunks/{chunk-6SUOFSGJ.js.map → chunk-JW4TMLMZ.js.map} +0 -0
  240. /package/module/chunks/{chunk-WADWICSE.js.map → chunk-LEEGJTZT.js.map} +0 -0
  241. /package/module/chunks/{chunk-6MLJBCIJ.js.map → chunk-NTQBWCZU.js.map} +0 -0
  242. /package/module/chunks/{chunk-L3N7HHJU.js.map → chunk-QEDHGXUU.js.map} +0 -0
  243. /package/module/chunks/{chunk-JGTSF7O4.js.map → chunk-RJ5FWZWY.js.map} +0 -0
  244. /package/module/chunks/{chunk-MFIWFQAS.js.map → chunk-RP26L2VP.js.map} +0 -0
  245. /package/module/chunks/{chunk-D27CPPHI.js.map → chunk-SFYQQARV.js.map} +0 -0
  246. /package/module/chunks/{chunk-PMZ2AWNS.js.map → chunk-UDFZF6TG.js.map} +0 -0
  247. /package/module/chunks/{chunk-UOT4CE2C.js.map → chunk-VSD7VGBN.js.map} +0 -0
  248. /package/module/chunks/{chunk-MRXRYL4Y.js.map → chunk-WSTQTULM.js.map} +0 -0
  249. /package/module/chunks/{chunk-LGNNSZ2O.js.map → chunk-YDVHOHRE.js.map} +0 -0
package/index.js CHANGED
@@ -149,7 +149,7 @@ __export(styled_components_exports, {
149
149
  });
150
150
  var defaultImport3 = __toESM(require("styled-components"));
151
151
  __reExport(styled_components_exports, require("styled-components"));
152
- var styled_components_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
152
+ var styled_components_default = defaultImport3.default;
153
153
 
154
154
  // esm-externals:@splunk/react-ui/Button
155
155
  var Button_exports = {};
@@ -304,6 +304,9 @@ var StyledTransitionOpen = styled_components_default(TransitionOpen_default)`
304
304
  border-right: ${({ open }) => open ? "solid" : "none"};
305
305
  border-width: 0 1px 0 0;
306
306
  border-color: ${themes_exports.variables.interactiveColorBorder};
307
+ // this has to be done to avoid a random scrollbar showing up during the animation
308
+ ${({ $isAnimating }) => $isAnimating && "overflow: hidden;"}
309
+ max-width: fit-content;
307
310
  `;
308
311
  var ToolbarItemsWrapper = styled_components_default.div`
309
312
  display: flex;
@@ -338,10 +341,14 @@ var CollapsibleToolbar = ({
338
341
  }) => {
339
342
  const apiRegistry = (0, dashboard_context_exports.useApiRegistry)();
340
343
  const [expanded, setExpanded] = (0, react_exports.useState)(initialExpanded);
341
- const handleExpandToggle = (0, react_exports.useCallback)(
342
- () => setExpanded((prevExpanded) => !prevExpanded),
343
- []
344
- );
344
+ const [isAnimating, setIsAnimating] = (0, react_exports.useState)(true);
345
+ const handleExpandToggle = (0, react_exports.useCallback)(() => {
346
+ setIsAnimating(true);
347
+ setExpanded((prevExpanded) => !prevExpanded);
348
+ }, []);
349
+ const handleAnimationEnd = (0, react_exports.useCallback)(() => {
350
+ setIsAnimating(false);
351
+ }, []);
345
352
  const layoutType = (0, dashboard_state_exports.useSelector)(dashboard_state_exports.selectLayoutType);
346
353
  const injectedToolbarItems = (0, react_exports.useMemo)(
347
354
  () => toolbarItems.map(
@@ -370,7 +377,16 @@ var CollapsibleToolbar = ({
370
377
  apiRegistry.removeToolbarApi();
371
378
  };
372
379
  }, [apiRegistry, handleExpandToggle]);
373
- return /* @__PURE__ */ react_default.createElement(ToolbarWrapper, { "data-test": "dashboard-toolbar" }, /* @__PURE__ */ react_default.createElement(StyledTransitionOpen, { animation: "slideFromRight", open: expanded }, /* @__PURE__ */ react_default.createElement(ToolbarItemsWrapper, { "data-test": "toolbar-items" }, injectedToolbarItems)), /* @__PURE__ */ react_default.createElement(
380
+ return /* @__PURE__ */ react_default.createElement(ToolbarWrapper, { "data-test": "dashboard-toolbar" }, /* @__PURE__ */ react_default.createElement(
381
+ StyledTransitionOpen,
382
+ {
383
+ animation: "slideFromRight",
384
+ open: expanded,
385
+ onAnimationEnd: handleAnimationEnd,
386
+ $isAnimating: isAnimating
387
+ },
388
+ /* @__PURE__ */ react_default.createElement(ToolbarItemsWrapper, { "data-test": "toolbar-items" }, injectedToolbarItems)
389
+ ), /* @__PURE__ */ react_default.createElement(
374
390
  ExpandButton,
375
391
  {
376
392
  appearance: "subtle",
@@ -959,6 +975,9 @@ var Checkmark_default = "default" in defaultImport23 ? defaultImport23.default :
959
975
  var menuStyle = {
960
976
  minWidth: "150px"
961
977
  };
978
+ var CheckmarkIcon = styled_components_default(Checkmark_default)`
979
+ color: ${themes_exports.variables.contentColorActive};
980
+ `;
962
981
  var CheckmarkPlaceholder = styled_components_default.span`
963
982
  display: inline-block;
964
983
  width: 16px;
@@ -972,11 +991,23 @@ var Display = ({
972
991
  const hasGlobalInputs = ((_a = globalInputs == null ? void 0 : globalInputs.length) != null ? _a : 0) > 0;
973
992
  const areInputsCollapsed = (0, dashboard_state_exports.useSelector)(dashboard_state_exports.selectAreGlobalItemsCollapsed);
974
993
  const showInputs = !areInputsCollapsed;
994
+ const description = (0, dashboard_state_exports.useSelector)(dashboard_state_exports.selectDescription);
995
+ const { showTitleAndDescription = true } = (0, dashboard_state_exports.useSelector)(
996
+ dashboard_state_exports.selectLayoutGlobalOptions
997
+ );
998
+ const hasDescription = !!description && showTitleAndDescription;
999
+ const isDescriptionCollapsed = (0, dashboard_state_exports.useSelector)(dashboard_state_exports.selectIsDescriptionCollapsed);
1000
+ const showDescription = !isDescriptionCollapsed;
975
1001
  const handleInputsToggle = (0, react_exports.useCallback)(() => {
976
1002
  dashboardApi == null ? void 0 : dashboardApi.setAreGlobalInputsCollapsed({
977
1003
  collapsed: !areInputsCollapsed
978
1004
  });
979
1005
  }, [dashboardApi, areInputsCollapsed]);
1006
+ const handleDescriptionToggle = (0, react_exports.useCallback)(() => {
1007
+ dashboardApi == null ? void 0 : dashboardApi.setIsDescriptionCollapsed({
1008
+ collapsed: !isDescriptionCollapsed
1009
+ });
1010
+ }, [dashboardApi, isDescriptionCollapsed]);
980
1011
  const { handleRequestClose, handleRequestOpen, isOpen } = useDropdown_default({
981
1012
  isContentClickClose: true
982
1013
  });
@@ -994,11 +1025,28 @@ var Display = ({
994
1025
  ),
995
1026
  [appearance]
996
1027
  );
997
- const checkmarkIcon = (0, react_exports.useMemo)(() => {
998
- return showInputs ? /* @__PURE__ */ react_default.createElement(Checkmark_default, null) : /* @__PURE__ */ react_default.createElement(CheckmarkPlaceholder, null);
1028
+ const inputsCheckmarkIcon = (0, react_exports.useMemo)(() => {
1029
+ return showInputs ? /* @__PURE__ */ react_default.createElement(CheckmarkIcon, null) : /* @__PURE__ */ react_default.createElement(CheckmarkPlaceholder, null);
999
1030
  }, [showInputs]);
1031
+ const descriptionCheckmarkIcon = (0, react_exports.useMemo)(() => {
1032
+ return showDescription ? /* @__PURE__ */ react_default.createElement(CheckmarkIcon, null) : /* @__PURE__ */ react_default.createElement(CheckmarkPlaceholder, null);
1033
+ }, [showDescription]);
1000
1034
  const dropdownMenuChildren = (0, react_exports.useMemo)(() => {
1001
1035
  const items = [];
1036
+ if (hasDescription) {
1037
+ items.push(
1038
+ /* @__PURE__ */ react_default.createElement(
1039
+ Menu_default.Item,
1040
+ {
1041
+ key: "description-item",
1042
+ "data-test": "description-menu-item",
1043
+ onClick: handleDescriptionToggle,
1044
+ startAdornment: descriptionCheckmarkIcon
1045
+ },
1046
+ (0, i18n_exports._)("Dashboard description")
1047
+ )
1048
+ );
1049
+ }
1002
1050
  if (hasGlobalInputs) {
1003
1051
  items.push(
1004
1052
  /* @__PURE__ */ react_default.createElement(
@@ -1007,14 +1055,21 @@ var Display = ({
1007
1055
  key: "inputs-item",
1008
1056
  "data-test": "inputs-menu-item",
1009
1057
  onClick: handleInputsToggle,
1010
- startAdornment: checkmarkIcon
1058
+ startAdornment: inputsCheckmarkIcon
1011
1059
  },
1012
1060
  (0, i18n_exports._)("Inputs")
1013
1061
  )
1014
1062
  );
1015
1063
  }
1016
1064
  return items;
1017
- }, [hasGlobalInputs, handleInputsToggle, checkmarkIcon]);
1065
+ }, [
1066
+ hasDescription,
1067
+ hasGlobalInputs,
1068
+ handleDescriptionToggle,
1069
+ handleInputsToggle,
1070
+ descriptionCheckmarkIcon,
1071
+ inputsCheckmarkIcon
1072
+ ]);
1018
1073
  if (dropdownMenuChildren.length === 0) {
1019
1074
  return null;
1020
1075
  }
@@ -1080,6 +1135,10 @@ var EmptyVisualization_default = EmptyVisualization;
1080
1135
 
1081
1136
  // src/buttons/ExportDashboardButton.tsx
1082
1137
  var downloadIcon = /* @__PURE__ */ react_default.createElement(ArrowBroadUnderbarDown_default, null);
1138
+ var StyledButton = styled_components_default(Button_default)`
1139
+ flex-shrink: 0;
1140
+ flex-grow: 0;
1141
+ `;
1083
1142
  var ExportDashboardButton = ({
1084
1143
  appearance = "secondary",
1085
1144
  scale = 1
@@ -1093,7 +1152,7 @@ var ExportDashboardButton = ({
1093
1152
  setOpen(false);
1094
1153
  }, []);
1095
1154
  return /* @__PURE__ */ react_default.createElement(react_default.Fragment, null, /* @__PURE__ */ react_default.createElement(
1096
- Button_default,
1155
+ StyledButton,
1097
1156
  {
1098
1157
  elementRef: buttonRef,
1099
1158
  icon: downloadIcon,
@@ -1125,6 +1184,24 @@ var defaultImport25 = __toESM(require("@splunk/react-icons/ChevronsOut"));
1125
1184
  __reExport(ChevronsOut_exports, require("@splunk/react-icons/ChevronsOut"));
1126
1185
  var ChevronsOut_default = "default" in defaultImport25 ? defaultImport25.default : defaultImport25;
1127
1186
 
1187
+ // src/hooks/useToolbarButtonClick.ts
1188
+ var useToolbarButtonClick = (event, onClick) => {
1189
+ const dispatch = (0, dashboard_state_exports.useDispatch)();
1190
+ return (0, react_exports.useCallback)(
1191
+ (...args) => {
1192
+ if (dispatch && event) {
1193
+ dispatch(
1194
+ (0, dashboard_state_exports.toolbarButtonClicked)({
1195
+ event
1196
+ })
1197
+ );
1198
+ }
1199
+ onClick == null ? void 0 : onClick(...args);
1200
+ },
1201
+ [dispatch, event, onClick]
1202
+ );
1203
+ };
1204
+
1128
1205
  // src/buttons/Fullscreen.tsx
1129
1206
  var icon3 = prepareIcon({
1130
1207
  Icon: ChevronsOut_default,
@@ -1132,9 +1209,10 @@ var icon3 = prepareIcon({
1132
1209
  });
1133
1210
  var FullScreen = ({ dashboardApi }) => {
1134
1211
  const isFullscreen = !!(0, dashboard_state_exports.useSelector)(dashboard_state_exports.selectFullscreenElement);
1135
- const handleClick = (0, react_exports.useCallback)(() => {
1136
- dashboardApi == null ? void 0 : dashboardApi.enterFullscreen();
1137
- }, [dashboardApi]);
1212
+ const enterFullscreen = (0, react_exports.useCallback)(() => __async(null, null, function* () {
1213
+ yield dashboardApi == null ? void 0 : dashboardApi.enterFullscreen();
1214
+ }), [dashboardApi]);
1215
+ const handleClick = useToolbarButtonClick("fullscreen", enterFullscreen);
1138
1216
  return /* @__PURE__ */ react_default.createElement(
1139
1217
  IconButton_default,
1140
1218
  {
@@ -1324,7 +1402,7 @@ var HelpButton = ({ helpLinks = [] }) => {
1324
1402
  }
1325
1403
  return helpLinks.map((link) => {
1326
1404
  const { label = "", description = "", url } = link;
1327
- const key = label.replace(/\s/g, "");
1405
+ const key = label.replaceAll(/\s/g, "");
1328
1406
  return /* @__PURE__ */ react_default.createElement(
1329
1407
  Menu_default.Item,
1330
1408
  {
@@ -2174,6 +2252,7 @@ var StyledNumber = styled_components_default(Number_default)`
2174
2252
  var StyledEndAdornment = styled_components_default.span`
2175
2253
  color: ${themes_exports.variables.contentColorActive};
2176
2254
  `;
2255
+ var percentAdornment = /* @__PURE__ */ react_default.createElement(StyledEndAdornment, null, "%");
2177
2256
  var ZoomNumber = ({
2178
2257
  currentScale,
2179
2258
  onScaleChange
@@ -2200,7 +2279,7 @@ var ZoomNumber = ({
2200
2279
  min: 1,
2201
2280
  max: 1e4,
2202
2281
  roundTo: 0,
2203
- endAdornment: /* @__PURE__ */ react_default.createElement(StyledEndAdornment, null, "%"),
2282
+ endAdornment: percentAdornment,
2204
2283
  hideStepButtons: true,
2205
2284
  "data-test": "zoom-number",
2206
2285
  append: true