@splunk/dashboard-toolbar 29.5.0 → 29.5.1

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 (173) hide show
  1. package/CollapsibleToolbar.js +9 -0
  2. package/CollapsibleToolbar.js.map +4 -4
  3. package/IconButton.js +16 -4
  4. package/IconButton.js.map +4 -4
  5. package/buttons/Charts.js +26 -4
  6. package/buttons/Charts.js.map +4 -4
  7. package/buttons/Config.js +19 -7
  8. package/buttons/Config.js.map +4 -4
  9. package/buttons/ContentExport.js +19 -7
  10. package/buttons/ContentExport.js.map +4 -4
  11. package/buttons/Data.js +19 -7
  12. package/buttons/Data.js.map +4 -4
  13. package/buttons/EmptyVisualization.js +19 -7
  14. package/buttons/EmptyVisualization.js.map +4 -4
  15. package/buttons/Fullscreen.js +19 -7
  16. package/buttons/Fullscreen.js.map +4 -4
  17. package/buttons/HelpButton.js +25 -3
  18. package/buttons/HelpButton.js.map +4 -4
  19. package/buttons/IconGallery.js +29 -7
  20. package/buttons/IconGallery.js.map +4 -4
  21. package/buttons/Image.js +19 -7
  22. package/buttons/Image.js.map +4 -4
  23. package/buttons/ImageGallery.js +29 -7
  24. package/buttons/ImageGallery.js.map +4 -4
  25. package/buttons/Inputs.js +28 -9
  26. package/buttons/Inputs.js.map +4 -4
  27. package/buttons/Markdown.js +19 -7
  28. package/buttons/Markdown.js.map +4 -4
  29. package/buttons/Redo.js +19 -7
  30. package/buttons/Redo.js.map +4 -4
  31. package/buttons/Shapes.js +31 -9
  32. package/buttons/Shapes.js.map +4 -4
  33. package/buttons/Source.js +19 -7
  34. package/buttons/Source.js.map +4 -4
  35. package/buttons/Undo.js +19 -7
  36. package/buttons/Undo.js.map +4 -4
  37. package/buttons/index.js +66 -61
  38. package/buttons/index.js.map +2 -2
  39. package/groups/ControlGroup.js +83 -33
  40. package/groups/ControlGroup.js.map +3 -3
  41. package/groups/EditingGroup.js +73 -30
  42. package/groups/EditingGroup.js.map +3 -3
  43. package/groups/EditorGroup.js +83 -33
  44. package/groups/EditorGroup.js.map +3 -3
  45. package/groups/EditorsControlGroup.js +93 -48
  46. package/groups/EditorsControlGroup.js.map +3 -3
  47. package/groups/HistoryGroup.js +85 -34
  48. package/groups/HistoryGroup.js.map +3 -3
  49. package/groups/SidebarControlGroup.js +91 -47
  50. package/groups/SidebarControlGroup.js.map +3 -3
  51. package/groups/VisualizationGroup.js +68 -45
  52. package/groups/VisualizationGroup.js.map +3 -3
  53. package/groups/index.js +86 -64
  54. package/groups/index.js.map +3 -3
  55. package/index.js +81 -76
  56. package/index.js.map +4 -4
  57. package/module/CollapsibleToolbar.js +2 -2
  58. package/module/IconButton.js +1 -1
  59. package/module/buttons/Charts.js +3 -3
  60. package/module/buttons/Config.js +2 -2
  61. package/module/buttons/ContentExport.js +2 -2
  62. package/module/buttons/Data.js +2 -2
  63. package/module/buttons/EmptyVisualization.js +2 -2
  64. package/module/buttons/Fullscreen.js +2 -2
  65. package/module/buttons/HelpButton.js +3 -3
  66. package/module/buttons/IconGallery.js +3 -3
  67. package/module/buttons/Image.js +2 -2
  68. package/module/buttons/ImageGallery.js +3 -3
  69. package/module/buttons/Inputs.js +3 -3
  70. package/module/buttons/Markdown.js +2 -2
  71. package/module/buttons/Redo.js +2 -2
  72. package/module/buttons/Shapes.js +3 -3
  73. package/module/buttons/Source.js +2 -2
  74. package/module/buttons/Undo.js +2 -2
  75. package/module/buttons/index.js +19 -19
  76. package/module/chunks/{chunk-PFKZCA73.js → chunk-5IFDFRGD.js} +2 -2
  77. package/module/chunks/{chunk-LEEGJTZT.js → chunk-6RWX6HA7.js} +5 -5
  78. package/module/chunks/chunk-6RWX6HA7.js.map +7 -0
  79. package/module/chunks/chunk-BDFUA6X7.js +44 -0
  80. package/module/chunks/chunk-BDFUA6X7.js.map +7 -0
  81. package/module/chunks/{chunk-C7TXRFKI.js → chunk-DM27U6AI.js} +5 -5
  82. package/module/chunks/chunk-DM27U6AI.js.map +7 -0
  83. package/module/chunks/{chunk-DQPRUHAE.js → chunk-DQZGTQ2Z.js} +5 -5
  84. package/module/chunks/chunk-DQZGTQ2Z.js.map +7 -0
  85. package/module/chunks/{chunk-WLLGLYOO.js → chunk-E3IBH4RN.js} +2 -2
  86. package/module/chunks/{chunk-COV2OGVE.js → chunk-E7EUH33R.js} +5 -5
  87. package/module/chunks/{chunk-IWFH2PBS.js → chunk-EUFLSUPO.js} +5 -5
  88. package/module/chunks/chunk-EUFLSUPO.js.map +7 -0
  89. package/module/chunks/{chunk-YDVHOHRE.js → chunk-FMSKWHRK.js} +8 -8
  90. package/module/chunks/{chunk-NNGZB36V.js → chunk-HMQY5XLG.js} +5 -5
  91. package/module/chunks/chunk-HMQY5XLG.js.map +7 -0
  92. package/module/chunks/{chunk-PFHSMP6M.js → chunk-KDWTCNVM.js} +5 -5
  93. package/module/chunks/chunk-KDWTCNVM.js.map +7 -0
  94. package/module/chunks/{chunk-GD75KGSO.js → chunk-KMWIB6DC.js} +3 -3
  95. package/module/chunks/{chunk-XIT2UXG2.js → chunk-P5YTSVEV.js} +5 -5
  96. package/module/chunks/chunk-P5YTSVEV.js.map +7 -0
  97. package/module/chunks/{chunk-CMTNN2GG.js → chunk-PUNHFOXB.js} +2 -2
  98. package/module/chunks/{chunk-CS7TUOVQ.js → chunk-QH53L2XQ.js} +4 -4
  99. package/module/chunks/{chunk-S6LWLEQ4.js → chunk-RS2VRN2X.js} +5 -5
  100. package/module/chunks/chunk-RS2VRN2X.js.map +7 -0
  101. package/module/chunks/{chunk-FK3PXQBK.js → chunk-RZRB3MPG.js} +20 -36
  102. package/module/chunks/chunk-RZRB3MPG.js.map +7 -0
  103. package/module/chunks/{chunk-OC4QIR2D.js → chunk-RZWTF3BK.js} +18 -3
  104. package/module/chunks/chunk-RZWTF3BK.js.map +7 -0
  105. package/module/chunks/{chunk-5DYPICGQ.js → chunk-SJNT4MK5.js} +5 -5
  106. package/module/chunks/chunk-SJNT4MK5.js.map +7 -0
  107. package/module/chunks/{chunk-EZS4433X.js → chunk-TQIO5WSS.js} +5 -5
  108. package/module/chunks/{chunk-EZS4433X.js.map → chunk-TQIO5WSS.js.map} +2 -2
  109. package/module/chunks/{chunk-JW4TMLMZ.js → chunk-U5YCUIDK.js} +5 -5
  110. package/module/chunks/chunk-U5YCUIDK.js.map +7 -0
  111. package/module/chunks/{chunk-NGEW5KQQ.js → chunk-UNYHHA4F.js} +5 -5
  112. package/module/chunks/{chunk-NGEW5KQQ.js.map → chunk-UNYHHA4F.js.map} +2 -2
  113. package/module/chunks/{chunk-GPLJNXKE.js → chunk-UUMIWWJE.js} +5 -5
  114. package/module/chunks/chunk-UUMIWWJE.js.map +7 -0
  115. package/module/chunks/{chunk-F3BPX66Z.js → chunk-VGHYIDZA.js} +2 -2
  116. package/module/chunks/{chunk-53UCFOI6.js → chunk-YH3LWJKQ.js} +6 -6
  117. package/module/chunks/chunk-YH3LWJKQ.js.map +7 -0
  118. package/module/chunks/{chunk-J7M7QRC7.js → chunk-YMIK47DX.js} +5 -5
  119. package/module/chunks/chunk-YMIK47DX.js.map +7 -0
  120. package/module/chunks/{chunk-NSCDFVBR.js → chunk-ZEITW5IL.js} +5 -5
  121. package/module/chunks/chunk-ZEITW5IL.js.map +7 -0
  122. package/module/groups/ControlGroup.js +20 -20
  123. package/module/groups/EditingGroup.js +20 -20
  124. package/module/groups/EditorGroup.js +20 -20
  125. package/module/groups/EditorsControlGroup.js +20 -20
  126. package/module/groups/HistoryGroup.js +20 -20
  127. package/module/groups/SidebarControlGroup.js +20 -20
  128. package/module/groups/VisualizationGroup.js +20 -20
  129. package/module/groups/index.js +26 -26
  130. package/module/index.js +27 -27
  131. package/package.json +15 -15
  132. package/types/IconButton.d.ts +2 -1
  133. package/types/IconButton.d.ts.map +1 -1
  134. package/types/buttons/Config.d.ts.map +1 -1
  135. package/types/buttons/ContentExport.d.ts.map +1 -1
  136. package/types/buttons/Data.d.ts.map +1 -1
  137. package/types/buttons/EmptyVisualization.d.ts.map +1 -1
  138. package/types/buttons/Fullscreen.d.ts.map +1 -1
  139. package/types/buttons/IconGallery.d.ts.map +1 -1
  140. package/types/buttons/Image.d.ts.map +1 -1
  141. package/types/buttons/Markdown.d.ts.map +1 -1
  142. package/types/buttons/Redo.d.ts.map +1 -1
  143. package/types/buttons/Source.d.ts.map +1 -1
  144. package/types/buttons/Undo.d.ts.map +1 -1
  145. package/types/buttons/tokenManager/TokenManager.d.ts.map +1 -1
  146. package/types/components/StyledButton.d.ts +10 -1
  147. package/types/components/StyledButton.d.ts.map +1 -1
  148. package/module/chunks/chunk-53UCFOI6.js.map +0 -7
  149. package/module/chunks/chunk-5DYPICGQ.js.map +0 -7
  150. package/module/chunks/chunk-C7TXRFKI.js.map +0 -7
  151. package/module/chunks/chunk-DQPRUHAE.js.map +0 -7
  152. package/module/chunks/chunk-EZJSIK72.js +0 -21
  153. package/module/chunks/chunk-EZJSIK72.js.map +0 -7
  154. package/module/chunks/chunk-FK3PXQBK.js.map +0 -7
  155. package/module/chunks/chunk-GPLJNXKE.js.map +0 -7
  156. package/module/chunks/chunk-IWFH2PBS.js.map +0 -7
  157. package/module/chunks/chunk-J7M7QRC7.js.map +0 -7
  158. package/module/chunks/chunk-JW4TMLMZ.js.map +0 -7
  159. package/module/chunks/chunk-LEEGJTZT.js.map +0 -7
  160. package/module/chunks/chunk-NNGZB36V.js.map +0 -7
  161. package/module/chunks/chunk-NSCDFVBR.js.map +0 -7
  162. package/module/chunks/chunk-OC4QIR2D.js.map +0 -7
  163. package/module/chunks/chunk-PFHSMP6M.js.map +0 -7
  164. package/module/chunks/chunk-S6LWLEQ4.js.map +0 -7
  165. package/module/chunks/chunk-XIT2UXG2.js.map +0 -7
  166. /package/module/chunks/{chunk-PFKZCA73.js.map → chunk-5IFDFRGD.js.map} +0 -0
  167. /package/module/chunks/{chunk-WLLGLYOO.js.map → chunk-E3IBH4RN.js.map} +0 -0
  168. /package/module/chunks/{chunk-COV2OGVE.js.map → chunk-E7EUH33R.js.map} +0 -0
  169. /package/module/chunks/{chunk-YDVHOHRE.js.map → chunk-FMSKWHRK.js.map} +0 -0
  170. /package/module/chunks/{chunk-GD75KGSO.js.map → chunk-KMWIB6DC.js.map} +0 -0
  171. /package/module/chunks/{chunk-CMTNN2GG.js.map → chunk-PUNHFOXB.js.map} +0 -0
  172. /package/module/chunks/{chunk-CS7TUOVQ.js.map → chunk-QH53L2XQ.js.map} +0 -0
  173. /package/module/chunks/{chunk-F3BPX66Z.js.map → chunk-VGHYIDZA.js.map} +0 -0
package/buttons/Source.js CHANGED
@@ -127,14 +127,23 @@ var defaultImport7 = __toESM(require("@splunk/react-ui/Button"));
127
127
  __reExport(Button_exports, require("@splunk/react-ui/Button"));
128
128
  var Button_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
129
129
 
130
+ // esm-externals:@splunk/react-ui/Tooltip
131
+ var Tooltip_exports = {};
132
+ __export(Tooltip_exports, {
133
+ default: () => Tooltip_default
134
+ });
135
+ var defaultImport8 = __toESM(require("@splunk/react-ui/Tooltip"));
136
+ __reExport(Tooltip_exports, require("@splunk/react-ui/Tooltip"));
137
+ var Tooltip_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
138
+
130
139
  // esm-externals:styled-components
131
140
  var styled_components_exports = {};
132
141
  __export(styled_components_exports, {
133
142
  default: () => styled_components_default
134
143
  });
135
- var defaultImport8 = __toESM(require("styled-components"));
144
+ var defaultImport9 = __toESM(require("styled-components"));
136
145
  __reExport(styled_components_exports, require("styled-components"));
137
- var styled_components_default = defaultImport8.default;
146
+ var styled_components_default = defaultImport9.default;
138
147
 
139
148
  // src/Item.tsx
140
149
  var Item_default = styled_components_default.div``;
@@ -165,6 +174,7 @@ var IconButton = (_a) => {
165
174
  disabled = false,
166
175
  onClick,
167
176
  label,
177
+ tooltipContent,
168
178
  testLabel
169
179
  } = _b, rest = __objRest(_b, [
170
180
  "icon",
@@ -172,9 +182,10 @@ var IconButton = (_a) => {
172
182
  "disabled",
173
183
  "onClick",
174
184
  "label",
185
+ "tooltipContent",
175
186
  "testLabel"
176
187
  ]);
177
- return /* @__PURE__ */ react_default.createElement(Item_default, __spreadValues({}, rest), /* @__PURE__ */ react_default.createElement(
188
+ const button = /* @__PURE__ */ react_default.createElement(
178
189
  Button_default,
179
190
  {
180
191
  elementRef: buttonRef,
@@ -186,14 +197,14 @@ var IconButton = (_a) => {
186
197
  "data-test": testLabel,
187
198
  "data-clickable": true
188
199
  }
189
- ));
200
+ );
201
+ return /* @__PURE__ */ react_default.createElement(Item_default, __spreadValues({}, rest), tooltipContent ? /* @__PURE__ */ react_default.createElement(Tooltip_default, { contentRelationship: "label", content: tooltipContent }, button) : button);
190
202
  };
191
203
  var IconButton_default = IconButton;
192
204
 
193
205
  // src/buttons/Source.tsx
194
206
  var icon = prepareIcon({
195
- Icon: WindowChevronsSlash_default,
196
- screenReaderContent: (0, i18n_exports._)("Source code")
207
+ Icon: WindowChevronsSlash_default
197
208
  });
198
209
  var Source = ({ disabled = false, onClick }) => {
199
210
  const sourceButtonRef = (0, dashboard_context_exports.useToolbarRef)("source");
@@ -214,7 +225,8 @@ var Source = ({ disabled = false, onClick }) => {
214
225
  onClick: onSourceClick,
215
226
  disabled,
216
227
  icon,
217
- buttonRef: sourceButtonRef
228
+ buttonRef: sourceButtonRef,
229
+ tooltipContent: (0, i18n_exports._)("Source code")
218
230
  }
219
231
  );
220
232
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/buttons/Source.tsx", "esm-externals:react", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-icons/WindowChevronsSlash", "esm-externals:@splunk/dashboard-context", "esm-externals:@splunk/react-icons/CaretDown", "esm-externals:@splunk/react-ui/ScreenReaderContent", "esm-externals:@splunk/react-ui/Button", "esm-externals:styled-components", "../src/Item.tsx", "../src/IconButton.tsx"],
4
- "sourcesContent": ["import React, { useCallback, type ComponentProps } from 'react';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport SourceIcon from '@splunk/react-icons/WindowChevronsSlash';\nimport { useRestoreFocus, useToolbarRef } from '@splunk/dashboard-context';\nimport type { ButtonClickHandler } from '@splunk/react-ui/Button';\nimport IconButton, { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nexport interface SourceProps extends ToolbarButtonProps {\n onClick?: ComponentProps<typeof IconButton>['onClick'];\n disabled?: boolean;\n}\n\nconst icon = prepareIcon({\n Icon: SourceIcon,\n screenReaderContent: _('Source code'),\n});\n\n/**\n * Button that toggles source mode\n */\nconst Source = ({ disabled = false, onClick }: SourceProps) => {\n const sourceButtonRef = useToolbarRef('source');\n const setReturnPoint = useRestoreFocus(sourceButtonRef);\n\n const onSourceClick = useCallback<ButtonClickHandler>(\n (event, data) => {\n if (onClick) {\n onClick(event, data);\n setReturnPoint();\n }\n },\n [onClick, setReturnPoint]\n );\n\n return (\n <IconButton\n testLabel=\"source-button\"\n onClick={onSourceClick}\n disabled={disabled}\n icon={icon}\n buttonRef={sourceButtonRef}\n />\n );\n};\n\nexport default Source;\n", "import * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/WindowChevronsSlash\";\nexport * from \"@splunk/react-icons/WindowChevronsSlash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/dashboard-context\";\nexport * from \"@splunk/dashboard-context\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/CaretDown\";\nexport * from \"@splunk/react-icons/CaretDown\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/ScreenReaderContent\";\nexport * from \"@splunk/react-ui/ScreenReaderContent\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/Button\";\nexport * from \"@splunk/react-ui/Button\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default defaultImport.default;\n", "import styled from 'styled-components';\n\nexport default styled.div``;\n", "import React from 'react';\nimport type SVG from '@splunk/react-icons/SVG';\nimport DropdownIcon from '@splunk/react-icons/CaretDown';\nimport ScreenReaderContent from '@splunk/react-ui/ScreenReaderContent';\nimport Button, { type ButtonPropsBase } from '@splunk/react-ui/Button';\nimport styled from 'styled-components';\nimport ToolbarItem from './Item';\nimport type { ToolbarButtonProps } from './types/common';\n\nconst StyledDropdownIcon = styled(DropdownIcon)`\n margin-left: -5px;\n`;\n\nexport const iconSize = 24;\nexport const menuIconSize = 20;\n\ninterface PrepareIconProps extends React.ComponentProps<typeof SVG> {\n Icon: React.ComponentType<React.ComponentProps<typeof SVG>>;\n screenReaderContent?: string;\n isMenu?: boolean;\n variant?: 'filled' | 'outline' | 'none';\n}\n\n/**\n * Button adds a bunch of padding when there's any child elements even if they don't display anything (screenReaderContent)\n * This bundles the primary icon, a menu caret and screenReaderContent as an icon when needed.\n * Additionally accepts any properties of any react-icons element to be applied to primary icon\n * @param {Object} arg\n * @param {React.ElementType} arg.Icon The primary icon\n * @param {boolean} [arg.isMenu=false] Display a menu caret\n * @param {string} [arg.screenReaderContent] A label for the icon\n * @param {string} [arg.variant] Fill the icon, or not\n * @returns {JSX.Element}\n */\nexport const prepareIcon = ({\n Icon,\n screenReaderContent,\n isMenu = false,\n ...props\n}: PrepareIconProps) => {\n const size = isMenu ? menuIconSize : iconSize;\n return (\n <>\n <Icon width={size} height={size} {...props} />\n {isMenu && (\n <StyledDropdownIcon variant=\"filled\" width={9} height={size} />\n )}\n {screenReaderContent && (\n <ScreenReaderContent>{screenReaderContent}</ScreenReaderContent>\n )}\n </>\n );\n};\n\nexport interface IconButtonProps extends ToolbarButtonProps {\n icon?: JSX.Element;\n onClick?: ButtonPropsBase['onClick'];\n label?: string;\n buttonRef?: React.RefObject<HTMLButtonElement>;\n testLabel?: string;\n disabled?: boolean;\n}\n\nconst IconButton = ({\n icon,\n buttonRef,\n disabled = false,\n onClick,\n label,\n testLabel,\n ...rest\n}: IconButtonProps): JSX.Element => {\n return (\n <ToolbarItem {...rest}>\n <Button\n elementRef={buttonRef}\n onClick={onClick}\n disabled={disabled}\n appearance=\"subtle\"\n icon={icon}\n label={label}\n data-test={testLabel}\n data-clickable\n />\n </ToolbarItem>\n );\n};\n\nexport default IconButton;\n"],
5
- "mappings": "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",
6
- "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "icon"]
3
+ "sources": ["../src/buttons/Source.tsx", "esm-externals:react", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-icons/WindowChevronsSlash", "esm-externals:@splunk/dashboard-context", "esm-externals:@splunk/react-icons/CaretDown", "esm-externals:@splunk/react-ui/ScreenReaderContent", "esm-externals:@splunk/react-ui/Button", "esm-externals:@splunk/react-ui/Tooltip", "esm-externals:styled-components", "../src/Item.tsx", "../src/IconButton.tsx"],
4
+ "sourcesContent": ["import React, { useCallback, type ComponentProps } from 'react';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport SourceIcon from '@splunk/react-icons/WindowChevronsSlash';\nimport { useRestoreFocus, useToolbarRef } from '@splunk/dashboard-context';\nimport type { ButtonClickHandler } from '@splunk/react-ui/Button';\nimport IconButton, { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nexport interface SourceProps extends ToolbarButtonProps {\n onClick?: ComponentProps<typeof IconButton>['onClick'];\n disabled?: boolean;\n}\n\nconst icon = prepareIcon({\n Icon: SourceIcon,\n});\n\n/**\n * Button that toggles source mode\n */\nconst Source = ({ disabled = false, onClick }: SourceProps) => {\n const sourceButtonRef = useToolbarRef('source');\n const setReturnPoint = useRestoreFocus(sourceButtonRef);\n\n const onSourceClick = useCallback<ButtonClickHandler>(\n (event, data) => {\n if (onClick) {\n onClick(event, data);\n setReturnPoint();\n }\n },\n [onClick, setReturnPoint]\n );\n\n return (\n <IconButton\n testLabel=\"source-button\"\n onClick={onSourceClick}\n disabled={disabled}\n icon={icon}\n buttonRef={sourceButtonRef}\n tooltipContent={_('Source code')}\n />\n );\n};\n\nexport default Source;\n", "import * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/WindowChevronsSlash\";\nexport * from \"@splunk/react-icons/WindowChevronsSlash\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/dashboard-context\";\nexport * from \"@splunk/dashboard-context\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/CaretDown\";\nexport * from \"@splunk/react-icons/CaretDown\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/ScreenReaderContent\";\nexport * from \"@splunk/react-ui/ScreenReaderContent\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/Button\";\nexport * from \"@splunk/react-ui/Button\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/Tooltip\";\nexport * from \"@splunk/react-ui/Tooltip\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default defaultImport.default;\n", "import styled from 'styled-components';\n\nexport default styled.div``;\n", "import React from 'react';\nimport type SVG from '@splunk/react-icons/SVG';\nimport DropdownIcon from '@splunk/react-icons/CaretDown';\nimport ScreenReaderContent from '@splunk/react-ui/ScreenReaderContent';\nimport Button, { type ButtonPropsBase } from '@splunk/react-ui/Button';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport styled from 'styled-components';\nimport ToolbarItem from './Item';\nimport type { ToolbarButtonProps } from './types/common';\n\nconst StyledDropdownIcon = styled(DropdownIcon)`\n margin-left: -5px;\n`;\n\nexport const iconSize = 24;\nexport const menuIconSize = 20;\n\ninterface PrepareIconProps extends React.ComponentProps<typeof SVG> {\n Icon: React.ComponentType<React.ComponentProps<typeof SVG>>;\n screenReaderContent?: string;\n isMenu?: boolean;\n variant?: 'filled' | 'outline' | 'none';\n}\n\n/**\n * Button adds a bunch of padding when there's any child elements even if they don't display anything (screenReaderContent)\n * This bundles the primary icon, a menu caret and screenReaderContent as an icon when needed.\n * Additionally accepts any properties of any react-icons element to be applied to primary icon\n * @param {Object} arg\n * @param {React.ElementType} arg.Icon The primary icon\n * @param {boolean} [arg.isMenu=false] Display a menu caret\n * @param {string} [arg.screenReaderContent] A label for the icon\n * @param {string} [arg.variant] Fill the icon, or not\n * @returns {JSX.Element}\n */\nexport const prepareIcon = ({\n Icon,\n screenReaderContent,\n isMenu = false,\n ...props\n}: PrepareIconProps) => {\n const size = isMenu ? menuIconSize : iconSize;\n return (\n <>\n <Icon width={size} height={size} {...props} />\n {isMenu && (\n <StyledDropdownIcon variant=\"filled\" width={9} height={size} />\n )}\n {screenReaderContent && (\n <ScreenReaderContent>{screenReaderContent}</ScreenReaderContent>\n )}\n </>\n );\n};\n\nexport interface IconButtonProps extends ToolbarButtonProps {\n icon?: JSX.Element;\n onClick?: ButtonPropsBase['onClick'];\n label?: string;\n tooltipContent?: string;\n buttonRef?: React.RefObject<HTMLButtonElement>;\n testLabel?: string;\n disabled?: boolean;\n}\n\nconst IconButton = ({\n icon,\n buttonRef,\n disabled = false,\n onClick,\n label,\n tooltipContent,\n testLabel,\n ...rest\n}: IconButtonProps): JSX.Element => {\n const button = (\n <Button\n elementRef={buttonRef}\n onClick={onClick}\n disabled={disabled}\n appearance=\"subtle\"\n icon={icon}\n label={label}\n data-test={testLabel}\n data-clickable\n />\n );\n\n return (\n <ToolbarItem {...rest}>\n {tooltipContent ? (\n <Tooltip contentRelationship=\"label\" content={tooltipContent}>\n {button}\n </Tooltip>\n ) : (\n button\n )}\n </ToolbarItem>\n );\n};\n\nexport default IconButton;\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "icon"]
7
7
  }
package/buttons/Undo.js CHANGED
@@ -118,14 +118,23 @@ var defaultImport6 = __toESM(require("@splunk/react-ui/Button"));
118
118
  __reExport(Button_exports, require("@splunk/react-ui/Button"));
119
119
  var Button_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
120
120
 
121
+ // esm-externals:@splunk/react-ui/Tooltip
122
+ var Tooltip_exports = {};
123
+ __export(Tooltip_exports, {
124
+ default: () => Tooltip_default
125
+ });
126
+ var defaultImport7 = __toESM(require("@splunk/react-ui/Tooltip"));
127
+ __reExport(Tooltip_exports, require("@splunk/react-ui/Tooltip"));
128
+ var Tooltip_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
129
+
121
130
  // esm-externals:styled-components
122
131
  var styled_components_exports = {};
123
132
  __export(styled_components_exports, {
124
133
  default: () => styled_components_default
125
134
  });
126
- var defaultImport7 = __toESM(require("styled-components"));
135
+ var defaultImport8 = __toESM(require("styled-components"));
127
136
  __reExport(styled_components_exports, require("styled-components"));
128
- var styled_components_default = defaultImport7.default;
137
+ var styled_components_default = defaultImport8.default;
129
138
 
130
139
  // src/Item.tsx
131
140
  var Item_default = styled_components_default.div``;
@@ -156,6 +165,7 @@ var IconButton = (_a) => {
156
165
  disabled = false,
157
166
  onClick,
158
167
  label,
168
+ tooltipContent,
159
169
  testLabel
160
170
  } = _b, rest = __objRest(_b, [
161
171
  "icon",
@@ -163,9 +173,10 @@ var IconButton = (_a) => {
163
173
  "disabled",
164
174
  "onClick",
165
175
  "label",
176
+ "tooltipContent",
166
177
  "testLabel"
167
178
  ]);
168
- return /* @__PURE__ */ react_default.createElement(Item_default, __spreadValues({}, rest), /* @__PURE__ */ react_default.createElement(
179
+ const button = /* @__PURE__ */ react_default.createElement(
169
180
  Button_default,
170
181
  {
171
182
  elementRef: buttonRef,
@@ -177,14 +188,14 @@ var IconButton = (_a) => {
177
188
  "data-test": testLabel,
178
189
  "data-clickable": true
179
190
  }
180
- ));
191
+ );
192
+ return /* @__PURE__ */ react_default.createElement(Item_default, __spreadValues({}, rest), tooltipContent ? /* @__PURE__ */ react_default.createElement(Tooltip_default, { contentRelationship: "label", content: tooltipContent }, button) : button);
181
193
  };
182
194
  var IconButton_default = IconButton;
183
195
 
184
196
  // src/buttons/Undo.tsx
185
197
  var icon = prepareIcon({
186
- Icon: ArrowBowLeft_default,
187
- screenReaderContent: (0, i18n_exports._)("Undo")
198
+ Icon: ArrowBowLeft_default
188
199
  });
189
200
  var Undo = ({ dashboardApi }) => {
190
201
  const [canUndo, setCanUndo] = (0, react_exports.useState)(
@@ -219,7 +230,8 @@ var Undo = ({ dashboardApi }) => {
219
230
  testLabel: "undo-button",
220
231
  onClick: handleClick,
221
232
  disabled: !canUndo,
222
- icon
233
+ icon,
234
+ tooltipContent: (0, i18n_exports._)("Undo")
223
235
  }
224
236
  );
225
237
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/buttons/Undo.tsx", "esm-externals:react", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-icons/ArrowBowLeft", "esm-externals:@splunk/react-icons/CaretDown", "esm-externals:@splunk/react-ui/ScreenReaderContent", "esm-externals:@splunk/react-ui/Button", "esm-externals:styled-components", "../src/Item.tsx", "../src/IconButton.tsx"],
4
- "sourcesContent": ["import React, { useCallback, useEffect, useState } from 'react';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport UndoIcon from '@splunk/react-icons/ArrowBowLeft';\nimport IconButton, { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nconst icon = prepareIcon({\n Icon: UndoIcon,\n screenReaderContent: _('Undo'),\n});\n\nconst Undo = ({ dashboardApi }: ToolbarButtonProps) => {\n // TODO: replace when history management is done in redux\n // mode changes can cause the button to mount while there is an undo state\n const [canUndo, setCanUndo] = useState(\n () => dashboardApi?.canUndo() ?? false\n );\n\n const onDefinitionChange = useCallback(() => {\n setCanUndo(dashboardApi?.canUndo() ?? false);\n }, [dashboardApi]);\n\n useEffect(() => {\n if (!dashboardApi?.historyManager) {\n return () => undefined;\n }\n // Dirty hack to get the history manager.\n return dashboardApi.historyManager.subscribe({\n onAdd: onDefinitionChange,\n onUndo: onDefinitionChange,\n onRedo: onDefinitionChange,\n });\n }, [dashboardApi, onDefinitionChange]);\n\n const handleClick = useCallback(() => {\n if (!dashboardApi) {\n return;\n }\n\n dashboardApi.undo({ source: 'toolbar' });\n }, [dashboardApi]);\n\n return (\n <IconButton\n testLabel=\"undo-button\"\n onClick={handleClick}\n disabled={!canUndo}\n icon={icon}\n />\n );\n};\n\nexport default Undo;\n", "import * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/ArrowBowLeft\";\nexport * from \"@splunk/react-icons/ArrowBowLeft\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/CaretDown\";\nexport * from \"@splunk/react-icons/CaretDown\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/ScreenReaderContent\";\nexport * from \"@splunk/react-ui/ScreenReaderContent\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/Button\";\nexport * from \"@splunk/react-ui/Button\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default defaultImport.default;\n", "import styled from 'styled-components';\n\nexport default styled.div``;\n", "import React from 'react';\nimport type SVG from '@splunk/react-icons/SVG';\nimport DropdownIcon from '@splunk/react-icons/CaretDown';\nimport ScreenReaderContent from '@splunk/react-ui/ScreenReaderContent';\nimport Button, { type ButtonPropsBase } from '@splunk/react-ui/Button';\nimport styled from 'styled-components';\nimport ToolbarItem from './Item';\nimport type { ToolbarButtonProps } from './types/common';\n\nconst StyledDropdownIcon = styled(DropdownIcon)`\n margin-left: -5px;\n`;\n\nexport const iconSize = 24;\nexport const menuIconSize = 20;\n\ninterface PrepareIconProps extends React.ComponentProps<typeof SVG> {\n Icon: React.ComponentType<React.ComponentProps<typeof SVG>>;\n screenReaderContent?: string;\n isMenu?: boolean;\n variant?: 'filled' | 'outline' | 'none';\n}\n\n/**\n * Button adds a bunch of padding when there's any child elements even if they don't display anything (screenReaderContent)\n * This bundles the primary icon, a menu caret and screenReaderContent as an icon when needed.\n * Additionally accepts any properties of any react-icons element to be applied to primary icon\n * @param {Object} arg\n * @param {React.ElementType} arg.Icon The primary icon\n * @param {boolean} [arg.isMenu=false] Display a menu caret\n * @param {string} [arg.screenReaderContent] A label for the icon\n * @param {string} [arg.variant] Fill the icon, or not\n * @returns {JSX.Element}\n */\nexport const prepareIcon = ({\n Icon,\n screenReaderContent,\n isMenu = false,\n ...props\n}: PrepareIconProps) => {\n const size = isMenu ? menuIconSize : iconSize;\n return (\n <>\n <Icon width={size} height={size} {...props} />\n {isMenu && (\n <StyledDropdownIcon variant=\"filled\" width={9} height={size} />\n )}\n {screenReaderContent && (\n <ScreenReaderContent>{screenReaderContent}</ScreenReaderContent>\n )}\n </>\n );\n};\n\nexport interface IconButtonProps extends ToolbarButtonProps {\n icon?: JSX.Element;\n onClick?: ButtonPropsBase['onClick'];\n label?: string;\n buttonRef?: React.RefObject<HTMLButtonElement>;\n testLabel?: string;\n disabled?: boolean;\n}\n\nconst IconButton = ({\n icon,\n buttonRef,\n disabled = false,\n onClick,\n label,\n testLabel,\n ...rest\n}: IconButtonProps): JSX.Element => {\n return (\n <ToolbarItem {...rest}>\n <Button\n elementRef={buttonRef}\n onClick={onClick}\n disabled={disabled}\n appearance=\"subtle\"\n icon={icon}\n label={label}\n data-test={testLabel}\n data-clickable\n />\n </ToolbarItem>\n );\n};\n\nexport default IconButton;\n"],
5
- "mappings": "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",
6
- "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "icon"]
3
+ "sources": ["../src/buttons/Undo.tsx", "esm-externals:react", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-icons/ArrowBowLeft", "esm-externals:@splunk/react-icons/CaretDown", "esm-externals:@splunk/react-ui/ScreenReaderContent", "esm-externals:@splunk/react-ui/Button", "esm-externals:@splunk/react-ui/Tooltip", "esm-externals:styled-components", "../src/Item.tsx", "../src/IconButton.tsx"],
4
+ "sourcesContent": ["import React, { useCallback, useEffect, useState } from 'react';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport UndoIcon from '@splunk/react-icons/ArrowBowLeft';\nimport IconButton, { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nconst icon = prepareIcon({\n Icon: UndoIcon,\n});\n\nconst Undo = ({ dashboardApi }: ToolbarButtonProps) => {\n // TODO: replace when history management is done in redux\n // mode changes can cause the button to mount while there is an undo state\n const [canUndo, setCanUndo] = useState(\n () => dashboardApi?.canUndo() ?? false\n );\n\n const onDefinitionChange = useCallback(() => {\n setCanUndo(dashboardApi?.canUndo() ?? false);\n }, [dashboardApi]);\n\n useEffect(() => {\n if (!dashboardApi?.historyManager) {\n return () => undefined;\n }\n // Dirty hack to get the history manager.\n return dashboardApi.historyManager.subscribe({\n onAdd: onDefinitionChange,\n onUndo: onDefinitionChange,\n onRedo: onDefinitionChange,\n });\n }, [dashboardApi, onDefinitionChange]);\n\n const handleClick = useCallback(() => {\n if (!dashboardApi) {\n return;\n }\n\n dashboardApi.undo({ source: 'toolbar' });\n }, [dashboardApi]);\n\n return (\n <IconButton\n testLabel=\"undo-button\"\n onClick={handleClick}\n disabled={!canUndo}\n icon={icon}\n tooltipContent={_('Undo')}\n />\n );\n};\n\nexport default Undo;\n", "import * as defaultImport from \"react\";\nexport * from \"react\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/ui-utils/i18n\";\nexport * from \"@splunk/ui-utils/i18n\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/ArrowBowLeft\";\nexport * from \"@splunk/react-icons/ArrowBowLeft\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/CaretDown\";\nexport * from \"@splunk/react-icons/CaretDown\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/ScreenReaderContent\";\nexport * from \"@splunk/react-ui/ScreenReaderContent\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/Button\";\nexport * from \"@splunk/react-ui/Button\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-ui/Tooltip\";\nexport * from \"@splunk/react-ui/Tooltip\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"styled-components\";\nexport * from \"styled-components\";\nexport default defaultImport.default;\n", "import styled from 'styled-components';\n\nexport default styled.div``;\n", "import React from 'react';\nimport type SVG from '@splunk/react-icons/SVG';\nimport DropdownIcon from '@splunk/react-icons/CaretDown';\nimport ScreenReaderContent from '@splunk/react-ui/ScreenReaderContent';\nimport Button, { type ButtonPropsBase } from '@splunk/react-ui/Button';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport styled from 'styled-components';\nimport ToolbarItem from './Item';\nimport type { ToolbarButtonProps } from './types/common';\n\nconst StyledDropdownIcon = styled(DropdownIcon)`\n margin-left: -5px;\n`;\n\nexport const iconSize = 24;\nexport const menuIconSize = 20;\n\ninterface PrepareIconProps extends React.ComponentProps<typeof SVG> {\n Icon: React.ComponentType<React.ComponentProps<typeof SVG>>;\n screenReaderContent?: string;\n isMenu?: boolean;\n variant?: 'filled' | 'outline' | 'none';\n}\n\n/**\n * Button adds a bunch of padding when there's any child elements even if they don't display anything (screenReaderContent)\n * This bundles the primary icon, a menu caret and screenReaderContent as an icon when needed.\n * Additionally accepts any properties of any react-icons element to be applied to primary icon\n * @param {Object} arg\n * @param {React.ElementType} arg.Icon The primary icon\n * @param {boolean} [arg.isMenu=false] Display a menu caret\n * @param {string} [arg.screenReaderContent] A label for the icon\n * @param {string} [arg.variant] Fill the icon, or not\n * @returns {JSX.Element}\n */\nexport const prepareIcon = ({\n Icon,\n screenReaderContent,\n isMenu = false,\n ...props\n}: PrepareIconProps) => {\n const size = isMenu ? menuIconSize : iconSize;\n return (\n <>\n <Icon width={size} height={size} {...props} />\n {isMenu && (\n <StyledDropdownIcon variant=\"filled\" width={9} height={size} />\n )}\n {screenReaderContent && (\n <ScreenReaderContent>{screenReaderContent}</ScreenReaderContent>\n )}\n </>\n );\n};\n\nexport interface IconButtonProps extends ToolbarButtonProps {\n icon?: JSX.Element;\n onClick?: ButtonPropsBase['onClick'];\n label?: string;\n tooltipContent?: string;\n buttonRef?: React.RefObject<HTMLButtonElement>;\n testLabel?: string;\n disabled?: boolean;\n}\n\nconst IconButton = ({\n icon,\n buttonRef,\n disabled = false,\n onClick,\n label,\n tooltipContent,\n testLabel,\n ...rest\n}: IconButtonProps): JSX.Element => {\n const button = (\n <Button\n elementRef={buttonRef}\n onClick={onClick}\n disabled={disabled}\n appearance=\"subtle\"\n icon={icon}\n label={label}\n data-test={testLabel}\n data-clickable\n />\n );\n\n return (\n <ToolbarItem {...rest}>\n {tooltipContent ? (\n <Tooltip contentRelationship=\"label\" content={tooltipContent}>\n {button}\n </Tooltip>\n ) : (\n button\n )}\n </ToolbarItem>\n );\n};\n\nexport default IconButton;\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "icon"]
7
7
  }
package/buttons/index.js CHANGED
@@ -354,6 +354,7 @@ var IconButton = (_a) => {
354
354
  disabled = false,
355
355
  onClick,
356
356
  label,
357
+ tooltipContent,
357
358
  testLabel
358
359
  } = _b, rest = __objRest(_b, [
359
360
  "icon",
@@ -361,9 +362,10 @@ var IconButton = (_a) => {
361
362
  "disabled",
362
363
  "onClick",
363
364
  "label",
365
+ "tooltipContent",
364
366
  "testLabel"
365
367
  ]);
366
- return /* @__PURE__ */ react_default.createElement(Item_default, __spreadValues({}, rest), /* @__PURE__ */ react_default.createElement(
368
+ const button = /* @__PURE__ */ react_default.createElement(
367
369
  Button_default,
368
370
  {
369
371
  elementRef: buttonRef,
@@ -375,14 +377,25 @@ var IconButton = (_a) => {
375
377
  "data-test": testLabel,
376
378
  "data-clickable": true
377
379
  }
378
- ));
380
+ );
381
+ return /* @__PURE__ */ react_default.createElement(Item_default, __spreadValues({}, rest), tooltipContent ? /* @__PURE__ */ react_default.createElement(Tooltip_default, { contentRelationship: "label", content: tooltipContent }, button) : button);
379
382
  };
380
383
  var IconButton_default = IconButton;
381
384
 
382
385
  // src/components/StyledButton.tsx
383
- var StyledDropdownButton = styled_components_default(Button_default)`
386
+ var BaseDropdownButton = styled_components_default(Button_default)`
384
387
  max-width: '50px';
385
388
  `;
389
+ var StyledDropdownButton = react_default.forwardRef((_a, ref) => {
390
+ var _b = _a, { tooltipContent } = _b, props = __objRest(_b, ["tooltipContent"]);
391
+ const button = /* @__PURE__ */ react_default.createElement(
392
+ BaseDropdownButton,
393
+ __spreadProps(__spreadValues({}, props), {
394
+ elementRef: ref
395
+ })
396
+ );
397
+ return tooltipContent ? /* @__PURE__ */ react_default.createElement(Tooltip_default, { contentRelationship: "label", content: tooltipContent }, button) : button;
398
+ });
386
399
 
387
400
  // src/buttons/Charts.tsx
388
401
  var ScrollableMenu = styled_components_default(Menu_default).attrs(
@@ -396,8 +409,7 @@ var ScrollableMenu = styled_components_default(Menu_default).attrs(
396
409
  `;
397
410
  var chartsDropdown = prepareIcon({
398
411
  Icon: ChartColumn_default,
399
- isMenu: true,
400
- screenReaderContent: (0, i18n_exports._)("Add chart")
412
+ isMenu: true
401
413
  });
402
414
  var ButtonToggle = /* @__PURE__ */ react_default.createElement(
403
415
  StyledDropdownButton,
@@ -405,7 +417,8 @@ var ButtonToggle = /* @__PURE__ */ react_default.createElement(
405
417
  "data-test": "charts-button",
406
418
  "data-clickable": true,
407
419
  appearance: "subtle",
408
- icon: chartsDropdown
420
+ icon: chartsDropdown,
421
+ tooltipContent: (0, i18n_exports._)("Add chart")
409
422
  }
410
423
  );
411
424
  var focusToggleReasons = [
@@ -533,8 +546,7 @@ var Cog_default = "default" in defaultImport16 ? defaultImport16.default : defau
533
546
 
534
547
  // src/buttons/Config.tsx
535
548
  var configurationIcon = prepareIcon({
536
- Icon: Cog_default,
537
- screenReaderContent: (0, i18n_exports._)("Configuration")
549
+ Icon: Cog_default
538
550
  });
539
551
  var Config = ({ dashboardApi }) => {
540
552
  const configButtonRef = (0, dashboard_context_exports.useToolbarRef)("config");
@@ -557,7 +569,8 @@ var Config = ({ dashboardApi }) => {
557
569
  buttonRef: configButtonRef,
558
570
  testLabel: "config-button",
559
571
  onClick: handleClick,
560
- icon: configurationIcon
572
+ icon: configurationIcon,
573
+ tooltipContent: (0, i18n_exports._)("Configuration")
561
574
  }
562
575
  );
563
576
  };
@@ -574,8 +587,7 @@ var ArrowBroadUnderbarDown_default = "default" in defaultImport17 ? defaultImpor
574
587
 
575
588
  // src/buttons/ContentExport.tsx
576
589
  var icon = prepareIcon({
577
- Icon: ArrowBroadUnderbarDown_default,
578
- screenReaderContent: (0, i18n_exports._)("Export")
590
+ Icon: ArrowBroadUnderbarDown_default
579
591
  });
580
592
  var ContentExport = ({ disabled, onClick }) => /* @__PURE__ */ react_default.createElement(
581
593
  IconButton_default,
@@ -583,7 +595,8 @@ var ContentExport = ({ disabled, onClick }) => /* @__PURE__ */ react_default.cre
583
595
  testLabel: "content-export-button",
584
596
  onClick,
585
597
  disabled: !!disabled,
586
- icon
598
+ icon,
599
+ tooltipContent: (0, i18n_exports._)("Export")
587
600
  }
588
601
  );
589
602
  var ContentExport_default = ContentExport;
@@ -599,8 +612,7 @@ var CylinderMulti_default = "default" in defaultImport18 ? defaultImport18.defau
599
612
 
600
613
  // src/buttons/Data.tsx
601
614
  var dataInputIcon = prepareIcon({
602
- Icon: CylinderMulti_default,
603
- screenReaderContent: (0, i18n_exports._)("Data source overview")
615
+ Icon: CylinderMulti_default
604
616
  });
605
617
  var Data = ({ dashboardApi }) => {
606
618
  const dataButtonRef = (0, dashboard_context_exports.useToolbarRef)("dataOverview");
@@ -626,7 +638,8 @@ var Data = ({ dashboardApi }) => {
626
638
  buttonRef: dataButtonRef,
627
639
  testLabel: "data-button",
628
640
  onClick: handleClick,
629
- icon: dataInputIcon
641
+ icon: dataInputIcon,
642
+ tooltipContent: (0, i18n_exports._)("Data source overview")
630
643
  }
631
644
  );
632
645
  };
@@ -774,8 +787,7 @@ var Square_default = "default" in defaultImport20 ? defaultImport20.default : de
774
787
 
775
788
  // src/buttons/EmptyVisualization.tsx
776
789
  var icon2 = prepareIcon({
777
- Icon: Square_default,
778
- screenReaderContent: (0, i18n_exports._)("Add rectangle")
790
+ Icon: Square_default
779
791
  });
780
792
  var EmptyVisualization = ({ dashboardApi }) => {
781
793
  const handleClick = (0, react_exports.useCallback)(() => __async(null, null, function* () {
@@ -797,7 +809,8 @@ var EmptyVisualization = ({ dashboardApi }) => {
797
809
  {
798
810
  testLabel: "empty-viz-button",
799
811
  onClick: handleClick,
800
- icon: icon2
812
+ icon: icon2,
813
+ tooltipContent: (0, i18n_exports._)("Add rectangle")
801
814
  }
802
815
  );
803
816
  };
@@ -874,8 +887,7 @@ var useToolbarButtonClick = (event, onClick) => {
874
887
 
875
888
  // src/buttons/Fullscreen.tsx
876
889
  var icon3 = prepareIcon({
877
- Icon: ChevronsOut_default,
878
- screenReaderContent: (0, i18n_exports._)("Fullscreen")
890
+ Icon: ChevronsOut_default
879
891
  });
880
892
  var FullScreen = ({ dashboardApi }) => {
881
893
  const isFullscreen = !!(0, dashboard_state_exports.useSelector)(dashboard_state_exports.selectFullscreenElement);
@@ -889,7 +901,8 @@ var FullScreen = ({ dashboardApi }) => {
889
901
  testLabel: "fullscreen-button",
890
902
  onClick: handleClick,
891
903
  disabled: isFullscreen,
892
- icon: icon3
904
+ icon: icon3,
905
+ tooltipContent: (0, i18n_exports._)("Fullscreen")
893
906
  }
894
907
  );
895
908
  };
@@ -971,7 +984,6 @@ var MenusContainer = styled_components_default.div`
971
984
  `;
972
985
  var iconGalleryDropdown = prepareIcon({
973
986
  Icon: ChartSingleValueIcon_default,
974
- screenReaderContent: (0, i18n_exports._)("Add icon"),
975
987
  isMenu: true
976
988
  });
977
989
  var focusToggleReasons2 = [
@@ -995,7 +1007,8 @@ var IconGallery = ({ dashboardApi }) => {
995
1007
  "data-test": "icon-gallery-button",
996
1008
  "data-clickable": true,
997
1009
  appearance: "subtle",
998
- icon: iconGalleryDropdown
1010
+ icon: iconGalleryDropdown,
1011
+ tooltipContent: (0, i18n_exports._)("Add icon")
999
1012
  }
1000
1013
  ),
1001
1014
  []
@@ -1050,7 +1063,6 @@ var QuestionCircle_default = "default" in defaultImport24 ? defaultImport24.defa
1050
1063
  // src/buttons/HelpButton.tsx
1051
1064
  var HelpIcon = prepareIcon({
1052
1065
  Icon: QuestionCircle_default,
1053
- screenReaderContent: (0, i18n_exports._)("Help links"),
1054
1066
  isMenu: true
1055
1067
  });
1056
1068
  var ButtonToggle2 = /* @__PURE__ */ react_default.createElement(
@@ -1059,7 +1071,8 @@ var ButtonToggle2 = /* @__PURE__ */ react_default.createElement(
1059
1071
  appearance: "subtle",
1060
1072
  "data-clickable": true,
1061
1073
  "data-test": "help-button",
1062
- icon: HelpIcon
1074
+ icon: HelpIcon,
1075
+ tooltipContent: (0, i18n_exports._)("Help links")
1063
1076
  }
1064
1077
  );
1065
1078
  var HelpButton = ({ helpLinks = [] }) => {
@@ -1121,8 +1134,7 @@ var Picture_default = "default" in defaultImport25 ? defaultImport25.default : d
1121
1134
 
1122
1135
  // src/buttons/Image.tsx
1123
1136
  var icon4 = prepareIcon({
1124
- Icon: Picture_default,
1125
- screenReaderContent: (0, i18n_exports._)("Add image")
1137
+ Icon: Picture_default
1126
1138
  });
1127
1139
  var Image = ({ dashboardApi }) => {
1128
1140
  const handleClick = (0, react_exports.useCallback)(() => __async(null, null, function* () {
@@ -1143,7 +1155,8 @@ var Image = ({ dashboardApi }) => {
1143
1155
  {
1144
1156
  testLabel: "image-button",
1145
1157
  onClick: handleClick,
1146
- icon: icon4
1158
+ icon: icon4,
1159
+ tooltipContent: (0, i18n_exports._)("Add image")
1147
1160
  }
1148
1161
  );
1149
1162
  };
@@ -1156,7 +1169,6 @@ var MenusContainer2 = styled_components_default.div`
1156
1169
  `;
1157
1170
  var imageGalleryDropdown = prepareIcon({
1158
1171
  Icon: Picture_default,
1159
- screenReaderContent: (0, i18n_exports._)("Add image"),
1160
1172
  isMenu: true
1161
1173
  });
1162
1174
  var ButtonToggle3 = /* @__PURE__ */ react_default.createElement(
@@ -1165,7 +1177,8 @@ var ButtonToggle3 = /* @__PURE__ */ react_default.createElement(
1165
1177
  "data-test": "image-gallery-button",
1166
1178
  "data-clickable": true,
1167
1179
  appearance: "subtle",
1168
- icon: imageGalleryDropdown
1180
+ icon: imageGalleryDropdown,
1181
+ tooltipContent: (0, i18n_exports._)("Add image")
1169
1182
  }
1170
1183
  );
1171
1184
  var focusToggleReasons3 = [];
@@ -1252,7 +1265,6 @@ var focusToggleReasons4 = [
1252
1265
  var DEFAULT_PRESET_MAP = Object.freeze({});
1253
1266
  var addInputIcon = prepareIcon({
1254
1267
  Icon: SlidersTripleHorizontal_default,
1255
- screenReaderContent: (0, i18n_exports._)("Add input"),
1256
1268
  isMenu: true
1257
1269
  });
1258
1270
  var ButtonToggle4 = /* @__PURE__ */ react_default.createElement(
@@ -1261,7 +1273,8 @@ var ButtonToggle4 = /* @__PURE__ */ react_default.createElement(
1261
1273
  appearance: "subtle",
1262
1274
  "data-clickable": true,
1263
1275
  "data-test": "inputs-button",
1264
- icon: addInputIcon
1276
+ icon: addInputIcon,
1277
+ tooltipContent: (0, i18n_exports._)("Add input")
1265
1278
  }
1266
1279
  );
1267
1280
  var onCreateInputClickFactory = ({
@@ -1373,8 +1386,7 @@ var Markdown_default = "default" in defaultImport29 ? defaultImport29.default :
1373
1386
 
1374
1387
  // src/buttons/Markdown.tsx
1375
1388
  var icon5 = prepareIcon({
1376
- Icon: Markdown_default,
1377
- screenReaderContent: (0, i18n_exports._)("Add markdown text")
1389
+ Icon: Markdown_default
1378
1390
  });
1379
1391
  var Markdown = ({ dashboardApi }) => {
1380
1392
  const handleClick = (0, react_exports.useCallback)(() => {
@@ -1395,7 +1407,8 @@ var Markdown = ({ dashboardApi }) => {
1395
1407
  {
1396
1408
  testLabel: "markdown-button",
1397
1409
  onClick: handleClick,
1398
- icon: icon5
1410
+ icon: icon5,
1411
+ tooltipContent: (0, i18n_exports._)("Add markdown text")
1399
1412
  }
1400
1413
  );
1401
1414
  };
@@ -1436,8 +1449,7 @@ var ArrowBowRight_default = "default" in defaultImport30 ? defaultImport30.defau
1436
1449
 
1437
1450
  // src/buttons/Redo.tsx
1438
1451
  var icon6 = prepareIcon({
1439
- Icon: ArrowBowRight_default,
1440
- screenReaderContent: (0, i18n_exports._)("Redo")
1452
+ Icon: ArrowBowRight_default
1441
1453
  });
1442
1454
  var Redo = ({ dashboardApi }) => {
1443
1455
  const [canRedo, setCanRedo] = (0, react_exports.useState)(
@@ -1472,7 +1484,8 @@ var Redo = ({ dashboardApi }) => {
1472
1484
  testLabel: "redo-button",
1473
1485
  onClick: handleClick,
1474
1486
  disabled: !canRedo,
1475
- icon: icon6
1487
+ icon: icon6,
1488
+ tooltipContent: (0, i18n_exports._)("Redo")
1476
1489
  }
1477
1490
  );
1478
1491
  };
@@ -1528,7 +1541,6 @@ var PopoverItemButton_default = PopoverItemButton;
1528
1541
  // src/buttons/Shapes.tsx
1529
1542
  var shapesDropdown = prepareIcon({
1530
1543
  Icon: ShapesVariety_default,
1531
- screenReaderContent: (0, i18n_exports._)("Add shape"),
1532
1544
  isMenu: true
1533
1545
  });
1534
1546
  var ButtonToggle5 = /* @__PURE__ */ react_default.createElement(
@@ -1537,7 +1549,8 @@ var ButtonToggle5 = /* @__PURE__ */ react_default.createElement(
1537
1549
  appearance: "subtle",
1538
1550
  "data-clickable": true,
1539
1551
  "data-test": "shapes-button",
1540
- icon: shapesDropdown
1552
+ icon: shapesDropdown,
1553
+ tooltipContent: (0, i18n_exports._)("Add shape")
1541
1554
  }
1542
1555
  );
1543
1556
  var focusToggleReasons5 = [
@@ -1637,8 +1650,7 @@ var WindowChevronsSlash_default = "default" in defaultImport34 ? defaultImport34
1637
1650
 
1638
1651
  // src/buttons/Source.tsx
1639
1652
  var icon7 = prepareIcon({
1640
- Icon: WindowChevronsSlash_default,
1641
- screenReaderContent: (0, i18n_exports._)("Source code")
1653
+ Icon: WindowChevronsSlash_default
1642
1654
  });
1643
1655
  var Source = ({ disabled = false, onClick }) => {
1644
1656
  const sourceButtonRef = (0, dashboard_context_exports.useToolbarRef)("source");
@@ -1659,7 +1671,8 @@ var Source = ({ disabled = false, onClick }) => {
1659
1671
  onClick: onSourceClick,
1660
1672
  disabled,
1661
1673
  icon: icon7,
1662
- buttonRef: sourceButtonRef
1674
+ buttonRef: sourceButtonRef,
1675
+ tooltipContent: (0, i18n_exports._)("Source code")
1663
1676
  }
1664
1677
  );
1665
1678
  };
@@ -1676,8 +1689,7 @@ var ListToken_default = "default" in defaultImport35 ? defaultImport35.default :
1676
1689
 
1677
1690
  // src/buttons/tokenManager/TokenManager.tsx
1678
1691
  var tokenManagerIcon = prepareIcon({
1679
- Icon: ListToken_default,
1680
- screenReaderContent: (0, i18n_exports._)("Token manager")
1692
+ Icon: ListToken_default
1681
1693
  });
1682
1694
  var TokenManager = ({ dashboardApi }) => {
1683
1695
  const { showTokenManager } = (0, dashboard_context_exports.useFeatureFlags)();
@@ -1698,20 +1710,13 @@ var TokenManager = ({ dashboardApi }) => {
1698
1710
  return null;
1699
1711
  }
1700
1712
  return /* @__PURE__ */ react_default.createElement(
1701
- Tooltip_default,
1713
+ IconButton_default,
1702
1714
  {
1703
- contentRelationship: "label",
1704
- content: (0, i18n_exports._)("Token manager"),
1705
- "data-test-label": "token-manager-button"
1706
- },
1707
- /* @__PURE__ */ react_default.createElement(
1708
- IconButton_default,
1709
- {
1710
- testLabel: "token-manager-button",
1711
- onClick: handleClick,
1712
- icon: tokenManagerIcon
1713
- }
1714
- )
1715
+ testLabel: "token-manager-button",
1716
+ onClick: handleClick,
1717
+ icon: tokenManagerIcon,
1718
+ tooltipContent: (0, i18n_exports._)("Token manager")
1719
+ }
1715
1720
  );
1716
1721
  };
1717
1722
 
@@ -1726,8 +1731,7 @@ var ArrowBowLeft_default = "default" in defaultImport36 ? defaultImport36.defaul
1726
1731
 
1727
1732
  // src/buttons/Undo.tsx
1728
1733
  var icon8 = prepareIcon({
1729
- Icon: ArrowBowLeft_default,
1730
- screenReaderContent: (0, i18n_exports._)("Undo")
1734
+ Icon: ArrowBowLeft_default
1731
1735
  });
1732
1736
  var Undo = ({ dashboardApi }) => {
1733
1737
  const [canUndo, setCanUndo] = (0, react_exports.useState)(
@@ -1762,7 +1766,8 @@ var Undo = ({ dashboardApi }) => {
1762
1766
  testLabel: "undo-button",
1763
1767
  onClick: handleClick,
1764
1768
  disabled: !canUndo,
1765
- icon: icon8
1769
+ icon: icon8,
1770
+ tooltipContent: (0, i18n_exports._)("Undo")
1766
1771
  }
1767
1772
  );
1768
1773
  };