@deephaven/components 0.43.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/dist/AutoCompleteInput.css +35 -0
  2. package/dist/AutoCompleteInput.css.map +1 -0
  3. package/dist/AutoCompleteInput.js +496 -0
  4. package/dist/AutoCompleteInput.js.map +1 -0
  5. package/dist/AutoResizeTextarea.css +11 -0
  6. package/dist/AutoResizeTextarea.css.map +1 -0
  7. package/dist/AutoResizeTextarea.js +128 -0
  8. package/dist/AutoResizeTextarea.js.map +1 -0
  9. package/dist/BasicModal.js +112 -0
  10. package/dist/BasicModal.js.map +1 -0
  11. package/dist/Button.d.ts +1 -1
  12. package/dist/Button.js +193 -0
  13. package/dist/Button.js.map +1 -0
  14. package/dist/ButtonGroup.js +31 -0
  15. package/dist/ButtonGroup.js.map +1 -0
  16. package/dist/ButtonOld.js +41 -0
  17. package/dist/ButtonOld.js.map +1 -0
  18. package/dist/CardFlip.css +36 -0
  19. package/dist/CardFlip.css.map +1 -0
  20. package/dist/CardFlip.js +61 -0
  21. package/dist/CardFlip.js.map +1 -0
  22. package/dist/Checkbox.js +104 -0
  23. package/dist/Checkbox.js.map +1 -0
  24. package/dist/Collapse.js +89 -0
  25. package/dist/Collapse.js.map +1 -0
  26. package/dist/ComboBox.css +50 -0
  27. package/dist/ComboBox.css.map +1 -0
  28. package/dist/ComboBox.js +487 -0
  29. package/dist/ComboBox.js.map +1 -0
  30. package/dist/CopyButton.js +30 -0
  31. package/dist/CopyButton.js.map +1 -0
  32. package/dist/CustomTimeSelect.css +65 -0
  33. package/dist/CustomTimeSelect.css.map +1 -0
  34. package/dist/CustomTimeSelect.js +516 -0
  35. package/dist/CustomTimeSelect.js.map +1 -0
  36. package/dist/DateInput.js +54 -0
  37. package/dist/DateInput.js.map +1 -0
  38. package/dist/DateInputUtils.js +33 -0
  39. package/dist/DateInputUtils.js.map +1 -0
  40. package/dist/DateTimeInput.js +84 -0
  41. package/dist/DateTimeInput.js.map +1 -0
  42. package/dist/DateTimeInputUtils.js +8 -0
  43. package/dist/DateTimeInputUtils.js.map +1 -0
  44. package/dist/DebouncedSearchInput.js +79 -0
  45. package/dist/DebouncedSearchInput.js.map +1 -0
  46. package/dist/DragUtils.js +68 -0
  47. package/dist/DragUtils.js.map +1 -0
  48. package/dist/DraggableItemList.css +118 -0
  49. package/dist/DraggableItemList.css.map +1 -0
  50. package/dist/DraggableItemList.js +268 -0
  51. package/dist/DraggableItemList.js.map +1 -0
  52. package/dist/EditableItemList.js +105 -0
  53. package/dist/EditableItemList.js.map +1 -0
  54. package/dist/HierarchicalCheckboxMenu.css +30 -0
  55. package/dist/HierarchicalCheckboxMenu.css.map +1 -0
  56. package/dist/HierarchicalCheckboxMenu.js +218 -0
  57. package/dist/HierarchicalCheckboxMenu.js.map +1 -0
  58. package/dist/ItemList.css +13 -0
  59. package/dist/ItemList.css.map +1 -0
  60. package/dist/ItemList.js +686 -0
  61. package/dist/ItemList.js.map +1 -0
  62. package/dist/ItemListItem.css +48 -0
  63. package/dist/ItemListItem.css.map +1 -0
  64. package/dist/ItemListItem.js +214 -0
  65. package/dist/ItemListItem.js.map +1 -0
  66. package/dist/LoadingOverlay.css +24 -0
  67. package/dist/LoadingOverlay.css.map +1 -0
  68. package/dist/LoadingOverlay.js +48 -0
  69. package/dist/LoadingOverlay.js.map +1 -0
  70. package/dist/LoadingSpinner.css +8 -0
  71. package/dist/LoadingSpinner.css.map +1 -0
  72. package/dist/LoadingSpinner.js +24 -0
  73. package/dist/LoadingSpinner.js.map +1 -0
  74. package/dist/MaskedInput.css +7 -0
  75. package/dist/MaskedInput.css.map +1 -0
  76. package/dist/MaskedInput.js +394 -0
  77. package/dist/MaskedInput.js.map +1 -0
  78. package/dist/MaskedInputUtils.js +36 -0
  79. package/dist/MaskedInputUtils.js.map +1 -0
  80. package/dist/Option.js +16 -0
  81. package/dist/Option.js.map +1 -0
  82. package/dist/RadioGroup.js +34 -0
  83. package/dist/RadioGroup.js.map +1 -0
  84. package/dist/RadioItem.js +55 -0
  85. package/dist/RadioItem.js.map +1 -0
  86. package/dist/RandomAreaPlotAnimation.css +18 -0
  87. package/dist/RandomAreaPlotAnimation.css.map +1 -0
  88. package/dist/RandomAreaPlotAnimation.js +290 -0
  89. package/dist/RandomAreaPlotAnimation.js.map +1 -0
  90. package/dist/SearchInput.css +43 -0
  91. package/dist/SearchInput.css.map +1 -0
  92. package/dist/SearchInput.js +66 -0
  93. package/dist/SearchInput.js.map +1 -0
  94. package/dist/Select.js +30 -0
  95. package/dist/Select.js.map +1 -0
  96. package/dist/SelectValueList.css +38 -0
  97. package/dist/SelectValueList.css.map +1 -0
  98. package/dist/SelectValueList.js +175 -0
  99. package/dist/SelectValueList.js.map +1 -0
  100. package/dist/SocketedButton.css +123 -0
  101. package/dist/SocketedButton.css.map +1 -0
  102. package/dist/SocketedButton.js +63 -0
  103. package/dist/SocketedButton.js.map +1 -0
  104. package/dist/SpectrumThemeDark.module.css +9 -0
  105. package/dist/SpectrumThemeDark.module.css.map +1 -0
  106. package/dist/SpectrumThemeLight.module.css +9 -0
  107. package/dist/SpectrumThemeLight.module.css.map +1 -0
  108. package/dist/SpectrumUtils.js +59 -0
  109. package/dist/SpectrumUtils.js.map +1 -0
  110. package/dist/ThemeExport.js +15 -0
  111. package/dist/ThemeExport.js.map +1 -0
  112. package/dist/ThemeExport.module.css +40 -0
  113. package/dist/ThemeExport.module.css.map +1 -0
  114. package/dist/TimeInput.js +101 -0
  115. package/dist/TimeInput.js.map +1 -0
  116. package/dist/TimeSlider.css +178 -0
  117. package/dist/TimeSlider.css.map +1 -0
  118. package/dist/TimeSlider.js +314 -0
  119. package/dist/TimeSlider.js.map +1 -0
  120. package/dist/TimeSlider.module.css +185 -0
  121. package/dist/TimeSlider.module.css.map +1 -0
  122. package/dist/ToastNotification.css +62 -0
  123. package/dist/ToastNotification.css.map +1 -0
  124. package/dist/ToastNotification.js +56 -0
  125. package/dist/ToastNotification.js.map +1 -0
  126. package/dist/UISwitch.css +94 -0
  127. package/dist/UISwitch.css.map +1 -0
  128. package/dist/UISwitch.js +30 -0
  129. package/dist/UISwitch.js.map +1 -0
  130. package/dist/ValidateLabelInput.css +9 -0
  131. package/dist/ValidateLabelInput.css.map +1 -0
  132. package/dist/ValidateLabelInput.js +50 -0
  133. package/dist/ValidateLabelInput.js.map +1 -0
  134. package/dist/context-actions/ContextActionUtils.js +142 -0
  135. package/dist/context-actions/ContextActionUtils.js.map +1 -0
  136. package/dist/context-actions/ContextActions.css +157 -0
  137. package/dist/context-actions/ContextActions.css.map +1 -0
  138. package/dist/context-actions/ContextActions.js +182 -0
  139. package/dist/context-actions/ContextActions.js.map +1 -0
  140. package/dist/context-actions/ContextMenu.js +559 -0
  141. package/dist/context-actions/ContextMenu.js.map +1 -0
  142. package/dist/context-actions/ContextMenuItem.js +139 -0
  143. package/dist/context-actions/ContextMenuItem.js.map +1 -0
  144. package/dist/context-actions/ContextMenuRoot.js +135 -0
  145. package/dist/context-actions/ContextMenuRoot.js.map +1 -0
  146. package/dist/context-actions/GlobalContextAction.js +53 -0
  147. package/dist/context-actions/GlobalContextAction.js.map +1 -0
  148. package/dist/context-actions/GlobalContextActions.js +28 -0
  149. package/dist/context-actions/GlobalContextActions.js.map +1 -0
  150. package/dist/context-actions/index.js +5 -0
  151. package/dist/context-actions/index.js.map +1 -0
  152. package/dist/declaration.d.js +2 -0
  153. package/dist/declaration.d.js.map +1 -0
  154. package/dist/index.js +52 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/menu-actions/DropdownMenu.css +39 -0
  157. package/dist/menu-actions/DropdownMenu.css.map +1 -0
  158. package/dist/menu-actions/DropdownMenu.js +174 -0
  159. package/dist/menu-actions/DropdownMenu.js.map +1 -0
  160. package/dist/menu-actions/Menu.js +244 -0
  161. package/dist/menu-actions/Menu.js.map +1 -0
  162. package/dist/menu-actions/index.js +4 -0
  163. package/dist/menu-actions/index.js.map +1 -0
  164. package/dist/modal/DebouncedModal.js +26 -0
  165. package/dist/modal/DebouncedModal.js.map +1 -0
  166. package/dist/modal/InfoModal.css +24 -0
  167. package/dist/modal/InfoModal.css.map +1 -0
  168. package/dist/modal/InfoModal.js +34 -0
  169. package/dist/modal/InfoModal.js.map +1 -0
  170. package/dist/modal/Modal.js +122 -0
  171. package/dist/modal/Modal.js.map +1 -0
  172. package/dist/modal/ModalBody.js +16 -0
  173. package/dist/modal/ModalBody.js.map +1 -0
  174. package/dist/modal/ModalFooter.js +14 -0
  175. package/dist/modal/ModalFooter.js.map +1 -0
  176. package/dist/modal/ModalHeader.js +27 -0
  177. package/dist/modal/ModalHeader.js.map +1 -0
  178. package/dist/modal/index.js +7 -0
  179. package/dist/modal/index.js.map +1 -0
  180. package/dist/navigation/Menu.css +13 -0
  181. package/dist/navigation/Menu.css.map +1 -0
  182. package/dist/navigation/Menu.js +25 -0
  183. package/dist/navigation/Menu.js.map +1 -0
  184. package/dist/navigation/MenuItem.css +46 -0
  185. package/dist/navigation/MenuItem.css.map +1 -0
  186. package/dist/navigation/MenuItem.js +65 -0
  187. package/dist/navigation/MenuItem.js.map +1 -0
  188. package/dist/navigation/Page.css +34 -0
  189. package/dist/navigation/Page.css.map +1 -0
  190. package/dist/navigation/Page.js +46 -0
  191. package/dist/navigation/Page.js.map +1 -0
  192. package/dist/navigation/Stack.css +24 -0
  193. package/dist/navigation/Stack.css.map +1 -0
  194. package/dist/navigation/Stack.js +82 -0
  195. package/dist/navigation/Stack.js.map +1 -0
  196. package/dist/navigation/index.js +5 -0
  197. package/dist/navigation/index.js.map +1 -0
  198. package/dist/popper/Popper.css +127 -0
  199. package/dist/popper/Popper.css.map +1 -0
  200. package/dist/popper/Popper.js +283 -0
  201. package/dist/popper/Popper.js.map +1 -0
  202. package/dist/popper/Tooltip.js +283 -0
  203. package/dist/popper/Tooltip.js.map +1 -0
  204. package/dist/popper/index.js +3 -0
  205. package/dist/popper/index.js.map +1 -0
  206. package/dist/shortcuts/GlobalShortcuts.js +47 -0
  207. package/dist/shortcuts/GlobalShortcuts.js.map +1 -0
  208. package/dist/shortcuts/Shortcut.js +393 -0
  209. package/dist/shortcuts/Shortcut.js.map +1 -0
  210. package/dist/shortcuts/ShortcutRegistry.js +78 -0
  211. package/dist/shortcuts/ShortcutRegistry.js.map +1 -0
  212. package/dist/shortcuts/index.js +5 -0
  213. package/dist/shortcuts/index.js.map +1 -0
  214. package/package.json +7 -7
@@ -0,0 +1,174 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
+ /**
7
+ * Add dropdown menu that you add onto any component.
8
+ *
9
+ * Similar to the context-actions package, accepts list of actions to create a dropdown menu.
10
+ * Note: Does not support nested sub-menus.
11
+ *
12
+ * Usage:
13
+ * let actions = [{
14
+ * title: 'My Action',
15
+ * action: () => { alert('My Action Clicked!') }
16
+ * icon: faPrint, // Limited to FontAwesome icons for now.
17
+ * shortcut: Shortcut, // Shortcut class instance
18
+ * group: ContextActions.groups.default, // What group to group the context action with
19
+ * order: null // Int where to order within group
20
+ * }];
21
+ *
22
+ * Usage:
23
+ * 1. Auto bind click to open event to parent
24
+ * <div>
25
+ * Click in this container
26
+ * <DropdownMenu actions={actions}/>
27
+ * </div>
28
+ *
29
+ * 2. Control via prop
30
+ * <div>
31
+ * DropdownMenu will not react to the click event if isShown prop is used
32
+ * <DropdownMenu actions={actions} isShown={isShown} />
33
+ * </div>
34
+ *
35
+ */
36
+ import React, { PureComponent } from 'react';
37
+ import classNames from 'classnames';
38
+ import { Popper } from "../popper/index.js";
39
+ import Menu from "./Menu.js";
40
+ import "./DropdownMenu.css";
41
+ class DropdownMenu extends PureComponent {
42
+ constructor(props) {
43
+ super(props);
44
+ _defineProperty(this, "container", void 0);
45
+ _defineProperty(this, "parent", void 0);
46
+ _defineProperty(this, "popper", void 0);
47
+ _defineProperty(this, "isOpen", void 0);
48
+ this.handleClick = this.handleClick.bind(this);
49
+ this.handleCloseMenu = this.handleCloseMenu.bind(this);
50
+ this.handleExited = this.handleExited.bind(this);
51
+ this.container = /*#__PURE__*/React.createRef();
52
+ this.parent = null;
53
+ this.popper = /*#__PURE__*/React.createRef();
54
+ this.isOpen = false;
55
+ }
56
+ componentDidMount() {
57
+ var {
58
+ isShown
59
+ } = this.props;
60
+ if (isShown === null) {
61
+ var _this$container$curre;
62
+ if ((_this$container$curre = this.container.current) !== null && _this$container$curre !== void 0 && _this$container$curre.parentElement) {
63
+ this.parent = this.container.current.parentElement;
64
+ this.parent.addEventListener('click', this.handleClick);
65
+ }
66
+ } else if (isShown) {
67
+ this.openMenu();
68
+ }
69
+ }
70
+ componentDidUpdate(prevProps) {
71
+ var {
72
+ isShown
73
+ } = this.props;
74
+ if (prevProps.isShown !== isShown) {
75
+ if (isShown !== null && isShown) {
76
+ // https://github.com/reactjs/react-transition-group/issues/382
77
+ window.requestAnimationFrame(() => {
78
+ this.openMenu();
79
+ });
80
+ } else {
81
+ this.closeMenu();
82
+ }
83
+ }
84
+ }
85
+ componentWillUnmount() {
86
+ if (this.parent) {
87
+ this.parent.removeEventListener('click', this.handleClick);
88
+ }
89
+ }
90
+ closeMenu() {
91
+ var _this$popper$current;
92
+ (_this$popper$current = this.popper.current) === null || _this$popper$current === void 0 ? void 0 : _this$popper$current.hide();
93
+ }
94
+ openMenu() {
95
+ if (this.popper.current && !this.isOpen) {
96
+ this.popper.current.show();
97
+ this.isOpen = true;
98
+ }
99
+ }
100
+ scheduleUpdate() {
101
+ var _this$popper$current2;
102
+ (_this$popper$current2 = this.popper.current) === null || _this$popper$current2 === void 0 ? void 0 : _this$popper$current2.scheduleUpdate();
103
+ }
104
+ handleClick(e) {
105
+ e.preventDefault();
106
+ e.stopPropagation();
107
+ this.openMenu();
108
+ }
109
+ handleCloseMenu() {
110
+ this.closeMenu();
111
+ }
112
+ handleExited() {
113
+ this.isOpen = false;
114
+ var {
115
+ onMenuClosed
116
+ } = this.props;
117
+ onMenuClosed();
118
+ }
119
+ render() {
120
+ var {
121
+ actions,
122
+ onMenuOpened,
123
+ popperClassName,
124
+ 'data-testid': dataTestId
125
+ } = this.props;
126
+ var {
127
+ menuStyle
128
+ } = this.props;
129
+ var {
130
+ options,
131
+ popperOptions
132
+ } = this.props;
133
+ popperOptions = _objectSpread({
134
+ placement: 'bottom'
135
+ }, popperOptions);
136
+ options = _objectSpread({
137
+ separateKeyboardMouse: true
138
+ }, options);
139
+ return /*#__PURE__*/React.createElement("div", {
140
+ className: "menu-actions-listener",
141
+ ref: this.container,
142
+ "data-testid": dataTestId
143
+ }, /*#__PURE__*/React.createElement(Popper, {
144
+ ref: this.popper,
145
+ options: popperOptions,
146
+ className: classNames('menu-popper', popperClassName),
147
+ onExited: this.handleExited,
148
+ closeOnBlur: true,
149
+ interactive: true
150
+ }, /*#__PURE__*/React.createElement(Menu, {
151
+ actions: actions,
152
+ closeMenu: this.handleCloseMenu,
153
+ onMenuOpened: onMenuOpened,
154
+ options: options,
155
+ menuStyle: menuStyle
156
+ })));
157
+ }
158
+ }
159
+ _defineProperty(DropdownMenu, "defaultProps", {
160
+ isShown: null,
161
+ onMenuClosed() {
162
+ // no-op
163
+ },
164
+ onMenuOpened() {
165
+ // no-op
166
+ },
167
+ options: {},
168
+ popperOptions: {},
169
+ popperClassName: '',
170
+ menuStyle: {},
171
+ 'data-testid': undefined
172
+ });
173
+ export default DropdownMenu;
174
+ //# sourceMappingURL=DropdownMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu.js","names":["React","PureComponent","classNames","Popper","Menu","DropdownMenu","constructor","props","handleClick","bind","handleCloseMenu","handleExited","container","createRef","parent","popper","isOpen","componentDidMount","isShown","current","parentElement","addEventListener","openMenu","componentDidUpdate","prevProps","window","requestAnimationFrame","closeMenu","componentWillUnmount","removeEventListener","hide","show","scheduleUpdate","e","preventDefault","stopPropagation","onMenuClosed","render","actions","onMenuOpened","popperClassName","dataTestId","menuStyle","options","popperOptions","placement","separateKeyboardMouse","undefined"],"sources":["../../src/menu-actions/DropdownMenu.tsx"],"sourcesContent":["/**\n * Add dropdown menu that you add onto any component.\n *\n * Similar to the context-actions package, accepts list of actions to create a dropdown menu.\n * Note: Does not support nested sub-menus.\n *\n * Usage:\n * let actions = [{\n * title: 'My Action',\n * action: () => { alert('My Action Clicked!') }\n * icon: faPrint, // Limited to FontAwesome icons for now.\n * shortcut: Shortcut, // Shortcut class instance\n * group: ContextActions.groups.default, // What group to group the context action with\n * order: null // Int where to order within group\n * }];\n *\n * Usage:\n * 1. Auto bind click to open event to parent\n * <div>\n * Click in this container\n * <DropdownMenu actions={actions}/>\n * </div>\n *\n * 2. Control via prop\n * <div>\n * DropdownMenu will not react to the click event if isShown prop is used\n * <DropdownMenu actions={actions} isShown={isShown} />\n * </div>\n *\n */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport { Popper } from '../popper';\nimport Menu, { MenuOptions } from './Menu';\nimport { ContextAction } from '../context-actions/ContextActionUtils';\nimport './DropdownMenu.scss';\n\nexport type DropdownAction = ContextAction & { actions?: never };\n\nexport type DropdownActions =\n | (() => DropdownAction[])\n | DropdownAction\n | DropdownAction[];\n\ntype DropdownMenuProps = {\n // Override to prevent nested lists\n actions: DropdownActions;\n isShown: boolean | null;\n onMenuClosed(): void;\n onMenuOpened(): void;\n options: MenuOptions;\n popperOptions: PopperOptions;\n popperClassName: string;\n menuStyle: React.CSSProperties;\n 'data-testid'?: string;\n};\n\nclass DropdownMenu extends PureComponent<DropdownMenuProps> {\n static defaultProps = {\n isShown: null,\n onMenuClosed(): void {\n // no-op\n },\n onMenuOpened(): void {\n // no-op\n },\n options: {},\n popperOptions: {},\n popperClassName: '',\n menuStyle: {},\n 'data-testid': undefined,\n };\n\n constructor(props: DropdownMenuProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleCloseMenu = this.handleCloseMenu.bind(this);\n this.handleExited = this.handleExited.bind(this);\n\n this.container = React.createRef();\n this.parent = null;\n this.popper = React.createRef();\n\n this.isOpen = false;\n }\n\n componentDidMount(): void {\n const { isShown } = this.props;\n\n if (isShown === null) {\n if (this.container.current?.parentElement) {\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('click', this.handleClick);\n }\n } else if (isShown) {\n this.openMenu();\n }\n }\n\n componentDidUpdate(prevProps: DropdownMenuProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown !== null && isShown) {\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.openMenu();\n });\n } else {\n this.closeMenu();\n }\n }\n }\n\n componentWillUnmount(): void {\n if (this.parent) {\n this.parent.removeEventListener('click', this.handleClick);\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n parent: Element | null;\n\n popper: React.RefObject<Popper>;\n\n isOpen: boolean;\n\n closeMenu(): void {\n this.popper.current?.hide();\n }\n\n openMenu(): void {\n if (this.popper.current && !this.isOpen) {\n this.popper.current.show();\n this.isOpen = true;\n }\n }\n\n scheduleUpdate(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n\n this.openMenu();\n }\n\n handleCloseMenu(): void {\n this.closeMenu();\n }\n\n handleExited(): void {\n this.isOpen = false;\n\n const { onMenuClosed } = this.props;\n onMenuClosed();\n }\n\n render(): JSX.Element {\n const {\n actions,\n onMenuOpened,\n popperClassName,\n 'data-testid': dataTestId,\n } = this.props;\n const { menuStyle } = this.props;\n let { options, popperOptions } = this.props;\n popperOptions = { placement: 'bottom', ...popperOptions };\n options = {\n separateKeyboardMouse: true,\n ...options,\n };\n return (\n <div\n className=\"menu-actions-listener\"\n ref={this.container}\n data-testid={dataTestId}\n >\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('menu-popper', popperClassName)}\n onExited={this.handleExited}\n closeOnBlur\n interactive\n >\n <Menu\n actions={actions}\n closeMenu={this.handleCloseMenu}\n onMenuOpened={onMenuOpened}\n options={options}\n menuStyle={menuStyle}\n />\n </Popper>\n </div>\n );\n }\n}\n\nexport default DropdownMenu;\n"],"mappings":"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"}
@@ -0,0 +1,244 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
+ import React, { PureComponent } from 'react';
7
+ import ContextActionUtils from "../context-actions/ContextActionUtils.js";
8
+ import ContextMenuItem from "../context-actions/ContextMenuItem.js";
9
+ /**
10
+ * Do not use this class directly. Use DropdownMenu instead.
11
+ *
12
+ * Generates list from actions for use by DropdownMenu.
13
+ * It has beem split from the context-actions component, due to divergering requirements,
14
+ * but still re-uses styling from context-menu. Depending on how usage evolves, may get split further.
15
+ *
16
+ */
17
+
18
+ class Menu extends PureComponent {
19
+ constructor(props) {
20
+ var _options$initialKeybo;
21
+ super(props);
22
+ _defineProperty(this, "container", void 0);
23
+ _defineProperty(this, "oldFocus", void 0);
24
+ _defineProperty(this, "rAF", void 0);
25
+ this.handleKeyDown = this.handleKeyDown.bind(this);
26
+ this.handleMenuItemClick = this.handleMenuItemClick.bind(this);
27
+ this.handleMenuItemMouseMove = this.handleMenuItemMouseMove.bind(this);
28
+ this.handleMouseLeave = this.handleMouseLeave.bind(this);
29
+ this.handleCloseMenu = this.handleCloseMenu.bind(this);
30
+ this.container = /*#__PURE__*/React.createRef();
31
+ this.oldFocus = document.activeElement;
32
+ this.rAF = 0;
33
+ var {
34
+ options
35
+ } = props;
36
+ var keyboardIndex = (_options$initialKeybo = options.initialKeyboardIndex) !== null && _options$initialKeybo !== void 0 ? _options$initialKeybo : -1;
37
+ this.state = {
38
+ menuItems: [],
39
+ keyboardIndex,
40
+ mouseIndex: -1
41
+ };
42
+ }
43
+ componentDidMount() {
44
+ this.initMenu();
45
+ this.rAF = window.requestAnimationFrame(() => {
46
+ var _this$container$curre;
47
+ // set initial focus to container so keyboard navigation works
48
+ // components can still override focus in onMenuOpened callback
49
+ (_this$container$curre = this.container.current) === null || _this$container$curre === void 0 ? void 0 : _this$container$curre.focus();
50
+ var {
51
+ onMenuOpened
52
+ } = this.props;
53
+ onMenuOpened(this);
54
+ });
55
+ }
56
+ componentDidUpdate(prevProps) {
57
+ var {
58
+ actions
59
+ } = this.props;
60
+ if (prevProps.actions !== actions) {
61
+ this.initMenu();
62
+ }
63
+ }
64
+ componentWillUnmount() {
65
+ cancelAnimationFrame(this.rAF);
66
+ }
67
+ getKeyboardIndex() {
68
+ var {
69
+ options
70
+ } = this.props;
71
+ if (options.separateKeyboardMouse !== undefined && options.separateKeyboardMouse) {
72
+ var {
73
+ keyboardIndex
74
+ } = this.state;
75
+ return keyboardIndex;
76
+ }
77
+ return this.getMouseIndex();
78
+ }
79
+ setKeyboardIndex(index) {
80
+ var {
81
+ options
82
+ } = this.props;
83
+ if (options.separateKeyboardMouse !== undefined && options.separateKeyboardMouse) {
84
+ this.setState({
85
+ keyboardIndex: index
86
+ });
87
+ } else {
88
+ this.setMouseIndex(index);
89
+ }
90
+ }
91
+ getMouseIndex() {
92
+ var {
93
+ mouseIndex
94
+ } = this.state;
95
+ return mouseIndex;
96
+ }
97
+ setMouseIndex(index) {
98
+ this.setState({
99
+ mouseIndex: index
100
+ });
101
+ }
102
+ initMenu() {
103
+ // cancel any pending close
104
+ cancelAnimationFrame(this.rAF);
105
+ this.setState({
106
+ menuItems: []
107
+ });
108
+ var {
109
+ actions
110
+ } = this.props;
111
+ var menuItems = ContextActionUtils.getMenuItems(actions, false);
112
+ if (menuItems.length > 0) {
113
+ this.setState(state => ({
114
+ menuItems: ContextActionUtils.sortActions(state.menuItems.concat(menuItems))
115
+ }));
116
+ }
117
+ }
118
+ handleKeyDown(e) {
119
+ var {
120
+ menuItems
121
+ } = this.state;
122
+ var oldFocus = this.getKeyboardIndex();
123
+ var newFocus = oldFocus;
124
+ if (e.key === 'Enter' || e.key === ' ') {
125
+ if (oldFocus != null && oldFocus >= 0 && oldFocus < menuItems.length) {
126
+ this.handleMenuItemClick(menuItems[oldFocus], e);
127
+ }
128
+ return;
129
+ }
130
+ if (e.key === 'Escape') {
131
+ newFocus = null;
132
+ } else if (e.key === 'ArrowUp' || e.key === 'Tab' && e.shiftKey === true) {
133
+ var _newFocus;
134
+ newFocus = ContextActionUtils.getNextMenuItem((_newFocus = newFocus) !== null && _newFocus !== void 0 ? _newFocus : 0, -1, menuItems);
135
+ } else if (e.key === 'ArrowDown' || e.key === 'Tab' && e.shiftKey === false) {
136
+ var _newFocus2;
137
+ newFocus = ContextActionUtils.getNextMenuItem((_newFocus2 = newFocus) !== null && _newFocus2 !== void 0 ? _newFocus2 : 0, 1, menuItems);
138
+ }
139
+ if (oldFocus !== newFocus) {
140
+ if (newFocus !== null) {
141
+ this.setKeyboardIndex(newFocus);
142
+ } else {
143
+ this.closeMenu();
144
+ if (this.oldFocus instanceof HTMLElement) {
145
+ this.oldFocus.focus();
146
+ }
147
+ }
148
+ e.preventDefault();
149
+ e.stopPropagation();
150
+ }
151
+ }
152
+ closeMenu() {
153
+ var closeAll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
154
+ var {
155
+ closeMenu,
156
+ onMenuClosed
157
+ } = this.props;
158
+ cancelAnimationFrame(this.rAF);
159
+ this.rAF = window.requestAnimationFrame(() => {
160
+ closeMenu(closeAll);
161
+ onMenuClosed(this);
162
+ });
163
+ }
164
+ handleCloseMenu() {
165
+ this.closeMenu();
166
+ }
167
+ handleMenuItemClick(menuItem, e) {
168
+ e.preventDefault();
169
+ e.stopPropagation();
170
+ if (menuItem != null && (menuItem.disabled === undefined || !menuItem.disabled) && menuItem.action != null) {
171
+ menuItem.action();
172
+ this.closeMenu(true);
173
+ }
174
+ }
175
+ handleMenuItemMouseMove(menuItem) {
176
+ var {
177
+ menuItems
178
+ } = this.state;
179
+ var focusIndex = menuItems.indexOf(menuItem);
180
+ this.setMouseIndex(focusIndex);
181
+ }
182
+ handleMouseLeave() {
183
+ this.setMouseIndex(-1);
184
+ }
185
+ render() {
186
+ var menuItemElements = [];
187
+ var {
188
+ 'data-testid': dataTestId
189
+ } = this.props;
190
+ var {
191
+ keyboardIndex,
192
+ menuItems,
193
+ mouseIndex
194
+ } = this.state;
195
+ for (var i = 0; i < menuItems.length; i += 1) {
196
+ var menuItem = menuItems[i];
197
+ if (i > 0 && menuItem.group !== menuItems[i - 1].group) {
198
+ menuItemElements.push( /*#__PURE__*/React.createElement("hr", {
199
+ key: "".concat(i, ".separator")
200
+ }));
201
+ }
202
+ var menuItemElement = /*#__PURE__*/React.createElement(ContextMenuItem, {
203
+ key: i,
204
+ isKeyboardSelected: keyboardIndex === i,
205
+ isMouseSelected: mouseIndex === i,
206
+ menuItem: menuItem,
207
+ closeMenu: this.handleCloseMenu,
208
+ onMenuItemClick: this.handleMenuItemClick,
209
+ onMenuItemMouseMove: this.handleMenuItemMouseMove,
210
+ onMenuItemContextMenu: () => false
211
+ });
212
+ menuItemElements.push(menuItemElement);
213
+ }
214
+ var {
215
+ menuStyle
216
+ } = this.props;
217
+ return /*#__PURE__*/React.createElement("div", {
218
+ className: "context-menu-container",
219
+ style: _objectSpread({}, menuStyle),
220
+ ref: this.container,
221
+ onKeyDown: this.handleKeyDown,
222
+ onMouseLeave: this.handleMouseLeave,
223
+ role: "menuitem",
224
+ tabIndex: 0,
225
+ "data-testid": dataTestId
226
+ }, menuItemElements);
227
+ }
228
+ }
229
+ _defineProperty(Menu, "defaultProps", {
230
+ closeMenu() {
231
+ // no-op
232
+ },
233
+ onMenuOpened() {
234
+ // no-op
235
+ },
236
+ onMenuClosed() {
237
+ // no-op
238
+ },
239
+ options: {},
240
+ menuStyle: {},
241
+ 'data-testid': undefined
242
+ });
243
+ export default Menu;
244
+ //# sourceMappingURL=Menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.js","names":["React","PureComponent","ContextActionUtils","ContextMenuItem","Menu","constructor","props","handleKeyDown","bind","handleMenuItemClick","handleMenuItemMouseMove","handleMouseLeave","handleCloseMenu","container","createRef","oldFocus","document","activeElement","rAF","options","keyboardIndex","initialKeyboardIndex","state","menuItems","mouseIndex","componentDidMount","initMenu","window","requestAnimationFrame","current","focus","onMenuOpened","componentDidUpdate","prevProps","actions","componentWillUnmount","cancelAnimationFrame","getKeyboardIndex","separateKeyboardMouse","undefined","getMouseIndex","setKeyboardIndex","index","setState","setMouseIndex","getMenuItems","length","sortActions","concat","e","newFocus","key","shiftKey","getNextMenuItem","closeMenu","HTMLElement","preventDefault","stopPropagation","closeAll","onMenuClosed","menuItem","disabled","action","focusIndex","indexOf","render","menuItemElements","dataTestId","i","group","push","menuItemElement","menuStyle"],"sources":["../../src/menu-actions/Menu.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport ContextActionUtils, {\n ContextAction,\n} from '../context-actions/ContextActionUtils';\nimport ContextMenuItem from '../context-actions/ContextMenuItem';\n\nexport type MenuOptions = {\n doNotVerifyPosition?: boolean;\n separateKeyboardMouse?: boolean;\n initialKeyboardIndex?: number;\n};\n\ntype MenuProps = {\n actions: (() => ContextAction[]) | ContextAction | ContextAction[];\n closeMenu(closeAll: boolean): void;\n onMenuClosed(menu: Menu): void;\n onMenuOpened(menu: Menu): void;\n options: MenuOptions;\n menuStyle: React.CSSProperties;\n 'data-testid'?: string;\n};\n\ntype MenuState = {\n menuItems: ContextAction[];\n keyboardIndex: number;\n mouseIndex: number;\n};\n\n/**\n * Do not use this class directly. Use DropdownMenu instead.\n *\n * Generates list from actions for use by DropdownMenu.\n * It has beem split from the context-actions component, due to divergering requirements,\n * but still re-uses styling from context-menu. Depending on how usage evolves, may get split further.\n *\n */\n\nclass Menu extends PureComponent<MenuProps, MenuState> {\n static defaultProps = {\n closeMenu(): void {\n // no-op\n },\n onMenuOpened(): void {\n // no-op\n },\n onMenuClosed(): void {\n // no-op\n },\n options: {},\n menuStyle: {},\n 'data-testid': undefined,\n };\n\n constructor(props: MenuProps) {\n super(props);\n\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleMenuItemMouseMove = this.handleMenuItemMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleCloseMenu = this.handleCloseMenu.bind(this);\n\n this.container = React.createRef();\n this.oldFocus = document.activeElement;\n this.rAF = 0;\n\n const { options } = props;\n const keyboardIndex = options.initialKeyboardIndex ?? -1;\n this.state = {\n menuItems: [],\n keyboardIndex,\n mouseIndex: -1,\n };\n }\n\n componentDidMount(): void {\n this.initMenu();\n\n this.rAF = window.requestAnimationFrame(() => {\n // set initial focus to container so keyboard navigation works\n // components can still override focus in onMenuOpened callback\n this.container.current?.focus();\n const { onMenuOpened } = this.props;\n onMenuOpened(this);\n });\n }\n\n componentDidUpdate(prevProps: MenuProps): void {\n const { actions } = this.props;\n if (prevProps.actions !== actions) {\n this.initMenu();\n }\n }\n\n componentWillUnmount(): void {\n cancelAnimationFrame(this.rAF);\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n oldFocus: Element | null;\n\n rAF: number;\n\n getKeyboardIndex(): number | null {\n const { options } = this.props;\n if (\n options.separateKeyboardMouse !== undefined &&\n options.separateKeyboardMouse\n ) {\n const { keyboardIndex } = this.state;\n return keyboardIndex;\n }\n\n return this.getMouseIndex();\n }\n\n setKeyboardIndex(index: number): void {\n const { options } = this.props;\n if (\n options.separateKeyboardMouse !== undefined &&\n options.separateKeyboardMouse\n ) {\n this.setState({ keyboardIndex: index });\n } else {\n this.setMouseIndex(index);\n }\n }\n\n getMouseIndex(): number {\n const { mouseIndex } = this.state;\n return mouseIndex;\n }\n\n setMouseIndex(index: number): void {\n this.setState({ mouseIndex: index });\n }\n\n initMenu(): void {\n // cancel any pending close\n cancelAnimationFrame(this.rAF);\n\n this.setState({\n menuItems: [],\n });\n\n const { actions } = this.props;\n const menuItems = ContextActionUtils.getMenuItems(actions, false);\n\n if (menuItems.length > 0) {\n this.setState(state => ({\n menuItems: ContextActionUtils.sortActions(\n state.menuItems.concat(menuItems)\n ),\n }));\n }\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { menuItems } = this.state;\n const oldFocus = this.getKeyboardIndex();\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (oldFocus != null && oldFocus >= 0 && oldFocus < menuItems.length) {\n this.handleMenuItemClick(menuItems[oldFocus], e);\n }\n return;\n }\n\n if (e.key === 'Escape') {\n newFocus = null;\n } else if (\n e.key === 'ArrowUp' ||\n (e.key === 'Tab' && e.shiftKey === true)\n ) {\n newFocus = ContextActionUtils.getNextMenuItem(\n newFocus ?? 0,\n -1,\n menuItems\n );\n } else if (\n e.key === 'ArrowDown' ||\n (e.key === 'Tab' && e.shiftKey === false)\n ) {\n newFocus = ContextActionUtils.getNextMenuItem(\n newFocus ?? 0,\n 1,\n menuItems\n );\n }\n\n if (oldFocus !== newFocus) {\n if (newFocus !== null) {\n this.setKeyboardIndex(newFocus);\n } else {\n this.closeMenu();\n if (this.oldFocus instanceof HTMLElement) {\n this.oldFocus.focus();\n }\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n closeMenu(closeAll = false): void {\n const { closeMenu, onMenuClosed } = this.props;\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n closeMenu(closeAll);\n onMenuClosed(this);\n });\n }\n\n handleCloseMenu(): void {\n this.closeMenu();\n }\n\n handleMenuItemClick(menuItem: ContextAction, e: React.SyntheticEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n if (\n menuItem != null &&\n (menuItem.disabled === undefined || !menuItem.disabled) &&\n menuItem.action != null\n ) {\n menuItem.action();\n this.closeMenu(true);\n }\n }\n\n handleMenuItemMouseMove(menuItem: ContextAction): void {\n const { menuItems } = this.state;\n const focusIndex = menuItems.indexOf(menuItem);\n this.setMouseIndex(focusIndex);\n }\n\n handleMouseLeave(): void {\n this.setMouseIndex(-1);\n }\n\n render(): JSX.Element {\n const menuItemElements = [];\n const { 'data-testid': dataTestId } = this.props;\n const { keyboardIndex, menuItems, mouseIndex } = this.state;\n for (let i = 0; i < menuItems.length; i += 1) {\n const menuItem = menuItems[i];\n\n if (i > 0 && menuItem.group !== menuItems[i - 1].group) {\n menuItemElements.push(<hr key={`${i}.separator`} />);\n }\n\n const menuItemElement = (\n <ContextMenuItem\n key={i}\n isKeyboardSelected={keyboardIndex === i}\n isMouseSelected={mouseIndex === i}\n menuItem={menuItem}\n closeMenu={this.handleCloseMenu}\n onMenuItemClick={this.handleMenuItemClick}\n onMenuItemMouseMove={this.handleMenuItemMouseMove}\n onMenuItemContextMenu={() => false}\n />\n );\n\n menuItemElements.push(menuItemElement);\n }\n\n const { menuStyle } = this.props;\n\n return (\n <div\n className=\"context-menu-container\"\n style={{ ...menuStyle }}\n ref={this.container}\n onKeyDown={this.handleKeyDown}\n onMouseLeave={this.handleMouseLeave}\n role=\"menuitem\"\n tabIndex={0}\n data-testid={dataTestId}\n >\n {menuItemElements}\n </div>\n );\n }\n}\n\nexport default Menu;\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import DropdownMenu from "./DropdownMenu.js";
2
+ export default DropdownMenu;
3
+ export * from "./DropdownMenu.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["DropdownMenu"],"sources":["../../src/menu-actions/index.ts"],"sourcesContent":["import DropdownMenu from './DropdownMenu';\n\nexport default DropdownMenu;\nexport * from './DropdownMenu';\n"],"mappings":"OAAOA,YAAY;AAEnB,eAAeA,YAAY;AAAC"}
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { useDebouncedValue } from '@deephaven/react-hooks';
3
+ /**
4
+ * Display a modal after a debounce time. Blocks the screen from interaction immediately,
5
+ * but then waits the set debounce time before rendering the modal.
6
+ */
7
+ function DebouncedModal(_ref) {
8
+ var {
9
+ blockInteraction = true,
10
+ children,
11
+ debounceMs,
12
+ isOpen = false
13
+ } = _ref;
14
+ var debouncedIsOpen = useDebouncedValue(isOpen, debounceMs);
15
+ return /*#__PURE__*/React.createElement(React.Fragment, null, blockInteraction && isOpen && /*#__PURE__*/React.createElement("div", {
16
+ className: "modal-backdrop",
17
+ style: {
18
+ backgroundColor: 'transparent'
19
+ },
20
+ "data-testid": "debounced-modal-backdrop"
21
+ }), /*#__PURE__*/React.cloneElement(children, {
22
+ isOpen: isOpen && debouncedIsOpen
23
+ }));
24
+ }
25
+ export default DebouncedModal;
26
+ //# sourceMappingURL=DebouncedModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DebouncedModal.js","names":["React","useDebouncedValue","DebouncedModal","blockInteraction","children","debounceMs","isOpen","debouncedIsOpen","backgroundColor","cloneElement"],"sources":["../../src/modal/DebouncedModal.tsx"],"sourcesContent":["import React from 'react';\nimport { useDebouncedValue } from '@deephaven/react-hooks';\n\nexport type DebouncedModalProps = {\n /** Whether to block interaction immediately */\n blockInteraction?: boolean;\n\n /** Children to render after the alloted debounce time */\n children: React.ReactElement;\n\n /** Time to debounce */\n debounceMs: number;\n\n /**\n * Will render the `children` `debounceMs` after `isOpen` is set to `true.\n * Will stop rendering immediately after `isOpen` is set to `false`.\n */\n isOpen?: boolean;\n};\n\n/**\n * Display a modal after a debounce time. Blocks the screen from interaction immediately,\n * but then waits the set debounce time before rendering the modal.\n */\nfunction DebouncedModal({\n blockInteraction = true,\n children,\n debounceMs,\n isOpen = false,\n}: DebouncedModalProps) {\n const debouncedIsOpen = useDebouncedValue(isOpen, debounceMs);\n\n return (\n <>\n {blockInteraction && isOpen && (\n <div\n className=\"modal-backdrop\"\n style={{ backgroundColor: 'transparent' }}\n data-testid=\"debounced-modal-backdrop\"\n />\n )}\n {React.cloneElement(children, { isOpen: isOpen && debouncedIsOpen })}\n </>\n );\n}\n\nexport default DebouncedModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,wBAAwB;AAmB1D;AACA;AACA;AACA;AACA,SAASC,cAAc,OAKC;EAAA,IALA;IACtBC,gBAAgB,GAAG,IAAI;IACvBC,QAAQ;IACRC,UAAU;IACVC,MAAM,GAAG;EACU,CAAC;EACpB,IAAMC,eAAe,GAAGN,iBAAiB,CAACK,MAAM,EAAED,UAAU,CAAC;EAE7D,oBACE,0CACGF,gBAAgB,IAAIG,MAAM,iBACzB;IACE,SAAS,EAAC,gBAAgB;IAC1B,KAAK,EAAE;MAAEE,eAAe,EAAE;IAAc,CAAE;IAC1C,eAAY;EAA0B,EAEzC,eACAR,KAAK,CAACS,YAAY,CAACL,QAAQ,EAAE;IAAEE,MAAM,EAAEA,MAAM,IAAIC;EAAgB,CAAC,CAAC,CACnE;AAEP;AAEA,eAAeL,cAAc"}
@@ -0,0 +1,24 @@
1
+ /* stylelint-disable scss/at-import-no-partial-leading-underscore */
2
+ .info-modal {
3
+ text-align: center;
4
+ padding-bottom: 18px;
5
+ }
6
+ .info-modal .message-icon {
7
+ font-size: 120px;
8
+ text-align: center;
9
+ line-height: 1;
10
+ }
11
+ .info-modal .message-icon .svg-inline--fa {
12
+ font-size: inherit;
13
+ }
14
+ .info-modal .message-header {
15
+ font-size: 24px;
16
+ }
17
+ .info-modal .message-header .svg-inline--fa {
18
+ font-size: inherit;
19
+ }
20
+ .info-modal .message-content {
21
+ font-style: italic;
22
+ }
23
+
24
+ /*# sourceMappingURL=InfoModal.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../scss/custom.scss","../../src/modal/InfoModal.scss"],"names":[],"mappings":"AAAA;ACMA;EACE;EACA,gBAJ0B;;AAK1B;EACE,WARwB;EASxB;EACA;;AACA;EACE;;AAGJ;EACE,WAfwB;;AAgBxB;EACE;;AAGJ;EACE","file":"InfoModal.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","@import '../../scss/custom.scss';\n\n$info-modal-icon-font-size: 120px;\n$info-modal-message-header: 24px;\n$info-modal-padding-bottom: 18px;\n\n.info-modal {\n text-align: center;\n padding-bottom: $info-modal-padding-bottom;\n .message-icon {\n font-size: $info-modal-icon-font-size;\n text-align: center;\n line-height: 1;\n .svg-inline--fa {\n font-size: inherit;\n }\n }\n .message-header {\n font-size: $info-modal-message-header;\n .svg-inline--fa {\n font-size: inherit;\n }\n }\n .message-content {\n font-style: italic;\n }\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
+ import Modal from "./Modal.js";
4
+ import ModalBody from "./ModalBody.js";
5
+ import "./InfoModal.css";
6
+ /**
7
+ * A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.
8
+ * Does not have any buttons and cannot be dismissed.
9
+ */
10
+ function InfoModal(_ref) {
11
+ var {
12
+ className,
13
+ icon,
14
+ isOpen = false,
15
+ subtitle,
16
+ title
17
+ } = _ref;
18
+ return /*#__PURE__*/React.createElement(Modal, {
19
+ isOpen: isOpen,
20
+ className: className
21
+ }, /*#__PURE__*/React.createElement(ModalBody, null, /*#__PURE__*/React.createElement("div", {
22
+ className: "info-modal"
23
+ }, icon != null && /*#__PURE__*/React.createElement("div", {
24
+ className: "message-icon"
25
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
26
+ icon: icon
27
+ })), /*#__PURE__*/React.createElement("div", {
28
+ className: "message-header"
29
+ }, title), subtitle != null && /*#__PURE__*/React.createElement("div", {
30
+ className: "message-content"
31
+ }, subtitle))));
32
+ }
33
+ export default InfoModal;
34
+ //# sourceMappingURL=InfoModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InfoModal.js","names":["React","FontAwesomeIcon","Modal","ModalBody","InfoModal","className","icon","isOpen","subtitle","title"],"sources":["../../src/modal/InfoModal.tsx"],"sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport Modal from './Modal';\nimport ModalBody from './ModalBody';\nimport './InfoModal.scss';\n\ntype InfoModalProps = {\n /** Class name to give the info modal */\n className?: string;\n\n /** Icon to display in the modal */\n icon?: IconProp;\n\n /** Title to display in the modal */\n title: React.ReactNode;\n\n /** Subtitle/detail to display in the modal */\n subtitle?: React.ReactNode;\n\n /** Whether the modal is open/visible or not. */\n isOpen?: boolean;\n};\n\n/**\n * A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.\n * Does not have any buttons and cannot be dismissed.\n */\nfunction InfoModal({\n className,\n icon,\n isOpen = false,\n subtitle,\n title,\n}: InfoModalProps): JSX.Element {\n return (\n <Modal isOpen={isOpen} className={className}>\n <ModalBody>\n <div className=\"info-modal\">\n {icon != null && (\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"message-header\">{title}</div>\n {subtitle != null && (\n <div className=\"message-content\">{subtitle}</div>\n )}\n </div>\n </ModalBody>\n </Modal>\n );\n}\n\nexport default InfoModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAE1DC,KAAK;AAAA,OACLC,SAAS;AAAA;AAoBhB;AACA;AACA;AACA;AACA,SAASC,SAAS,OAMc;EAAA,IANb;IACjBC,SAAS;IACTC,IAAI;IACJC,MAAM,GAAG,KAAK;IACdC,QAAQ;IACRC;EACc,CAAC;EACf,oBACE,oBAAC,KAAK;IAAC,MAAM,EAAEF,MAAO;IAAC,SAAS,EAAEF;EAAU,gBAC1C,oBAAC,SAAS,qBACR;IAAK,SAAS,EAAC;EAAY,GACxBC,IAAI,IAAI,IAAI,iBACX;IAAK,SAAS,EAAC;EAAc,gBAC3B,oBAAC,eAAe;IAAC,IAAI,EAAEA;EAAK,EAAG,CAElC,eACD;IAAK,SAAS,EAAC;EAAgB,GAAEG,KAAK,CAAO,EAC5CD,QAAQ,IAAI,IAAI,iBACf;IAAK,SAAS,EAAC;EAAiB,GAAEA,QAAQ,CAC3C,CACG,CACI,CACN;AAEZ;AAEA,eAAeJ,SAAS"}