@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
@@ -4,7 +4,9 @@ in part without a valid written license from Splunk Inc. is PROHIBITED. */
4
4
  "use strict";
5
5
  var __create = Object.create;
6
6
  var __defProp = Object.defineProperty;
7
+ var __defProps = Object.defineProperties;
7
8
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
8
10
  var __getOwnPropNames = Object.getOwnPropertyNames;
9
11
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
10
12
  var __getProtoOf = Object.getPrototypeOf;
@@ -22,6 +24,7 @@ var __spreadValues = (a, b) => {
22
24
  }
23
25
  return a;
24
26
  };
27
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
28
  var __objRest = (source, exclude) => {
26
29
  var target = {};
27
30
  for (var prop in source)
@@ -147,10 +150,29 @@ var defaultImport7 = __toESM(require("@splunk/react-ui/Button"));
147
150
  __reExport(Button_exports, require("@splunk/react-ui/Button"));
148
151
  var Button_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
149
152
 
153
+ // esm-externals:@splunk/react-ui/Tooltip
154
+ var Tooltip_exports = {};
155
+ __export(Tooltip_exports, {
156
+ default: () => Tooltip_default
157
+ });
158
+ var defaultImport8 = __toESM(require("@splunk/react-ui/Tooltip"));
159
+ __reExport(Tooltip_exports, require("@splunk/react-ui/Tooltip"));
160
+ var Tooltip_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
161
+
150
162
  // src/components/StyledButton.tsx
151
- var StyledDropdownButton = styled_components_default(Button_default)`
163
+ var BaseDropdownButton = styled_components_default(Button_default)`
152
164
  max-width: '50px';
153
165
  `;
166
+ var StyledDropdownButton = react_default.forwardRef((_a, ref) => {
167
+ var _b = _a, { tooltipContent } = _b, props = __objRest(_b, ["tooltipContent"]);
168
+ const button = /* @__PURE__ */ react_default.createElement(
169
+ BaseDropdownButton,
170
+ __spreadProps(__spreadValues({}, props), {
171
+ elementRef: ref
172
+ })
173
+ );
174
+ return tooltipContent ? /* @__PURE__ */ react_default.createElement(Tooltip_default, { contentRelationship: "label", content: tooltipContent }, button) : button;
175
+ });
154
176
 
155
177
  // src/Item.tsx
156
178
  var Item_default = styled_components_default.div``;
@@ -197,18 +219,18 @@ var CaretDown_exports = {};
197
219
  __export(CaretDown_exports, {
198
220
  default: () => CaretDown_default
199
221
  });
200
- var defaultImport8 = __toESM(require("@splunk/react-icons/CaretDown"));
222
+ var defaultImport9 = __toESM(require("@splunk/react-icons/CaretDown"));
201
223
  __reExport(CaretDown_exports, require("@splunk/react-icons/CaretDown"));
202
- var CaretDown_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
224
+ var CaretDown_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
203
225
 
204
226
  // esm-externals:@splunk/react-ui/ScreenReaderContent
205
227
  var ScreenReaderContent_exports = {};
206
228
  __export(ScreenReaderContent_exports, {
207
229
  default: () => ScreenReaderContent_default
208
230
  });
209
- var defaultImport9 = __toESM(require("@splunk/react-ui/ScreenReaderContent"));
231
+ var defaultImport10 = __toESM(require("@splunk/react-ui/ScreenReaderContent"));
210
232
  __reExport(ScreenReaderContent_exports, require("@splunk/react-ui/ScreenReaderContent"));
211
- var ScreenReaderContent_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
233
+ var ScreenReaderContent_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
212
234
 
213
235
  // src/IconButton.tsx
214
236
  var StyledDropdownIcon = styled_components_default(CaretDown_default)`
@@ -237,7 +259,6 @@ var MenusContainer = styled_components_default.div`
237
259
  `;
238
260
  var iconGalleryDropdown = prepareIcon({
239
261
  Icon: ChartSingleValueIcon_default,
240
- screenReaderContent: (0, i18n_exports._)("Add icon"),
241
262
  isMenu: true
242
263
  });
243
264
  var focusToggleReasons = [
@@ -261,7 +282,8 @@ var IconGallery = ({ dashboardApi }) => {
261
282
  "data-test": "icon-gallery-button",
262
283
  "data-clickable": true,
263
284
  appearance: "subtle",
264
- icon: iconGalleryDropdown
285
+ icon: iconGalleryDropdown,
286
+ tooltipContent: (0, i18n_exports._)("Add icon")
265
287
  }
266
288
  ),
267
289
  []
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/buttons/IconGallery.tsx", "esm-externals:react", "esm-externals:styled-components", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-ui/Dropdown", "esm-externals:@splunk/react-icons/ChartSingleValueIcon", "esm-externals:@splunk/dashboard-ui", "esm-externals:@splunk/react-ui/Button", "../src/components/StyledButton.tsx", "../src/Item.tsx", "../src/hooks/useDropdown.ts", "esm-externals:@splunk/react-icons/CaretDown", "esm-externals:@splunk/react-ui/ScreenReaderContent", "../src/IconButton.tsx"],
4
- "sourcesContent": ["import React, { useCallback, useMemo } from 'react';\nimport styled from 'styled-components';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nimport Dropdown, {\n type DropdownPossibleCloseReason,\n} from '@splunk/react-ui/Dropdown';\n\nimport AddIconDropdown from '@splunk/react-icons/ChartSingleValueIcon';\nimport { IconGallery as IconGalleryPanel } from '@splunk/dashboard-ui';\n\nimport { StyledDropdownButton } from '../components/StyledButton';\nimport ToolbarItem from '../Item';\nimport useDropdown from '../hooks/useDropdown';\nimport { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nconst MenusContainer = styled.div`\n display: flex;\n padding: 5px;\n`;\n\nconst iconGalleryDropdown = prepareIcon({\n Icon: AddIconDropdown,\n screenReaderContent: _('Add icon'),\n isMenu: true,\n});\n\nconst focusToggleReasons: DropdownPossibleCloseReason[] = [\n 'escapeKey',\n 'tabKey',\n];\n\n/**\n * Icon Gallery button that has as a dropdown menu.\n */\nconst IconGallery = ({ dashboardApi }: ToolbarButtonProps) => {\n const {\n handleForceClose,\n handleRequestClose,\n handleRequestOpen,\n setHasChildModal,\n isOpen,\n } = useDropdown({\n isContentClickClose: false,\n });\n\n const ButtonToggle = useMemo(\n () => (\n <StyledDropdownButton\n data-test=\"icon-gallery-button\"\n data-clickable\n appearance=\"subtle\"\n icon={iconGalleryDropdown}\n />\n ),\n []\n );\n const handlePanelClick = useCallback(\n async (iconURL: string) => {\n dashboardApi?.createVisualization({\n visualizationDefinition: {\n type: 'splunk.singlevalueicon',\n options: {\n showValue: false,\n icon: iconURL,\n },\n },\n });\n dashboardApi?.openPanel({\n activePanel: 'config',\n });\n handleForceClose();\n },\n [dashboardApi, handleForceClose]\n );\n\n return (\n <ToolbarItem>\n <Dropdown\n focusToggleReasons={focusToggleReasons}\n onRequestClose={handleRequestClose}\n onRequestOpen={handleRequestOpen}\n open={isOpen}\n toggle={ButtonToggle}\n >\n <MenusContainer data-test=\"icon-menu\" data-open={isOpen}>\n <IconGalleryPanel\n onClick={handlePanelClick}\n setHasChildModal={setHasChildModal}\n />\n </MenusContainer>\n </Dropdown>\n </ToolbarItem>\n );\n};\n\nexport default IconGallery;\n", "import * as defaultImport from \"react\";\nexport * from \"react\";\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 * 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-ui/Dropdown\";\nexport * from \"@splunk/react-ui/Dropdown\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/ChartSingleValueIcon\";\nexport * from \"@splunk/react-icons/ChartSingleValueIcon\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/dashboard-ui\";\nexport * from \"@splunk/dashboard-ui\";\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 Button from '@splunk/react-ui/Button';\nimport styled from 'styled-components';\n\nexport const StyledDropdownButton = styled(Button)`\n max-width: '50px';\n`;\n", "import styled from 'styled-components';\n\nexport default styled.div``;\n", "import type { DropdownRequestCloseHandler } from '@splunk/react-ui/Dropdown';\nimport { useCallback, useRef, useState } from 'react';\n\ninterface UseDropdownArgs {\n isContentClickClose?: boolean;\n}\n\ninterface UseDropdownReturn {\n isOpen: boolean;\n handleRequestClose: DropdownRequestCloseHandler;\n handleRequestOpen: () => void;\n handleForceClose: () => void;\n setHasChildModal: (value: boolean) => void;\n}\n\n/**\n * Custom React Hook for the controlled SUI Dropdown component.\n *\n * @param {Object} config\n * @param {Boolean} config.isContentClickClose Control if dropdown children onClick's will close the dropdown automatically\n * @returns {Object} value\n * @returns {Boolean} value.isOpen The only state of this hook\n * @returns {Function} value.handleRequestOpen Event handler to open the dropdown\n * @returns {Function} value.handleRequestClose Event handler that SUI Dropdown calls when requested to close\n * @returns {Function} value.handleForceClose Event handler to forcefully close the dropdown\n */\nconst useDropdown = ({\n isContentClickClose = true,\n}: UseDropdownArgs): UseDropdownReturn => {\n const [isOpen, setIsOpen] = useState(false);\n const hasChildModal = useRef(false);\n\n const handleRequestClose = useCallback<DropdownRequestCloseHandler>(\n ({ reason }) => {\n if (reason === 'contentClick' && !isContentClickClose) {\n // This return results in the dropdown not closing.\n return;\n }\n\n // If there is a child modal then don't close the root on ESC press\n if (reason === 'escapeKey' && hasChildModal.current) {\n return;\n }\n\n setIsOpen(false);\n },\n [isContentClickClose]\n );\n\n const handleRequestOpen = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const handleForceClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const setHasChildModal = useCallback((value: boolean) => {\n hasChildModal.current = value;\n }, []);\n\n return {\n isOpen,\n handleRequestOpen,\n handleRequestClose,\n handleForceClose,\n setHasChildModal,\n };\n};\n\nexport default useDropdown;\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 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", "defaultImport", "IconGalleryPanel"]
3
+ "sources": ["../src/buttons/IconGallery.tsx", "esm-externals:react", "esm-externals:styled-components", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-ui/Dropdown", "esm-externals:@splunk/react-icons/ChartSingleValueIcon", "esm-externals:@splunk/dashboard-ui", "esm-externals:@splunk/react-ui/Button", "esm-externals:@splunk/react-ui/Tooltip", "../src/components/StyledButton.tsx", "../src/Item.tsx", "../src/hooks/useDropdown.ts", "esm-externals:@splunk/react-icons/CaretDown", "esm-externals:@splunk/react-ui/ScreenReaderContent", "../src/IconButton.tsx"],
4
+ "sourcesContent": ["import React, { useCallback, useMemo } from 'react';\nimport styled from 'styled-components';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nimport Dropdown, {\n type DropdownPossibleCloseReason,\n} from '@splunk/react-ui/Dropdown';\n\nimport AddIconDropdown from '@splunk/react-icons/ChartSingleValueIcon';\nimport { IconGallery as IconGalleryPanel } from '@splunk/dashboard-ui';\n\nimport { StyledDropdownButton } from '../components/StyledButton';\nimport ToolbarItem from '../Item';\nimport useDropdown from '../hooks/useDropdown';\nimport { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nconst MenusContainer = styled.div`\n display: flex;\n padding: 5px;\n`;\n\nconst iconGalleryDropdown = prepareIcon({\n Icon: AddIconDropdown,\n isMenu: true,\n});\n\nconst focusToggleReasons: DropdownPossibleCloseReason[] = [\n 'escapeKey',\n 'tabKey',\n];\n\n/**\n * Icon Gallery button that has as a dropdown menu.\n */\nconst IconGallery = ({ dashboardApi }: ToolbarButtonProps) => {\n const {\n handleForceClose,\n handleRequestClose,\n handleRequestOpen,\n setHasChildModal,\n isOpen,\n } = useDropdown({\n isContentClickClose: false,\n });\n\n const ButtonToggle = useMemo(\n () => (\n <StyledDropdownButton\n data-test=\"icon-gallery-button\"\n data-clickable\n appearance=\"subtle\"\n icon={iconGalleryDropdown}\n tooltipContent={_('Add icon')}\n />\n ),\n []\n );\n const handlePanelClick = useCallback(\n async (iconURL: string) => {\n dashboardApi?.createVisualization({\n visualizationDefinition: {\n type: 'splunk.singlevalueicon',\n options: {\n showValue: false,\n icon: iconURL,\n },\n },\n });\n dashboardApi?.openPanel({\n activePanel: 'config',\n });\n handleForceClose();\n },\n [dashboardApi, handleForceClose]\n );\n\n return (\n <ToolbarItem>\n <Dropdown\n focusToggleReasons={focusToggleReasons}\n onRequestClose={handleRequestClose}\n onRequestOpen={handleRequestOpen}\n open={isOpen}\n toggle={ButtonToggle}\n >\n <MenusContainer data-test=\"icon-menu\" data-open={isOpen}>\n <IconGalleryPanel\n onClick={handlePanelClick}\n setHasChildModal={setHasChildModal}\n />\n </MenusContainer>\n </Dropdown>\n </ToolbarItem>\n );\n};\n\nexport default IconGallery;\n", "import * as defaultImport from \"react\";\nexport * from \"react\";\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 * 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-ui/Dropdown\";\nexport * from \"@splunk/react-ui/Dropdown\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/react-icons/ChartSingleValueIcon\";\nexport * from \"@splunk/react-icons/ChartSingleValueIcon\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/dashboard-ui\";\nexport * from \"@splunk/dashboard-ui\";\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 React from 'react';\nimport Button, { type ButtonPropsBase } from '@splunk/react-ui/Button';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport styled from 'styled-components';\n\nconst BaseDropdownButton = styled(Button)`\n max-width: '50px';\n`;\n\nexport interface StyledDropdownButtonProps\n extends Pick<ButtonPropsBase, 'appearance' | 'icon' | 'disabled'> {\n children?: React.ReactNode;\n className?: string;\n 'data-clickable'?: boolean;\n 'data-test'?: string;\n tooltipContent?: string;\n}\n\nexport const StyledDropdownButton = React.forwardRef<\n HTMLButtonElement,\n StyledDropdownButtonProps\n>(({ tooltipContent, ...props }, ref): JSX.Element => {\n const button = (\n <BaseDropdownButton\n {...props}\n elementRef={ref as React.RefObject<HTMLButtonElement>}\n />\n );\n\n return tooltipContent ? (\n <Tooltip contentRelationship=\"label\" content={tooltipContent}>\n {button}\n </Tooltip>\n ) : (\n button\n );\n});\n", "import styled from 'styled-components';\n\nexport default styled.div``;\n", "import type { DropdownRequestCloseHandler } from '@splunk/react-ui/Dropdown';\nimport { useCallback, useRef, useState } from 'react';\n\ninterface UseDropdownArgs {\n isContentClickClose?: boolean;\n}\n\ninterface UseDropdownReturn {\n isOpen: boolean;\n handleRequestClose: DropdownRequestCloseHandler;\n handleRequestOpen: () => void;\n handleForceClose: () => void;\n setHasChildModal: (value: boolean) => void;\n}\n\n/**\n * Custom React Hook for the controlled SUI Dropdown component.\n *\n * @param {Object} config\n * @param {Boolean} config.isContentClickClose Control if dropdown children onClick's will close the dropdown automatically\n * @returns {Object} value\n * @returns {Boolean} value.isOpen The only state of this hook\n * @returns {Function} value.handleRequestOpen Event handler to open the dropdown\n * @returns {Function} value.handleRequestClose Event handler that SUI Dropdown calls when requested to close\n * @returns {Function} value.handleForceClose Event handler to forcefully close the dropdown\n */\nconst useDropdown = ({\n isContentClickClose = true,\n}: UseDropdownArgs): UseDropdownReturn => {\n const [isOpen, setIsOpen] = useState(false);\n const hasChildModal = useRef(false);\n\n const handleRequestClose = useCallback<DropdownRequestCloseHandler>(\n ({ reason }) => {\n if (reason === 'contentClick' && !isContentClickClose) {\n // This return results in the dropdown not closing.\n return;\n }\n\n // If there is a child modal then don't close the root on ESC press\n if (reason === 'escapeKey' && hasChildModal.current) {\n return;\n }\n\n setIsOpen(false);\n },\n [isContentClickClose]\n );\n\n const handleRequestOpen = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const handleForceClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const setHasChildModal = useCallback((value: boolean) => {\n hasChildModal.current = value;\n }, []);\n\n return {\n isOpen,\n handleRequestOpen,\n handleRequestClose,\n handleForceClose,\n setHasChildModal,\n };\n};\n\nexport default useDropdown;\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 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", "defaultImport", "IconGalleryPanel"]
7
7
  }
package/buttons/Image.js CHANGED
@@ -138,14 +138,23 @@ var defaultImport6 = __toESM(require("@splunk/react-ui/Button"));
138
138
  __reExport(Button_exports, require("@splunk/react-ui/Button"));
139
139
  var Button_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
140
140
 
141
+ // esm-externals:@splunk/react-ui/Tooltip
142
+ var Tooltip_exports = {};
143
+ __export(Tooltip_exports, {
144
+ default: () => Tooltip_default
145
+ });
146
+ var defaultImport7 = __toESM(require("@splunk/react-ui/Tooltip"));
147
+ __reExport(Tooltip_exports, require("@splunk/react-ui/Tooltip"));
148
+ var Tooltip_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
149
+
141
150
  // esm-externals:styled-components
142
151
  var styled_components_exports = {};
143
152
  __export(styled_components_exports, {
144
153
  default: () => styled_components_default
145
154
  });
146
- var defaultImport7 = __toESM(require("styled-components"));
155
+ var defaultImport8 = __toESM(require("styled-components"));
147
156
  __reExport(styled_components_exports, require("styled-components"));
148
- var styled_components_default = defaultImport7.default;
157
+ var styled_components_default = defaultImport8.default;
149
158
 
150
159
  // src/Item.tsx
151
160
  var Item_default = styled_components_default.div``;
@@ -176,6 +185,7 @@ var IconButton = (_a) => {
176
185
  disabled = false,
177
186
  onClick,
178
187
  label,
188
+ tooltipContent,
179
189
  testLabel
180
190
  } = _b, rest = __objRest(_b, [
181
191
  "icon",
@@ -183,9 +193,10 @@ var IconButton = (_a) => {
183
193
  "disabled",
184
194
  "onClick",
185
195
  "label",
196
+ "tooltipContent",
186
197
  "testLabel"
187
198
  ]);
188
- return /* @__PURE__ */ react_default.createElement(Item_default, __spreadValues({}, rest), /* @__PURE__ */ react_default.createElement(
199
+ const button = /* @__PURE__ */ react_default.createElement(
189
200
  Button_default,
190
201
  {
191
202
  elementRef: buttonRef,
@@ -197,14 +208,14 @@ var IconButton = (_a) => {
197
208
  "data-test": testLabel,
198
209
  "data-clickable": true
199
210
  }
200
- ));
211
+ );
212
+ return /* @__PURE__ */ react_default.createElement(Item_default, __spreadValues({}, rest), tooltipContent ? /* @__PURE__ */ react_default.createElement(Tooltip_default, { contentRelationship: "label", content: tooltipContent }, button) : button);
201
213
  };
202
214
  var IconButton_default = IconButton;
203
215
 
204
216
  // src/buttons/Image.tsx
205
217
  var icon = prepareIcon({
206
- Icon: Picture_default,
207
- screenReaderContent: (0, i18n_exports._)("Add image")
218
+ Icon: Picture_default
208
219
  });
209
220
  var Image = ({ dashboardApi }) => {
210
221
  const handleClick = (0, react_exports.useCallback)(() => __async(null, null, function* () {
@@ -225,7 +236,8 @@ var Image = ({ dashboardApi }) => {
225
236
  {
226
237
  testLabel: "image-button",
227
238
  onClick: handleClick,
228
- icon
239
+ icon,
240
+ tooltipContent: (0, i18n_exports._)("Add image")
229
241
  }
230
242
  );
231
243
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/buttons/Image.tsx", "esm-externals:react", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-icons/Picture", "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 } from 'react';\n\nimport { _ } from '@splunk/ui-utils/i18n';\nimport Picture from '@splunk/react-icons/Picture';\n\nimport IconButton, { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nconst icon = prepareIcon({\n Icon: Picture,\n screenReaderContent: _('Add image'),\n});\n\n/**\n * Button that create a empty image\n */\nconst Image = ({ dashboardApi }: ToolbarButtonProps) => {\n const handleClick = useCallback(async () => {\n dashboardApi?.createVisualization({\n visualizationDefinition: {\n type: 'splunk.image',\n options: {\n preserveAspectRatio: true,\n },\n },\n });\n\n dashboardApi?.openPanel({\n activePanel: 'config',\n });\n }, [dashboardApi]);\n\n return (\n <IconButton\n testLabel=\"image-button\"\n onClick={handleClick}\n icon={icon}\n />\n );\n};\n\nexport default Image;\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/Picture\";\nexport * from \"@splunk/react-icons/Picture\";\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA,oBAA+B;AAC/B,0BAAc;AACd,IAAO,gBAAS,aAAa,gBAA8B,wBAAU;;;ACFrE;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAA+B;AAC/B,yBAAc;AACd,IAAO,eAAS,aAAaA,iBAA8B,yBAAUA;;;ACFrE;AAAA;AAAA;AAAA;AAAA,IAAAC,iBAA+B;AAC/B,4BAAc;AACd,IAAO,kBAAS,aAAaA,iBAA8B,yBAAUA;;;ACFrE;AAAA;AAAA;AAAA;AAAA,IAAAC,iBAA+B;AAC/B,8BAAc;AACd,IAAO,oBAAS,aAAaA,iBAA8B,yBAAUA;;;ACFrE;AAAA;AAAA;AAAA;AAAA,IAAAC,iBAA+B;AAC/B,wCAAc;AACd,IAAO,8BAAS,aAAaA,iBAA8B,yBAAUA;;;ACFrE;AAAA;AAAA;AAAA;AAAA,IAAAC,iBAA+B;AAC/B,2BAAc;AACd,IAAO,iBAAS,aAAaA,iBAA8B,yBAAUA;;;ACFrE;AAAA;AAAA;AAAA;AAAA,IAAAC,iBAA+B;AAC/B,sCAAc;AACd,IAAO,4BAAsB;;;ACA7B,IAAO,eAAQ,0BAAO;;;ACOtB,IAAM,qBAAqB,0BAAO,iBAAY;AAAA;AAAA;AAIvC,IAAM,WAAW;AACjB,IAAM,eAAe;AAoBrB,IAAM,cAAc,CAAC,OAKJ;AALI,eACxB;AAAA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EArCb,IAkC4B,IAIrB,kBAJqB,IAIrB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,OAAO,SAAS,eAAe;AACrC,SACI,0EACI,4CAAC,uBAAK,OAAO,MAAM,QAAQ,QAAU,MAAO,GAC3C,UACG,4CAAC,sBAAmB,SAAQ,UAAS,OAAO,GAAG,QAAQ,MAAM,GAEhE,uBACG,4CAAC,mCAAqB,mBAAoB,CAElD;AAER;AAWA,IAAM,aAAa,CAAC,OAQgB;AARhB,eAChB;AAAA,UAAAC;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EArEJ,IA+DoB,IAOb,iBAPa,IAOb;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACI,4CAAC,iCAAgB,OACb;AAAA,IAAC;AAAA;AAAA,MACG,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,YAAW;AAAA,MACX,MAAMA;AAAA,MACN;AAAA,MACA,aAAW;AAAA,MACX,kBAAc;AAAA;AAAA,EAClB,CACJ;AAER;AAEA,IAAO,qBAAQ;;;AThFf,IAAM,OAAO,YAAY;AAAA,EACrB,MAAM;AAAA,EACN,yBAAqB,gBAAE,WAAW;AACtC,CAAC;AAKD,IAAM,QAAQ,CAAC,EAAE,aAAa,MAA0B;AACpD,QAAM,kBAAc,2BAAY,MAAY;AACxC,iDAAc,oBAAoB;AAAA,MAC9B,yBAAyB;AAAA,QACrB,MAAM;AAAA,QACN,SAAS;AAAA,UACL,qBAAqB;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ;AAEA,iDAAc,UAAU;AAAA,MACpB,aAAa;AAAA,IACjB;AAAA,EACJ,IAAG,CAAC,YAAY,CAAC;AAEjB,SACI;AAAA,IAAC;AAAA;AAAA,MACG,WAAU;AAAA,MACV,SAAS;AAAA,MACT;AAAA;AAAA,EACJ;AAER;AAEA,IAAO,gBAAQ;",
6
- "names": ["defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "defaultImport", "icon"]
3
+ "sources": ["../src/buttons/Image.tsx", "esm-externals:react", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-icons/Picture", "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 } from 'react';\n\nimport { _ } from '@splunk/ui-utils/i18n';\nimport Picture from '@splunk/react-icons/Picture';\n\nimport IconButton, { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nconst icon = prepareIcon({\n Icon: Picture,\n});\n\n/**\n * Button that create a empty image\n */\nconst Image = ({ dashboardApi }: ToolbarButtonProps) => {\n const handleClick = useCallback(async () => {\n dashboardApi?.createVisualization({\n visualizationDefinition: {\n type: 'splunk.image',\n options: {\n preserveAspectRatio: true,\n },\n },\n });\n\n dashboardApi?.openPanel({\n activePanel: 'config',\n });\n }, [dashboardApi]);\n\n return (\n <IconButton\n testLabel=\"image-button\"\n onClick={handleClick}\n icon={icon}\n tooltipContent={_('Add image')}\n />\n );\n};\n\nexport default Image;\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/Picture\";\nexport * from \"@splunk/react-icons/Picture\";\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
  }
@@ -4,7 +4,9 @@ in part without a valid written license from Splunk Inc. is PROHIBITED. */
4
4
  "use strict";
5
5
  var __create = Object.create;
6
6
  var __defProp = Object.defineProperty;
7
+ var __defProps = Object.defineProperties;
7
8
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
8
10
  var __getOwnPropNames = Object.getOwnPropertyNames;
9
11
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
10
12
  var __getProtoOf = Object.getPrototypeOf;
@@ -22,6 +24,7 @@ var __spreadValues = (a, b) => {
22
24
  }
23
25
  return a;
24
26
  };
27
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
28
  var __objRest = (source, exclude) => {
26
29
  var target = {};
27
30
  for (var prop in source)
@@ -147,10 +150,29 @@ var defaultImport7 = __toESM(require("@splunk/react-ui/Button"));
147
150
  __reExport(Button_exports, require("@splunk/react-ui/Button"));
148
151
  var Button_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
149
152
 
153
+ // esm-externals:@splunk/react-ui/Tooltip
154
+ var Tooltip_exports = {};
155
+ __export(Tooltip_exports, {
156
+ default: () => Tooltip_default
157
+ });
158
+ var defaultImport8 = __toESM(require("@splunk/react-ui/Tooltip"));
159
+ __reExport(Tooltip_exports, require("@splunk/react-ui/Tooltip"));
160
+ var Tooltip_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
161
+
150
162
  // src/components/StyledButton.tsx
151
- var StyledDropdownButton = styled_components_default(Button_default)`
163
+ var BaseDropdownButton = styled_components_default(Button_default)`
152
164
  max-width: '50px';
153
165
  `;
166
+ var StyledDropdownButton = react_default.forwardRef((_a, ref) => {
167
+ var _b = _a, { tooltipContent } = _b, props = __objRest(_b, ["tooltipContent"]);
168
+ const button = /* @__PURE__ */ react_default.createElement(
169
+ BaseDropdownButton,
170
+ __spreadProps(__spreadValues({}, props), {
171
+ elementRef: ref
172
+ })
173
+ );
174
+ return tooltipContent ? /* @__PURE__ */ react_default.createElement(Tooltip_default, { contentRelationship: "label", content: tooltipContent }, button) : button;
175
+ });
154
176
 
155
177
  // src/Item.tsx
156
178
  var Item_default = styled_components_default.div``;
@@ -197,18 +219,18 @@ var CaretDown_exports = {};
197
219
  __export(CaretDown_exports, {
198
220
  default: () => CaretDown_default
199
221
  });
200
- var defaultImport8 = __toESM(require("@splunk/react-icons/CaretDown"));
222
+ var defaultImport9 = __toESM(require("@splunk/react-icons/CaretDown"));
201
223
  __reExport(CaretDown_exports, require("@splunk/react-icons/CaretDown"));
202
- var CaretDown_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
224
+ var CaretDown_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
203
225
 
204
226
  // esm-externals:@splunk/react-ui/ScreenReaderContent
205
227
  var ScreenReaderContent_exports = {};
206
228
  __export(ScreenReaderContent_exports, {
207
229
  default: () => ScreenReaderContent_default
208
230
  });
209
- var defaultImport9 = __toESM(require("@splunk/react-ui/ScreenReaderContent"));
231
+ var defaultImport10 = __toESM(require("@splunk/react-ui/ScreenReaderContent"));
210
232
  __reExport(ScreenReaderContent_exports, require("@splunk/react-ui/ScreenReaderContent"));
211
- var ScreenReaderContent_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
233
+ var ScreenReaderContent_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
212
234
 
213
235
  // src/IconButton.tsx
214
236
  var StyledDropdownIcon = styled_components_default(CaretDown_default)`
@@ -237,7 +259,6 @@ var MenusContainer = styled_components_default.div`
237
259
  `;
238
260
  var imageGalleryDropdown = prepareIcon({
239
261
  Icon: Picture_default,
240
- screenReaderContent: (0, i18n_exports._)("Add image"),
241
262
  isMenu: true
242
263
  });
243
264
  var ButtonToggle = /* @__PURE__ */ react_default.createElement(
@@ -246,7 +267,8 @@ var ButtonToggle = /* @__PURE__ */ react_default.createElement(
246
267
  "data-test": "image-gallery-button",
247
268
  "data-clickable": true,
248
269
  appearance: "subtle",
249
- icon: imageGalleryDropdown
270
+ icon: imageGalleryDropdown,
271
+ tooltipContent: (0, i18n_exports._)("Add image")
250
272
  }
251
273
  );
252
274
  var focusToggleReasons = [];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/buttons/ImageGallery.tsx", "esm-externals:react", "esm-externals:styled-components", "esm-externals:@splunk/react-ui/Dropdown", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-icons/Picture", "esm-externals:@splunk/dashboard-ui", "esm-externals:@splunk/react-ui/Button", "../src/components/StyledButton.tsx", "../src/Item.tsx", "../src/hooks/useDropdown.ts", "esm-externals:@splunk/react-icons/CaretDown", "esm-externals:@splunk/react-ui/ScreenReaderContent", "../src/IconButton.tsx"],
4
- "sourcesContent": ["import React, { useCallback } from 'react';\nimport styled from 'styled-components';\n\nimport Dropdown from '@splunk/react-ui/Dropdown';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nimport AddImage from '@splunk/react-icons/Picture';\n\nimport { ImageGallery as ImageGalleryPanel } from '@splunk/dashboard-ui';\n\nimport { StyledDropdownButton } from '../components/StyledButton';\nimport ToolbarItem from '../Item';\nimport useDropdown from '../hooks/useDropdown';\nimport { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nconst MenusContainer = styled.div`\n display: flex;\n padding: 5px;\n`;\n\nconst imageGalleryDropdown = prepareIcon({\n Icon: AddImage,\n screenReaderContent: _('Add image'),\n isMenu: true,\n});\n\nconst ButtonToggle = (\n <StyledDropdownButton\n data-test=\"image-gallery-button\"\n data-clickable\n appearance=\"subtle\"\n icon={imageGalleryDropdown}\n />\n);\n\nconst focusToggleReasons: never[] = [];\n\n/**\n * Image Gallery button that has as a dropdown menu.\n */\nconst ImageGallery = ({ dashboardApi }: ToolbarButtonProps) => {\n const {\n handleForceClose,\n handleRequestClose,\n handleRequestOpen,\n setHasChildModal,\n isOpen,\n } = useDropdown({\n isContentClickClose: false,\n });\n\n const handlePanelClick = useCallback(\n async (imageUrl: string) => {\n dashboardApi?.createVisualization({\n visualizationDefinition: {\n type: 'splunk.image',\n options: {\n preserveAspectRatio: true,\n src: imageUrl,\n },\n },\n });\n dashboardApi?.openPanel({\n activePanel: 'config',\n });\n handleForceClose();\n },\n [dashboardApi, handleForceClose]\n );\n\n return (\n <ToolbarItem>\n <Dropdown\n focusToggleReasons={focusToggleReasons}\n onRequestClose={handleRequestClose}\n onRequestOpen={handleRequestOpen}\n open={isOpen}\n toggle={ButtonToggle}\n >\n <MenusContainer>\n <ImageGalleryPanel\n onClick={handlePanelClick}\n setHasChildModal={setHasChildModal}\n />\n </MenusContainer>\n </Dropdown>\n </ToolbarItem>\n );\n};\n\nexport default ImageGallery;\n", "import * as defaultImport from \"react\";\nexport * from \"react\";\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 * as defaultImport from \"@splunk/react-ui/Dropdown\";\nexport * from \"@splunk/react-ui/Dropdown\";\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/Picture\";\nexport * from \"@splunk/react-icons/Picture\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/dashboard-ui\";\nexport * from \"@splunk/dashboard-ui\";\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 Button from '@splunk/react-ui/Button';\nimport styled from 'styled-components';\n\nexport const StyledDropdownButton = styled(Button)`\n max-width: '50px';\n`;\n", "import styled from 'styled-components';\n\nexport default styled.div``;\n", "import type { DropdownRequestCloseHandler } from '@splunk/react-ui/Dropdown';\nimport { useCallback, useRef, useState } from 'react';\n\ninterface UseDropdownArgs {\n isContentClickClose?: boolean;\n}\n\ninterface UseDropdownReturn {\n isOpen: boolean;\n handleRequestClose: DropdownRequestCloseHandler;\n handleRequestOpen: () => void;\n handleForceClose: () => void;\n setHasChildModal: (value: boolean) => void;\n}\n\n/**\n * Custom React Hook for the controlled SUI Dropdown component.\n *\n * @param {Object} config\n * @param {Boolean} config.isContentClickClose Control if dropdown children onClick's will close the dropdown automatically\n * @returns {Object} value\n * @returns {Boolean} value.isOpen The only state of this hook\n * @returns {Function} value.handleRequestOpen Event handler to open the dropdown\n * @returns {Function} value.handleRequestClose Event handler that SUI Dropdown calls when requested to close\n * @returns {Function} value.handleForceClose Event handler to forcefully close the dropdown\n */\nconst useDropdown = ({\n isContentClickClose = true,\n}: UseDropdownArgs): UseDropdownReturn => {\n const [isOpen, setIsOpen] = useState(false);\n const hasChildModal = useRef(false);\n\n const handleRequestClose = useCallback<DropdownRequestCloseHandler>(\n ({ reason }) => {\n if (reason === 'contentClick' && !isContentClickClose) {\n // This return results in the dropdown not closing.\n return;\n }\n\n // If there is a child modal then don't close the root on ESC press\n if (reason === 'escapeKey' && hasChildModal.current) {\n return;\n }\n\n setIsOpen(false);\n },\n [isContentClickClose]\n );\n\n const handleRequestOpen = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const handleForceClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const setHasChildModal = useCallback((value: boolean) => {\n hasChildModal.current = value;\n }, []);\n\n return {\n isOpen,\n handleRequestOpen,\n handleRequestClose,\n handleForceClose,\n setHasChildModal,\n };\n};\n\nexport default useDropdown;\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 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", "defaultImport", "ImageGalleryPanel"]
3
+ "sources": ["../src/buttons/ImageGallery.tsx", "esm-externals:react", "esm-externals:styled-components", "esm-externals:@splunk/react-ui/Dropdown", "esm-externals:@splunk/ui-utils/i18n", "esm-externals:@splunk/react-icons/Picture", "esm-externals:@splunk/dashboard-ui", "esm-externals:@splunk/react-ui/Button", "esm-externals:@splunk/react-ui/Tooltip", "../src/components/StyledButton.tsx", "../src/Item.tsx", "../src/hooks/useDropdown.ts", "esm-externals:@splunk/react-icons/CaretDown", "esm-externals:@splunk/react-ui/ScreenReaderContent", "../src/IconButton.tsx"],
4
+ "sourcesContent": ["import React, { useCallback } from 'react';\nimport styled from 'styled-components';\n\nimport Dropdown from '@splunk/react-ui/Dropdown';\nimport { _ } from '@splunk/ui-utils/i18n';\n\nimport AddImage from '@splunk/react-icons/Picture';\n\nimport { ImageGallery as ImageGalleryPanel } from '@splunk/dashboard-ui';\n\nimport { StyledDropdownButton } from '../components/StyledButton';\nimport ToolbarItem from '../Item';\nimport useDropdown from '../hooks/useDropdown';\nimport { prepareIcon } from '../IconButton';\nimport type { ToolbarButtonProps } from '../types/common';\n\nconst MenusContainer = styled.div`\n display: flex;\n padding: 5px;\n`;\n\nconst imageGalleryDropdown = prepareIcon({\n Icon: AddImage,\n isMenu: true,\n});\n\nconst ButtonToggle = (\n <StyledDropdownButton\n data-test=\"image-gallery-button\"\n data-clickable\n appearance=\"subtle\"\n icon={imageGalleryDropdown}\n tooltipContent={_('Add image')}\n />\n);\n\nconst focusToggleReasons: never[] = [];\n\n/**\n * Image Gallery button that has as a dropdown menu.\n */\nconst ImageGallery = ({ dashboardApi }: ToolbarButtonProps) => {\n const {\n handleForceClose,\n handleRequestClose,\n handleRequestOpen,\n setHasChildModal,\n isOpen,\n } = useDropdown({\n isContentClickClose: false,\n });\n\n const handlePanelClick = useCallback(\n async (imageUrl: string) => {\n dashboardApi?.createVisualization({\n visualizationDefinition: {\n type: 'splunk.image',\n options: {\n preserveAspectRatio: true,\n src: imageUrl,\n },\n },\n });\n dashboardApi?.openPanel({\n activePanel: 'config',\n });\n handleForceClose();\n },\n [dashboardApi, handleForceClose]\n );\n\n return (\n <ToolbarItem>\n <Dropdown\n focusToggleReasons={focusToggleReasons}\n onRequestClose={handleRequestClose}\n onRequestOpen={handleRequestOpen}\n open={isOpen}\n toggle={ButtonToggle}\n >\n <MenusContainer>\n <ImageGalleryPanel\n onClick={handlePanelClick}\n setHasChildModal={setHasChildModal}\n />\n </MenusContainer>\n </Dropdown>\n </ToolbarItem>\n );\n};\n\nexport default ImageGallery;\n", "import * as defaultImport from \"react\";\nexport * from \"react\";\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 * as defaultImport from \"@splunk/react-ui/Dropdown\";\nexport * from \"@splunk/react-ui/Dropdown\";\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/Picture\";\nexport * from \"@splunk/react-icons/Picture\";\nexport default ('default' in defaultImport ? defaultImport.default : defaultImport);\n", "import * as defaultImport from \"@splunk/dashboard-ui\";\nexport * from \"@splunk/dashboard-ui\";\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 React from 'react';\nimport Button, { type ButtonPropsBase } from '@splunk/react-ui/Button';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport styled from 'styled-components';\n\nconst BaseDropdownButton = styled(Button)`\n max-width: '50px';\n`;\n\nexport interface StyledDropdownButtonProps\n extends Pick<ButtonPropsBase, 'appearance' | 'icon' | 'disabled'> {\n children?: React.ReactNode;\n className?: string;\n 'data-clickable'?: boolean;\n 'data-test'?: string;\n tooltipContent?: string;\n}\n\nexport const StyledDropdownButton = React.forwardRef<\n HTMLButtonElement,\n StyledDropdownButtonProps\n>(({ tooltipContent, ...props }, ref): JSX.Element => {\n const button = (\n <BaseDropdownButton\n {...props}\n elementRef={ref as React.RefObject<HTMLButtonElement>}\n />\n );\n\n return tooltipContent ? (\n <Tooltip contentRelationship=\"label\" content={tooltipContent}>\n {button}\n </Tooltip>\n ) : (\n button\n );\n});\n", "import styled from 'styled-components';\n\nexport default styled.div``;\n", "import type { DropdownRequestCloseHandler } from '@splunk/react-ui/Dropdown';\nimport { useCallback, useRef, useState } from 'react';\n\ninterface UseDropdownArgs {\n isContentClickClose?: boolean;\n}\n\ninterface UseDropdownReturn {\n isOpen: boolean;\n handleRequestClose: DropdownRequestCloseHandler;\n handleRequestOpen: () => void;\n handleForceClose: () => void;\n setHasChildModal: (value: boolean) => void;\n}\n\n/**\n * Custom React Hook for the controlled SUI Dropdown component.\n *\n * @param {Object} config\n * @param {Boolean} config.isContentClickClose Control if dropdown children onClick's will close the dropdown automatically\n * @returns {Object} value\n * @returns {Boolean} value.isOpen The only state of this hook\n * @returns {Function} value.handleRequestOpen Event handler to open the dropdown\n * @returns {Function} value.handleRequestClose Event handler that SUI Dropdown calls when requested to close\n * @returns {Function} value.handleForceClose Event handler to forcefully close the dropdown\n */\nconst useDropdown = ({\n isContentClickClose = true,\n}: UseDropdownArgs): UseDropdownReturn => {\n const [isOpen, setIsOpen] = useState(false);\n const hasChildModal = useRef(false);\n\n const handleRequestClose = useCallback<DropdownRequestCloseHandler>(\n ({ reason }) => {\n if (reason === 'contentClick' && !isContentClickClose) {\n // This return results in the dropdown not closing.\n return;\n }\n\n // If there is a child modal then don't close the root on ESC press\n if (reason === 'escapeKey' && hasChildModal.current) {\n return;\n }\n\n setIsOpen(false);\n },\n [isContentClickClose]\n );\n\n const handleRequestOpen = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const handleForceClose = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const setHasChildModal = useCallback((value: boolean) => {\n hasChildModal.current = value;\n }, []);\n\n return {\n isOpen,\n handleRequestOpen,\n handleRequestClose,\n handleForceClose,\n setHasChildModal,\n };\n};\n\nexport default useDropdown;\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 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", "defaultImport", "ImageGalleryPanel"]
7
7
  }
package/buttons/Inputs.js CHANGED
@@ -139,19 +139,38 @@ var defaultImport8 = __toESM(require("@splunk/react-ui/Button"));
139
139
  __reExport(Button_exports, require("@splunk/react-ui/Button"));
140
140
  var Button_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
141
141
 
142
+ // esm-externals:@splunk/react-ui/Tooltip
143
+ var Tooltip_exports = {};
144
+ __export(Tooltip_exports, {
145
+ default: () => Tooltip_default
146
+ });
147
+ var defaultImport9 = __toESM(require("@splunk/react-ui/Tooltip"));
148
+ __reExport(Tooltip_exports, require("@splunk/react-ui/Tooltip"));
149
+ var Tooltip_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
150
+
142
151
  // esm-externals:styled-components
143
152
  var styled_components_exports = {};
144
153
  __export(styled_components_exports, {
145
154
  default: () => styled_components_default
146
155
  });
147
- var defaultImport9 = __toESM(require("styled-components"));
156
+ var defaultImport10 = __toESM(require("styled-components"));
148
157
  __reExport(styled_components_exports, require("styled-components"));
149
- var styled_components_default = defaultImport9.default;
158
+ var styled_components_default = defaultImport10.default;
150
159
 
151
160
  // src/components/StyledButton.tsx
152
- var StyledDropdownButton = styled_components_default(Button_default)`
161
+ var BaseDropdownButton = styled_components_default(Button_default)`
153
162
  max-width: '50px';
154
163
  `;
164
+ var StyledDropdownButton = react_default.forwardRef((_a, ref) => {
165
+ var _b = _a, { tooltipContent } = _b, props = __objRest(_b, ["tooltipContent"]);
166
+ const button = /* @__PURE__ */ react_default.createElement(
167
+ BaseDropdownButton,
168
+ __spreadProps(__spreadValues({}, props), {
169
+ elementRef: ref
170
+ })
171
+ );
172
+ return tooltipContent ? /* @__PURE__ */ react_default.createElement(Tooltip_default, { contentRelationship: "label", content: tooltipContent }, button) : button;
173
+ });
155
174
 
156
175
  // src/hooks/useDropdown.ts
157
176
  var useDropdown = ({
@@ -198,18 +217,18 @@ var CaretDown_exports = {};
198
217
  __export(CaretDown_exports, {
199
218
  default: () => CaretDown_default
200
219
  });
201
- var defaultImport10 = __toESM(require("@splunk/react-icons/CaretDown"));
220
+ var defaultImport11 = __toESM(require("@splunk/react-icons/CaretDown"));
202
221
  __reExport(CaretDown_exports, require("@splunk/react-icons/CaretDown"));
203
- var CaretDown_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
222
+ var CaretDown_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
204
223
 
205
224
  // esm-externals:@splunk/react-ui/ScreenReaderContent
206
225
  var ScreenReaderContent_exports = {};
207
226
  __export(ScreenReaderContent_exports, {
208
227
  default: () => ScreenReaderContent_default
209
228
  });
210
- var defaultImport11 = __toESM(require("@splunk/react-ui/ScreenReaderContent"));
229
+ var defaultImport12 = __toESM(require("@splunk/react-ui/ScreenReaderContent"));
211
230
  __reExport(ScreenReaderContent_exports, require("@splunk/react-ui/ScreenReaderContent"));
212
- var ScreenReaderContent_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
231
+ var ScreenReaderContent_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
213
232
 
214
233
  // src/IconButton.tsx
215
234
  var StyledDropdownIcon = styled_components_default(CaretDown_default)`
@@ -239,7 +258,6 @@ var focusToggleReasons = [
239
258
  var DEFAULT_PRESET_MAP = Object.freeze({});
240
259
  var addInputIcon = prepareIcon({
241
260
  Icon: SlidersTripleHorizontal_default,
242
- screenReaderContent: (0, i18n_exports._)("Add input"),
243
261
  isMenu: true
244
262
  });
245
263
  var ButtonToggle = /* @__PURE__ */ react_default.createElement(
@@ -248,7 +266,8 @@ var ButtonToggle = /* @__PURE__ */ react_default.createElement(
248
266
  appearance: "subtle",
249
267
  "data-clickable": true,
250
268
  "data-test": "inputs-button",
251
- icon: addInputIcon
269
+ icon: addInputIcon,
270
+ tooltipContent: (0, i18n_exports._)("Add input")
252
271
  }
253
272
  );
254
273
  var onCreateInputClickFactory = ({