@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.
- package/dist/AutoCompleteInput.css +35 -0
- package/dist/AutoCompleteInput.css.map +1 -0
- package/dist/AutoCompleteInput.js +496 -0
- package/dist/AutoCompleteInput.js.map +1 -0
- package/dist/AutoResizeTextarea.css +11 -0
- package/dist/AutoResizeTextarea.css.map +1 -0
- package/dist/AutoResizeTextarea.js +128 -0
- package/dist/AutoResizeTextarea.js.map +1 -0
- package/dist/BasicModal.js +112 -0
- package/dist/BasicModal.js.map +1 -0
- package/dist/Button.d.ts +1 -1
- package/dist/Button.js +193 -0
- package/dist/Button.js.map +1 -0
- package/dist/ButtonGroup.js +31 -0
- package/dist/ButtonGroup.js.map +1 -0
- package/dist/ButtonOld.js +41 -0
- package/dist/ButtonOld.js.map +1 -0
- package/dist/CardFlip.css +36 -0
- package/dist/CardFlip.css.map +1 -0
- package/dist/CardFlip.js +61 -0
- package/dist/CardFlip.js.map +1 -0
- package/dist/Checkbox.js +104 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/Collapse.js +89 -0
- package/dist/Collapse.js.map +1 -0
- package/dist/ComboBox.css +50 -0
- package/dist/ComboBox.css.map +1 -0
- package/dist/ComboBox.js +487 -0
- package/dist/ComboBox.js.map +1 -0
- package/dist/CopyButton.js +30 -0
- package/dist/CopyButton.js.map +1 -0
- package/dist/CustomTimeSelect.css +65 -0
- package/dist/CustomTimeSelect.css.map +1 -0
- package/dist/CustomTimeSelect.js +516 -0
- package/dist/CustomTimeSelect.js.map +1 -0
- package/dist/DateInput.js +54 -0
- package/dist/DateInput.js.map +1 -0
- package/dist/DateInputUtils.js +33 -0
- package/dist/DateInputUtils.js.map +1 -0
- package/dist/DateTimeInput.js +84 -0
- package/dist/DateTimeInput.js.map +1 -0
- package/dist/DateTimeInputUtils.js +8 -0
- package/dist/DateTimeInputUtils.js.map +1 -0
- package/dist/DebouncedSearchInput.js +79 -0
- package/dist/DebouncedSearchInput.js.map +1 -0
- package/dist/DragUtils.js +68 -0
- package/dist/DragUtils.js.map +1 -0
- package/dist/DraggableItemList.css +118 -0
- package/dist/DraggableItemList.css.map +1 -0
- package/dist/DraggableItemList.js +268 -0
- package/dist/DraggableItemList.js.map +1 -0
- package/dist/EditableItemList.js +105 -0
- package/dist/EditableItemList.js.map +1 -0
- package/dist/HierarchicalCheckboxMenu.css +30 -0
- package/dist/HierarchicalCheckboxMenu.css.map +1 -0
- package/dist/HierarchicalCheckboxMenu.js +218 -0
- package/dist/HierarchicalCheckboxMenu.js.map +1 -0
- package/dist/ItemList.css +13 -0
- package/dist/ItemList.css.map +1 -0
- package/dist/ItemList.js +686 -0
- package/dist/ItemList.js.map +1 -0
- package/dist/ItemListItem.css +48 -0
- package/dist/ItemListItem.css.map +1 -0
- package/dist/ItemListItem.js +214 -0
- package/dist/ItemListItem.js.map +1 -0
- package/dist/LoadingOverlay.css +24 -0
- package/dist/LoadingOverlay.css.map +1 -0
- package/dist/LoadingOverlay.js +48 -0
- package/dist/LoadingOverlay.js.map +1 -0
- package/dist/LoadingSpinner.css +8 -0
- package/dist/LoadingSpinner.css.map +1 -0
- package/dist/LoadingSpinner.js +24 -0
- package/dist/LoadingSpinner.js.map +1 -0
- package/dist/MaskedInput.css +7 -0
- package/dist/MaskedInput.css.map +1 -0
- package/dist/MaskedInput.js +394 -0
- package/dist/MaskedInput.js.map +1 -0
- package/dist/MaskedInputUtils.js +36 -0
- package/dist/MaskedInputUtils.js.map +1 -0
- package/dist/Option.js +16 -0
- package/dist/Option.js.map +1 -0
- package/dist/RadioGroup.js +34 -0
- package/dist/RadioGroup.js.map +1 -0
- package/dist/RadioItem.js +55 -0
- package/dist/RadioItem.js.map +1 -0
- package/dist/RandomAreaPlotAnimation.css +18 -0
- package/dist/RandomAreaPlotAnimation.css.map +1 -0
- package/dist/RandomAreaPlotAnimation.js +290 -0
- package/dist/RandomAreaPlotAnimation.js.map +1 -0
- package/dist/SearchInput.css +43 -0
- package/dist/SearchInput.css.map +1 -0
- package/dist/SearchInput.js +66 -0
- package/dist/SearchInput.js.map +1 -0
- package/dist/Select.js +30 -0
- package/dist/Select.js.map +1 -0
- package/dist/SelectValueList.css +38 -0
- package/dist/SelectValueList.css.map +1 -0
- package/dist/SelectValueList.js +175 -0
- package/dist/SelectValueList.js.map +1 -0
- package/dist/SocketedButton.css +123 -0
- package/dist/SocketedButton.css.map +1 -0
- package/dist/SocketedButton.js +63 -0
- package/dist/SocketedButton.js.map +1 -0
- package/dist/SpectrumThemeDark.module.css +9 -0
- package/dist/SpectrumThemeDark.module.css.map +1 -0
- package/dist/SpectrumThemeLight.module.css +9 -0
- package/dist/SpectrumThemeLight.module.css.map +1 -0
- package/dist/SpectrumUtils.js +59 -0
- package/dist/SpectrumUtils.js.map +1 -0
- package/dist/ThemeExport.js +15 -0
- package/dist/ThemeExport.js.map +1 -0
- package/dist/ThemeExport.module.css +40 -0
- package/dist/ThemeExport.module.css.map +1 -0
- package/dist/TimeInput.js +101 -0
- package/dist/TimeInput.js.map +1 -0
- package/dist/TimeSlider.css +178 -0
- package/dist/TimeSlider.css.map +1 -0
- package/dist/TimeSlider.js +314 -0
- package/dist/TimeSlider.js.map +1 -0
- package/dist/TimeSlider.module.css +185 -0
- package/dist/TimeSlider.module.css.map +1 -0
- package/dist/ToastNotification.css +62 -0
- package/dist/ToastNotification.css.map +1 -0
- package/dist/ToastNotification.js +56 -0
- package/dist/ToastNotification.js.map +1 -0
- package/dist/UISwitch.css +94 -0
- package/dist/UISwitch.css.map +1 -0
- package/dist/UISwitch.js +30 -0
- package/dist/UISwitch.js.map +1 -0
- package/dist/ValidateLabelInput.css +9 -0
- package/dist/ValidateLabelInput.css.map +1 -0
- package/dist/ValidateLabelInput.js +50 -0
- package/dist/ValidateLabelInput.js.map +1 -0
- package/dist/context-actions/ContextActionUtils.js +142 -0
- package/dist/context-actions/ContextActionUtils.js.map +1 -0
- package/dist/context-actions/ContextActions.css +157 -0
- package/dist/context-actions/ContextActions.css.map +1 -0
- package/dist/context-actions/ContextActions.js +182 -0
- package/dist/context-actions/ContextActions.js.map +1 -0
- package/dist/context-actions/ContextMenu.js +559 -0
- package/dist/context-actions/ContextMenu.js.map +1 -0
- package/dist/context-actions/ContextMenuItem.js +139 -0
- package/dist/context-actions/ContextMenuItem.js.map +1 -0
- package/dist/context-actions/ContextMenuRoot.js +135 -0
- package/dist/context-actions/ContextMenuRoot.js.map +1 -0
- package/dist/context-actions/GlobalContextAction.js +53 -0
- package/dist/context-actions/GlobalContextAction.js.map +1 -0
- package/dist/context-actions/GlobalContextActions.js +28 -0
- package/dist/context-actions/GlobalContextActions.js.map +1 -0
- package/dist/context-actions/index.js +5 -0
- package/dist/context-actions/index.js.map +1 -0
- package/dist/declaration.d.js +2 -0
- package/dist/declaration.d.js.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/menu-actions/DropdownMenu.css +39 -0
- package/dist/menu-actions/DropdownMenu.css.map +1 -0
- package/dist/menu-actions/DropdownMenu.js +174 -0
- package/dist/menu-actions/DropdownMenu.js.map +1 -0
- package/dist/menu-actions/Menu.js +244 -0
- package/dist/menu-actions/Menu.js.map +1 -0
- package/dist/menu-actions/index.js +4 -0
- package/dist/menu-actions/index.js.map +1 -0
- package/dist/modal/DebouncedModal.js +26 -0
- package/dist/modal/DebouncedModal.js.map +1 -0
- package/dist/modal/InfoModal.css +24 -0
- package/dist/modal/InfoModal.css.map +1 -0
- package/dist/modal/InfoModal.js +34 -0
- package/dist/modal/InfoModal.js.map +1 -0
- package/dist/modal/Modal.js +122 -0
- package/dist/modal/Modal.js.map +1 -0
- package/dist/modal/ModalBody.js +16 -0
- package/dist/modal/ModalBody.js.map +1 -0
- package/dist/modal/ModalFooter.js +14 -0
- package/dist/modal/ModalFooter.js.map +1 -0
- package/dist/modal/ModalHeader.js +27 -0
- package/dist/modal/ModalHeader.js.map +1 -0
- package/dist/modal/index.js +7 -0
- package/dist/modal/index.js.map +1 -0
- package/dist/navigation/Menu.css +13 -0
- package/dist/navigation/Menu.css.map +1 -0
- package/dist/navigation/Menu.js +25 -0
- package/dist/navigation/Menu.js.map +1 -0
- package/dist/navigation/MenuItem.css +46 -0
- package/dist/navigation/MenuItem.css.map +1 -0
- package/dist/navigation/MenuItem.js +65 -0
- package/dist/navigation/MenuItem.js.map +1 -0
- package/dist/navigation/Page.css +34 -0
- package/dist/navigation/Page.css.map +1 -0
- package/dist/navigation/Page.js +46 -0
- package/dist/navigation/Page.js.map +1 -0
- package/dist/navigation/Stack.css +24 -0
- package/dist/navigation/Stack.css.map +1 -0
- package/dist/navigation/Stack.js +82 -0
- package/dist/navigation/Stack.js.map +1 -0
- package/dist/navigation/index.js +5 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/popper/Popper.css +127 -0
- package/dist/popper/Popper.css.map +1 -0
- package/dist/popper/Popper.js +283 -0
- package/dist/popper/Popper.js.map +1 -0
- package/dist/popper/Tooltip.js +283 -0
- package/dist/popper/Tooltip.js.map +1 -0
- package/dist/popper/index.js +3 -0
- package/dist/popper/index.js.map +1 -0
- package/dist/shortcuts/GlobalShortcuts.js +47 -0
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -0
- package/dist/shortcuts/Shortcut.js +393 -0
- package/dist/shortcuts/Shortcut.js.map +1 -0
- package/dist/shortcuts/ShortcutRegistry.js +78 -0
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -0
- package/dist/shortcuts/index.js +5 -0
- package/dist/shortcuts/index.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
4
|
+
import { vsChevronRight } from '@deephaven/icons';
|
|
5
|
+
var ContextMenuItem = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
6
|
+
var _menuItem$shortcut;
|
|
7
|
+
function handleMenuItemClick(e) {
|
|
8
|
+
var {
|
|
9
|
+
menuItem,
|
|
10
|
+
onMenuItemClick
|
|
11
|
+
} = props;
|
|
12
|
+
onMenuItemClick(menuItem, e);
|
|
13
|
+
}
|
|
14
|
+
function handleMenuItemMouseMove(e) {
|
|
15
|
+
var {
|
|
16
|
+
menuItem,
|
|
17
|
+
onMenuItemMouseMove
|
|
18
|
+
} = props;
|
|
19
|
+
onMenuItemMouseMove(menuItem, e);
|
|
20
|
+
}
|
|
21
|
+
function handleMenuItemContextMenu(e) {
|
|
22
|
+
var {
|
|
23
|
+
menuItem,
|
|
24
|
+
onMenuItemContextMenu
|
|
25
|
+
} = props;
|
|
26
|
+
onMenuItemContextMenu(menuItem, e);
|
|
27
|
+
}
|
|
28
|
+
function renderCustomMenuElement(element, iconElement, displayShortcut) {
|
|
29
|
+
// Don't pass forwardedProps if menuElement is a native DOM node
|
|
30
|
+
if (typeof element.type === 'string') {
|
|
31
|
+
return element;
|
|
32
|
+
}
|
|
33
|
+
var {
|
|
34
|
+
closeMenu,
|
|
35
|
+
menuItem,
|
|
36
|
+
isKeyboardSelected,
|
|
37
|
+
isMouseSelected,
|
|
38
|
+
'data-testid': dataTestId
|
|
39
|
+
} = props;
|
|
40
|
+
var forwardedProps = {
|
|
41
|
+
menuItem,
|
|
42
|
+
closeMenu,
|
|
43
|
+
isKeyboardSelected,
|
|
44
|
+
isMouseSelected,
|
|
45
|
+
iconElement,
|
|
46
|
+
displayShortcut,
|
|
47
|
+
'data-testid': dataTestId
|
|
48
|
+
};
|
|
49
|
+
return /*#__PURE__*/React.cloneElement(element, {
|
|
50
|
+
forwardedProps
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
var {
|
|
54
|
+
children,
|
|
55
|
+
menuItem,
|
|
56
|
+
isKeyboardSelected = false,
|
|
57
|
+
isMouseSelected = false,
|
|
58
|
+
'data-testid': dataTestId
|
|
59
|
+
} = props;
|
|
60
|
+
var displayShortcut = (_menuItem$shortcut = menuItem.shortcut) === null || _menuItem$shortcut === void 0 ? void 0 : _menuItem$shortcut.getDisplayText();
|
|
61
|
+
var icon = null;
|
|
62
|
+
if (menuItem.icon) {
|
|
63
|
+
var menuItemIcon = menuItem.icon;
|
|
64
|
+
if ( /*#__PURE__*/React.isValidElement(menuItemIcon)) {
|
|
65
|
+
icon = menuItemIcon;
|
|
66
|
+
} else {
|
|
67
|
+
var style;
|
|
68
|
+
if (menuItem.iconColor != null && (menuItem.disabled === undefined || !menuItem.disabled)) {
|
|
69
|
+
style = {
|
|
70
|
+
color: menuItem.iconColor
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
icon = /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
74
|
+
icon: menuItemIcon,
|
|
75
|
+
style: style
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
var subMenuIndicator = null;
|
|
80
|
+
var isSubMenuActive = Boolean(children);
|
|
81
|
+
if (menuItem.actions) {
|
|
82
|
+
subMenuIndicator = /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
83
|
+
icon: vsChevronRight
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
var content = null;
|
|
87
|
+
if (menuItem.menuElement) {
|
|
88
|
+
content = /*#__PURE__*/React.createElement("div", {
|
|
89
|
+
className: "custom-menu-item",
|
|
90
|
+
onMouseMove: handleMenuItemMouseMove
|
|
91
|
+
}, renderCustomMenuElement(menuItem.menuElement, icon, displayShortcut));
|
|
92
|
+
} else {
|
|
93
|
+
var _menuItem$description;
|
|
94
|
+
var menuItemDisabled = menuItem.disabled;
|
|
95
|
+
var iconHasOutline = menuItem.iconOutline;
|
|
96
|
+
content = /*#__PURE__*/React.createElement("button", {
|
|
97
|
+
type: "button",
|
|
98
|
+
className: classNames('btn-context-menu', {
|
|
99
|
+
disabled: menuItemDisabled
|
|
100
|
+
}, {
|
|
101
|
+
active: (isSubMenuActive || isMouseSelected) && (menuItemDisabled === undefined || !menuItemDisabled)
|
|
102
|
+
}, {
|
|
103
|
+
'keyboard-active': isKeyboardSelected && (menuItemDisabled === undefined || !menuItemDisabled)
|
|
104
|
+
}),
|
|
105
|
+
onClick: handleMenuItemClick,
|
|
106
|
+
onMouseMove: handleMenuItemMouseMove,
|
|
107
|
+
onContextMenu: handleMenuItemContextMenu,
|
|
108
|
+
title: (_menuItem$description = menuItem.description) !== null && _menuItem$description !== void 0 ? _menuItem$description : ''
|
|
109
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
110
|
+
className: "btn-context-menu-wrapper"
|
|
111
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
112
|
+
className: classNames('icon', {
|
|
113
|
+
outline: iconHasOutline
|
|
114
|
+
})
|
|
115
|
+
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
116
|
+
className: "title"
|
|
117
|
+
}, menuItem.title), displayShortcut !== undefined && /*#__PURE__*/React.createElement("span", {
|
|
118
|
+
className: "shortcut"
|
|
119
|
+
}, displayShortcut), subMenuIndicator && /*#__PURE__*/React.createElement("span", {
|
|
120
|
+
className: classNames('submenu-indicator', {
|
|
121
|
+
disabled: menuItemDisabled
|
|
122
|
+
})
|
|
123
|
+
}, subMenuIndicator)));
|
|
124
|
+
}
|
|
125
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
126
|
+
className: "context-menu-item",
|
|
127
|
+
ref: ref,
|
|
128
|
+
"data-testid": dataTestId
|
|
129
|
+
}, children, content);
|
|
130
|
+
});
|
|
131
|
+
ContextMenuItem.displayName = 'ContextMenuItem';
|
|
132
|
+
ContextMenuItem.defaultProps = {
|
|
133
|
+
children: null,
|
|
134
|
+
isKeyboardSelected: false,
|
|
135
|
+
isMouseSelected: false,
|
|
136
|
+
'data-testid': undefined
|
|
137
|
+
};
|
|
138
|
+
export default ContextMenuItem;
|
|
139
|
+
//# sourceMappingURL=ContextMenuItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextMenuItem.js","names":["React","classNames","FontAwesomeIcon","vsChevronRight","ContextMenuItem","forwardRef","props","ref","handleMenuItemClick","e","menuItem","onMenuItemClick","handleMenuItemMouseMove","onMenuItemMouseMove","handleMenuItemContextMenu","onMenuItemContextMenu","renderCustomMenuElement","element","iconElement","displayShortcut","type","closeMenu","isKeyboardSelected","isMouseSelected","dataTestId","forwardedProps","cloneElement","children","shortcut","getDisplayText","icon","menuItemIcon","isValidElement","style","iconColor","disabled","undefined","color","subMenuIndicator","isSubMenuActive","Boolean","actions","content","menuElement","menuItemDisabled","iconHasOutline","iconOutline","active","description","outline","title","displayName","defaultProps"],"sources":["../../src/context-actions/ContextMenuItem.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight, IconDefinition } from '@deephaven/icons';\nimport type { ContextAction } from './ContextActionUtils';\n\ninterface ContextMenuItemProps {\n children?: React.ReactNode;\n closeMenu(closeAll: boolean): void;\n isKeyboardSelected?: boolean;\n isMouseSelected?: boolean;\n menuItem: ContextAction;\n onMenuItemClick(item: ContextAction, e: React.MouseEvent): void;\n onMenuItemMouseMove(item: ContextAction, e: React.MouseEvent): void;\n onMenuItemContextMenu(item: ContextAction, e: React.MouseEvent): void;\n 'data-testid'?: string;\n}\n\nconst ContextMenuItem = React.forwardRef<HTMLDivElement, ContextMenuItemProps>(\n (props: ContextMenuItemProps, ref) => {\n function handleMenuItemClick(e: React.MouseEvent) {\n const { menuItem, onMenuItemClick } = props;\n onMenuItemClick(menuItem, e);\n }\n\n function handleMenuItemMouseMove(e: React.MouseEvent) {\n const { menuItem, onMenuItemMouseMove } = props;\n onMenuItemMouseMove(menuItem, e);\n }\n\n function handleMenuItemContextMenu(e: React.MouseEvent) {\n const { menuItem, onMenuItemContextMenu } = props;\n onMenuItemContextMenu(menuItem, e);\n }\n\n function renderCustomMenuElement(\n element: React.ReactElement,\n iconElement: IconDefinition | React.ReactElement | null,\n displayShortcut: string | undefined\n ): JSX.Element {\n // Don't pass forwardedProps if menuElement is a native DOM node\n if (typeof element.type === 'string') {\n return element;\n }\n const {\n closeMenu,\n menuItem,\n isKeyboardSelected,\n isMouseSelected,\n 'data-testid': dataTestId,\n } = props;\n const forwardedProps = {\n menuItem,\n closeMenu,\n isKeyboardSelected,\n isMouseSelected,\n iconElement,\n displayShortcut,\n 'data-testid': dataTestId,\n };\n return React.cloneElement(element, {\n forwardedProps,\n });\n }\n\n const {\n children,\n menuItem,\n isKeyboardSelected = false,\n isMouseSelected = false,\n 'data-testid': dataTestId,\n } = props;\n\n const displayShortcut = menuItem.shortcut?.getDisplayText();\n let icon: IconDefinition | React.ReactElement | null = null;\n if (menuItem.icon) {\n const menuItemIcon = menuItem.icon;\n if (React.isValidElement(menuItemIcon)) {\n icon = menuItemIcon;\n } else {\n let style: React.CSSProperties | undefined;\n if (\n menuItem.iconColor != null &&\n (menuItem.disabled === undefined || !menuItem.disabled)\n ) {\n style = { color: menuItem.iconColor };\n }\n icon = <FontAwesomeIcon icon={menuItemIcon} style={style} />;\n }\n }\n\n let subMenuIndicator = null;\n const isSubMenuActive = Boolean(children);\n if (menuItem.actions) {\n subMenuIndicator = <FontAwesomeIcon icon={vsChevronRight} />;\n }\n let content = null;\n if (menuItem.menuElement) {\n content = (\n <div className=\"custom-menu-item\" onMouseMove={handleMenuItemMouseMove}>\n {renderCustomMenuElement(menuItem.menuElement, icon, displayShortcut)}\n </div>\n );\n } else {\n const menuItemDisabled = menuItem.disabled;\n const iconHasOutline = menuItem.iconOutline;\n content = (\n <button\n type=\"button\"\n className={classNames(\n 'btn-context-menu',\n { disabled: menuItemDisabled },\n {\n active:\n (isSubMenuActive || isMouseSelected) &&\n (menuItemDisabled === undefined || !menuItemDisabled),\n },\n {\n 'keyboard-active':\n isKeyboardSelected &&\n (menuItemDisabled === undefined || !menuItemDisabled),\n }\n )}\n onClick={handleMenuItemClick}\n onMouseMove={handleMenuItemMouseMove}\n onContextMenu={handleMenuItemContextMenu}\n title={menuItem.description ?? ''}\n >\n <div className=\"btn-context-menu-wrapper\">\n <span className={classNames('icon', { outline: iconHasOutline })}>\n {icon}\n </span>\n <span className=\"title\">{menuItem.title}</span>\n {displayShortcut !== undefined && (\n <span className=\"shortcut\">{displayShortcut}</span>\n )}\n {subMenuIndicator && (\n <span\n className={classNames('submenu-indicator', {\n disabled: menuItemDisabled,\n })}\n >\n {subMenuIndicator}\n </span>\n )}\n </div>\n </button>\n );\n }\n\n return (\n <div className=\"context-menu-item\" ref={ref} data-testid={dataTestId}>\n {children}\n {content}\n </div>\n );\n }\n);\n\nContextMenuItem.displayName = 'ContextMenuItem';\n\nContextMenuItem.defaultProps = {\n children: null,\n isKeyboardSelected: false,\n isMouseSelected: false,\n 'data-testid': undefined,\n};\n\nexport default ContextMenuItem;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,cAAc,QAAwB,kBAAkB;AAejE,IAAMC,eAAe,gBAAGJ,KAAK,CAACK,UAAU,CACtC,CAACC,KAA2B,EAAEC,GAAG,KAAK;EAAA;EACpC,SAASC,mBAAmB,CAACC,CAAmB,EAAE;IAChD,IAAM;MAAEC,QAAQ;MAAEC;IAAgB,CAAC,GAAGL,KAAK;IAC3CK,eAAe,CAACD,QAAQ,EAAED,CAAC,CAAC;EAC9B;EAEA,SAASG,uBAAuB,CAACH,CAAmB,EAAE;IACpD,IAAM;MAAEC,QAAQ;MAAEG;IAAoB,CAAC,GAAGP,KAAK;IAC/CO,mBAAmB,CAACH,QAAQ,EAAED,CAAC,CAAC;EAClC;EAEA,SAASK,yBAAyB,CAACL,CAAmB,EAAE;IACtD,IAAM;MAAEC,QAAQ;MAAEK;IAAsB,CAAC,GAAGT,KAAK;IACjDS,qBAAqB,CAACL,QAAQ,EAAED,CAAC,CAAC;EACpC;EAEA,SAASO,uBAAuB,CAC9BC,OAA2B,EAC3BC,WAAuD,EACvDC,eAAmC,EACtB;IACb;IACA,IAAI,OAAOF,OAAO,CAACG,IAAI,KAAK,QAAQ,EAAE;MACpC,OAAOH,OAAO;IAChB;IACA,IAAM;MACJI,SAAS;MACTX,QAAQ;MACRY,kBAAkB;MAClBC,eAAe;MACf,aAAa,EAAEC;IACjB,CAAC,GAAGlB,KAAK;IACT,IAAMmB,cAAc,GAAG;MACrBf,QAAQ;MACRW,SAAS;MACTC,kBAAkB;MAClBC,eAAe;MACfL,WAAW;MACXC,eAAe;MACf,aAAa,EAAEK;IACjB,CAAC;IACD,oBAAOxB,KAAK,CAAC0B,YAAY,CAACT,OAAO,EAAE;MACjCQ;IACF,CAAC,CAAC;EACJ;EAEA,IAAM;IACJE,QAAQ;IACRjB,QAAQ;IACRY,kBAAkB,GAAG,KAAK;IAC1BC,eAAe,GAAG,KAAK;IACvB,aAAa,EAAEC;EACjB,CAAC,GAAGlB,KAAK;EAET,IAAMa,eAAe,yBAAGT,QAAQ,CAACkB,QAAQ,uDAAjB,mBAAmBC,cAAc,EAAE;EAC3D,IAAIC,IAAgD,GAAG,IAAI;EAC3D,IAAIpB,QAAQ,CAACoB,IAAI,EAAE;IACjB,IAAMC,YAAY,GAAGrB,QAAQ,CAACoB,IAAI;IAClC,kBAAI9B,KAAK,CAACgC,cAAc,CAACD,YAAY,CAAC,EAAE;MACtCD,IAAI,GAAGC,YAAY;IACrB,CAAC,MAAM;MACL,IAAIE,KAAsC;MAC1C,IACEvB,QAAQ,CAACwB,SAAS,IAAI,IAAI,KACzBxB,QAAQ,CAACyB,QAAQ,KAAKC,SAAS,IAAI,CAAC1B,QAAQ,CAACyB,QAAQ,CAAC,EACvD;QACAF,KAAK,GAAG;UAAEI,KAAK,EAAE3B,QAAQ,CAACwB;QAAU,CAAC;MACvC;MACAJ,IAAI,gBAAG,oBAAC,eAAe;QAAC,IAAI,EAAEC,YAAa;QAAC,KAAK,EAAEE;MAAM,EAAG;IAC9D;EACF;EAEA,IAAIK,gBAAgB,GAAG,IAAI;EAC3B,IAAMC,eAAe,GAAGC,OAAO,CAACb,QAAQ,CAAC;EACzC,IAAIjB,QAAQ,CAAC+B,OAAO,EAAE;IACpBH,gBAAgB,gBAAG,oBAAC,eAAe;MAAC,IAAI,EAAEnC;IAAe,EAAG;EAC9D;EACA,IAAIuC,OAAO,GAAG,IAAI;EAClB,IAAIhC,QAAQ,CAACiC,WAAW,EAAE;IACxBD,OAAO,gBACL;MAAK,SAAS,EAAC,kBAAkB;MAAC,WAAW,EAAE9B;IAAwB,GACpEI,uBAAuB,CAACN,QAAQ,CAACiC,WAAW,EAAEb,IAAI,EAAEX,eAAe,CAAC,CAExE;EACH,CAAC,MAAM;IAAA;IACL,IAAMyB,gBAAgB,GAAGlC,QAAQ,CAACyB,QAAQ;IAC1C,IAAMU,cAAc,GAAGnC,QAAQ,CAACoC,WAAW;IAC3CJ,OAAO,gBACL;MACE,IAAI,EAAC,QAAQ;MACb,SAAS,EAAEzC,UAAU,CACnB,kBAAkB,EAClB;QAAEkC,QAAQ,EAAES;MAAiB,CAAC,EAC9B;QACEG,MAAM,EACJ,CAACR,eAAe,IAAIhB,eAAe,MAClCqB,gBAAgB,KAAKR,SAAS,IAAI,CAACQ,gBAAgB;MACxD,CAAC,EACD;QACE,iBAAiB,EACftB,kBAAkB,KACjBsB,gBAAgB,KAAKR,SAAS,IAAI,CAACQ,gBAAgB;MACxD,CAAC,CACD;MACF,OAAO,EAAEpC,mBAAoB;MAC7B,WAAW,EAAEI,uBAAwB;MACrC,aAAa,EAAEE,yBAA0B;MACzC,KAAK,2BAAEJ,QAAQ,CAACsC,WAAW,yEAAI;IAAG,gBAElC;MAAK,SAAS,EAAC;IAA0B,gBACvC;MAAM,SAAS,EAAE/C,UAAU,CAAC,MAAM,EAAE;QAAEgD,OAAO,EAAEJ;MAAe,CAAC;IAAE,GAC9Df,IAAI,CACA,eACP;MAAM,SAAS,EAAC;IAAO,GAAEpB,QAAQ,CAACwC,KAAK,CAAQ,EAC9C/B,eAAe,KAAKiB,SAAS,iBAC5B;MAAM,SAAS,EAAC;IAAU,GAAEjB,eAAe,CAC5C,EACAmB,gBAAgB,iBACf;MACE,SAAS,EAAErC,UAAU,CAAC,mBAAmB,EAAE;QACzCkC,QAAQ,EAAES;MACZ,CAAC;IAAE,GAEFN,gBAAgB,CAEpB,CACG,CAET;EACH;EAEA,oBACE;IAAK,SAAS,EAAC,mBAAmB;IAAC,GAAG,EAAE/B,GAAI;IAAC,eAAaiB;EAAW,GAClEG,QAAQ,EACRe,OAAO,CACJ;AAEV,CAAC,CACF;AAEDtC,eAAe,CAAC+C,WAAW,GAAG,iBAAiB;AAE/C/C,eAAe,CAACgD,YAAY,GAAG;EAC7BzB,QAAQ,EAAE,IAAI;EACdL,kBAAkB,EAAE,KAAK;EACzBC,eAAe,EAAE,KAAK;EACtB,aAAa,EAAEa;AACjB,CAAC;AAED,eAAehC,eAAe"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
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); }
|
|
4
|
+
import React, { Component } from 'react';
|
|
5
|
+
import classNames from 'classnames';
|
|
6
|
+
import ContextMenu from "./ContextMenu.js";
|
|
7
|
+
import ContextActionUtils from "./ContextActionUtils.js";
|
|
8
|
+
/**
|
|
9
|
+
* Put at your root container, any contextmenu events that are unhandled in the root container will be handled by this
|
|
10
|
+
*/
|
|
11
|
+
class ContextMenuRoot extends Component {
|
|
12
|
+
constructor(props) {
|
|
13
|
+
super(props);
|
|
14
|
+
_defineProperty(this, "container", void 0);
|
|
15
|
+
_defineProperty(this, "openMenu", void 0);
|
|
16
|
+
this.handleMenuClose = this.handleMenuClose.bind(this);
|
|
17
|
+
this.handleContextMenu = this.handleContextMenu.bind(this);
|
|
18
|
+
this.container = /*#__PURE__*/React.createRef();
|
|
19
|
+
this.openMenu = /*#__PURE__*/React.createRef();
|
|
20
|
+
this.state = {
|
|
21
|
+
actions: null,
|
|
22
|
+
left: 0,
|
|
23
|
+
top: 0
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
componentDidMount() {
|
|
27
|
+
var _this$container$curre;
|
|
28
|
+
if ((_this$container$curre = this.container.current) !== null && _this$container$curre !== void 0 && _this$container$curre.parentElement) {
|
|
29
|
+
this.container.current.parentElement.addEventListener('contextmenu', this.handleContextMenu);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
componentWillUnmount() {
|
|
33
|
+
var _this$container$curre2;
|
|
34
|
+
if ((_this$container$curre2 = this.container.current) !== null && _this$container$curre2 !== void 0 && _this$container$curre2.parentElement) {
|
|
35
|
+
this.container.current.parentElement.removeEventListener('contextmenu', this.handleContextMenu);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
handleContextMenu(e) {
|
|
39
|
+
if (!ContextActionUtils.isContextActionEvent(e)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!this.container.current) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (e.metaKey || e.ctrlKey) {
|
|
46
|
+
// debug escape hatch to native menu
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
var contextActions = ContextActionUtils.getMenuItems(e.contextActions);
|
|
50
|
+
var parentRect = this.container.current.getBoundingClientRect();
|
|
51
|
+
var top = e.clientY - parentRect.top;
|
|
52
|
+
var left = e.clientX - parentRect.left;
|
|
53
|
+
if (contextActions.length === 0) {
|
|
54
|
+
// This code path seems to only exist for Chrome on Mac
|
|
55
|
+
// Mac appears to trigger contextmenu events on mousedown vs. mouseup on Windows
|
|
56
|
+
// Mouseup on Windows triggers blur before contextmenu which effectively does what this path does
|
|
57
|
+
if (e.target === this.container.current) {
|
|
58
|
+
// re-emit right clicks that hit the context-root blocking layer
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
|
|
61
|
+
// Set actions to null removes the menu
|
|
62
|
+
// That allows a new menu to be opened on a different element so initial position is set properly
|
|
63
|
+
// Otherwise the instance of this menu may be reused
|
|
64
|
+
// A new contextmenu event is triggered on the element at the location the user clicked on the blocking layer
|
|
65
|
+
this.setState({
|
|
66
|
+
actions: null
|
|
67
|
+
}, () => {
|
|
68
|
+
var element = document.elementFromPoint(left, top); // x y
|
|
69
|
+
|
|
70
|
+
var mouseEvent = new MouseEvent('contextmenu', {
|
|
71
|
+
clientX: e.clientX,
|
|
72
|
+
clientY: e.clientY,
|
|
73
|
+
bubbles: true,
|
|
74
|
+
cancelable: true
|
|
75
|
+
});
|
|
76
|
+
element === null || element === void 0 ? void 0 : element.dispatchEvent(mouseEvent);
|
|
77
|
+
});
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// target was a menu item
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// new clicks, set actions
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
this.setState({
|
|
88
|
+
actions: contextActions,
|
|
89
|
+
top,
|
|
90
|
+
left
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
handleMenuClose(menu) {
|
|
94
|
+
if (menu === this.openMenu.current) {
|
|
95
|
+
this.setState({
|
|
96
|
+
actions: null
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
render() {
|
|
101
|
+
var menu = null;
|
|
102
|
+
var {
|
|
103
|
+
'data-testid': dataTestId
|
|
104
|
+
} = this.props;
|
|
105
|
+
var {
|
|
106
|
+
actions,
|
|
107
|
+
top,
|
|
108
|
+
left
|
|
109
|
+
} = this.state;
|
|
110
|
+
if (actions) {
|
|
111
|
+
menu = /*#__PURE__*/React.createElement(ContextMenu, {
|
|
112
|
+
ref: this.openMenu,
|
|
113
|
+
actions: actions,
|
|
114
|
+
onMenuClosed: this.handleMenuClose,
|
|
115
|
+
top: top,
|
|
116
|
+
left: left,
|
|
117
|
+
updatePosition: (verifiedTop, verifiedLeft) => {
|
|
118
|
+
this.setState({
|
|
119
|
+
top: verifiedTop,
|
|
120
|
+
left: verifiedLeft
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
"data-testid": dataTestId
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
127
|
+
className: classNames('context-menu-root', {
|
|
128
|
+
active: actions
|
|
129
|
+
}),
|
|
130
|
+
ref: this.container
|
|
131
|
+
}, menu);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export default ContextMenuRoot;
|
|
135
|
+
//# sourceMappingURL=ContextMenuRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextMenuRoot.js","names":["React","Component","classNames","ContextMenu","ContextActionUtils","ContextMenuRoot","constructor","props","handleMenuClose","bind","handleContextMenu","container","createRef","openMenu","state","actions","left","top","componentDidMount","current","parentElement","addEventListener","componentWillUnmount","removeEventListener","e","isContextActionEvent","metaKey","ctrlKey","contextActions","getMenuItems","parentRect","getBoundingClientRect","clientY","clientX","length","target","preventDefault","setState","element","document","elementFromPoint","mouseEvent","MouseEvent","bubbles","cancelable","dispatchEvent","menu","render","dataTestId","verifiedTop","verifiedLeft","active"],"sources":["../../src/context-actions/ContextMenuRoot.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport ContextMenu from './ContextMenu';\nimport ContextActionUtils, { MenuItem } from './ContextActionUtils';\n\ntype ContextMenuRootProps = Record<string, never> & {\n 'data-testid'?: string;\n};\n\ninterface ContextMenuRootState {\n actions: MenuItem[] | null;\n left: number;\n top: number;\n}\n\n/**\n * Put at your root container, any contextmenu events that are unhandled in the root container will be handled by this\n */\nclass ContextMenuRoot extends Component<\n ContextMenuRootProps,\n ContextMenuRootState\n> {\n constructor(props: ContextMenuRootProps) {\n super(props);\n\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.container = React.createRef();\n this.openMenu = React.createRef();\n\n this.state = {\n actions: null,\n left: 0,\n top: 0,\n };\n }\n\n componentDidMount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.addEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n }\n }\n\n componentWillUnmount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.removeEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n openMenu: React.RefObject<ContextMenu>;\n\n handleContextMenu(e: MouseEvent): void {\n if (!ContextActionUtils.isContextActionEvent(e)) {\n return;\n }\n\n if (!this.container.current) {\n return;\n }\n\n if (e.metaKey || e.ctrlKey) {\n // debug escape hatch to native menu\n return;\n }\n\n const contextActions = ContextActionUtils.getMenuItems(e.contextActions);\n\n const parentRect = this.container.current.getBoundingClientRect();\n const top = e.clientY - parentRect.top;\n const left = e.clientX - parentRect.left;\n\n if (contextActions.length === 0) {\n // This code path seems to only exist for Chrome on Mac\n // Mac appears to trigger contextmenu events on mousedown vs. mouseup on Windows\n // Mouseup on Windows triggers blur before contextmenu which effectively does what this path does\n if (e.target === this.container.current) {\n // re-emit right clicks that hit the context-root blocking layer\n e.preventDefault();\n\n // Set actions to null removes the menu\n // That allows a new menu to be opened on a different element so initial position is set properly\n // Otherwise the instance of this menu may be reused\n // A new contextmenu event is triggered on the element at the location the user clicked on the blocking layer\n this.setState({ actions: null }, () => {\n const element = document.elementFromPoint(left, top); // x y\n\n const mouseEvent = new MouseEvent('contextmenu', {\n clientX: e.clientX,\n clientY: e.clientY,\n bubbles: true,\n cancelable: true,\n });\n\n element?.dispatchEvent(mouseEvent);\n });\n return;\n }\n\n // target was a menu item\n return;\n }\n\n // new clicks, set actions\n e.preventDefault();\n this.setState({\n actions: contextActions,\n top,\n left,\n });\n }\n\n handleMenuClose(menu: ContextMenu): void {\n if (menu === this.openMenu.current) {\n this.setState({ actions: null });\n }\n }\n\n render(): JSX.Element {\n let menu = null;\n const { 'data-testid': dataTestId } = this.props;\n const { actions, top, left } = this.state;\n if (actions) {\n menu = (\n <ContextMenu\n ref={this.openMenu}\n actions={actions}\n onMenuClosed={this.handleMenuClose}\n top={top}\n left={left}\n updatePosition={(verifiedTop, verifiedLeft) => {\n this.setState({ top: verifiedTop, left: verifiedLeft });\n }}\n data-testid={dataTestId}\n />\n );\n }\n return (\n <div\n className={classNames('context-menu-root', { active: actions })}\n ref={this.container}\n >\n {menu}\n </div>\n );\n }\n}\n\nexport default ContextMenuRoot;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Component } from 'react';
|
|
2
|
+
import Log from '@deephaven/log';
|
|
3
|
+
import ContextActionUtils from "./ContextActionUtils.js";
|
|
4
|
+
var log = Log.module('GlobalContextAction');
|
|
5
|
+
class GlobalContextAction extends Component {
|
|
6
|
+
constructor(props) {
|
|
7
|
+
super(props);
|
|
8
|
+
this.handleContextMenu = this.handleContextMenu.bind(this);
|
|
9
|
+
this.handleKeyDown = this.handleKeyDown.bind(this);
|
|
10
|
+
}
|
|
11
|
+
componentDidMount() {
|
|
12
|
+
document.body.addEventListener('contextmenu', this.handleContextMenu);
|
|
13
|
+
document.body.addEventListener('keydown', this.handleKeyDown);
|
|
14
|
+
}
|
|
15
|
+
componentWillUnmount() {
|
|
16
|
+
document.body.removeEventListener('contextmenu', this.handleContextMenu);
|
|
17
|
+
document.body.removeEventListener('keydown', this.handleKeyDown);
|
|
18
|
+
}
|
|
19
|
+
handleContextMenu(evt) {
|
|
20
|
+
var e = evt;
|
|
21
|
+
if (e.contextActions == null) {
|
|
22
|
+
e.contextActions = [];
|
|
23
|
+
}
|
|
24
|
+
var {
|
|
25
|
+
action
|
|
26
|
+
} = this.props;
|
|
27
|
+
if (action.title == null && !action.menuElement) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (e.contextActions == null) {
|
|
31
|
+
e.contextActions = [];
|
|
32
|
+
}
|
|
33
|
+
e.contextActions.push(action);
|
|
34
|
+
log.debug('Received context menu event at global action! Menu items are now: ', e.contextActions);
|
|
35
|
+
}
|
|
36
|
+
handleKeyDown(e) {
|
|
37
|
+
var {
|
|
38
|
+
action
|
|
39
|
+
} = this.props;
|
|
40
|
+
if (!ContextActionUtils.actionsDisabled && action.shortcut !== undefined && action.shortcut.matchesEvent(e)) {
|
|
41
|
+
var _action$action;
|
|
42
|
+
log.debug('Global hotkey matched!', e);
|
|
43
|
+
(_action$action = action.action) === null || _action$action === void 0 ? void 0 : _action$action.call(action, e);
|
|
44
|
+
e.preventDefault();
|
|
45
|
+
e.stopPropagation();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
render() {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export default GlobalContextAction;
|
|
53
|
+
//# sourceMappingURL=GlobalContextAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalContextAction.js","names":["Component","Log","ContextActionUtils","log","module","GlobalContextAction","constructor","props","handleContextMenu","bind","handleKeyDown","componentDidMount","document","body","addEventListener","componentWillUnmount","removeEventListener","evt","e","contextActions","action","title","menuElement","push","debug","actionsDisabled","shortcut","undefined","matchesEvent","preventDefault","stopPropagation","render"],"sources":["../../src/context-actions/GlobalContextAction.tsx"],"sourcesContent":["import { Component } from 'react';\nimport Log from '@deephaven/log';\nimport ContextActionUtils from './ContextActionUtils';\nimport type { ContextAction, ContextActionEvent } from './ContextActionUtils';\n\nconst log = Log.module('GlobalContextAction');\n\ninterface GlobalContextActionProps {\n action: ContextAction;\n}\n\nclass GlobalContextAction extends Component<GlobalContextActionProps> {\n constructor(props: GlobalContextActionProps) {\n super(props);\n\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n componentDidMount(): void {\n document.body.addEventListener('contextmenu', this.handleContextMenu);\n document.body.addEventListener('keydown', this.handleKeyDown);\n }\n\n componentWillUnmount(): void {\n document.body.removeEventListener('contextmenu', this.handleContextMenu);\n document.body.removeEventListener('keydown', this.handleKeyDown);\n }\n\n handleContextMenu(evt: MouseEvent): void {\n const e = evt as ContextActionEvent;\n if (e.contextActions == null) {\n e.contextActions = [];\n }\n\n const { action } = this.props;\n\n if (action.title == null && !action.menuElement) {\n return;\n }\n\n if (e.contextActions == null) {\n e.contextActions = [];\n }\n\n e.contextActions.push(action);\n\n log.debug(\n 'Received context menu event at global action! Menu items are now: ',\n e.contextActions\n );\n }\n\n handleKeyDown(e: KeyboardEvent): void {\n const { action } = this.props;\n if (\n !ContextActionUtils.actionsDisabled &&\n action.shortcut !== undefined &&\n action.shortcut.matchesEvent(e)\n ) {\n log.debug('Global hotkey matched!', e);\n\n action.action?.(e);\n\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default GlobalContextAction;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,kBAAkB;AAGzB,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAM,CAAC,qBAAqB,CAAC;AAM7C,MAAMC,mBAAmB,SAASL,SAAS,CAA2B;EACpEM,WAAW,CAACC,KAA+B,EAAE;IAC3C,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACC,aAAa,GAAG,IAAI,CAACA,aAAa,CAACD,IAAI,CAAC,IAAI,CAAC;EACpD;EAEAE,iBAAiB,GAAS;IACxBC,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAACN,iBAAiB,CAAC;IACrEI,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACJ,aAAa,CAAC;EAC/D;EAEAK,oBAAoB,GAAS;IAC3BH,QAAQ,CAACC,IAAI,CAACG,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAACR,iBAAiB,CAAC;IACxEI,QAAQ,CAACC,IAAI,CAACG,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACN,aAAa,CAAC;EAClE;EAEAF,iBAAiB,CAACS,GAAe,EAAQ;IACvC,IAAMC,CAAC,GAAGD,GAAyB;IACnC,IAAIC,CAAC,CAACC,cAAc,IAAI,IAAI,EAAE;MAC5BD,CAAC,CAACC,cAAc,GAAG,EAAE;IACvB;IAEA,IAAM;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACb,KAAK;IAE7B,IAAIa,MAAM,CAACC,KAAK,IAAI,IAAI,IAAI,CAACD,MAAM,CAACE,WAAW,EAAE;MAC/C;IACF;IAEA,IAAIJ,CAAC,CAACC,cAAc,IAAI,IAAI,EAAE;MAC5BD,CAAC,CAACC,cAAc,GAAG,EAAE;IACvB;IAEAD,CAAC,CAACC,cAAc,CAACI,IAAI,CAACH,MAAM,CAAC;IAE7BjB,GAAG,CAACqB,KAAK,CACP,oEAAoE,EACpEN,CAAC,CAACC,cAAc,CACjB;EACH;EAEAT,aAAa,CAACQ,CAAgB,EAAQ;IACpC,IAAM;MAAEE;IAAO,CAAC,GAAG,IAAI,CAACb,KAAK;IAC7B,IACE,CAACL,kBAAkB,CAACuB,eAAe,IACnCL,MAAM,CAACM,QAAQ,KAAKC,SAAS,IAC7BP,MAAM,CAACM,QAAQ,CAACE,YAAY,CAACV,CAAC,CAAC,EAC/B;MAAA;MACAf,GAAG,CAACqB,KAAK,CAAC,wBAAwB,EAAEN,CAAC,CAAC;MAEtC,kBAAAE,MAAM,CAACA,MAAM,mDAAb,oBAAAA,MAAM,EAAUF,CAAC,CAAC;MAElBA,CAAC,CAACW,cAAc,EAAE;MAClBX,CAAC,CAACY,eAAe,EAAE;IACrB;EACF;EAEAC,MAAM,GAAS;IACb,OAAO,IAAI;EACb;AACF;AAEA,eAAe1B,mBAAmB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
import GlobalContextAction from "./GlobalContextAction.js";
|
|
3
|
+
class GlobalContextActions extends Component {
|
|
4
|
+
render() {
|
|
5
|
+
var {
|
|
6
|
+
actions,
|
|
7
|
+
'data-testid': dataTestId
|
|
8
|
+
} = this.props;
|
|
9
|
+
var actionElements = [];
|
|
10
|
+
for (var i = 0; i < actions.length; i += 1) {
|
|
11
|
+
var action = actions[i];
|
|
12
|
+
var {
|
|
13
|
+
shortcut
|
|
14
|
+
} = action;
|
|
15
|
+
if (action.title != null || action.menuElement || shortcut) {
|
|
16
|
+
var actionElement = /*#__PURE__*/React.createElement(GlobalContextAction, {
|
|
17
|
+
key: "".concat(action.title, ".").concat(shortcut === null || shortcut === void 0 ? void 0 : shortcut.id),
|
|
18
|
+
action: action,
|
|
19
|
+
"data-testid": dataTestId
|
|
20
|
+
});
|
|
21
|
+
actionElements.push(actionElement);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return actionElements;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export default GlobalContextActions;
|
|
28
|
+
//# sourceMappingURL=GlobalContextActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalContextActions.js","names":["React","Component","GlobalContextAction","GlobalContextActions","render","actions","dataTestId","props","actionElements","i","length","action","shortcut","title","menuElement","actionElement","id","push"],"sources":["../../src/context-actions/GlobalContextActions.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport GlobalContextAction from './GlobalContextAction';\nimport type { ContextAction } from './ContextActionUtils';\n\ninterface GlobalContextActionsProps {\n actions: ContextAction[];\n 'data-testid'?: string;\n}\n\nclass GlobalContextActions extends Component<GlobalContextActionsProps> {\n render(): React.ReactNode {\n const { actions, 'data-testid': dataTestId } = this.props;\n const actionElements = [];\n for (let i = 0; i < actions.length; i += 1) {\n const action = actions[i];\n const { shortcut } = action;\n if (action.title != null || action.menuElement || shortcut) {\n const actionElement = (\n <GlobalContextAction\n key={`${action.title}.${shortcut?.id}`}\n action={action}\n data-testid={dataTestId}\n />\n );\n actionElements.push(actionElement);\n }\n }\n return actionElements;\n }\n}\n\nexport default GlobalContextActions;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AAAC,OAClCC,mBAAmB;AAQ1B,MAAMC,oBAAoB,SAASF,SAAS,CAA4B;EACtEG,MAAM,GAAoB;IACxB,IAAM;MAAEC,OAAO;MAAE,aAAa,EAAEC;IAAW,CAAC,GAAG,IAAI,CAACC,KAAK;IACzD,IAAMC,cAAc,GAAG,EAAE;IACzB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,OAAO,CAACK,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MAC1C,IAAME,MAAM,GAAGN,OAAO,CAACI,CAAC,CAAC;MACzB,IAAM;QAAEG;MAAS,CAAC,GAAGD,MAAM;MAC3B,IAAIA,MAAM,CAACE,KAAK,IAAI,IAAI,IAAIF,MAAM,CAACG,WAAW,IAAIF,QAAQ,EAAE;QAC1D,IAAMG,aAAa,gBACjB,oBAAC,mBAAmB;UAClB,GAAG,YAAKJ,MAAM,CAACE,KAAK,cAAID,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEI,EAAE,CAAG;UACvC,MAAM,EAAEL,MAAO;UACf,eAAaL;QAAW,EAE3B;QACDE,cAAc,CAACS,IAAI,CAACF,aAAa,CAAC;MACpC;IACF;IACA,OAAOP,cAAc;EACvB;AACF;AAEA,eAAeL,oBAAoB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as ContextActions } from "./ContextActions.js";
|
|
2
|
+
export { default as ContextActionUtils } from "./ContextActionUtils.js";
|
|
3
|
+
export { default as ContextMenuItem } from "./ContextMenuItem.js";
|
|
4
|
+
export { default as ContextMenuRoot } from "./ContextMenuRoot.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","ContextActions","ContextActionUtils","ContextMenuItem","ContextMenuRoot"],"sources":["../../src/context-actions/index.ts"],"sourcesContent":["export { default as ContextActions } from './ContextActions';\nexport { default as ContextActionUtils } from './ContextActionUtils';\nexport type { ContextAction } from './ContextActionUtils';\nexport { default as ContextMenuItem } from './ContextMenuItem';\nexport { default as ContextMenuRoot } from './ContextMenuRoot';\nexport type { ResolvableContextAction } from './ContextActionUtils';\n"],"mappings":"SAASA,OAAO,IAAIC,cAAc;AAAA,SACzBD,OAAO,IAAIE,kBAAkB;AAAA,SAE7BF,OAAO,IAAIG,eAAe;AAAA,SAC1BH,OAAO,IAAII,eAAe"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declaration.d.js","names":[],"sources":["../src/declaration.d.ts"],"sourcesContent":["declare module '*.module.scss' {\n const content: Record<string, string>;\n export default content;\n}\n\ndeclare module '*.scss';\n"],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export { default as AutoCompleteInput } from "./AutoCompleteInput.js";
|
|
2
|
+
export { default as AutoResizeTextarea } from "./AutoResizeTextarea.js";
|
|
3
|
+
export { default as BasicModal } from "./BasicModal.js";
|
|
4
|
+
export { default as Button } from "./Button.js";
|
|
5
|
+
export { default as ButtonGroup } from "./ButtonGroup.js";
|
|
6
|
+
export { default as ButtonOld } from "./ButtonOld.js";
|
|
7
|
+
export { default as CardFlip } from "./CardFlip.js";
|
|
8
|
+
export * from "./context-actions/index.js";
|
|
9
|
+
export { default as Collapse } from "./Collapse.js";
|
|
10
|
+
export { default as Checkbox } from "./Checkbox.js";
|
|
11
|
+
export { default as ComboBox } from "./ComboBox.js";
|
|
12
|
+
export { default as CopyButton } from "./CopyButton.js";
|
|
13
|
+
export { default as CustomTimeSelect } from "./CustomTimeSelect.js";
|
|
14
|
+
export { default as DateTimeInput } from "./DateTimeInput.js";
|
|
15
|
+
export { default as DateInput } from "./DateInput.js";
|
|
16
|
+
export { default as DebouncedSearchInput } from "./DebouncedSearchInput.js";
|
|
17
|
+
export { default as DraggableItemList } from "./DraggableItemList.js";
|
|
18
|
+
export * from "./DraggableItemList.js";
|
|
19
|
+
export { default as DragUtils } from "./DragUtils.js";
|
|
20
|
+
export { default as EditableItemList } from "./EditableItemList.js";
|
|
21
|
+
export { default as HierarchicalCheckboxMenu } from "./HierarchicalCheckboxMenu.js";
|
|
22
|
+
export * from "./HierarchicalCheckboxMenu.js";
|
|
23
|
+
export * from "./ItemList.js";
|
|
24
|
+
export { default as ItemListItem } from "./ItemListItem.js";
|
|
25
|
+
export { default as LoadingOverlay } from "./LoadingOverlay.js";
|
|
26
|
+
export { default as LoadingSpinner } from "./LoadingSpinner.js";
|
|
27
|
+
export { default as DropdownMenu } from "./menu-actions/index.js";
|
|
28
|
+
export * from "./menu-actions/index.js";
|
|
29
|
+
export { default as MaskedInput } from "./MaskedInput.js";
|
|
30
|
+
export * from "./MaskedInput.js";
|
|
31
|
+
export * from "./MaskedInputUtils.js";
|
|
32
|
+
export * from "./navigation/index.js";
|
|
33
|
+
export { default as Option } from "./Option.js";
|
|
34
|
+
export * from "./popper/index.js";
|
|
35
|
+
export * from "./modal/index.js";
|
|
36
|
+
export { default as RadioGroup } from "./RadioGroup.js";
|
|
37
|
+
export { default as RadioItem } from "./RadioItem.js";
|
|
38
|
+
export { default as RandomAreaPlotAnimation } from "./RandomAreaPlotAnimation.js";
|
|
39
|
+
export { default as Select } from "./Select.js";
|
|
40
|
+
export { default as SearchInput } from "./SearchInput.js";
|
|
41
|
+
export { default as SelectValueList } from "./SelectValueList.js";
|
|
42
|
+
export * from "./SelectValueList.js";
|
|
43
|
+
export * from "./shortcuts/index.js";
|
|
44
|
+
export { default as SocketedButton } from "./SocketedButton.js";
|
|
45
|
+
export * from "./SpectrumUtils.js";
|
|
46
|
+
export { default as ThemeExport } from "./ThemeExport.js";
|
|
47
|
+
export { default as TimeInput } from "./TimeInput.js";
|
|
48
|
+
export { default as TimeSlider } from "./TimeSlider.js";
|
|
49
|
+
export { default as ToastNotification } from "./ToastNotification.js";
|
|
50
|
+
export { default as UISwitch } from "./UISwitch.js";
|
|
51
|
+
export { default as ValidateLabelInput } from "./ValidateLabelInput.js";
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","AutoCompleteInput","AutoResizeTextarea","BasicModal","Button","ButtonGroup","ButtonOld","CardFlip","Collapse","Checkbox","ComboBox","CopyButton","CustomTimeSelect","DateTimeInput","DateInput","DebouncedSearchInput","DraggableItemList","DragUtils","EditableItemList","HierarchicalCheckboxMenu","ItemListItem","LoadingOverlay","LoadingSpinner","DropdownMenu","MaskedInput","Option","RadioGroup","RadioItem","RandomAreaPlotAnimation","Select","SearchInput","SelectValueList","SocketedButton","ThemeExport","TimeInput","TimeSlider","ToastNotification","UISwitch","ValidateLabelInput"],"sources":["../src/index.ts"],"sourcesContent":["export type { Range } from '@deephaven/utils';\nexport { default as AutoCompleteInput } from './AutoCompleteInput';\nexport { default as AutoResizeTextarea } from './AutoResizeTextarea';\nexport { default as BasicModal } from './BasicModal';\nexport { default as Button } from './Button';\nexport { default as ButtonGroup } from './ButtonGroup';\nexport { default as ButtonOld } from './ButtonOld';\nexport { default as CardFlip } from './CardFlip';\nexport * from './context-actions';\nexport { default as Collapse } from './Collapse';\nexport { default as Checkbox } from './Checkbox';\nexport { default as ComboBox } from './ComboBox';\nexport { default as CopyButton } from './CopyButton';\nexport { default as CustomTimeSelect } from './CustomTimeSelect';\nexport { default as DateTimeInput } from './DateTimeInput';\nexport { default as DateInput } from './DateInput';\nexport { default as DebouncedSearchInput } from './DebouncedSearchInput';\nexport { default as DraggableItemList } from './DraggableItemList';\nexport * from './DraggableItemList';\nexport { default as DragUtils } from './DragUtils';\nexport { default as EditableItemList } from './EditableItemList';\nexport { default as HierarchicalCheckboxMenu } from './HierarchicalCheckboxMenu';\nexport * from './HierarchicalCheckboxMenu';\nexport * from './ItemList';\nexport { default as ItemListItem } from './ItemListItem';\nexport { default as LoadingOverlay } from './LoadingOverlay';\nexport { default as LoadingSpinner } from './LoadingSpinner';\nexport { default as DropdownMenu } from './menu-actions';\nexport * from './menu-actions';\nexport { default as MaskedInput } from './MaskedInput';\nexport * from './MaskedInput';\nexport * from './MaskedInputUtils';\nexport * from './navigation';\nexport { default as Option } from './Option';\nexport * from './popper';\nexport * from './modal';\nexport { default as RadioGroup } from './RadioGroup';\nexport { default as RadioItem } from './RadioItem';\nexport { default as RandomAreaPlotAnimation } from './RandomAreaPlotAnimation';\nexport { default as Select } from './Select';\nexport { default as SearchInput } from './SearchInput';\nexport { default as SelectValueList } from './SelectValueList';\nexport * from './SelectValueList';\nexport * from './shortcuts';\nexport { default as SocketedButton } from './SocketedButton';\nexport * from './SpectrumUtils';\nexport { default as ThemeExport } from './ThemeExport';\nexport { default as TimeInput } from './TimeInput';\nexport { default as TimeSlider } from './TimeSlider';\nexport { default as ToastNotification } from './ToastNotification';\nexport { default as UISwitch } from './UISwitch';\nexport { default as ValidateLabelInput } from './ValidateLabelInput';\n"],"mappings":"SACSA,OAAO,IAAIC,iBAAiB;AAAA,SAC5BD,OAAO,IAAIE,kBAAkB;AAAA,SAC7BF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,MAAM;AAAA,SACjBJ,OAAO,IAAIK,WAAW;AAAA,SACtBL,OAAO,IAAIM,SAAS;AAAA,SACpBN,OAAO,IAAIO,QAAQ;AAAA;AAAA,SAEnBP,OAAO,IAAIQ,QAAQ;AAAA,SACnBR,OAAO,IAAIS,QAAQ;AAAA,SACnBT,OAAO,IAAIU,QAAQ;AAAA,SACnBV,OAAO,IAAIW,UAAU;AAAA,SACrBX,OAAO,IAAIY,gBAAgB;AAAA,SAC3BZ,OAAO,IAAIa,aAAa;AAAA,SACxBb,OAAO,IAAIc,SAAS;AAAA,SACpBd,OAAO,IAAIe,oBAAoB;AAAA,SAC/Bf,OAAO,IAAIgB,iBAAiB;AAAA;AAAA,SAE5BhB,OAAO,IAAIiB,SAAS;AAAA,SACpBjB,OAAO,IAAIkB,gBAAgB;AAAA,SAC3BlB,OAAO,IAAImB,wBAAwB;AAAA;AAAA;AAAA,SAGnCnB,OAAO,IAAIoB,YAAY;AAAA,SACvBpB,OAAO,IAAIqB,cAAc;AAAA,SACzBrB,OAAO,IAAIsB,cAAc;AAAA,SACzBtB,OAAO,IAAIuB,YAAY;AAAA;AAAA,SAEvBvB,OAAO,IAAIwB,WAAW;AAAA;AAAA;AAAA;AAAA,SAItBxB,OAAO,IAAIyB,MAAM;AAAA;AAAA;AAAA,SAGjBzB,OAAO,IAAI0B,UAAU;AAAA,SACrB1B,OAAO,IAAI2B,SAAS;AAAA,SACpB3B,OAAO,IAAI4B,uBAAuB;AAAA,SAClC5B,OAAO,IAAI6B,MAAM;AAAA,SACjB7B,OAAO,IAAI8B,WAAW;AAAA,SACtB9B,OAAO,IAAI+B,eAAe;AAAA;AAAA;AAAA,SAG1B/B,OAAO,IAAIgC,cAAc;AAAA;AAAA,SAEzBhC,OAAO,IAAIiC,WAAW;AAAA,SACtBjC,OAAO,IAAIkC,SAAS;AAAA,SACpBlC,OAAO,IAAImC,UAAU;AAAA,SACrBnC,OAAO,IAAIoC,iBAAiB;AAAA,SAC5BpC,OAAO,IAAIqC,QAAQ;AAAA,SACnBrC,OAAO,IAAIsC,kBAAkB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* stylelint-disable scss/at-import-no-partial-leading-underscore */
|
|
2
|
+
.menu-actions-listener {
|
|
3
|
+
display: none;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.popper-container[x-placement^=top] .context-menu-container {
|
|
7
|
+
margin-bottom: 5px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.popper-container[x-placement^=right] .context-menu-container {
|
|
11
|
+
margin-left: 5px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.popper-container[x-placement^=bottom] .context-menu-container {
|
|
15
|
+
margin-top: 5px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.popper-container[x-placement^=left] .context-menu-container {
|
|
19
|
+
margin-right: 5px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.menu-popper {
|
|
23
|
+
padding: 0;
|
|
24
|
+
}
|
|
25
|
+
.menu-popper .popper-content .context-menu-container {
|
|
26
|
+
background-color: #403e41;
|
|
27
|
+
position: relative;
|
|
28
|
+
box-shadow: none;
|
|
29
|
+
max-height: 80vh;
|
|
30
|
+
overflow: auto;
|
|
31
|
+
}
|
|
32
|
+
.menu-popper .popper-content .context-menu-container .context-menu-container {
|
|
33
|
+
position: absolute;
|
|
34
|
+
}
|
|
35
|
+
.menu-popper .popper-content .popper-arrow {
|
|
36
|
+
border-color: #403e41;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/*# sourceMappingURL=DropdownMenu.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../scss/custom.scss","../../src/menu-actions/DropdownMenu.scss","../../scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACKA;EACE;;;AAGF;EACE,eARY;;;AAWd;EACE,aAZY;;;AAed;EACE,YAhBY;;;AAmBd;EACE,cApBY;;;AAuBd;EACE;;AAEE;EACE,kBCLK;EDML;EACA;EACA,YA7BoB;EA8BpB;;AAEA;EACE;;AAGJ;EACE,cChBK","file":"DropdownMenu.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$menu-bg: $gray-700;\n$arrow-width: 5px;\n$dropdownmenu-max-height: 80vh;\n\n.menu-actions-listener {\n display: none;\n}\n\n.popper-container[x-placement^='top'] .context-menu-container {\n margin-bottom: $arrow-width;\n}\n\n.popper-container[x-placement^='right'] .context-menu-container {\n margin-left: $arrow-width;\n}\n\n.popper-container[x-placement^='bottom'] .context-menu-container {\n margin-top: $arrow-width;\n}\n\n.popper-container[x-placement^='left'] .context-menu-container {\n margin-right: $arrow-width;\n}\n\n.menu-popper {\n padding: 0;\n .popper-content {\n .context-menu-container {\n background-color: $menu-bg;\n position: relative;\n box-shadow: none;\n max-height: $dropdownmenu-max-height;\n overflow: auto;\n\n .context-menu-container {\n position: absolute;\n }\n }\n .popper-arrow {\n border-color: $menu-bg;\n }\n }\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif: 'Fira Sans', -apple-system, blinkmacsystemfont,\n 'Segoe UI', 'Roboto', 'Helvetica Neue', arial, sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition: color 0.12s ease-in-out, background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out, box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: theme-color('danger');\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n"]}
|