@ringcentral/juno 2.1.1 → 2.3.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 (162) hide show
  1. package/README.md +1 -2
  2. package/components/Animations/Highlight/Highlight.d.ts +2 -2
  3. package/components/Badge/Badge.d.ts +11 -2
  4. package/components/Badge/Badge.js +27 -3
  5. package/components/Badge/styles/BadgeStyle.js +3 -2
  6. package/components/Badge/utils/BadgeUtils.d.ts +7 -0
  7. package/components/Badge/utils/BadgeUtils.js +11 -0
  8. package/components/Badge/utils/index.d.ts +1 -0
  9. package/components/Badge/utils/index.js +1 -0
  10. package/components/Badge/utils/useRoundBadgeOffset.d.ts +7 -0
  11. package/components/Badge/utils/useRoundBadgeOffset.js +25 -0
  12. package/components/Chip/Chip.d.ts +21 -3
  13. package/components/Chip/Chip.js +1 -1
  14. package/components/Downshift/SuggestionList/utils/useSuggestionList.js +1 -2
  15. package/components/Downshift/utils/useDownshift.js +2 -3
  16. package/components/Downshift/utils/useDownshiftTag.js +1 -2
  17. package/components/Forms/Picker/DatePicker/DatePicker.js +10 -11
  18. package/components/Forms/Select/PlainSelect/PlainSelect.js +1 -2
  19. package/components/Table/Table.d.ts +14 -0
  20. package/components/Table/Table.js +17 -0
  21. package/components/Table/TableBody/TableBody.d.ts +8 -0
  22. package/components/Table/TableBody/TableBody.js +14 -0
  23. package/components/Table/TableBody/index.d.ts +1 -0
  24. package/components/Table/TableBody/index.js +4 -0
  25. package/components/Table/TableCell/TableCell.d.ts +27 -0
  26. package/components/Table/TableCell/TableCell.js +39 -0
  27. package/components/Table/TableCell/index.d.ts +1 -0
  28. package/components/Table/TableCell/index.js +4 -0
  29. package/components/Table/TableCell/styles/TableCellStyle.d.ts +3 -0
  30. package/components/Table/TableCell/styles/TableCellStyle.js +16 -0
  31. package/components/Table/TableCell/styles/index.d.ts +1 -0
  32. package/components/Table/TableCell/styles/index.js +4 -0
  33. package/components/Table/TableCell/utils/TableCellUtils.d.ts +1 -0
  34. package/components/Table/TableCell/utils/TableCellUtils.js +4 -0
  35. package/components/Table/TableCell/utils/index.d.ts +1 -0
  36. package/components/Table/TableCell/utils/index.js +4 -0
  37. package/components/Table/TableContainer/TableContainer.d.ts +19 -0
  38. package/components/Table/TableContainer/TableContainer.js +22 -0
  39. package/components/Table/TableContainer/index.d.ts +1 -0
  40. package/components/Table/TableContainer/index.js +4 -0
  41. package/components/Table/TableContainer/styles/TableContainerStyle.d.ts +3 -0
  42. package/components/Table/TableContainer/styles/TableContainerStyle.js +13 -0
  43. package/components/Table/TableContainer/styles/index.d.ts +1 -0
  44. package/components/Table/TableContainer/styles/index.js +4 -0
  45. package/components/Table/TableHead/TableHead.d.ts +8 -0
  46. package/components/Table/TableHead/TableHead.js +14 -0
  47. package/components/Table/TableHead/index.d.ts +1 -0
  48. package/components/Table/TableHead/index.js +4 -0
  49. package/components/Table/TableRow/TableRow.d.ts +15 -0
  50. package/components/Table/TableRow/TableRow.js +20 -0
  51. package/components/Table/TableRow/index.d.ts +1 -0
  52. package/components/Table/TableRow/index.js +4 -0
  53. package/components/Table/TableRow/styles/TableRowStyle.d.ts +3 -0
  54. package/components/Table/TableRow/styles/TableRowStyle.js +9 -0
  55. package/components/Table/TableRow/styles/index.d.ts +1 -0
  56. package/components/Table/TableRow/styles/index.js +4 -0
  57. package/components/Table/TableRow/utils/TableRowUtils.d.ts +1 -0
  58. package/components/Table/TableRow/utils/TableRowUtils.js +4 -0
  59. package/components/Table/TableRow/utils/index.d.ts +1 -0
  60. package/components/Table/TableRow/utils/index.js +4 -0
  61. package/components/Table/context.d.ts +10 -0
  62. package/components/Table/context.js +4 -0
  63. package/components/Table/index.d.ts +8 -0
  64. package/components/Table/index.js +10 -0
  65. package/components/Table/types.d.ts +1 -0
  66. package/components/Table/types.js +2 -0
  67. package/components/Tables/TableHead.d.ts +1 -1
  68. package/components/Tables/TableHead.js +1 -3
  69. package/components/Tables/TableHeadCell.d.ts +1 -1
  70. package/components/Tables/TableHeadCell.js +1 -2
  71. package/components/Tabs/Tabs/MoreMenuTab/MoreMenuTab.d.ts +7 -3
  72. package/components/Tabs/Tabs/MoreMenuTab/MoreMenuTab.js +4 -4
  73. package/components/Tooltip/utils/useTooltipForceHide.js +24 -10
  74. package/components/index.d.ts +1 -1
  75. package/components/index.js +1 -1
  76. package/es6/README.md +1 -2
  77. package/es6/components/Badge/Badge.js +30 -6
  78. package/es6/components/Badge/styles/BadgeStyle.js +4 -3
  79. package/es6/components/Badge/utils/BadgeUtils.js +11 -0
  80. package/es6/components/Badge/utils/index.js +1 -0
  81. package/es6/components/Badge/utils/useRoundBadgeOffset.js +23 -0
  82. package/es6/components/Chip/Chip.js +2 -2
  83. package/es6/components/Downshift/SuggestionList/utils/useSuggestionList.js +1 -2
  84. package/es6/components/Downshift/utils/useDownshift.js +1 -2
  85. package/es6/components/Downshift/utils/useDownshiftTag.js +1 -2
  86. package/es6/components/Forms/Picker/DatePicker/DatePicker.js +1 -2
  87. package/es6/components/Forms/Select/PlainSelect/PlainSelect.js +1 -2
  88. package/es6/components/Table/Table.js +15 -0
  89. package/es6/components/Table/TableBody/TableBody.js +12 -0
  90. package/es6/components/Table/TableBody/index.js +1 -0
  91. package/es6/components/Table/TableCell/TableCell.js +37 -0
  92. package/es6/components/Table/TableCell/index.js +1 -0
  93. package/es6/components/Table/TableCell/styles/TableCellStyle.js +14 -0
  94. package/es6/components/Table/TableCell/styles/index.js +1 -0
  95. package/es6/components/Table/TableCell/utils/TableCellUtils.js +2 -0
  96. package/es6/components/Table/TableCell/utils/index.js +1 -0
  97. package/es6/components/Table/TableContainer/TableContainer.js +20 -0
  98. package/es6/components/Table/TableContainer/index.js +1 -0
  99. package/es6/components/Table/TableContainer/styles/TableContainerStyle.js +11 -0
  100. package/es6/components/Table/TableContainer/styles/index.js +1 -0
  101. package/es6/components/Table/TableHead/TableHead.js +12 -0
  102. package/es6/components/Table/TableHead/index.js +1 -0
  103. package/es6/components/Table/TableRow/TableRow.js +18 -0
  104. package/es6/components/Table/TableRow/index.js +1 -0
  105. package/es6/components/Table/TableRow/styles/TableRowStyle.js +7 -0
  106. package/es6/components/Table/TableRow/styles/index.js +1 -0
  107. package/es6/components/Table/TableRow/utils/TableRowUtils.js +2 -0
  108. package/es6/components/Table/TableRow/utils/index.js +1 -0
  109. package/es6/components/Table/context.js +2 -0
  110. package/es6/components/Table/index.js +7 -0
  111. package/es6/components/Table/types.js +0 -0
  112. package/es6/components/Tables/TableHead.js +1 -3
  113. package/es6/components/Tables/TableHeadCell.js +2 -3
  114. package/es6/components/Tabs/Tabs/MoreMenuTab/MoreMenuTab.js +5 -5
  115. package/es6/components/Tooltip/utils/useTooltipForceHide.js +25 -11
  116. package/es6/components/index.js +1 -1
  117. package/es6/foundation/hooks/index.js +2 -0
  118. package/es6/foundation/hooks/useControlled/index.js +1 -0
  119. package/es6/foundation/hooks/useControlled/useControlled.js +1 -0
  120. package/es6/foundation/hooks/useEventListener/useEventListener.js +8 -6
  121. package/es6/foundation/hooks/useGlobalListener/index.js +1 -0
  122. package/es6/foundation/hooks/useGlobalListener/useGlobalListener.js +130 -0
  123. package/es6/foundation/hooks/useHiddenTabindex/useHiddenTabindex.js +4 -3
  124. package/es6/foundation/hooks/useLongPress/useLongPress.js +2 -3
  125. package/es6/foundation/hooks/useOverflow/useOverflow.js +18 -15
  126. package/es6/foundation/hooks/useResizeObserver/useResizeObserver.js +4 -4
  127. package/es6/foundation/hooks/useTouchMouseEvent/useTouchMouseEvent.js +8 -5
  128. package/es6/foundation/utils/getRefElement.js +13 -0
  129. package/es6/foundation/utils/index.js +1 -0
  130. package/es6/foundation/utils/removeClassName.js +4 -3
  131. package/es6/foundation/utils/selectionHandler.js +7 -6
  132. package/foundation/hooks/index.d.ts +2 -0
  133. package/foundation/hooks/index.js +2 -0
  134. package/foundation/hooks/useControlled/index.d.ts +1 -0
  135. package/foundation/hooks/useControlled/index.js +4 -0
  136. package/foundation/hooks/useControlled/useControlled.d.ts +1 -0
  137. package/foundation/hooks/useControlled/useControlled.js +4 -0
  138. package/foundation/hooks/useEventListener/useEventListener.d.ts +2 -2
  139. package/foundation/hooks/useEventListener/useEventListener.js +8 -6
  140. package/foundation/hooks/useGlobalListener/index.d.ts +1 -0
  141. package/foundation/hooks/useGlobalListener/index.js +4 -0
  142. package/foundation/hooks/useGlobalListener/useGlobalListener.d.ts +108 -0
  143. package/foundation/hooks/useGlobalListener/useGlobalListener.js +133 -0
  144. package/foundation/hooks/useHiddenTabindex/useHiddenTabindex.d.ts +2 -2
  145. package/foundation/hooks/useHiddenTabindex/useHiddenTabindex.js +4 -3
  146. package/foundation/hooks/useLongPress/useLongPress.js +1 -2
  147. package/foundation/hooks/useOverflow/useOverflow.d.ts +2 -3
  148. package/foundation/hooks/useOverflow/useOverflow.js +18 -15
  149. package/foundation/hooks/useResizeObserver/useResizeObserver.d.ts +2 -3
  150. package/foundation/hooks/useResizeObserver/useResizeObserver.js +3 -3
  151. package/foundation/hooks/useTouchMouseEvent/useTouchMouseEvent.d.ts +5 -1
  152. package/foundation/hooks/useTouchMouseEvent/useTouchMouseEvent.js +8 -5
  153. package/foundation/theme/theme.type.d.ts +6 -3
  154. package/foundation/utils/getRefElement.d.ts +6 -0
  155. package/foundation/utils/getRefElement.js +15 -0
  156. package/foundation/utils/index.d.ts +1 -0
  157. package/foundation/utils/index.js +1 -0
  158. package/foundation/utils/removeClassName.d.ts +3 -3
  159. package/foundation/utils/removeClassName.js +4 -3
  160. package/foundation/utils/selectionHandler.d.ts +3 -3
  161. package/foundation/utils/selectionHandler.js +7 -6
  162. package/package.json +5 -5
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ var utils_1 = require("../../utils");
5
+ var useEventCallback_1 = require("../useEventCallback");
6
+ exports.globalListenerEventMap = new Map();
7
+ /**
8
+ * create globalListener handler for share one listener event
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const globalListener = createGlobalListener('focus', () => { console.log('focus') });
13
+ * const globalListener2 = createGlobalListener('focus', () => { console.log('focus') });
14
+ * globalListener.listen();
15
+ * globalListener2.listen();
16
+ *
17
+ * => // that will only create an event listener on window, but every callback will get emit value when event triggered
18
+ * ```
19
+ */
20
+ exports.createGlobalListener = function (key, listener, _a) {
21
+ var _b = _a === void 0 ? {} : _a, _c = _b.customKey, customKey = _c === void 0 ? key : _c, _d = _b.target, targetProp = _d === void 0 ? window : _d;
22
+ var listening = false;
23
+ var getMapValue = function () { return exports.globalListenerEventMap.get(customKey); };
24
+ var addListener = function () {
25
+ if (listening)
26
+ return;
27
+ var savedEvent = getMapValue();
28
+ if (!(savedEvent === null || savedEvent === void 0 ? void 0 : savedEvent.exec)) {
29
+ var exec = function (e) {
30
+ var event = getMapValue();
31
+ event === null || event === void 0 ? void 0 : event.listeners.forEach(function (c) { return c(e); });
32
+ };
33
+ exports.globalListenerEventMap.set(customKey, {
34
+ exec: exec,
35
+ listeners: new Set([listener]),
36
+ });
37
+ var target = utils_1.getRefElement(targetProp);
38
+ target === null || target === void 0 ? void 0 : target.addEventListener(key, exec);
39
+ }
40
+ else {
41
+ savedEvent.listeners.add(listener);
42
+ }
43
+ listening = true;
44
+ };
45
+ var removeListener = function () {
46
+ if (!listening)
47
+ return;
48
+ listening = false;
49
+ var _savedEvent = getMapValue();
50
+ if (!_savedEvent)
51
+ return;
52
+ var listeners = _savedEvent.listeners;
53
+ listeners.delete(listener);
54
+ if (listeners.size === 0) {
55
+ var target = utils_1.getRefElement(targetProp);
56
+ target === null || target === void 0 ? void 0 : target.removeEventListener(key, _savedEvent.exec);
57
+ exports.globalListenerEventMap.delete(customKey);
58
+ }
59
+ };
60
+ return {
61
+ /**
62
+ * bind listener again
63
+ */
64
+ listen: function () { return addListener(); },
65
+ /**
66
+ * remove listener
67
+ */
68
+ remove: function () { return removeListener(); },
69
+ /**
70
+ * current listener state
71
+ */
72
+ get state() {
73
+ return {
74
+ /**
75
+ * current listener state count
76
+ */
77
+ get count() {
78
+ var _a;
79
+ return ((_a = getMapValue()) === null || _a === void 0 ? void 0 : _a.listeners.size) || 0;
80
+ },
81
+ /**
82
+ * is that be listening
83
+ */
84
+ listening: listening,
85
+ };
86
+ },
87
+ };
88
+ };
89
+ /**
90
+ * bind global event, when you bind same key event,
91
+ * that will reuse one event listener and trigger both callback once that listener be triggered.
92
+ *
93
+ * also you can control listener with method `listen` and `remove`
94
+ * and get listener `state` for check listener count number and current listing state.
95
+ *
96
+ * - `key` `options` only work when set first time, never change after first render
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * useGlobalListener('keyup', () => console.log('window key up1'))
101
+ * useGlobalListener('keyup', () => console.log('window key up2'))
102
+ * useGlobalListener('keyup', () => console.log('window key up3'))
103
+ *
104
+ * => // that will only create an event listener on `window`, but every callback will get emit value when event triggered
105
+ * ```
106
+ */
107
+ function useGlobalListener(key, listener, options) {
108
+ if (options === void 0) { options = {}; }
109
+ var _listener = useEventCallback_1.useEventCallback(listener);
110
+ var globalListener = react_1.useRef(exports.createGlobalListener(key, _listener, options)).current;
111
+ if (process.env.NODE_ENV !== 'production') {
112
+ var _a = options.customKey, customKey_1 = _a === void 0 ? key : _a, _b = options.target, targetProp_1 = _b === void 0 ? window : _b;
113
+ // eslint-disable-next-line react-hooks/rules-of-hooks
114
+ react_1.useEffect(function () {
115
+ var target = utils_1.getRefElement(targetProp_1);
116
+ if (target !== window && customKey_1 === key) {
117
+ utils_1.logInDev({
118
+ component: 'useGlobalListener',
119
+ message: 'When you custom binding event target, you must custom key for determining different event group',
120
+ level: 'error',
121
+ });
122
+ }
123
+ // eslint-disable-next-line react-hooks/exhaustive-deps
124
+ }, []);
125
+ }
126
+ react_1.useEffect(function () {
127
+ globalListener.listen();
128
+ return globalListener.remove;
129
+ // eslint-disable-next-line react-hooks/exhaustive-deps
130
+ }, []);
131
+ return globalListener;
132
+ }
133
+ exports.useGlobalListener = useGlobalListener;
@@ -1,9 +1,9 @@
1
- import React from 'react';
1
+ import { RefOrElementOrCallback } from '../../utils';
2
2
  /**
3
3
  * group hidden logic, when binding events element focus,
4
4
  * that hiddenRef will auto be `tabindex={-1}` *
5
5
  */
6
- export declare const useHiddenTabindex: <T extends HTMLElement>(hiddenRef: React.RefObject<T>) => {
6
+ export declare const useHiddenTabindex: <T extends HTMLElement>(target: RefOrElementOrCallback<T>) => {
7
7
  onFocus: () => void;
8
8
  onBlur: () => void;
9
9
  };
@@ -1,19 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ var utils_1 = require("../../utils");
3
4
  var useEventCallback_1 = require("../useEventCallback");
4
5
  /**
5
6
  * group hidden logic, when binding events element focus,
6
7
  * that hiddenRef will auto be `tabindex={-1}` *
7
8
  */
8
- exports.useHiddenTabindex = function (hiddenRef) {
9
+ exports.useHiddenTabindex = function (target) {
9
10
  var handleFocus = useEventCallback_1.useEventCallback(function () {
10
- var hiddenElm = hiddenRef.current;
11
+ var hiddenElm = utils_1.getRefElement(target);
11
12
  if (hiddenElm && hiddenElm.tabIndex === 0) {
12
13
  hiddenElm.tabIndex = -1;
13
14
  }
14
15
  });
15
16
  var handleBlur = useEventCallback_1.useEventCallback(function () {
16
- var hiddenElm = hiddenRef.current;
17
+ var hiddenElm = utils_1.getRefElement(target);
17
18
  if (hiddenElm && hiddenElm.tabIndex === -1) {
18
19
  hiddenElm.tabIndex = 0;
19
20
  }
@@ -32,8 +32,7 @@ exports.useLongPress = function (_a, _b, _c) {
32
32
  var end = function (e) {
33
33
  // ! mouse up only trigger when up on element, so we host that in document
34
34
  document.removeEventListener('mouseup', onMouseUp);
35
- if (!isEmittedRef.current &&
36
- useTouchMouseEvent_1.isElmEqualOrContainRef(e.target, elmRef)) {
35
+ if (!isEmittedRef.current && useTouchMouseEvent_1.isElmEqualOrContain(e.target, elmRef)) {
37
36
  onTap === null || onTap === void 0 ? void 0 : onTap(e, reasonRef.current);
38
37
  }
39
38
  reasonRef.current = 'click';
@@ -1,10 +1,9 @@
1
- /// <reference types="react" />
2
- /// <reference types="styled-jsx" />
1
+ import { RefOrElementOrCallback } from '../../utils';
3
2
  import { PerformanceOptions } from '../useResizeObserver';
4
3
  /**
5
4
  * trigger when overflow state change
6
5
  */
7
- export declare const useOverflow: (innerRef: import("react").RefObject<HTMLElement>, cb: (state: boolean, value: {
6
+ export declare const useOverflow: (target: RefOrElementOrCallback<HTMLElement>, cb: (state: boolean, value: {
8
7
  scrollWidth: number;
9
8
  clientWidth: number;
10
9
  scrollHeight: number;
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var react_1 = require("react");
4
+ var utils_1 = require("../../utils");
4
5
  var useResizeObserver_1 = require("../useResizeObserver");
5
6
  /**
6
7
  * trigger when overflow state change
7
8
  */
8
9
  exports.useOverflow = function (
9
10
  /** target element ref */
10
- innerRef,
11
+ target,
11
12
  /** trigger when `ResizeObserver` emit */
12
13
  cb,
13
14
  /**
@@ -22,19 +23,21 @@ performance) {
22
23
  }; }
23
24
  // * not have default value for that can trigger change first time.
24
25
  var showRef = react_1.useRef();
25
- return useResizeObserver_1.useResizeObserver(innerRef, function () {
26
- if (innerRef.current) {
27
- var _a = innerRef.current, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;
28
- var show = scrollWidth > clientWidth || scrollHeight > clientHeight;
29
- if (showRef.current !== show) {
30
- showRef.current = show;
31
- cb(show, {
32
- scrollWidth: scrollWidth,
33
- clientWidth: clientWidth,
34
- scrollHeight: scrollHeight,
35
- clientHeight: clientHeight,
36
- });
37
- }
38
- }
26
+ return useResizeObserver_1.useResizeObserver(target, function () {
27
+ var element = utils_1.getRefElement(target);
28
+ if (!element)
29
+ return;
30
+ var scrollWidth = element.scrollWidth, clientWidth = element.clientWidth, scrollHeight = element.scrollHeight, clientHeight = element.clientHeight;
31
+ var show = scrollWidth > clientWidth || scrollHeight > clientHeight;
32
+ if (showRef.current === show)
33
+ return;
34
+ // only emit when state change
35
+ showRef.current = show;
36
+ cb(show, {
37
+ scrollWidth: scrollWidth,
38
+ clientWidth: clientWidth,
39
+ scrollHeight: scrollHeight,
40
+ clientHeight: clientHeight,
41
+ });
39
42
  }, performance);
40
43
  };
@@ -1,5 +1,4 @@
1
- /// <reference types="react" />
2
- /// <reference types="styled-jsx" />
1
+ import { RefOrElementOrCallback } from '../../utils';
3
2
  export declare type PerformanceOptions = {
4
3
  /**
5
4
  * mode that improve performance, default is debounce
@@ -24,4 +23,4 @@ export declare const getResizeObserver: (callback: ResizeObserverCallback, exter
24
23
  * @param callback callback when element resize
25
24
  * @param performance options that improve performance
26
25
  */
27
- export declare const useResizeObserver: (ref: import("react").RefObject<HTMLElement>, callback: ResizeObserverCallback, performance?: PerformanceOptions) => ResizeObserver;
26
+ export declare const useResizeObserver: <T extends HTMLElement = HTMLElement>(target: RefOrElementOrCallback<T>, callback: ResizeObserverCallback, performance?: PerformanceOptions) => ResizeObserver;
@@ -40,7 +40,7 @@ exports.getResizeObserver = function (callback, externalWindow) {
40
40
  */
41
41
  exports.useResizeObserver = function (
42
42
  /** target element ref */
43
- ref,
43
+ target,
44
44
  /** trigger when `ResizeObserver` emit */
45
45
  callback,
46
46
  /** performance options, `mode`, `time`, `ignoreFireWhenObserve` */
@@ -76,8 +76,8 @@ performance) {
76
76
  return exports.getResizeObserver(resizeCallback, externalWindow);
77
77
  });
78
78
  react_1.useLayoutEffect(function () {
79
+ var elm = utils_1.getRefElement(target);
79
80
  var observer = observerRef.current;
80
- var elm = ref.current;
81
81
  if (!elm) {
82
82
  throw new Error('please check element exist before bind resize observer');
83
83
  }
@@ -87,6 +87,6 @@ performance) {
87
87
  };
88
88
  // TODO: wait https://github.com/facebook/react/pull/20477 eslint support to remove this exhaustive-deps comment with support custom hooks
89
89
  // eslint-disable-next-line react-hooks/exhaustive-deps
90
- }, [ref]);
90
+ }, [target]);
91
91
  return observerRef.current;
92
92
  };
@@ -1,5 +1,6 @@
1
1
  /// <reference types="styled-jsx" />
2
2
  import { MouseEventHandler, TouchEventHandler } from 'react';
3
+ import { RefOrElementOrCallback } from '../../utils';
3
4
  export interface UseTouchMouseEvent<T> {
4
5
  onMouseUp?: MouseEventHandler<T>;
5
6
  onMouseDown?: MouseEventHandler<T>;
@@ -36,4 +37,7 @@ export declare const useTouchMouseEvent: <T = unknown>({ onMouseDown: onMouseDow
36
37
  onMouseDown: (event: import("react").MouseEvent<T, MouseEvent>) => void;
37
38
  onMouseUp: (e: any) => void;
38
39
  };
39
- export declare const isElmEqualOrContainRef: (elm: Element | undefined, elmRef: import("react").RefObject<HTMLElement>) => boolean | undefined;
40
+ /**
41
+ * check is element equal or contains target element
42
+ */
43
+ export declare const isElmEqualOrContain: (sourceTarget: RefOrElementOrCallback<HTMLElement>, containTarget: RefOrElementOrCallback<HTMLElement>) => boolean | null;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var react_1 = require("react");
4
+ var utils_1 = require("../../utils");
4
5
  var useEventCallback_1 = require("../useEventCallback");
5
6
  /**
6
7
  * Provide a utils for switch trigger touch event or mouse event between different device
@@ -74,9 +75,11 @@ exports.useTouchMouseEvent = function (_a, _b) {
74
75
  onMouseUp: onMouseUp,
75
76
  };
76
77
  };
77
- exports.isElmEqualOrContainRef = function (elm, elmRef) {
78
- var _a;
79
- return (elm &&
80
- elmRef &&
81
- (elmRef.current === elm || ((_a = elmRef.current) === null || _a === void 0 ? void 0 : _a.contains(elm))));
78
+ /**
79
+ * check is element equal or contains target element
80
+ */
81
+ exports.isElmEqualOrContain = function (sourceTarget, containTarget) {
82
+ var elm = utils_1.getRefElement(sourceTarget);
83
+ var target = utils_1.getRefElement(containTarget);
84
+ return elm && target && (target === elm || target.contains(elm));
82
85
  };
@@ -38,7 +38,7 @@ import { RcResponsiveProps } from '../../components/Responsive';
38
38
  import { RcSnackbarActionProps, RcSnackbarContentProps, RcSnackbarProps } from '../../components/Snackbar';
39
39
  import { RcStepButtonProps, RcStepConnectorProps, RcStepIconProps, RcStepLabelProps, RcStepperProps, RcStepProps } from '../../components/Stepper';
40
40
  import { RcTablePaginationProps } from '../../components/TablePagination';
41
- import { RcTableProps, TableHeadCellProps, TableHeadProps } from '../../components/Tables';
41
+ import { RcTableBodyProps, RcTableCellProps, RcTableContainerProps, RcTableHeadProps, RcTableProps, RcTableRowProps } from '../../components/Table';
42
42
  import { RcTabListProps, RcTabPanelProps, RcTabProps, RcTabsProps } from '../../components/Tabs';
43
43
  import { RcTagProps } from '../../components/Tag';
44
44
  import { RcTextProps } from '../../components/Text';
@@ -180,9 +180,12 @@ export declare type RcTheme = {
180
180
  RcStepLabel?: RcStepLabelProps;
181
181
  RcStepper?: RcStepperProps;
182
182
  RcTablePagination?: RcTablePaginationProps;
183
- RcTableHeadCell?: TableHeadCellProps;
184
- RcTableHeadView?: TableHeadProps;
183
+ RcTableBody?: RcTableBodyProps;
184
+ RcTableCell?: RcTableCellProps;
185
+ RcTableContainer?: RcTableContainerProps;
186
+ RcTableHead?: RcTableHeadProps;
185
187
  RcTable?: RcTableProps;
188
+ RcTableRow?: RcTableRowProps;
186
189
  RcTab?: RcTabProps;
187
190
  RcTabList?: RcTabListProps;
188
191
  RcTabPanel?: RcTabPanelProps;
@@ -0,0 +1,6 @@
1
+ import { RefObject } from 'react';
2
+ export declare type RefOrElementOrCallback<T extends HTMLElement = HTMLElement> = RefObject<T> | (() => T) | T;
3
+ /**
4
+ * get element from React ref or callback
5
+ */
6
+ export declare const getRefElement: <T extends HTMLElement = HTMLElement>(ref: RefOrElementOrCallback<T>) => T | null;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var isRef_1 = require("./isRef");
4
+ /**
5
+ * get element from React ref or callback
6
+ */
7
+ exports.getRefElement = function (ref) {
8
+ if (typeof ref === 'function') {
9
+ return ref();
10
+ }
11
+ if (isRef_1.isRef(ref)) {
12
+ return ref.current;
13
+ }
14
+ return ref;
15
+ };
@@ -4,6 +4,7 @@ export * from './classes';
4
4
  export * from './clearReactReferencesInNode';
5
5
  export * from './combineProps';
6
6
  export * from './deepmerge';
7
+ export * from './getRefElement';
7
8
  export * from './getScrollbarSize';
8
9
  export * from './hasValue';
9
10
  export * from './isRcElement';
@@ -7,6 +7,7 @@ tslib_1.__exportStar(require("./classes"), exports);
7
7
  tslib_1.__exportStar(require("./clearReactReferencesInNode"), exports);
8
8
  tslib_1.__exportStar(require("./combineProps"), exports);
9
9
  tslib_1.__exportStar(require("./deepmerge"), exports);
10
+ tslib_1.__exportStar(require("./getRefElement"), exports);
10
11
  tslib_1.__exportStar(require("./getScrollbarSize"), exports);
11
12
  tslib_1.__exportStar(require("./hasValue"), exports);
12
13
  tslib_1.__exportStar(require("./isRcElement"), exports);
@@ -1,4 +1,4 @@
1
- import { RefObject } from 'react';
1
+ import { RefOrElementOrCallback } from './getRefElement';
2
2
  declare type RemoveClassNameOptions = {
3
3
  /**
4
4
  * make replace also scan child nodes
@@ -16,7 +16,7 @@ declare type RemoveClassNameOptions = {
16
16
  /**
17
17
  * remove className from element, default will not scan child nodes, if you want to scan child nodes, set `scanChildren` to `true`.
18
18
  *
19
- * @param elmRef target element reference
19
+ * @param target target element reference or element or callback
20
20
  * @param removeClass className to remove, default will use class `includes` to check, if you want to use full match, set `fullMatch` to `true`
21
21
  *
22
22
  * @example
@@ -31,5 +31,5 @@ declare type RemoveClassNameOptions = {
31
31
  * elm => <div class="efg"></div>
32
32
  * ```
33
33
  */
34
- export declare function removeClassName(elmRef: RefObject<HTMLElement>, removeClass: string, { scanChildren, fullMatch }?: RemoveClassNameOptions): void;
34
+ export declare function removeClassName(target: RefOrElementOrCallback, removeClass: string, { scanChildren, fullMatch }?: RemoveClassNameOptions): void;
35
35
  export {};
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ var getRefElement_1 = require("./getRefElement");
3
4
  /**
4
5
  * remove className from element, default will not scan child nodes, if you want to scan child nodes, set `scanChildren` to `true`.
5
6
  *
6
- * @param elmRef target element reference
7
+ * @param target target element reference or element or callback
7
8
  * @param removeClass className to remove, default will use class `includes` to check, if you want to use full match, set `fullMatch` to `true`
8
9
  *
9
10
  * @example
@@ -18,9 +19,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
19
  * elm => <div class="efg"></div>
19
20
  * ```
20
21
  */
21
- function removeClassName(elmRef, removeClass, _a) {
22
+ function removeClassName(target, removeClass, _a) {
22
23
  var _b = _a === void 0 ? {} : _a, _c = _b.scanChildren, scanChildren = _c === void 0 ? false : _c, _d = _b.fullMatch, fullMatch = _d === void 0 ? false : _d;
23
- var elm = elmRef.current;
24
+ var elm = getRefElement_1.getRefElement(target);
24
25
  if (!elm)
25
26
  return;
26
27
  if (elm.className.includes(removeClass)) {
@@ -1,8 +1,8 @@
1
- import { RefObject } from 'react';
1
+ import { RefOrElementOrCallback } from './getRefElement';
2
2
  /**
3
3
  * get current input element selection position and is that selectRange state
4
4
  */
5
- export declare function getSelectionPosition(inputRef: RefObject<HTMLInputElement>): {
5
+ export declare function getSelectionPosition<T extends HTMLInputElement | HTMLTextAreaElement>(sourceTarget: RefOrElementOrCallback<T>): {
6
6
  isSelectRange: boolean;
7
7
  position: {
8
8
  start: number;
@@ -13,7 +13,7 @@ export declare function getSelectionPosition(inputRef: RefObject<HTMLInputElemen
13
13
  * set input element selection position position,
14
14
  * if you need scroll that into view set `scrollIntoView` as true
15
15
  */
16
- export declare function setSelectionPosition(inputRef: RefObject<HTMLInputElement>, options: {
16
+ export declare function setSelectionPosition<T extends HTMLInputElement | HTMLTextAreaElement>(target: RefOrElementOrCallback<T>, options: {
17
17
  start: number | null;
18
18
  end: number | null;
19
19
  direction?: 'forward' | 'backward' | 'none' | undefined;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ var getRefElement_1 = require("./getRefElement");
3
4
  /**
4
5
  * get current input element selection position and is that selectRange state
5
6
  */
6
- function getSelectionPosition(inputRef) {
7
- var _a, _b;
8
- var currentPosition = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.selectionStart;
9
- var currentPositionEnd = (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.selectionEnd;
7
+ function getSelectionPosition(sourceTarget) {
8
+ var input = getRefElement_1.getRefElement(sourceTarget);
9
+ var currentPosition = input === null || input === void 0 ? void 0 : input.selectionStart;
10
+ var currentPositionEnd = input === null || input === void 0 ? void 0 : input.selectionEnd;
10
11
  var isSelectRange = currentPosition !== currentPositionEnd;
11
12
  return {
12
13
  isSelectRange: isSelectRange,
@@ -18,8 +19,8 @@ exports.getSelectionPosition = getSelectionPosition;
18
19
  * set input element selection position position,
19
20
  * if you need scroll that into view set `scrollIntoView` as true
20
21
  */
21
- function setSelectionPosition(inputRef, options) {
22
- var elm = inputRef.current;
22
+ function setSelectionPosition(target, options) {
23
+ var elm = getRefElement_1.getRefElement(target);
23
24
  if (elm && options.start !== null && options.end !== null) {
24
25
  // * use blur and refocus to refocus position into view
25
26
  if (options.scrollIntoView)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ringcentral/juno",
3
- "version": "2.1.1",
3
+ "version": "2.3.0",
4
4
  "author": "RingCentral",
5
5
  "license": "MIT",
6
6
  "bugs": {
@@ -45,12 +45,12 @@
45
45
  },
46
46
  "default": "./es6/index.js"
47
47
  },
48
- "./": {
48
+ "./*": {
49
49
  "node": {
50
- "module": "./es6/",
51
- "require": "./"
50
+ "module": "./es6/*",
51
+ "require": "./*"
52
52
  },
53
- "default": "./es6/"
53
+ "default": "./es6/*"
54
54
  }
55
55
  }
56
56
  }