@ringcentral/juno 1.12.4-beta.5864-e73e0ffc → 1.12.5-beta.5892-381bb03b

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 (36) hide show
  1. package/components/Downshift/Downshift.d.ts +1 -1
  2. package/components/Downshift/Downshift.js +1 -2
  3. package/components/Downshift/SuggestionList/SuggestionList.js +4 -5
  4. package/components/Downshift/SuggestionList/utils/useSuggestionList.d.ts +20 -7
  5. package/components/Downshift/SuggestionList/utils/useSuggestionList.js +88 -70
  6. package/components/Downshift/utils/DownshiftUtils.d.ts +2 -0
  7. package/components/Downshift/utils/DownshiftUtils.js +6 -0
  8. package/components/Downshift/utils/SelectItem.d.ts +3 -1
  9. package/components/Downshift/utils/index.d.ts +2 -0
  10. package/components/Downshift/utils/index.js +2 -0
  11. package/components/Downshift/utils/useDownshift.d.ts +13 -272
  12. package/components/Downshift/utils/useDownshift.js +132 -429
  13. package/components/Downshift/utils/useDownshiftGroup.js +1 -0
  14. package/components/Downshift/utils/useDownshiftTag.d.ts +554 -0
  15. package/components/Downshift/utils/useDownshiftTag.js +229 -0
  16. package/components/Forms/TextField/styles/OutlineTextFieldStyle.js +2 -2
  17. package/components/Forms/TextField/utils/OutlineTextFieldUtils.d.ts +1 -0
  18. package/components/Forms/TextField/utils/OutlineTextFieldUtils.js +3 -0
  19. package/components/Forms/Textarea/Textarea.d.ts +2 -2
  20. package/components/PortalHost/PortalManager/types.d.ts +1 -1
  21. package/es6/components/Downshift/Downshift.js +1 -2
  22. package/es6/components/Downshift/SuggestionList/SuggestionList.js +4 -5
  23. package/es6/components/Downshift/SuggestionList/utils/useSuggestionList.js +90 -72
  24. package/es6/components/Downshift/utils/DownshiftUtils.js +5 -0
  25. package/es6/components/Downshift/utils/index.js +2 -0
  26. package/es6/components/Downshift/utils/useDownshift.js +135 -432
  27. package/es6/components/Downshift/utils/useDownshiftGroup.js +1 -0
  28. package/es6/components/Downshift/utils/useDownshiftTag.js +227 -0
  29. package/es6/components/Forms/TextField/styles/OutlineTextFieldStyle.js +2 -2
  30. package/es6/components/Forms/TextField/utils/OutlineTextFieldUtils.js +3 -0
  31. package/es6/foundation/hooks/useRefState/useRefState.js +6 -1
  32. package/es6/foundation/theme/ThemeProvider.js +22 -6
  33. package/foundation/hooks/useRefState/useRefState.js +6 -1
  34. package/foundation/theme/ThemeProvider.d.ts +12 -10
  35. package/foundation/theme/ThemeProvider.js +22 -6
  36. package/package.json +1 -1
@@ -54,6 +54,7 @@ export var useDownshiftGroup = function (_a) {
54
54
  key: index,
55
55
  index: index,
56
56
  group: group,
57
+ order: acc.length,
57
58
  options: [__assign(__assign({}, option), { indexInOwnGroup: 0 })],
58
59
  expanded: false,
59
60
  getExpandIconProps: function (additionExpandIconProps) {
@@ -0,0 +1,227 @@
1
+ import { __assign, __read, __rest, __spread } from "tslib";
2
+ import { useMemo, useRef, useState } from 'react';
3
+ import isString from 'lodash/isString';
4
+ import uniqueId from 'lodash/uniqueId';
5
+ import { useControlled } from '@material-ui/core/utils';
6
+ import { combineProps, useEventCallback, useKeyboardMoveFocus, useRefState, } from '../../../foundation';
7
+ import { DEFAULT_GET_OPTION_LABEL, downshiftComponentName, stringArrToRegExp, } from './DownshiftUtils';
8
+ var DOWNSHIFT_ID_TOKEN = 'rc-chip-';
9
+ /** @inner inner hook work with useDownshift */
10
+ export var useDownshiftTag = function (_a) {
11
+ var downshiftId = _a.id, _b = _a.value, selectedItemsProp = _b === void 0 ? [] : _b, onSelectChange = _a.onChange, variant = _a.variant, _c = _a.getOptionLabel, getOptionLabel = _c === void 0 ? DEFAULT_GET_OPTION_LABEL : _c, onInputChangeProp = _a.onInputChange, wrapperRef = _a.wrapperRef, inputRef = _a.inputRef, freeSolo = _a.freeSolo, maxFreeSolo = _a.maxFreeSolo, keyToTags = _a.keyToTags, onMaxFreeSolo = _a.onMaxFreeSolo, multiple = _a.multiple, labelProp = _a.label, required = _a.required, disabled = _a.disabled, getStopCreateFreeSolo = _a.getStopCreateFreeSolo, onReset = _a.onReset;
12
+ var isAutocomplete = variant === 'autocomplete';
13
+ var isSelectedFromAutocompleteRef = useRef(false);
14
+ var _d = __read(useControlled({
15
+ controlled: selectedItemsProp,
16
+ default: [],
17
+ name: downshiftComponentName,
18
+ }), 2), tags = _d[0], _setTags = _d[1];
19
+ var _e = __read(useState(false), 2), focused = _e[0], setFocused = _e[1];
20
+ var _f = __read(useRefState(0), 2), focusedIndexRef = _f[0], setFocusedIndex = _f[1];
21
+ var freeSoloCount = useMemo(function () { return tags.filter(function (x) { return x.freeSolo; }).length; }, [tags]);
22
+ var setTags = function (_selectedItems) {
23
+ _setTags(_selectedItems);
24
+ onSelectChange === null || onSelectChange === void 0 ? void 0 : onSelectChange(_selectedItems);
25
+ if (isAutocomplete && _selectedItems.length === 1) {
26
+ var result = getOptionLabel(_selectedItems[0]);
27
+ onInputChangeProp === null || onInputChangeProp === void 0 ? void 0 : onInputChangeProp(result);
28
+ isSelectedFromAutocompleteRef.current = true;
29
+ }
30
+ };
31
+ var _focusTag = function (tagToFocus) {
32
+ var _a;
33
+ var textFieldElm = wrapperRef === null || wrapperRef === void 0 ? void 0 : wrapperRef.current;
34
+ var inputElm = inputRef.current;
35
+ if (tagToFocus === -1) {
36
+ inputElm === null || inputElm === void 0 ? void 0 : inputElm.focus();
37
+ }
38
+ else {
39
+ (_a = textFieldElm === null || textFieldElm === void 0 ? void 0 : textFieldElm.querySelector("[data-tag-index=\"" + tagToFocus + "\"]")) === null || _a === void 0 ? void 0 : _a.focus();
40
+ }
41
+ };
42
+ var focusTag = useEventCallback(function (tagToFocus, focus) {
43
+ if (focus === void 0) { focus = true; }
44
+ if (focusedIndexRef.current === tagToFocus)
45
+ return;
46
+ setFocusedIndex(tagToFocus);
47
+ if (focus)
48
+ _focusTag(tagToFocus);
49
+ });
50
+ /** when return `true` mean add item success */
51
+ var checkAndAddFreeSolo = function (_a, e) {
52
+ var _b = _a === void 0 ? {} : _a, selectedItem = _b.selectedItem, value = _b.value;
53
+ var _c;
54
+ var isAddItem = false;
55
+ var currentValue = value !== null && value !== void 0 ? value : (_c = inputRef.current) === null || _c === void 0 ? void 0 : _c.value;
56
+ if (!(getStopCreateFreeSolo === null || getStopCreateFreeSolo === void 0 ? void 0 : getStopCreateFreeSolo()) &&
57
+ !selectedItem &&
58
+ freeSolo &&
59
+ currentValue &&
60
+ currentValue.length > 0) {
61
+ if (freeSoloCount < maxFreeSolo) {
62
+ var items = currentValue
63
+ .trim()
64
+ .split(stringArrToRegExp(keyToTags))
65
+ .filter(function (x) { return x.trim() !== ''; });
66
+ var toLength = freeSoloCount + items.length;
67
+ if (toLength > maxFreeSolo) {
68
+ items.splice(-(toLength - maxFreeSolo));
69
+ onMaxFreeSolo === null || onMaxFreeSolo === void 0 ? void 0 : onMaxFreeSolo(maxFreeSolo);
70
+ }
71
+ if (items.length > 0) {
72
+ setTags(__spread(tags, items.map(function (label) {
73
+ return ({
74
+ id: uniqueId(DOWNSHIFT_ID_TOKEN),
75
+ isSuggestion: false,
76
+ freeSolo: true,
77
+ label: label,
78
+ });
79
+ })));
80
+ isAddItem = true;
81
+ }
82
+ }
83
+ else {
84
+ onMaxFreeSolo === null || onMaxFreeSolo === void 0 ? void 0 : onMaxFreeSolo(maxFreeSolo);
85
+ }
86
+ onReset === null || onReset === void 0 ? void 0 : onReset(e);
87
+ }
88
+ return isAddItem;
89
+ };
90
+ var removeTag = function (selectedItem) {
91
+ var selectedItemIndex = tags.indexOf(selectedItem);
92
+ if (selectedItemIndex > -1) {
93
+ setTags(__spread(tags.slice(0, selectedItemIndex), tags.slice(selectedItemIndex + 1)));
94
+ }
95
+ };
96
+ var addTag = function (selectedItem) {
97
+ // * change to uniqueId
98
+ if (selectedItem.freeSolo) {
99
+ if (freeSoloCount < maxFreeSolo) {
100
+ selectedItem.id = uniqueId(DOWNSHIFT_ID_TOKEN);
101
+ }
102
+ else {
103
+ onMaxFreeSolo === null || onMaxFreeSolo === void 0 ? void 0 : onMaxFreeSolo(maxFreeSolo);
104
+ return;
105
+ }
106
+ }
107
+ if (multiple) {
108
+ setTags(__spread(tags, [selectedItem]));
109
+ }
110
+ else {
111
+ setTags([selectedItem]);
112
+ }
113
+ };
114
+ var handleTagKey = useKeyboardMoveFocus({
115
+ options: tags,
116
+ focusedIndexRef: focusedIndexRef,
117
+ infinite: 'order',
118
+ onFocusedIndexChange: function (event, toIndex) {
119
+ focusTag(toIndex);
120
+ event === null || event === void 0 ? void 0 : event.preventDefault();
121
+ },
122
+ }).onKeyFocusedIndexHandle;
123
+ /**
124
+ * All Get props methods
125
+ */
126
+ var getTagListBoxProps = function (props) {
127
+ return __assign({ 'aria-label': isString(labelProp) ? labelProp : undefined, 'aria-required': required || false, 'aria-disabled': disabled || false }, props);
128
+ };
129
+ var getTagProps = function (_a) {
130
+ var index = _a.index, selectedItem = _a.selectedItem, restTagProps = __rest(_a, ["index", "selectedItem"]);
131
+ var tabIndex =
132
+ // * when tag is not focus
133
+ !focused &&
134
+ // * and is first item
135
+ index === 0
136
+ ? 0
137
+ : -1;
138
+ return combineProps({
139
+ tabIndex: tabIndex,
140
+ // TODO: wait for input can complete that.
141
+ // role: 'option',
142
+ role: 'button',
143
+ key: downshiftId + "-selected-item-" + index,
144
+ 'data-tag-index': index,
145
+ 'data-item-last': index === tags.length - 1,
146
+ onClick: function (e) {
147
+ e.stopPropagation();
148
+ },
149
+ onBlur: function () { return setFocused(false); },
150
+ onFocus: function () {
151
+ focusTag(index);
152
+ setFocused(true);
153
+ },
154
+ onKeyDown: function (e) {
155
+ var focusedIndex = focusedIndexRef.current;
156
+ switch (e.key) {
157
+ case 'Backspace':
158
+ {
159
+ var lengthBeforeDelete = tags.length;
160
+ focusTag(
161
+ // * when length is 1 mean that will be remove all
162
+ lengthBeforeDelete === 1
163
+ ? -1
164
+ : focusedIndex === 0
165
+ ? 0
166
+ : focusedIndex - 1);
167
+ removeTag(selectedItem);
168
+ }
169
+ break;
170
+ case 'Delete':
171
+ {
172
+ var lengthBeforeDelete = tags.length;
173
+ focusTag(
174
+ // * when length is 1 mean that will be remove all
175
+ lengthBeforeDelete === 1
176
+ ? -1
177
+ : focusedIndex === tags.length - 1
178
+ ? focusedIndex - 1
179
+ : focusedIndex);
180
+ removeTag(selectedItem);
181
+ }
182
+ break;
183
+ default:
184
+ handleTagKey(e);
185
+ break;
186
+ }
187
+ },
188
+ onDelete: function (e) {
189
+ // * left button clicked
190
+ if (e.button === 0) {
191
+ removeTag(selectedItem);
192
+ setFocused(false);
193
+ }
194
+ },
195
+ }, restTagProps);
196
+ };
197
+ return {
198
+ focused: focused,
199
+ setFocused: setFocused,
200
+ tags: tags,
201
+ isSelectedFromAutocompleteRef: isSelectedFromAutocompleteRef,
202
+ focusedIndex: focusedIndexRef.current,
203
+ checkAndAddFreeSolo: checkAndAddFreeSolo,
204
+ getTagListBoxProps: getTagListBoxProps,
205
+ getTagProps: getTagProps,
206
+ focusTag: focusTag,
207
+ addTag: addTag,
208
+ clearTags: function () {
209
+ setTags([]);
210
+ },
211
+ blur: function () {
212
+ if (focusedIndexRef.current !== -1) {
213
+ focusTag(-1, false);
214
+ }
215
+ setFocused(false);
216
+ },
217
+ // reset: () => {
218
+ // setActiveIndex(-1);
219
+ // },
220
+ focusLast: function () {
221
+ var currTagsLength = tags.length;
222
+ if (currTagsLength > 0) {
223
+ focusTag(currTagsLength - 1);
224
+ }
225
+ },
226
+ };
227
+ };
@@ -4,13 +4,13 @@ import { belowIconButtonSpacing, RcOutlineTextFieldFontStyles, RcOutlineTextFiel
4
4
  export var OutlineTextFieldStyle = function (_a) {
5
5
  var radius = _a.radius, size = _a.size, colorProp = _a.color;
6
6
  var height = px(RcOutlineTextFieldHeights[size]);
7
- var _b = RcOutlineTextFieldSpaces[size], inside = _b.inside, outside = _b.outside, insideLeft = _b.insideLeft;
7
+ var _b = RcOutlineTextFieldSpaces[size], inside = _b.inside, outside = _b.outside, insideLeft = _b.insideLeft, y = _b.y;
8
8
  var labelMargin = RcOutlineTextFieldLabelMargins[size];
9
9
  var typographyToken = RcOutlineTextFieldFontStyles[size];
10
10
  var currRadius = radiusFn(radius);
11
11
  var borderColor = getParsePaletteColor(colorProp, palette2('neutral', 'l03'));
12
12
  var focusBorderColor = getParsePaletteColor(colorProp, palette2('interactive', 'f01'));
13
13
  // `-webkit-tap-highlight-color` for cover background color, prevent color be cover by browser
14
- return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n .", " {\n ", ";\n }\n\n ", ";\n\n * + .", " {\n margin-left: ", ";\n }\n\n &.", " {\n label + .", " {\n margin-top: ", ";\n }\n }\n\n .", " {\n -webkit-tap-highlight-color: transparent;\n height: ", ";\n min-height: ", ";\n background: ", ";\n padding: ", ";\n border-radius: ", ";\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-radius: ", ";\n transition: none;\n border-bottom: none !important;\n pointer-events: none;\n ", ";\n }\n\n &:not(.", "):not(.", "):hover {\n background: ", ";\n }\n }\n\n .", " {\n &:before {\n ", ";\n }\n }\n\n .", " {\n &:before {\n ", ";\n }\n }\n\n .", " {\n background: ", ";\n &:before {\n ", ";\n }\n }\n "], ["\n .", " {\n ", ";\n }\n\n ", ";\n\n * + .", " {\n margin-left: ", ";\n }\n\n &.", " {\n label + .", " {\n margin-top: ", ";\n }\n }\n\n .", " {\n -webkit-tap-highlight-color: transparent;\n height: ", ";\n min-height: ", ";\n background: ", ";\n padding: ", ";\n border-radius: ", ";\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-radius: ", ";\n transition: none;\n border-bottom: none !important;\n pointer-events: none;\n ", ";\n }\n\n &:not(.", "):not(.", "):hover {\n background: ", ";\n }\n }\n\n .", " {\n &:before {\n ", ";\n }\n }\n\n .", " {\n &:before {\n ", ";\n }\n }\n\n .", " {\n background: ", ";\n &:before {\n ", ";\n }\n }\n "])), RcOutlineTextFieldInputClasses.input, typography(typographyToken), belowIconButtonSpacing(spacing(inside)), RcOutlineTextFieldInputClasses.input, spacing(insideLeft || inside), RcTextFieldClasses.root, RcOutlineTextFieldInputClasses.root, spacing(labelMargin), RcOutlineTextFieldInputClasses.root, height, height, palette2('neutral', 'b01'), spacing(outside), currRadius, currRadius, fakeBorder({ color: borderColor }), RcOutlineTextFieldInputClasses.focused, RcOutlineTextFieldInputClasses.disabled, palette2('neutral', 'b02'), RcOutlineTextFieldInputClasses.focused, fakeBorder({ color: focusBorderColor }), RcOutlineTextFieldInputClasses.error, fakeBorder({ color: palette2('danger', 'f02') }), RcOutlineTextFieldInputClasses.disabled, palette2('neutral', 'b03'), fakeBorder({ color: palette2('disabled', 'f02') }));
14
+ return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n .", " {\n ", ";\n }\n\n ", ";\n\n * + .", " {\n margin-left: ", ";\n }\n\n &.", " {\n label + .", " {\n margin-top: ", ";\n }\n }\n\n .", " {\n -webkit-tap-highlight-color: transparent;\n min-height: ", ";\n background: ", ";\n padding: ", ";\n border-radius: ", ";\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-radius: ", ";\n transition: none;\n border-bottom: none !important;\n pointer-events: none;\n ", ";\n }\n\n &:not(.", "):not(.", "):hover {\n background: ", ";\n }\n }\n\n .", " {\n &:before {\n ", ";\n }\n }\n\n .", " {\n &:before {\n ", ";\n }\n }\n\n .", " {\n background: ", ";\n &:before {\n ", ";\n }\n }\n "], ["\n .", " {\n ", ";\n }\n\n ", ";\n\n * + .", " {\n margin-left: ", ";\n }\n\n &.", " {\n label + .", " {\n margin-top: ", ";\n }\n }\n\n .", " {\n -webkit-tap-highlight-color: transparent;\n min-height: ", ";\n background: ", ";\n padding: ", ";\n border-radius: ", ";\n\n &:before {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-radius: ", ";\n transition: none;\n border-bottom: none !important;\n pointer-events: none;\n ", ";\n }\n\n &:not(.", "):not(.", "):hover {\n background: ", ";\n }\n }\n\n .", " {\n &:before {\n ", ";\n }\n }\n\n .", " {\n &:before {\n ", ";\n }\n }\n\n .", " {\n background: ", ";\n &:before {\n ", ";\n }\n }\n "])), RcOutlineTextFieldInputClasses.input, typography(typographyToken), belowIconButtonSpacing(spacing(inside)), RcOutlineTextFieldInputClasses.input, spacing(insideLeft || inside), RcTextFieldClasses.root, RcOutlineTextFieldInputClasses.root, spacing(labelMargin), RcOutlineTextFieldInputClasses.root, height, palette2('neutral', 'b01'), spacing(y, outside), currRadius, currRadius, fakeBorder({ color: borderColor }), RcOutlineTextFieldInputClasses.focused, RcOutlineTextFieldInputClasses.disabled, palette2('neutral', 'b02'), RcOutlineTextFieldInputClasses.focused, fakeBorder({ color: focusBorderColor }), RcOutlineTextFieldInputClasses.error, fakeBorder({ color: palette2('danger', 'f02') }), RcOutlineTextFieldInputClasses.disabled, palette2('neutral', 'b03'), fakeBorder({ color: palette2('disabled', 'f02') }));
15
15
  };
16
16
  var templateObject_1;
@@ -4,16 +4,19 @@ export var RcOutlineTextFieldSpaces = {
4
4
  small: {
5
5
  outside: 3,
6
6
  inside: 2,
7
+ y: 1,
7
8
  },
8
9
  medium: {
9
10
  outside: 4,
10
11
  inside: 3,
11
12
  insideLeft: 4,
13
+ y: 2,
12
14
  },
13
15
  large: {
14
16
  outside: 4,
15
17
  inside: 3,
16
18
  insideLeft: 4,
19
+ y: 3,
17
20
  },
18
21
  };
19
22
  export var RcOutlineTextFieldLabelMargins = {
@@ -27,7 +27,12 @@ export var useRefState = function (value, customUpdate) {
27
27
  /**
28
28
  * update ref value, set isUpdate to `false` will not trigger re-render
29
29
  */
30
- var setInnerValue = useEventCallback(function (toValue, isUpdate) {
30
+ var setInnerValue = useEventCallback(function (toValue,
31
+ /**
32
+ * is re-render
33
+ * @default true
34
+ */
35
+ isUpdate) {
31
36
  if (isUpdate === void 0) { isUpdate = true; }
32
37
  innerValueRef.current = toValue;
33
38
  if (isUpdate) {
@@ -1,16 +1,17 @@
1
1
  import { __assign, __rest } from "tslib";
2
2
  import 'focus-visible';
3
- import React from 'react';
3
+ import React, { createContext, useContext, } from 'react';
4
4
  import { MuiThemeProvider, StylesProvider, createGenerateClassName, } from '@material-ui/core/styles';
5
5
  import { ThemeProvider as StyledThemeProvider, useTheme, } from '../styled-components';
6
6
  import createTheme from './createTheme';
7
7
  import { useResultRef } from '../hooks';
8
+ var NestedThemeContext = createContext(false);
8
9
  /**
9
10
  * sub theme provider,
10
11
  * that will use when you want use multiple theme in one app
11
12
  * that will user parent's theme when not set theme
12
13
  */
13
- export var RcSubThemeProvider = function (_a) {
14
+ var SubThemeProvider = function (_a) {
14
15
  var themeProp = _a.theme, children = _a.children;
15
16
  var _b, _c;
16
17
  var parentTheme = useTheme();
@@ -22,9 +23,10 @@ export var RcSubThemeProvider = function (_a) {
22
23
  };
23
24
  /**
24
25
  * theme wrapper, apply in root,
25
- * each app should always have one `RcThemeProvider` at root,
26
- * if you need multiple, use `RcSubThemeProvider` inside that `RcThemeProvider` */
27
- export var RcThemeProvider = function (props) {
26
+ * each app should always have one `RootThemeProvider` at root,
27
+ * if you need multiple, use `SubThemeProvider` inside that `RootThemeProvider`
28
+ */
29
+ var RootThemeProvider = function (props) {
28
30
  var prefixGlobalClass = props.prefixGlobalClass, rest = __rest(props, ["prefixGlobalClass"]);
29
31
  // cannot pass `generateClassName: undefine`
30
32
  // otherwise global class will be random
@@ -38,5 +40,19 @@ export var RcThemeProvider = function (props) {
38
40
  : {};
39
41
  });
40
42
  return (React.createElement(StylesProvider, __assign({ injectFirst: true }, stylesProviderProps.current),
41
- React.createElement(RcSubThemeProvider, __assign({}, rest))));
43
+ React.createElement(SubThemeProvider, __assign({}, rest))));
44
+ };
45
+ /**
46
+ * theme wrapper, each app should always have one `RcThemeProvider` at root
47
+ *
48
+ * if you need multiple theme,
49
+ * you can apply another `RcThemeProvider` inside root `RcThemeProvider`.
50
+ *
51
+ * `RcThemeProvider` can unlimited nest
52
+ */
53
+ export var RcThemeProvider = function (props) {
54
+ var isSubProvider = useContext(NestedThemeContext);
55
+ var ThemeProvider = isSubProvider ? SubThemeProvider : RootThemeProvider;
56
+ return (React.createElement(NestedThemeContext.Provider, { value: true },
57
+ React.createElement(ThemeProvider, __assign({}, props))));
42
58
  };
@@ -29,7 +29,12 @@ exports.useRefState = function (value, customUpdate) {
29
29
  /**
30
30
  * update ref value, set isUpdate to `false` will not trigger re-render
31
31
  */
32
- var setInnerValue = useEventCallback_1.useEventCallback(function (toValue, isUpdate) {
32
+ var setInnerValue = useEventCallback_1.useEventCallback(function (toValue,
33
+ /**
34
+ * is re-render
35
+ * @default true
36
+ */
37
+ isUpdate) {
33
38
  if (isUpdate === void 0) { isUpdate = true; }
34
39
  innerValueRef.current = toValue;
35
40
  if (isUpdate) {
@@ -1,21 +1,23 @@
1
1
  import 'focus-visible';
2
2
  import { FunctionComponent, ReactNode } from 'react';
3
3
  import { RcThemeInput } from './theme.type';
4
- export declare type RcThemeProviderProps = {
4
+ declare type SubThemeProviderProps = {
5
5
  /** custom theme */
6
6
  theme?: RcThemeInput;
7
7
  children?: ReactNode;
8
+ };
9
+ declare type RootThemeProviderProps = {
8
10
  /** prefix the mui global class */
9
11
  prefixGlobalClass?: string;
10
- };
12
+ } & SubThemeProviderProps;
13
+ export declare type RcThemeProviderProps = RootThemeProviderProps;
11
14
  /**
12
- * sub theme provider,
13
- * that will use when you want use multiple theme in one app
14
- * that will user parent's theme when not set theme
15
+ * theme wrapper, each app should always have one `RcThemeProvider` at root
16
+ *
17
+ * if you need multiple theme,
18
+ * you can apply another `RcThemeProvider` inside root `RcThemeProvider`.
19
+ *
20
+ * `RcThemeProvider` can unlimited nest
15
21
  */
16
- export declare const RcSubThemeProvider: FunctionComponent<RcThemeProviderProps>;
17
- /**
18
- * theme wrapper, apply in root,
19
- * each app should always have one `RcThemeProvider` at root,
20
- * if you need multiple, use `RcSubThemeProvider` inside that `RcThemeProvider` */
21
22
  export declare const RcThemeProvider: FunctionComponent<RcThemeProviderProps>;
23
+ export {};
@@ -2,17 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var tslib_1 = require("tslib");
4
4
  require("focus-visible");
5
- var react_1 = tslib_1.__importDefault(require("react"));
5
+ var react_1 = tslib_1.__importStar(require("react"));
6
6
  var styles_1 = require("@material-ui/core/styles");
7
7
  var styled_components_1 = require("../styled-components");
8
8
  var createTheme_1 = tslib_1.__importDefault(require("./createTheme"));
9
9
  var hooks_1 = require("../hooks");
10
+ var NestedThemeContext = react_1.createContext(false);
10
11
  /**
11
12
  * sub theme provider,
12
13
  * that will use when you want use multiple theme in one app
13
14
  * that will user parent's theme when not set theme
14
15
  */
15
- exports.RcSubThemeProvider = function (_a) {
16
+ var SubThemeProvider = function (_a) {
16
17
  var themeProp = _a.theme, children = _a.children;
17
18
  var _b, _c;
18
19
  var parentTheme = styled_components_1.useTheme();
@@ -24,9 +25,10 @@ exports.RcSubThemeProvider = function (_a) {
24
25
  };
25
26
  /**
26
27
  * theme wrapper, apply in root,
27
- * each app should always have one `RcThemeProvider` at root,
28
- * if you need multiple, use `RcSubThemeProvider` inside that `RcThemeProvider` */
29
- exports.RcThemeProvider = function (props) {
28
+ * each app should always have one `RootThemeProvider` at root,
29
+ * if you need multiple, use `SubThemeProvider` inside that `RootThemeProvider`
30
+ */
31
+ var RootThemeProvider = function (props) {
30
32
  var prefixGlobalClass = props.prefixGlobalClass, rest = tslib_1.__rest(props, ["prefixGlobalClass"]);
31
33
  // cannot pass `generateClassName: undefine`
32
34
  // otherwise global class will be random
@@ -40,5 +42,19 @@ exports.RcThemeProvider = function (props) {
40
42
  : {};
41
43
  });
42
44
  return (react_1.default.createElement(styles_1.StylesProvider, tslib_1.__assign({ injectFirst: true }, stylesProviderProps.current),
43
- react_1.default.createElement(exports.RcSubThemeProvider, tslib_1.__assign({}, rest))));
45
+ react_1.default.createElement(SubThemeProvider, tslib_1.__assign({}, rest))));
46
+ };
47
+ /**
48
+ * theme wrapper, each app should always have one `RcThemeProvider` at root
49
+ *
50
+ * if you need multiple theme,
51
+ * you can apply another `RcThemeProvider` inside root `RcThemeProvider`.
52
+ *
53
+ * `RcThemeProvider` can unlimited nest
54
+ */
55
+ exports.RcThemeProvider = function (props) {
56
+ var isSubProvider = react_1.useContext(NestedThemeContext);
57
+ var ThemeProvider = isSubProvider ? SubThemeProvider : RootThemeProvider;
58
+ return (react_1.default.createElement(NestedThemeContext.Provider, { value: true },
59
+ react_1.default.createElement(ThemeProvider, tslib_1.__assign({}, props))));
44
60
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ringcentral/juno",
3
- "version": "1.12.4-beta.5864-e73e0ffc",
3
+ "version": "1.12.5-beta.5892-381bb03b",
4
4
  "main": "./index.js",
5
5
  "module": "./es6/index.js",
6
6
  "author": "RingCentral",