@imposium-hub/components 2.2.38 → 2.2.39
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/cjs/components/context-menu/AnimateComponent.d.ts +8 -0
- package/dist/cjs/components/context-menu/AnimateComponent.js +14 -0
- package/dist/cjs/components/context-menu/AnimateComponent.js.map +1 -0
- package/dist/cjs/components/context-menu/ContextMenu.d.ts +29 -0
- package/dist/cjs/components/context-menu/ContextMenu.js +168 -0
- package/dist/cjs/components/context-menu/ContextMenu.js.map +1 -0
- package/dist/cjs/components/context-menu/ContextMenuItem.d.ts +20 -0
- package/dist/cjs/components/context-menu/ContextMenuItem.js +60 -0
- package/dist/cjs/components/context-menu/ContextMenuItem.js.map +1 -0
- package/dist/cjs/components/context-menu/ContextMenuTrigger.d.ts +18 -0
- package/dist/cjs/components/context-menu/ContextMenuTrigger.js +71 -0
- package/dist/cjs/components/context-menu/ContextMenuTrigger.js.map +1 -0
- package/dist/cjs/components/context-menu/SubMenu.d.ts +14 -0
- package/dist/cjs/components/context-menu/SubMenu.js +97 -0
- package/dist/cjs/components/context-menu/SubMenu.js.map +1 -0
- package/dist/cjs/components/context-menu/helper.d.ts +2 -0
- package/dist/cjs/components/context-menu/helper.js +31 -0
- package/dist/cjs/components/context-menu/helper.js.map +1 -0
- package/dist/cjs/components/context-menu/registerEvent.d.ts +4 -0
- package/dist/cjs/components/context-menu/registerEvent.js +46 -0
- package/dist/cjs/components/context-menu/registerEvent.js.map +1 -0
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/index.js +9 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/context-menu/AnimateComponent.d.ts +8 -0
- package/dist/esm/components/context-menu/AnimateComponent.js +8 -0
- package/dist/esm/components/context-menu/AnimateComponent.js.map +1 -0
- package/dist/esm/components/context-menu/ContextMenu.d.ts +29 -0
- package/dist/esm/components/context-menu/ContextMenu.js +108 -0
- package/dist/esm/components/context-menu/ContextMenu.js.map +1 -0
- package/dist/esm/components/context-menu/ContextMenuItem.d.ts +20 -0
- package/dist/esm/components/context-menu/ContextMenuItem.js +23 -0
- package/dist/esm/components/context-menu/ContextMenuItem.js.map +1 -0
- package/dist/esm/components/context-menu/ContextMenuTrigger.d.ts +18 -0
- package/dist/esm/components/context-menu/ContextMenuTrigger.js +34 -0
- package/dist/esm/components/context-menu/ContextMenuTrigger.js.map +1 -0
- package/dist/esm/components/context-menu/SubMenu.d.ts +14 -0
- package/dist/esm/components/context-menu/SubMenu.js +41 -0
- package/dist/esm/components/context-menu/SubMenu.js.map +1 -0
- package/dist/esm/components/context-menu/helper.d.ts +2 -0
- package/dist/esm/components/context-menu/helper.js +22 -0
- package/dist/esm/components/context-menu/helper.js.map +1 -0
- package/dist/esm/components/context-menu/registerEvent.d.ts +4 -0
- package/dist/esm/components/context-menu/registerEvent.js +41 -0
- package/dist/esm/components/context-menu/registerEvent.js.map +1 -0
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/styles.css +141 -0
- package/dist/styles.less +145 -0
- package/less/components/context-menu.less +145 -0
- package/less/entry.less +2 -1
- package/package.json +3 -2
- package/src/components/context-menu/AnimateComponent.tsx +19 -0
- package/src/components/context-menu/ContextMenu.tsx +172 -0
- package/src/components/context-menu/ContextMenuItem.tsx +34 -0
- package/src/components/context-menu/ContextMenuTrigger.tsx +47 -0
- package/src/components/context-menu/SubMenu.tsx +70 -0
- package/src/components/context-menu/helper.ts +21 -0
- package/src/components/context-menu/registerEvent.ts +46 -0
- package/src/index.ts +9 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React, { useRef, useCallback } from 'react';
|
|
2
|
+
import { callShowEvent, callHideEvent } from './registerEvent';
|
|
3
|
+
|
|
4
|
+
const ContextMenuTrigger = ({ children, id, disableWhileShiftPressed, attributes, disable }) => {
|
|
5
|
+
const menuTrigger = useRef(null);
|
|
6
|
+
|
|
7
|
+
const handleContextMenu = useCallback((e) => {
|
|
8
|
+
if (disable) return;
|
|
9
|
+
if (disableWhileShiftPressed && e.nativeEvent.shiftKey) {
|
|
10
|
+
callHideEvent(id);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
e.preventDefault();
|
|
14
|
+
e.stopPropagation();
|
|
15
|
+
|
|
16
|
+
const { clientX, clientY } = e.nativeEvent;
|
|
17
|
+
const opts = {
|
|
18
|
+
position: {
|
|
19
|
+
clientY,
|
|
20
|
+
clientX
|
|
21
|
+
},
|
|
22
|
+
id
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
callShowEvent(opts);
|
|
26
|
+
}, []);
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<div
|
|
30
|
+
className='menu-trigger'
|
|
31
|
+
ref={menuTrigger}
|
|
32
|
+
{...attributes}
|
|
33
|
+
onContextMenu={(e) => handleContextMenu(e)}>
|
|
34
|
+
{children}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export default ContextMenuTrigger;
|
|
40
|
+
|
|
41
|
+
ContextMenuTrigger.defaultProps = {
|
|
42
|
+
attributes: {},
|
|
43
|
+
disable: false,
|
|
44
|
+
renderTag: 'div',
|
|
45
|
+
disableWhileShiftPressed: false,
|
|
46
|
+
className: ''
|
|
47
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import React, { useCallback, useState, useRef } from 'react';
|
|
2
|
+
import ContextMenuItem from './ContextMenuItem';
|
|
3
|
+
|
|
4
|
+
const Submenu = ({ children, title, attributes, className }) => {
|
|
5
|
+
const [submenuStyle, setSubmenuStyle] = useState(null);
|
|
6
|
+
const submenuEl = useRef(null);
|
|
7
|
+
const submenuItem = useRef(null);
|
|
8
|
+
|
|
9
|
+
const calculateSubmenuPos = useCallback(() => {
|
|
10
|
+
const { innerHeight: windowInnerHeight, innerWidth: windowInnerWidth } = window;
|
|
11
|
+
const {
|
|
12
|
+
left: itemLeft,
|
|
13
|
+
top: itemTop,
|
|
14
|
+
width: itemWidth,
|
|
15
|
+
height: itemHeight
|
|
16
|
+
} = submenuItem.current.getBoundingClientRect();
|
|
17
|
+
const { width: submenuWidth, height: submenuHeight } =
|
|
18
|
+
submenuEl.current.getBoundingClientRect();
|
|
19
|
+
const style = {
|
|
20
|
+
opacity: 1,
|
|
21
|
+
visibility: 'visible'
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
if (itemTop + submenuHeight + itemHeight > windowInnerHeight) {
|
|
25
|
+
style['top'] = 'inherit';
|
|
26
|
+
style['bottom'] = '0';
|
|
27
|
+
}
|
|
28
|
+
if (itemLeft + submenuWidth + itemWidth > windowInnerWidth) {
|
|
29
|
+
style['left'] = 'inherit';
|
|
30
|
+
style['right'] = '100%';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
setSubmenuStyle(style);
|
|
34
|
+
}, []);
|
|
35
|
+
|
|
36
|
+
const hideSubmenu = useCallback(() => {
|
|
37
|
+
const style = {
|
|
38
|
+
opacity: 0,
|
|
39
|
+
visibility: 'hidden'
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
setSubmenuStyle(style);
|
|
43
|
+
}, []);
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<div
|
|
47
|
+
className='submenu'
|
|
48
|
+
onMouseOver={() => calculateSubmenuPos()}
|
|
49
|
+
onMouseOut={() => hideSubmenu()}
|
|
50
|
+
onFocus={() => null}
|
|
51
|
+
onBlur={() => null}
|
|
52
|
+
ref={submenuItem}
|
|
53
|
+
{...attributes}>
|
|
54
|
+
<ContextMenuItem>{title}</ContextMenuItem>
|
|
55
|
+
<div
|
|
56
|
+
className='submenu__item'
|
|
57
|
+
ref={submenuEl}
|
|
58
|
+
style={submenuStyle}>
|
|
59
|
+
{children}
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default Submenu;
|
|
66
|
+
|
|
67
|
+
Submenu.defaultProps = {
|
|
68
|
+
title: 'Sub Menu',
|
|
69
|
+
className: ''
|
|
70
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const uniqueId = () => `_${Math.random().toString(36).substr(2, 9)}`;
|
|
2
|
+
|
|
3
|
+
export const throttle = (func, limit) => {
|
|
4
|
+
let lastFunc;
|
|
5
|
+
let lastRan;
|
|
6
|
+
return (...args) => {
|
|
7
|
+
const context = window;
|
|
8
|
+
if (!lastRan) {
|
|
9
|
+
func.apply(context, args);
|
|
10
|
+
lastRan = Date.now();
|
|
11
|
+
} else {
|
|
12
|
+
clearTimeout(lastFunc);
|
|
13
|
+
lastFunc = setTimeout(() => {
|
|
14
|
+
if (Date.now() - lastRan >= limit) {
|
|
15
|
+
func.apply(context, args);
|
|
16
|
+
lastRan = Date.now();
|
|
17
|
+
}
|
|
18
|
+
}, limit - (Date.now() - lastRan));
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { uniqueId } from './helper';
|
|
2
|
+
|
|
3
|
+
const events = {};
|
|
4
|
+
|
|
5
|
+
let activeEvent = {
|
|
6
|
+
id: '',
|
|
7
|
+
showMenu: null,
|
|
8
|
+
hideMenu: null
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const registerEvent = (id, showMenu, hideMenu) => {
|
|
12
|
+
const _ = uniqueId();
|
|
13
|
+
|
|
14
|
+
events[_] = {
|
|
15
|
+
id,
|
|
16
|
+
showMenu,
|
|
17
|
+
hideMenu
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return id;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const callShowEvent = (opts) => {
|
|
24
|
+
const { hideMenu } = activeEvent;
|
|
25
|
+
if (hideMenu) hideMenu();
|
|
26
|
+
Object.keys(events).forEach((key) => {
|
|
27
|
+
if (events[key].id && events[key].id === opts.id) {
|
|
28
|
+
events[key].showMenu(opts);
|
|
29
|
+
activeEvent = events[key];
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const callHideEvent = (menuId) => {
|
|
35
|
+
const { id, hideMenu } = activeEvent;
|
|
36
|
+
if (id === menuId || menuId === 'ID_NOT_REQUIRED') {
|
|
37
|
+
if (hideMenu) hideMenu();
|
|
38
|
+
activeEvent = {
|
|
39
|
+
id: '',
|
|
40
|
+
showMenu: null,
|
|
41
|
+
hideMenu: null
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export { registerEvent, callShowEvent, callHideEvent };
|
package/src/index.ts
CHANGED
|
@@ -155,6 +155,10 @@ import FontPicker from './components/font-picker/FontPicker';
|
|
|
155
155
|
import AudioPreview from './components/players/AudioPreview';
|
|
156
156
|
import { renderTooltipProps, renderTooltip } from './components/Tooltip';
|
|
157
157
|
import AssetsTableRateCell from './components/assets/AssetsTableRateCell';
|
|
158
|
+
import ContextMenu from './components/context-menu/ContextMenu';
|
|
159
|
+
import ContextMenuItem from './components/context-menu/ContextMenuItem';
|
|
160
|
+
import ContextMenuTrigger from './components/context-menu/ContextMenuTrigger';
|
|
161
|
+
import Submenu from './components/context-menu/SubMenu';
|
|
158
162
|
|
|
159
163
|
export {
|
|
160
164
|
AppWrapper,
|
|
@@ -301,5 +305,9 @@ export {
|
|
|
301
305
|
cancelAssetUpload,
|
|
302
306
|
getLastModifiedStoryInOrg,
|
|
303
307
|
renderTooltipProps,
|
|
304
|
-
renderTooltip
|
|
308
|
+
renderTooltip,
|
|
309
|
+
ContextMenu,
|
|
310
|
+
ContextMenuItem,
|
|
311
|
+
ContextMenuTrigger,
|
|
312
|
+
Submenu
|
|
305
313
|
};
|