@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.
Files changed (61) hide show
  1. package/dist/cjs/components/context-menu/AnimateComponent.d.ts +8 -0
  2. package/dist/cjs/components/context-menu/AnimateComponent.js +14 -0
  3. package/dist/cjs/components/context-menu/AnimateComponent.js.map +1 -0
  4. package/dist/cjs/components/context-menu/ContextMenu.d.ts +29 -0
  5. package/dist/cjs/components/context-menu/ContextMenu.js +168 -0
  6. package/dist/cjs/components/context-menu/ContextMenu.js.map +1 -0
  7. package/dist/cjs/components/context-menu/ContextMenuItem.d.ts +20 -0
  8. package/dist/cjs/components/context-menu/ContextMenuItem.js +60 -0
  9. package/dist/cjs/components/context-menu/ContextMenuItem.js.map +1 -0
  10. package/dist/cjs/components/context-menu/ContextMenuTrigger.d.ts +18 -0
  11. package/dist/cjs/components/context-menu/ContextMenuTrigger.js +71 -0
  12. package/dist/cjs/components/context-menu/ContextMenuTrigger.js.map +1 -0
  13. package/dist/cjs/components/context-menu/SubMenu.d.ts +14 -0
  14. package/dist/cjs/components/context-menu/SubMenu.js +97 -0
  15. package/dist/cjs/components/context-menu/SubMenu.js.map +1 -0
  16. package/dist/cjs/components/context-menu/helper.d.ts +2 -0
  17. package/dist/cjs/components/context-menu/helper.js +31 -0
  18. package/dist/cjs/components/context-menu/helper.js.map +1 -0
  19. package/dist/cjs/components/context-menu/registerEvent.d.ts +4 -0
  20. package/dist/cjs/components/context-menu/registerEvent.js +46 -0
  21. package/dist/cjs/components/context-menu/registerEvent.js.map +1 -0
  22. package/dist/cjs/index.d.ts +5 -1
  23. package/dist/cjs/index.js +9 -1
  24. package/dist/cjs/index.js.map +1 -1
  25. package/dist/esm/components/context-menu/AnimateComponent.d.ts +8 -0
  26. package/dist/esm/components/context-menu/AnimateComponent.js +8 -0
  27. package/dist/esm/components/context-menu/AnimateComponent.js.map +1 -0
  28. package/dist/esm/components/context-menu/ContextMenu.d.ts +29 -0
  29. package/dist/esm/components/context-menu/ContextMenu.js +108 -0
  30. package/dist/esm/components/context-menu/ContextMenu.js.map +1 -0
  31. package/dist/esm/components/context-menu/ContextMenuItem.d.ts +20 -0
  32. package/dist/esm/components/context-menu/ContextMenuItem.js +23 -0
  33. package/dist/esm/components/context-menu/ContextMenuItem.js.map +1 -0
  34. package/dist/esm/components/context-menu/ContextMenuTrigger.d.ts +18 -0
  35. package/dist/esm/components/context-menu/ContextMenuTrigger.js +34 -0
  36. package/dist/esm/components/context-menu/ContextMenuTrigger.js.map +1 -0
  37. package/dist/esm/components/context-menu/SubMenu.d.ts +14 -0
  38. package/dist/esm/components/context-menu/SubMenu.js +41 -0
  39. package/dist/esm/components/context-menu/SubMenu.js.map +1 -0
  40. package/dist/esm/components/context-menu/helper.d.ts +2 -0
  41. package/dist/esm/components/context-menu/helper.js +22 -0
  42. package/dist/esm/components/context-menu/helper.js.map +1 -0
  43. package/dist/esm/components/context-menu/registerEvent.d.ts +4 -0
  44. package/dist/esm/components/context-menu/registerEvent.js +41 -0
  45. package/dist/esm/components/context-menu/registerEvent.js.map +1 -0
  46. package/dist/esm/index.d.ts +5 -1
  47. package/dist/esm/index.js +5 -1
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/styles.css +141 -0
  50. package/dist/styles.less +145 -0
  51. package/less/components/context-menu.less +145 -0
  52. package/less/entry.less +2 -1
  53. package/package.json +3 -2
  54. package/src/components/context-menu/AnimateComponent.tsx +19 -0
  55. package/src/components/context-menu/ContextMenu.tsx +172 -0
  56. package/src/components/context-menu/ContextMenuItem.tsx +34 -0
  57. package/src/components/context-menu/ContextMenuTrigger.tsx +47 -0
  58. package/src/components/context-menu/SubMenu.tsx +70 -0
  59. package/src/components/context-menu/helper.ts +21 -0
  60. package/src/components/context-menu/registerEvent.ts +46 -0
  61. 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
  };