@ringcentral/juno 2.0.3 → 2.1.2

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.
@@ -11,8 +11,17 @@ declare type RcBadgeProps = {
11
11
  borderColor?: RcPaletteKeys;
12
12
  /** The component used for the root node. Either a string to use a HTML element or a component. */
13
13
  component?: ElementType;
14
- /** Wrapped shape the badge should overlap */
15
- overlap?: UnionPick<NonNullable<ComponentProps<typeof MuiBadge>['overlap']>, 'circular' | 'rectangular'> | 'none';
14
+ /**
15
+ * Wrapped shape the badge should overlap
16
+ * - `circular`: for circular children
17
+ * - `rectangular`: for rectangular children
18
+ * - `round`: for round radius rectangular children, like
19
+ * ```jsx
20
+ * <RcButton radius="round">click</RcButton>
21
+ * ```
22
+ * - `none`: not do any overlap on that badge
23
+ */
24
+ overlap?: UnionPick<NonNullable<ComponentProps<typeof MuiBadge>['overlap']>, 'circular' | 'rectangular'> | 'none' | 'round';
16
25
  /**
17
26
  * Custom dot render Component in `dot` mode
18
27
  * if you don't want any dot, you can set `null`
@@ -13,9 +13,31 @@ var utils_2 = require("./utils");
13
13
  var _RcBadge = react_1.forwardRef(function (inProps, ref) {
14
14
  var props = foundation_1.useThemeProps({ props: inProps, name: 'RcBadge' });
15
15
  var classesProp = props.classes, children = props.children, overlap = props.overlap, color = props.color, variant = props.variant, textColor = props.textColor, anchorOrigin = props.anchorOrigin, borderColor = props.borderColor, component = props.component, dotComponent = props.dotComponent, dotProps = props.dotProps, rest = tslib_1.__rest(props, ["classes", "children", "overlap", "color", "variant", "textColor", "anchorOrigin", "borderColor", "component", "dotComponent", "dotProps"]);
16
+ // * should never change overlap
17
+ if (process.env.NODE_ENV !== 'production') {
18
+ // eslint-disable-next-line react-hooks/rules-of-hooks
19
+ foundation_1.useChange(function (prev) {
20
+ if (!prev)
21
+ return;
22
+ foundation_1.logInDev({
23
+ component: 'RcBadge',
24
+ message: 'Should not change `overlap` prop after component render',
25
+ level: 'error',
26
+ });
27
+ }, function () { return overlap; });
28
+ }
29
+ var innerRef = react_1.useRef(null);
30
+ var badgeRef = foundation_1.useForkRef(innerRef, ref);
31
+ var isRound = overlap === 'round';
32
+ var isDot = variant === 'dot';
33
+ var notPassOverlapToMui = overlap !== 'none' && !isRound;
34
+ // overlap will never change in production mode
35
+ if (isRound) {
36
+ // eslint-disable-next-line react-hooks/rules-of-hooks
37
+ utils_2.useRoundBadgeOffset(innerRef);
38
+ }
16
39
  var classes = react_1.useMemo(function () { return foundation_1.combineProps(utils_2.RcBadgeClasses, classesProp); }, [classesProp]);
17
40
  var CustomDotBadge = react_1.useMemo(function () {
18
- var isDot = variant === 'dot';
19
41
  return isDot
20
42
  ? react_1.forwardRef(function (_a, ref) {
21
43
  var OmitChildren = _a.children, rest = tslib_1.__rest(_a, ["children"]);
@@ -29,8 +51,10 @@ var _RcBadge = react_1.forwardRef(function (inProps, ref) {
29
51
  react_1.default.createElement(DotComponent, tslib_1.__assign({}, applyDotProps))))));
30
52
  })
31
53
  : undefined;
32
- }, [anchorOrigin, children, dotComponent, dotProps, overlap, variant]);
33
- return (react_1.default.createElement(Badge_1.default, tslib_1.__assign({}, rest, { variant: variant, anchorOrigin: anchorOrigin, component: (component || CustomDotBadge), overlap: overlap !== 'none' ? overlap : undefined, ref: ref, classes: classes }), children));
54
+ }, [isDot, dotProps, overlap, anchorOrigin, children, dotComponent]);
55
+ return (react_1.default.createElement(Badge_1.default, tslib_1.__assign({}, rest, { variant: variant, anchorOrigin: anchorOrigin, component: (component || CustomDotBadge),
56
+ // TODO: that as any for ts v3.8 still not support pick variable out of if check
57
+ overlap: notPassOverlapToMui ? overlap : undefined, ref: badgeRef, classes: classes }), children));
34
58
  });
35
59
  var RcBadge = foundation_1.styled(_RcBadge)(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), styles_1.BadgeStyle);
36
60
  exports.RcBadge = RcBadge;
@@ -5,6 +5,7 @@ var foundation_1 = require("../../../foundation");
5
5
  var utils_1 = require("../utils");
6
6
  exports.BadgeStyle = function (_a) {
7
7
  var badgeContent = _a.badgeContent, overlap = _a.overlap, variant = _a.variant, textColor = _a.textColor, borderColor = _a.borderColor, max = _a.max, color = _a.color;
8
+ var overlapRound = overlap === 'round';
8
9
  var overlapNone = overlap === 'none';
9
10
  var isStandard = variant !== 'dot';
10
11
  var borderCurrColor = foundation_1.getParsePaletteColor(borderColor, null, false);
@@ -12,10 +13,10 @@ exports.BadgeStyle = function (_a) {
12
13
  var manyChar = (['number', 'string'].includes(typeof badgeContent) &&
13
14
  ("" + badgeContent).length !== 1) ||
14
15
  (max && max > 0 && +badgeContent > max);
15
- return foundation_1.css(templateObject_5 || (templateObject_5 = tslib_1.__makeTemplateObject(["\n .", " {\n color: ", ";\n background-color: ", ";\n\n ", ";\n\n ", "\n\n ", "\n }\n "], ["\n .", " {\n color: ", ";\n background-color: ", ";\n\n ",
16
+ return foundation_1.css(templateObject_5 || (templateObject_5 = tslib_1.__makeTemplateObject(["\n .", " {\n margin: ", ";\n color: ", ";\n background-color: ", ";\n\n ", ";\n\n ", "\n\n ", "\n }\n "], ["\n .", " {\n margin: ", ";\n color: ", ";\n background-color: ", ";\n\n ",
16
17
  ";\n\n ",
17
18
  "\n\n ",
18
- "\n }\n "])), utils_1.RcBadgeClasses.badge, foundation_1.getParsePaletteColor(textColor, null, false), foundation_1.getParsePaletteColor(color, null, false), borderColor && foundation_1.css(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject(["\n ", "\n "], ["\n ",
19
+ "\n }\n "])), utils_1.RcBadgeClasses.badge, overlapRound && "var(" + utils_1.roundBadgeMarginKey + ")", foundation_1.getParsePaletteColor(textColor, null, false), foundation_1.getParsePaletteColor(color, null, false), borderColor && foundation_1.css(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject(["\n ", "\n "], ["\n ",
19
20
  "\n "])), isStandard
20
21
  ? foundation_1.fakeBorder({ color: borderCurrColor, radius: 'round' })
21
22
  : foundation_1.css(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n border-color: ", ";\n "], ["\n border-color: ", ";\n "])), borderCurrColor)), isStandard && foundation_1.css(templateObject_3 || (templateObject_3 = tslib_1.__makeTemplateObject(["\n height: 18px;\n min-width: 18px;\n padding: ", ";\n "], ["\n height: 18px;\n min-width: 18px;\n padding: ", ";\n "])), !manyChar && 0), overlapNone && foundation_1.css(templateObject_4 || (templateObject_4 = tslib_1.__makeTemplateObject(["\n position: unset;\n transform: unset;\n\n &.", " {\n transform: scale(0);\n }\n "], ["\n position: unset;\n transform: unset;\n\n &.", " {\n transform: scale(0);\n }\n "])), utils_1.RcBadgeClasses.invisible));
@@ -1 +1,8 @@
1
1
  export declare const RcBadgeClasses: Partial<import("../../../foundation").UnitMap<import("@material-ui/core").BadgeClassKey, any>>;
2
+ export declare const roundBadgeMarginKey = "--badge-round-margin";
3
+ /**
4
+ * a circle inside square, that diagonal of a square to circle distance to be the round offset.
5
+ * @param x that circle r
6
+ * @returns the distance of that offset
7
+ */
8
+ export declare const getRoundOffset: (x: number) => number;
@@ -2,3 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var foundation_1 = require("../../../foundation");
4
4
  exports.RcBadgeClasses = foundation_1.RcClasses(['badge', 'invisible'], 'RcBadge');
5
+ exports.roundBadgeMarginKey = '--badge-round-margin';
6
+ var sqrt2 = Math.sqrt(2);
7
+ var powBy = sqrt2 - 1; // 0.292893218813452
8
+ /**
9
+ * a circle inside square, that diagonal of a square to circle distance to be the round offset.
10
+ * @param x that circle r
11
+ * @returns the distance of that offset
12
+ */
13
+ exports.getRoundOffset = function (x) {
14
+ return (x * powBy) / sqrt2;
15
+ };
@@ -1 +1,2 @@
1
1
  export * from './BadgeUtils';
2
+ export * from './useRoundBadgeOffset';
@@ -2,3 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./BadgeUtils"), exports);
5
+ tslib_1.__exportStar(require("./useRoundBadgeOffset"), exports);
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ /**
3
+ * modify round badge offset to correct position,
4
+ * only trigger when host element height change
5
+ * @param badgeRef badge
6
+ */
7
+ export declare const useRoundBadgeOffset: (badgeRef: React.RefObject<HTMLElement>) => void;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = require("react");
5
+ var foundation_1 = require("../../../foundation");
6
+ var BadgeUtils_1 = require("./BadgeUtils");
7
+ /**
8
+ * modify round badge offset to correct position,
9
+ * only trigger when host element height change
10
+ * @param badgeRef badge
11
+ */
12
+ exports.useRoundBadgeOffset = function (badgeRef) {
13
+ var currHeightRef = react_1.useRef(0);
14
+ // eslint-disable-next-line react-hooks/rules-of-hooks
15
+ foundation_1.useResizeObserver(badgeRef, function (_a) {
16
+ var _b = tslib_1.__read(_a, 1), badgeObsEntry = _b[0];
17
+ var height = badgeObsEntry.contentRect.height;
18
+ var element = badgeObsEntry.target;
19
+ if (currHeightRef.current === height)
20
+ return;
21
+ currHeightRef.current = height;
22
+ var offset = BadgeUtils_1.getRoundOffset(height / 2);
23
+ element.style.setProperty(BadgeUtils_1.roundBadgeMarginKey, foundation_1.px(offset));
24
+ }, { mode: 'throttle' });
25
+ };
@@ -6,8 +6,23 @@ import { RcIconButtonProps } from '../Buttons/IconButton';
6
6
  import { WithTooltipProps } from '../Tooltip';
7
7
  declare type RcChipClassProp = RcClassesProps<'focused'>;
8
8
  declare type RcChipProps = {
9
- /** color palette set, effect that active color when focus */
9
+ /**
10
+ * color palette set,
11
+ *
12
+ * - variant: `default`: effect that active color when focus
13
+ * - variant: `outlined`: effect whole tag color
14
+ *
15
+ * in `outlined` variant when only set color, that will use color to calculate default background color
16
+ * - `lighten`: lighten `0.92` main color
17
+ * - `darken`: darken `0.72` main color
18
+ */
10
19
  color?: RcPaletteProp;
20
+ /**
21
+ * color palette set, only work when variant is `outlined`
22
+ *
23
+ * effect background color when not have any interactive.
24
+ */
25
+ backgroundColor?: RcPaletteProp;
11
26
  /** is that error chip */
12
27
  error?: boolean;
13
28
  /**
@@ -24,8 +39,8 @@ declare type RcChipProps = {
24
39
  deleteTooltip?: string;
25
40
  /** @deprecated should use `error` */
26
41
  isError?: boolean;
27
- } & RcBaseProps<ComponentProps<typeof MuiChip>, 'color' | 'size' | 'variant' | 'icon'> & RcChipClassProp;
28
- declare const RcChip: import("styled-components").StyledComponentClass<Pick<RcChipProps, "key" | "className" | "color" | "id" | "lang" | "style" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "label" | "slot" | "title" | "classes" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "innerRef" | "disabled" | "focused" | "error" | "avatar" | "clickable" | "deleteIcon" | "onDelete" | "isError" | "deleteIconProps" | "Avatar" | "deleteAutomationId" | "deleteTooltip"> & React.RefAttributes<any>, import("../../foundation").RcTheme, Pick<Pick<RcChipProps, "key" | "className" | "color" | "id" | "lang" | "style" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "label" | "slot" | "title" | "classes" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "innerRef" | "disabled" | "focused" | "error" | "avatar" | "clickable" | "deleteIcon" | "onDelete" | "isError" | "deleteIconProps" | "Avatar" | "deleteAutomationId" | "deleteTooltip"> & React.RefAttributes<any>, "ref" | "key" | "className" | "color" | "id" | "lang" | "style" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "label" | "slot" | "title" | "classes" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "innerRef" | "disabled" | "focused" | "error" | "avatar" | "clickable" | "deleteIcon" | "onDelete" | "isError" | "deleteIconProps" | "Avatar" | "deleteAutomationId" | "deleteTooltip"> & {
42
+ } & RcBaseProps<ComponentProps<typeof MuiChip>, 'color' | 'size' | 'icon'> & RcChipClassProp;
43
+ declare const RcChip: import("styled-components").StyledComponentClass<Pick<RcChipProps, "key" | "className" | "color" | "id" | "lang" | "style" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "label" | "slot" | "title" | "classes" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "variant" | "innerRef" | "disabled" | "focused" | "error" | "avatar" | "clickable" | "deleteIcon" | "onDelete" | "backgroundColor" | "isError" | "deleteIconProps" | "Avatar" | "deleteAutomationId" | "deleteTooltip"> & React.RefAttributes<any>, import("../../foundation").RcTheme, Pick<Pick<RcChipProps, "key" | "className" | "color" | "id" | "lang" | "style" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "label" | "slot" | "title" | "classes" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "variant" | "innerRef" | "disabled" | "focused" | "error" | "avatar" | "clickable" | "deleteIcon" | "onDelete" | "backgroundColor" | "isError" | "deleteIconProps" | "Avatar" | "deleteAutomationId" | "deleteTooltip"> & React.RefAttributes<any>, "ref" | "key" | "className" | "color" | "id" | "lang" | "style" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "label" | "slot" | "title" | "classes" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "variant" | "innerRef" | "disabled" | "focused" | "error" | "avatar" | "clickable" | "deleteIcon" | "onDelete" | "backgroundColor" | "isError" | "deleteIconProps" | "Avatar" | "deleteAutomationId" | "deleteTooltip"> & {
29
44
  theme?: import("../../foundation").RcTheme | undefined;
30
45
  }>;
31
46
  export { RcChip };
@@ -11,7 +11,9 @@ var styles_1 = require("./styles");
11
11
  var utils_1 = require("./utils");
12
12
  var _RcChip = react_1.forwardRef(function (inProps, ref) {
13
13
  var props = foundation_1.useThemeProps({ props: inProps, name: 'RcChip' });
14
- var AvatarProp = props.Avatar, deleteTooltip = props.deleteTooltip, deleteAutomationId = props.deleteAutomationId, isError = props.isError, classesProp = props.classes, _a = props.avatar, avatarProp = _a === void 0 ? AvatarProp : _a, _b = props.error, error = _b === void 0 ? isError : _b, id = props.id, label = props.label, disabled = props.disabled, deleteIconProp = props.deleteIcon, deleteIconProps = props.deleteIconProps, tabIndex = props.tabIndex, focused = props.focused, color = props.color, className = props.className, rest = tslib_1.__rest(props, ["Avatar", "deleteTooltip", "deleteAutomationId", "isError", "classes", "avatar", "error", "id", "label", "disabled", "deleteIcon", "deleteIconProps", "tabIndex", "focused", "color", "className"]);
14
+ var AvatarProp = props.Avatar, deleteTooltip = props.deleteTooltip, deleteAutomationId = props.deleteAutomationId, isError = props.isError, backgroundColor = props.backgroundColor, classesProp = props.classes, _a = props.avatar, avatarProp = _a === void 0 ? AvatarProp : _a, _b = props.error, error = _b === void 0 ? isError : _b, id = props.id, label = props.label, disabled = props.disabled, deleteIconProp = props.deleteIcon, deleteIconProps = props.deleteIconProps, tabIndex = props.tabIndex, focused = props.focused, color = props.color, className = props.className, rest = tslib_1.__rest(props, ["Avatar", "deleteTooltip", "deleteAutomationId", "isError", "backgroundColor", "classes", "avatar", "error", "id", "label", "disabled", "deleteIcon", "deleteIconProps", "tabIndex", "focused", "color", "className"]);
15
+ var innerRef = react_1.useRef(null);
16
+ var chipRef = foundation_1.useForkRef(innerRef, ref);
15
17
  var combinedClasses = react_1.useMemo(function () { return foundation_1.combineClasses(utils_1.RcChipClasses, classesProp); }, [classesProp]);
16
18
  var classes = react_1.useMemo(function () { return foundation_1.omit(combinedClasses, ['focused']); }, [combinedClasses]);
17
19
  var deleteIcon = react_1.useMemo(function () {
@@ -39,12 +41,18 @@ var _RcChip = react_1.forwardRef(function (inProps, ref) {
39
41
  }
40
42
  return undefined;
41
43
  }, [avatarProp]);
42
- return (react_1.default.createElement(Chip_1.default, tslib_1.__assign({ ref: ref, id: id, tabIndex: disabled ? -1 : tabIndex, label: label, disabled: disabled, classes: classes, className: clsx_1.default(className, focused ? combinedClasses.focused : undefined), avatar: avatar, deleteIcon: deleteIcon, "data-test-automation-class": "selected-item", "data-test-automation-value": id ? id : label, "data-is-error": error }, rest)));
44
+ // TODO: can be removed when upgrade to v5
45
+ // * need remove not need MuiChip-deletable for render correct
46
+ react_1.useLayoutEffect(function () {
47
+ foundation_1.removeClassName(innerRef, 'MuiChip-deletable');
48
+ });
49
+ return (react_1.default.createElement(Chip_1.default, tslib_1.__assign({ ref: chipRef, id: id, tabIndex: disabled ? -1 : tabIndex, label: label, disabled: disabled, classes: classes, className: clsx_1.default(className, focused ? combinedClasses.focused : undefined), avatar: avatar, deleteIcon: deleteIcon, "data-test-automation-class": "selected-item", "data-test-automation-value": id ? id : label, "data-is-error": error }, rest)));
43
50
  });
44
51
  var RcChip = foundation_1.styled(_RcChip)(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), styles_1.ChipStyle);
45
52
  exports.RcChip = RcChip;
46
53
  RcChip.defaultProps = {
47
54
  tabIndex: 0,
55
+ // FIXME: after implement click state, that can be remove
48
56
  clickable: false,
49
57
  };
50
58
  RcChip.displayName = 'RcChip';
@@ -1,3 +1,10 @@
1
- import { RcThemedStyled } from '../../../foundation';
1
+ import { PaletteReturnType, RcThemedStyled } from '../../../foundation';
2
2
  import { RcChipProps } from '../Chip';
3
+ export declare const chipColor: RcThemedStyled<RcChipProps & {
4
+ focusedBorderColor: PaletteReturnType;
5
+ normalBorderColor?: PaletteReturnType;
6
+ interactiveBackgroundColor: PaletteReturnType;
7
+ normalColor: PaletteReturnType;
8
+ normalBackgroundColor: PaletteReturnType;
9
+ }, any>;
3
10
  export declare const ChipStyle: RcThemedStyled<RcChipProps, any>;
@@ -5,15 +5,46 @@ var foundation_1 = require("../../../foundation");
5
5
  var styles_1 = require("../../Forms/TextField/styles");
6
6
  var utils_1 = require("../utils");
7
7
  var defaultBgColor = foundation_1.palette2('action', 'grayDark');
8
+ var defaultTextColor = foundation_1.palette2('neutral', 'f06');
8
9
  var errorBgColor = foundation_1.palette2('danger', 'f02');
10
+ var defaultOutlineBgColor = foundation_1.palette2('neutral', 'b01');
9
11
  function fakePseudoRoundBorder(addOptions) {
10
12
  return foundation_1.fakeBorder(tslib_1.__assign({ pseudo: true, radius: 'round' }, addOptions));
11
13
  }
14
+ exports.chipColor = function (_a) {
15
+ var focusedBorderColor = _a.focusedBorderColor, variant = _a.variant, error = _a.error, normalBorderColor = _a.normalBorderColor, interactiveBackgroundColor = _a.interactiveBackgroundColor, normalColor = _a.normalColor, normalBackgroundColor = _a.normalBackgroundColor, color = _a.color, backgroundColor = _a.backgroundColor, theme = _a.theme;
16
+ var outlined = variant === 'outlined';
17
+ var hoverColorLighten = error || outlined;
18
+ if (outlined &&
19
+ !error &&
20
+ // mean have set custom background color
21
+ (color || backgroundColor)) {
22
+ normalColor = focusedBorderColor;
23
+ normalBorderColor = focusedBorderColor;
24
+ interactiveBackgroundColor = focusedBorderColor;
25
+ var notCustomBackground = !backgroundColor || backgroundColor === color;
26
+ // when color be same make that color have lighten
27
+ if (notCustomBackground) {
28
+ normalBackgroundColor =
29
+ theme.palette.type === 'light'
30
+ ? foundation_1.lighten(normalBackgroundColor, 0.92)
31
+ : foundation_1.darken(normalBackgroundColor, 0.72);
32
+ }
33
+ }
34
+ return foundation_1.css(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n color: ", ";\n background-color: ", ";\n\n ", ";\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &.", ", ", " {\n ", ";\n\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n "], ["\n color: ", ";\n background-color: ", ";\n\n ", ";\n\n ", " {\n &:hover {\n background-color: ",
35
+ ";\n }\n }\n\n &.", ", ", " {\n ", ";\n\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n "])), normalColor, normalBackgroundColor, fakePseudoRoundBorder({ color: normalBorderColor }), foundation_1.nonTouchHoverMedia, foundation_1.setOpacity(interactiveBackgroundColor, hoverColorLighten ? '08' : '12'), utils_1.RcChipClasses.focused, foundation_1.focusVisible, fakePseudoRoundBorder({ color: focusedBorderColor }), foundation_1.setOpacity(interactiveBackgroundColor, '16'), foundation_1.setOpacity(interactiveBackgroundColor, '24'));
36
+ };
12
37
  exports.ChipStyle = function (props) {
13
- var isError = props.isError, _a = props.error, error = _a === void 0 ? isError : _a, colorProp = props.color;
38
+ var isError = props.isError, _a = props.error, error = _a === void 0 ? isError : _a, colorProp = props.color, variant = props.variant, _b = props.backgroundColor, backgroundColorProp = _b === void 0 ? colorProp : _b;
39
+ var parsedBackgroundColor = foundation_1.getParsePaletteColor(backgroundColorProp, defaultOutlineBgColor);
14
40
  var color = foundation_1.getParsePaletteColor(colorProp, foundation_1.focusVisibleColor);
15
- return foundation_1.css(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject(["\n height: 28px;\n box-sizing: border-box;\n padding: ", ";\n background-color: ", ";\n color: ", ";\n position: relative;\n border-radius: ", ";\n ", ";\n\n ", ";\n ", ";\n\n &.", ", ", " {\n ", ";\n\n background-color: ", ";\n }\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &.", ", &:focus {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n\n &.", " {\n color: ", ";\n opacity: 1;\n }\n\n ", ";\n\n .", " {\n color: ", ";\n margin-left: 0px;\n margin-right: -4px;\n\n span {\n width: auto;\n height: auto;\n }\n }\n "], ["\n height: 28px;\n box-sizing: border-box;\n padding: ", ";\n background-color: ", ";\n color: ", ";\n position: relative;\n border-radius: ", ";\n ", ";\n\n ", ";\n ", ";\n\n &.", ", ", " {\n ", ";\n\n background-color: ",
16
- ";\n }\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &.", ", &:focus {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n\n &.", " {\n color: ", ";\n opacity: 1;\n }\n\n ",
17
- ";\n\n .", " {\n color: ", ";\n margin-left: 0px;\n margin-right: -4px;\n\n span {\n width: auto;\n height: auto;\n }\n }\n "])), foundation_1.spacing(0.5), foundation_1.palette2('neutral', 'b03'), styles_1.textColor, foundation_1.radius('round'), foundation_1.ellipsis, foundation_1.typography('body1'), fakePseudoRoundBorder(), utils_1.RcChipClasses.focused, foundation_1.focusVisible, fakePseudoRoundBorder({ color: color }), foundation_1.setOpacity(error ? errorBgColor : defaultBgColor, '08'), foundation_1.nonTouchHoverMedia, foundation_1.setOpacity(defaultBgColor, '12'), utils_1.RcChipClasses.focused, foundation_1.setOpacity(defaultBgColor, '16'), foundation_1.setOpacity(defaultBgColor, '24'), utils_1.RcChipClasses.disabled, styles_1.disabledColor, error && foundation_1.css(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n &:not(.", ") {\n color: ", ";\n ", ";\n\n background-color: ", ";\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &:focus {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n }\n "], ["\n &:not(.", ") {\n color: ", ";\n ", ";\n\n background-color: ", ";\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &:focus {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n }\n "])), utils_1.RcChipClasses.disabled, foundation_1.palette2('danger', 'f02'), fakePseudoRoundBorder({ color: foundation_1.palette2('danger', 'f02') }), foundation_1.palette2('danger', 'b01'), foundation_1.nonTouchHoverMedia, foundation_1.setOpacity(errorBgColor, '08'), foundation_1.setOpacity(errorBgColor, '16'), foundation_1.setOpacity(errorBgColor, '24')), utils_1.RcChipClasses.avatar, foundation_1.palette2('neutral', 'b01'));
41
+ var outlined = variant === 'outlined';
42
+ var normalBackgroundColor = outlined
43
+ ? parsedBackgroundColor
44
+ : foundation_1.palette2('neutral', 'b03');
45
+ return foundation_1.css(templateObject_3 || (templateObject_3 = tslib_1.__makeTemplateObject(["\n height: 28px;\n box-sizing: border-box;\n padding: ", ";\n\n position: relative;\n border-radius: ", ";\n border: ", ";\n\n ", ";\n ", ";\n\n ", ";\n\n &.", " {\n color: ", ";\n opacity: 1;\n }\n\n ", ";\n\n .", " {\n color: ", ";\n margin-left: 0px;\n margin-right: -4px;\n\n span {\n width: auto;\n height: auto;\n }\n }\n "], ["\n height: 28px;\n box-sizing: border-box;\n padding: ", ";\n\n position: relative;\n border-radius: ", ";\n border: ", ";\n\n ", ";\n ", ";\n\n ",
46
+ ";\n\n &.", " {\n color: ", ";\n opacity: 1;\n }\n\n ",
47
+ ";\n\n .", " {\n color: ", ";\n margin-left: 0px;\n margin-right: -4px;\n\n span {\n width: auto;\n height: auto;\n }\n }\n "])), foundation_1.spacing(0.5), foundation_1.radius('round'), outlined && 'none', foundation_1.ellipsis, foundation_1.typography('body1'), exports.chipColor(tslib_1.__assign(tslib_1.__assign({}, props), { error: error, normalColor: defaultTextColor, normalBackgroundColor: normalBackgroundColor, focusedBorderColor: color, normalBorderColor: outlined ? foundation_1.palette2('neutral', 'l02') : undefined, interactiveBackgroundColor: defaultBgColor })), utils_1.RcChipClasses.disabled, styles_1.disabledColor, error && foundation_1.css(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject(["\n &:not(.", ") {\n ", ";\n }\n "], ["\n &:not(.", ") {\n ",
48
+ ";\n }\n "])), utils_1.RcChipClasses.disabled, exports.chipColor(tslib_1.__assign(tslib_1.__assign({}, props), { error: error, normalColor: errorBgColor, normalBackgroundColor: foundation_1.palette2('danger', 'b01'), focusedBorderColor: errorBgColor, normalBorderColor: errorBgColor, interactiveBackgroundColor: errorBgColor }))), utils_1.RcChipClasses.avatar, foundation_1.palette2('neutral', 'b01'));
18
49
  };
19
- var templateObject_1, templateObject_2;
50
+ var templateObject_1, templateObject_2, templateObject_3;
@@ -13,4 +13,4 @@ declare const RcMenu: import("styled-components").StyledComponentClass<Pick<RcMe
13
13
  theme?: import("../../../foundation").RcTheme | undefined;
14
14
  }>;
15
15
  export { RcMenu, RcMenuContext };
16
- export type { RcMenuContextType, RcMenuProps };
16
+ export type { RcMenuContextType, RcMenuProps, RcMenuOnCloseReasonsType };
@@ -22,7 +22,7 @@ exports.findChildrenByKey = function (childrenProp, key) {
22
22
  var _MoreMenuTabs = react_1.forwardRef(function (props, ref) {
23
23
  var orientation = props.orientation, childrenProp = props.children, valueProp = props.value, onChange = props.onChange, _a = props.MoreButtonProps, MoreButtonProps = _a === void 0 ? {} : _a, rest = tslib_1.__rest(props, ["orientation", "children", "value", "onChange", "MoreButtonProps"]);
24
24
  var onGroupInfoChange = MoreButtonProps.onGroupInfoChange, MoreButtonPropsRest = tslib_1.__rest(MoreButtonProps, ["onGroupInfoChange"]);
25
- var prevChildren = foundation_1.usePrevious(function () { return childrenProp; });
25
+ var prevChildrenProp = foundation_1.usePrevious(function () { return childrenProp; });
26
26
  var isVertical = orientation === 'vertical';
27
27
  var oriStr = isVertical ? 'height' : 'width';
28
28
  var innerRef = react_1.useRef(null);
@@ -54,42 +54,39 @@ var _MoreMenuTabs = react_1.forwardRef(function (props, ref) {
54
54
  throttleTabsSizeChange(obj);
55
55
  }, { mode: 'none' });
56
56
  var tabsSize = tabsSizeRef.current;
57
- // init all children elm
58
- if (tabRefsMapRef.current === undefined) {
59
- var getRefsMapAndSetDefaultTabChildren = function () {
60
- var tabRefs = new Map();
61
- var tabsTabDefaultChild = [];
62
- react_1.default.Children.forEach(childrenProp, function (child, index) {
63
- var _a = child.props, ref = _a.ref, value = _a.value;
64
- var innerRef = react_1.createRef();
65
- var tabRef = ref ? foundation_1.useForkRef(innerRef, ref) : innerRef;
66
- var childrenValue = value || index;
67
- var children = react_1.default.cloneElement(child, {
68
- ref: tabRef,
69
- value: childrenValue,
70
- });
71
- var keyString = typeof child.key === 'string' ? child.key : '';
72
- tabRefs.set(utils_1.getKey(keyString, index), {
73
- ref: tabRef,
74
- size: null,
75
- index: index,
76
- value: childrenValue,
77
- });
78
- tabsTabDefaultChild.push(children);
57
+ // initial tabRefsMapRef and tabsTabChildRef
58
+ if (tabRefsMapRef.current === undefined ||
59
+ prevChildrenProp !== childrenProp) {
60
+ var tabRefs_1 = new Map();
61
+ var tabsTabDefaultChild_1 = [];
62
+ react_1.default.Children.forEach(childrenProp, function (child, index) {
63
+ var _a = child.props, ref = _a.ref, value = _a.value;
64
+ var innerRef = react_1.createRef();
65
+ var tabRef = ref ? foundation_1.useForkRef(innerRef, ref) : innerRef;
66
+ var childrenValue = value || index;
67
+ var children = react_1.default.cloneElement(child, {
68
+ ref: tabRef,
69
+ value: childrenValue,
79
70
  });
80
- return {
81
- tabRefs: tabRefs,
82
- tabsTabDefaultChild: tabsTabDefaultChild,
83
- };
84
- };
85
- var _d = getRefsMapAndSetDefaultTabChildren(), tabRefs = _d.tabRefs, tabsTabDefaultChild = _d.tabsTabDefaultChild;
86
- tabRefsMapRef.current = tabRefs;
87
- tabsTabChildRef.current = tabsTabDefaultChild;
71
+ var keyString = typeof child.key === 'string' ? child.key : '';
72
+ tabRefs_1.set(utils_1.getKey(keyString, index), {
73
+ ref: tabRef,
74
+ size: null,
75
+ index: index,
76
+ value: childrenValue,
77
+ });
78
+ tabsTabDefaultChild_1.push(children);
79
+ });
80
+ tabRefsMapRef.current = tabRefs_1;
81
+ tabsTabChildRef.current = tabsTabDefaultChild_1;
88
82
  }
89
- // get all size when first render
83
+ // get real render size when render
90
84
  react_1.useEffect(function () {
85
+ if (childrenProp === prevChildrenProp) {
86
+ return;
87
+ }
91
88
  var tabRefsMap = tabRefsMapRef.current;
92
- if ((tabRefsMap === null || tabRefsMap === void 0 ? void 0 : tabRefsMap.size) !== undefined) {
89
+ if (tabRefsMap && tabRefsMap.size !== 0) {
93
90
  var allTabsSize_1 = tslib_1.__assign({}, utils_1.DEFAULT_SIZE);
94
91
  tabRefsMap.forEach(function (value, key) {
95
92
  var _a = utils_1.getDomBoundingClientSize(value.ref.current), width = _a.width, height = _a.height;
@@ -110,8 +107,7 @@ var _MoreMenuTabs = react_1.forwardRef(function (props, ref) {
110
107
  var size = utils_1.getDomBoundingClientSize(moreElm);
111
108
  moreTabSizeRef.current = size;
112
109
  }
113
- // eslint-disable-next-line react-hooks/exhaustive-deps
114
- }, []);
110
+ }, [childrenProp, prevChildrenProp]);
115
111
  react_1.useEffect(function () {
116
112
  var _a;
117
113
  var currSelectTabItem;
@@ -190,11 +186,11 @@ var _MoreMenuTabs = react_1.forwardRef(function (props, ref) {
190
186
  }
191
187
  };
192
188
  if (tabsSize.width !== 0 && tabsSize.height !== 0) {
193
- // computed: 1.resize 2. valueProp 3.moreMenuClick
189
+ // computed: 1.resize 2. valueProp 3.moreMenuClick 4.children change
194
190
  // not computed: visible tab change
195
191
  if (((_a = groupingRef.current) === null || _a === void 0 ? void 0 : _a.tabs.includes((currSelectTabItem === null || currSelectTabItem === void 0 ? void 0 : currSelectTabItem[0]) || '')) &&
196
192
  !hasResizeRef.current &&
197
- prevChildren === childrenProp) {
193
+ prevChildrenProp === childrenProp) {
198
194
  return;
199
195
  }
200
196
  computeTabChild(tabsSize);
@@ -202,10 +198,10 @@ var _MoreMenuTabs = react_1.forwardRef(function (props, ref) {
202
198
  }
203
199
  }, [
204
200
  childrenProp,
201
+ prevChildrenProp,
205
202
  isVertical,
206
203
  onGroupInfoChange,
207
204
  oriStr,
208
- prevChildren,
209
205
  tabsSize,
210
206
  valueProp,
211
207
  ]);
@@ -12,9 +12,11 @@ var _RcTabs = react_1.forwardRef(function (inProps, ref) {
12
12
  var classesProp = props.classes, childrenProp = props.children, variantProp = props.variant, size = props.size, MoreButtonProps = props.MoreButtonProps, rest = tslib_1.__rest(props, ["classes", "children", "variant", "size", "MoreButtonProps"]);
13
13
  var isMore = variantProp === 'moreMenu';
14
14
  var classes = react_1.useMemo(function () { return foundation_1.combineProps(utils_1.RcTabsClasses, classesProp); }, [classesProp]);
15
- var children = react_1.default.Children.map(childrenProp, function (child) {
16
- return react_1.default.cloneElement(child, { size: size });
17
- });
15
+ var children = react_1.useMemo(function () {
16
+ return react_1.default.Children.map(childrenProp, function (child) {
17
+ return react_1.default.cloneElement(child, { size: size });
18
+ });
19
+ }, [childrenProp, size]);
18
20
  if (isMore) {
19
21
  return (react_1.default.createElement(MoreMenuTabs_1.MoreMenuTabs, tslib_1.__assign({}, rest, { ref: ref, classes: classes, size: size, MoreButtonProps: MoreButtonProps }), children));
20
22
  }
@@ -1,19 +1,41 @@
1
1
  import { __assign, __makeTemplateObject, __rest } from "tslib";
2
- import React, { forwardRef, useMemo, } from 'react';
2
+ import React, { forwardRef, useMemo, useRef, } from 'react';
3
3
  import clsx from 'clsx';
4
4
  import MuiBadge from '@material-ui/core/Badge';
5
5
  import { capitalize } from '@material-ui/core/utils';
6
- import { combineProps, styled, useThemeProps, } from '../../foundation';
6
+ import { combineProps, logInDev, styled, useChange, useForkRef, useThemeProps, } from '../../foundation';
7
7
  import { RcBox } from '../Box';
8
8
  import { RcPresence } from '../Presence';
9
9
  import { BadgeStyle } from './styles';
10
- import { RcBadgeClasses } from './utils';
10
+ import { RcBadgeClasses, useRoundBadgeOffset } from './utils';
11
11
  var _RcBadge = forwardRef(function (inProps, ref) {
12
12
  var props = useThemeProps({ props: inProps, name: 'RcBadge' });
13
13
  var classesProp = props.classes, children = props.children, overlap = props.overlap, color = props.color, variant = props.variant, textColor = props.textColor, anchorOrigin = props.anchorOrigin, borderColor = props.borderColor, component = props.component, dotComponent = props.dotComponent, dotProps = props.dotProps, rest = __rest(props, ["classes", "children", "overlap", "color", "variant", "textColor", "anchorOrigin", "borderColor", "component", "dotComponent", "dotProps"]);
14
+ // * should never change overlap
15
+ if (process.env.NODE_ENV !== 'production') {
16
+ // eslint-disable-next-line react-hooks/rules-of-hooks
17
+ useChange(function (prev) {
18
+ if (!prev)
19
+ return;
20
+ logInDev({
21
+ component: 'RcBadge',
22
+ message: 'Should not change `overlap` prop after component render',
23
+ level: 'error',
24
+ });
25
+ }, function () { return overlap; });
26
+ }
27
+ var innerRef = useRef(null);
28
+ var badgeRef = useForkRef(innerRef, ref);
29
+ var isRound = overlap === 'round';
30
+ var isDot = variant === 'dot';
31
+ var notPassOverlapToMui = overlap !== 'none' && !isRound;
32
+ // overlap will never change in production mode
33
+ if (isRound) {
34
+ // eslint-disable-next-line react-hooks/rules-of-hooks
35
+ useRoundBadgeOffset(innerRef);
36
+ }
14
37
  var classes = useMemo(function () { return combineProps(RcBadgeClasses, classesProp); }, [classesProp]);
15
38
  var CustomDotBadge = useMemo(function () {
16
- var isDot = variant === 'dot';
17
39
  return isDot
18
40
  ? forwardRef(function (_a, ref) {
19
41
  var OmitChildren = _a.children, rest = __rest(_a, ["children"]);
@@ -27,8 +49,10 @@ var _RcBadge = forwardRef(function (inProps, ref) {
27
49
  React.createElement(DotComponent, __assign({}, applyDotProps))))));
28
50
  })
29
51
  : undefined;
30
- }, [anchorOrigin, children, dotComponent, dotProps, overlap, variant]);
31
- return (React.createElement(MuiBadge, __assign({}, rest, { variant: variant, anchorOrigin: anchorOrigin, component: (component || CustomDotBadge), overlap: overlap !== 'none' ? overlap : undefined, ref: ref, classes: classes }), children));
52
+ }, [isDot, dotProps, overlap, anchorOrigin, children, dotComponent]);
53
+ return (React.createElement(MuiBadge, __assign({}, rest, { variant: variant, anchorOrigin: anchorOrigin, component: (component || CustomDotBadge),
54
+ // TODO: that as any for ts v3.8 still not support pick variable out of if check
55
+ overlap: notPassOverlapToMui ? overlap : undefined, ref: badgeRef, classes: classes }), children));
32
56
  });
33
57
  var RcBadge = styled(_RcBadge)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), BadgeStyle);
34
58
  RcBadge.defaultProps = {
@@ -1,8 +1,9 @@
1
1
  import { __makeTemplateObject } from "tslib";
2
2
  import { css, fakeBorder, getParsePaletteColor, } from '../../../foundation';
3
- import { RcBadgeClasses } from '../utils';
3
+ import { RcBadgeClasses, roundBadgeMarginKey } from '../utils';
4
4
  export var BadgeStyle = function (_a) {
5
5
  var badgeContent = _a.badgeContent, overlap = _a.overlap, variant = _a.variant, textColor = _a.textColor, borderColor = _a.borderColor, max = _a.max, color = _a.color;
6
+ var overlapRound = overlap === 'round';
6
7
  var overlapNone = overlap === 'none';
7
8
  var isStandard = variant !== 'dot';
8
9
  var borderCurrColor = getParsePaletteColor(borderColor, null, false);
@@ -10,10 +11,10 @@ export var BadgeStyle = function (_a) {
10
11
  var manyChar = (['number', 'string'].includes(typeof badgeContent) &&
11
12
  ("" + badgeContent).length !== 1) ||
12
13
  (max && max > 0 && +badgeContent > max);
13
- return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n .", " {\n color: ", ";\n background-color: ", ";\n\n ", ";\n\n ", "\n\n ", "\n }\n "], ["\n .", " {\n color: ", ";\n background-color: ", ";\n\n ",
14
+ return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n .", " {\n margin: ", ";\n color: ", ";\n background-color: ", ";\n\n ", ";\n\n ", "\n\n ", "\n }\n "], ["\n .", " {\n margin: ", ";\n color: ", ";\n background-color: ", ";\n\n ",
14
15
  ";\n\n ",
15
16
  "\n\n ",
16
- "\n }\n "])), RcBadgeClasses.badge, getParsePaletteColor(textColor, null, false), getParsePaletteColor(color, null, false), borderColor && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n ", "\n "], ["\n ",
17
+ "\n }\n "])), RcBadgeClasses.badge, overlapRound && "var(" + roundBadgeMarginKey + ")", getParsePaletteColor(textColor, null, false), getParsePaletteColor(color, null, false), borderColor && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n ", "\n "], ["\n ",
17
18
  "\n "])), isStandard
18
19
  ? fakeBorder({ color: borderCurrColor, radius: 'round' })
19
20
  : css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n border-color: ", ";\n "], ["\n border-color: ", ";\n "])), borderCurrColor)), isStandard && css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n height: 18px;\n min-width: 18px;\n padding: ", ";\n "], ["\n height: 18px;\n min-width: 18px;\n padding: ", ";\n "])), !manyChar && 0), overlapNone && css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n position: unset;\n transform: unset;\n\n &.", " {\n transform: scale(0);\n }\n "], ["\n position: unset;\n transform: unset;\n\n &.", " {\n transform: scale(0);\n }\n "])), RcBadgeClasses.invisible));
@@ -1,2 +1,13 @@
1
1
  import { RcClasses } from '../../../foundation';
2
2
  export var RcBadgeClasses = RcClasses(['badge', 'invisible'], 'RcBadge');
3
+ export var roundBadgeMarginKey = '--badge-round-margin';
4
+ var sqrt2 = Math.sqrt(2);
5
+ var powBy = sqrt2 - 1; // 0.292893218813452
6
+ /**
7
+ * a circle inside square, that diagonal of a square to circle distance to be the round offset.
8
+ * @param x that circle r
9
+ * @returns the distance of that offset
10
+ */
11
+ export var getRoundOffset = function (x) {
12
+ return (x * powBy) / sqrt2;
13
+ };
@@ -1 +1,2 @@
1
1
  export * from './BadgeUtils';
2
+ export * from './useRoundBadgeOffset';
@@ -0,0 +1,23 @@
1
+ import { __read } from "tslib";
2
+ import { useRef } from 'react';
3
+ import { px, useResizeObserver } from '../../../foundation';
4
+ import { getRoundOffset, roundBadgeMarginKey } from './BadgeUtils';
5
+ /**
6
+ * modify round badge offset to correct position,
7
+ * only trigger when host element height change
8
+ * @param badgeRef badge
9
+ */
10
+ export var useRoundBadgeOffset = function (badgeRef) {
11
+ var currHeightRef = useRef(0);
12
+ // eslint-disable-next-line react-hooks/rules-of-hooks
13
+ useResizeObserver(badgeRef, function (_a) {
14
+ var _b = __read(_a, 1), badgeObsEntry = _b[0];
15
+ var height = badgeObsEntry.contentRect.height;
16
+ var element = badgeObsEntry.target;
17
+ if (currHeightRef.current === height)
18
+ return;
19
+ currHeightRef.current = height;
20
+ var offset = getRoundOffset(height / 2);
21
+ element.style.setProperty(roundBadgeMarginKey, px(offset));
22
+ }, { mode: 'throttle' });
23
+ };
@@ -1,15 +1,17 @@
1
1
  import { __assign, __makeTemplateObject, __rest } from "tslib";
2
- import React, { forwardRef, useMemo, } from 'react';
2
+ import React, { forwardRef, useLayoutEffect, useMemo, useRef, } from 'react';
3
3
  import clsx from 'clsx';
4
4
  import MuiChip from '@material-ui/core/Chip';
5
5
  import { DeleteCircle } from '@ringcentral/juno-icon';
6
- import { combineClasses, isRcElement, omit, styled, useThemeProps, } from '../../foundation';
6
+ import { combineClasses, isRcElement, omit, removeClassName, styled, useForkRef, useThemeProps, } from '../../foundation';
7
7
  import { RcIconButton } from '../Buttons/IconButton';
8
8
  import { ChipStyle } from './styles';
9
9
  import { RcChipClasses } from './utils';
10
10
  var _RcChip = forwardRef(function (inProps, ref) {
11
11
  var props = useThemeProps({ props: inProps, name: 'RcChip' });
12
- var AvatarProp = props.Avatar, deleteTooltip = props.deleteTooltip, deleteAutomationId = props.deleteAutomationId, isError = props.isError, classesProp = props.classes, _a = props.avatar, avatarProp = _a === void 0 ? AvatarProp : _a, _b = props.error, error = _b === void 0 ? isError : _b, id = props.id, label = props.label, disabled = props.disabled, deleteIconProp = props.deleteIcon, deleteIconProps = props.deleteIconProps, tabIndex = props.tabIndex, focused = props.focused, color = props.color, className = props.className, rest = __rest(props, ["Avatar", "deleteTooltip", "deleteAutomationId", "isError", "classes", "avatar", "error", "id", "label", "disabled", "deleteIcon", "deleteIconProps", "tabIndex", "focused", "color", "className"]);
12
+ var AvatarProp = props.Avatar, deleteTooltip = props.deleteTooltip, deleteAutomationId = props.deleteAutomationId, isError = props.isError, backgroundColor = props.backgroundColor, classesProp = props.classes, _a = props.avatar, avatarProp = _a === void 0 ? AvatarProp : _a, _b = props.error, error = _b === void 0 ? isError : _b, id = props.id, label = props.label, disabled = props.disabled, deleteIconProp = props.deleteIcon, deleteIconProps = props.deleteIconProps, tabIndex = props.tabIndex, focused = props.focused, color = props.color, className = props.className, rest = __rest(props, ["Avatar", "deleteTooltip", "deleteAutomationId", "isError", "backgroundColor", "classes", "avatar", "error", "id", "label", "disabled", "deleteIcon", "deleteIconProps", "tabIndex", "focused", "color", "className"]);
13
+ var innerRef = useRef(null);
14
+ var chipRef = useForkRef(innerRef, ref);
13
15
  var combinedClasses = useMemo(function () { return combineClasses(RcChipClasses, classesProp); }, [classesProp]);
14
16
  var classes = useMemo(function () { return omit(combinedClasses, ['focused']); }, [combinedClasses]);
15
17
  var deleteIcon = useMemo(function () {
@@ -37,11 +39,17 @@ var _RcChip = forwardRef(function (inProps, ref) {
37
39
  }
38
40
  return undefined;
39
41
  }, [avatarProp]);
40
- return (React.createElement(MuiChip, __assign({ ref: ref, id: id, tabIndex: disabled ? -1 : tabIndex, label: label, disabled: disabled, classes: classes, className: clsx(className, focused ? combinedClasses.focused : undefined), avatar: avatar, deleteIcon: deleteIcon, "data-test-automation-class": "selected-item", "data-test-automation-value": id ? id : label, "data-is-error": error }, rest)));
42
+ // TODO: can be removed when upgrade to v5
43
+ // * need remove not need MuiChip-deletable for render correct
44
+ useLayoutEffect(function () {
45
+ removeClassName(innerRef, 'MuiChip-deletable');
46
+ });
47
+ return (React.createElement(MuiChip, __assign({ ref: chipRef, id: id, tabIndex: disabled ? -1 : tabIndex, label: label, disabled: disabled, classes: classes, className: clsx(className, focused ? combinedClasses.focused : undefined), avatar: avatar, deleteIcon: deleteIcon, "data-test-automation-class": "selected-item", "data-test-automation-value": id ? id : label, "data-is-error": error }, rest)));
41
48
  });
42
49
  var RcChip = styled(_RcChip)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), ChipStyle);
43
50
  RcChip.defaultProps = {
44
51
  tabIndex: 0,
52
+ // FIXME: after implement click state, that can be remove
45
53
  clickable: false,
46
54
  };
47
55
  RcChip.displayName = 'RcChip';
@@ -1,17 +1,48 @@
1
1
  import { __assign, __makeTemplateObject } from "tslib";
2
- import { css, ellipsis, fakeBorder, focusVisible, focusVisibleColor, getParsePaletteColor, nonTouchHoverMedia, palette2, radius, setOpacity, spacing, typography, } from '../../../foundation';
3
- import { disabledColor, textColor } from '../../Forms/TextField/styles';
2
+ import { css, darken, ellipsis, fakeBorder, focusVisible, focusVisibleColor, getParsePaletteColor, lighten, nonTouchHoverMedia, palette2, radius, setOpacity, spacing, typography, } from '../../../foundation';
3
+ import { disabledColor } from '../../Forms/TextField/styles';
4
4
  import { RcChipClasses } from '../utils';
5
5
  var defaultBgColor = palette2('action', 'grayDark');
6
+ var defaultTextColor = palette2('neutral', 'f06');
6
7
  var errorBgColor = palette2('danger', 'f02');
8
+ var defaultOutlineBgColor = palette2('neutral', 'b01');
7
9
  function fakePseudoRoundBorder(addOptions) {
8
10
  return fakeBorder(__assign({ pseudo: true, radius: 'round' }, addOptions));
9
11
  }
12
+ export var chipColor = function (_a) {
13
+ var focusedBorderColor = _a.focusedBorderColor, variant = _a.variant, error = _a.error, normalBorderColor = _a.normalBorderColor, interactiveBackgroundColor = _a.interactiveBackgroundColor, normalColor = _a.normalColor, normalBackgroundColor = _a.normalBackgroundColor, color = _a.color, backgroundColor = _a.backgroundColor, theme = _a.theme;
14
+ var outlined = variant === 'outlined';
15
+ var hoverColorLighten = error || outlined;
16
+ if (outlined &&
17
+ !error &&
18
+ // mean have set custom background color
19
+ (color || backgroundColor)) {
20
+ normalColor = focusedBorderColor;
21
+ normalBorderColor = focusedBorderColor;
22
+ interactiveBackgroundColor = focusedBorderColor;
23
+ var notCustomBackground = !backgroundColor || backgroundColor === color;
24
+ // when color be same make that color have lighten
25
+ if (notCustomBackground) {
26
+ normalBackgroundColor =
27
+ theme.palette.type === 'light'
28
+ ? lighten(normalBackgroundColor, 0.92)
29
+ : darken(normalBackgroundColor, 0.72);
30
+ }
31
+ }
32
+ return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: ", ";\n background-color: ", ";\n\n ", ";\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &.", ", ", " {\n ", ";\n\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n "], ["\n color: ", ";\n background-color: ", ";\n\n ", ";\n\n ", " {\n &:hover {\n background-color: ",
33
+ ";\n }\n }\n\n &.", ", ", " {\n ", ";\n\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n "])), normalColor, normalBackgroundColor, fakePseudoRoundBorder({ color: normalBorderColor }), nonTouchHoverMedia, setOpacity(interactiveBackgroundColor, hoverColorLighten ? '08' : '12'), RcChipClasses.focused, focusVisible, fakePseudoRoundBorder({ color: focusedBorderColor }), setOpacity(interactiveBackgroundColor, '16'), setOpacity(interactiveBackgroundColor, '24'));
34
+ };
10
35
  export var ChipStyle = function (props) {
11
- var isError = props.isError, _a = props.error, error = _a === void 0 ? isError : _a, colorProp = props.color;
36
+ var isError = props.isError, _a = props.error, error = _a === void 0 ? isError : _a, colorProp = props.color, variant = props.variant, _b = props.backgroundColor, backgroundColorProp = _b === void 0 ? colorProp : _b;
37
+ var parsedBackgroundColor = getParsePaletteColor(backgroundColorProp, defaultOutlineBgColor);
12
38
  var color = getParsePaletteColor(colorProp, focusVisibleColor);
13
- return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n height: 28px;\n box-sizing: border-box;\n padding: ", ";\n background-color: ", ";\n color: ", ";\n position: relative;\n border-radius: ", ";\n ", ";\n\n ", ";\n ", ";\n\n &.", ", ", " {\n ", ";\n\n background-color: ", ";\n }\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &.", ", &:focus {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n\n &.", " {\n color: ", ";\n opacity: 1;\n }\n\n ", ";\n\n .", " {\n color: ", ";\n margin-left: 0px;\n margin-right: -4px;\n\n span {\n width: auto;\n height: auto;\n }\n }\n "], ["\n height: 28px;\n box-sizing: border-box;\n padding: ", ";\n background-color: ", ";\n color: ", ";\n position: relative;\n border-radius: ", ";\n ", ";\n\n ", ";\n ", ";\n\n &.", ", ", " {\n ", ";\n\n background-color: ",
14
- ";\n }\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &.", ", &:focus {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n\n &.", " {\n color: ", ";\n opacity: 1;\n }\n\n ",
15
- ";\n\n .", " {\n color: ", ";\n margin-left: 0px;\n margin-right: -4px;\n\n span {\n width: auto;\n height: auto;\n }\n }\n "])), spacing(0.5), palette2('neutral', 'b03'), textColor, radius('round'), ellipsis, typography('body1'), fakePseudoRoundBorder(), RcChipClasses.focused, focusVisible, fakePseudoRoundBorder({ color: color }), setOpacity(error ? errorBgColor : defaultBgColor, '08'), nonTouchHoverMedia, setOpacity(defaultBgColor, '12'), RcChipClasses.focused, setOpacity(defaultBgColor, '16'), setOpacity(defaultBgColor, '24'), RcChipClasses.disabled, disabledColor, error && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n &:not(.", ") {\n color: ", ";\n ", ";\n\n background-color: ", ";\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &:focus {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n }\n "], ["\n &:not(.", ") {\n color: ", ";\n ", ";\n\n background-color: ", ";\n\n ", " {\n &:hover {\n background-color: ", ";\n }\n }\n\n &:focus {\n background-color: ", ";\n }\n\n &:active {\n background-color: ", ";\n }\n }\n "])), RcChipClasses.disabled, palette2('danger', 'f02'), fakePseudoRoundBorder({ color: palette2('danger', 'f02') }), palette2('danger', 'b01'), nonTouchHoverMedia, setOpacity(errorBgColor, '08'), setOpacity(errorBgColor, '16'), setOpacity(errorBgColor, '24')), RcChipClasses.avatar, palette2('neutral', 'b01'));
39
+ var outlined = variant === 'outlined';
40
+ var normalBackgroundColor = outlined
41
+ ? parsedBackgroundColor
42
+ : palette2('neutral', 'b03');
43
+ return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n height: 28px;\n box-sizing: border-box;\n padding: ", ";\n\n position: relative;\n border-radius: ", ";\n border: ", ";\n\n ", ";\n ", ";\n\n ", ";\n\n &.", " {\n color: ", ";\n opacity: 1;\n }\n\n ", ";\n\n .", " {\n color: ", ";\n margin-left: 0px;\n margin-right: -4px;\n\n span {\n width: auto;\n height: auto;\n }\n }\n "], ["\n height: 28px;\n box-sizing: border-box;\n padding: ", ";\n\n position: relative;\n border-radius: ", ";\n border: ", ";\n\n ", ";\n ", ";\n\n ",
44
+ ";\n\n &.", " {\n color: ", ";\n opacity: 1;\n }\n\n ",
45
+ ";\n\n .", " {\n color: ", ";\n margin-left: 0px;\n margin-right: -4px;\n\n span {\n width: auto;\n height: auto;\n }\n }\n "])), spacing(0.5), radius('round'), outlined && 'none', ellipsis, typography('body1'), chipColor(__assign(__assign({}, props), { error: error, normalColor: defaultTextColor, normalBackgroundColor: normalBackgroundColor, focusedBorderColor: color, normalBorderColor: outlined ? palette2('neutral', 'l02') : undefined, interactiveBackgroundColor: defaultBgColor })), RcChipClasses.disabled, disabledColor, error && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n &:not(.", ") {\n ", ";\n }\n "], ["\n &:not(.", ") {\n ",
46
+ ";\n }\n "])), RcChipClasses.disabled, chipColor(__assign(__assign({}, props), { error: error, normalColor: errorBgColor, normalBackgroundColor: palette2('danger', 'b01'), focusedBorderColor: errorBgColor, normalBorderColor: errorBgColor, interactiveBackgroundColor: errorBgColor }))), RcChipClasses.avatar, palette2('neutral', 'b01'));
16
47
  };
17
- var templateObject_1, templateObject_2;
48
+ var templateObject_1, templateObject_2, templateObject_3;
@@ -20,7 +20,7 @@ export var findChildrenByKey = function (childrenProp, key) {
20
20
  var _MoreMenuTabs = forwardRef(function (props, ref) {
21
21
  var orientation = props.orientation, childrenProp = props.children, valueProp = props.value, onChange = props.onChange, _a = props.MoreButtonProps, MoreButtonProps = _a === void 0 ? {} : _a, rest = __rest(props, ["orientation", "children", "value", "onChange", "MoreButtonProps"]);
22
22
  var onGroupInfoChange = MoreButtonProps.onGroupInfoChange, MoreButtonPropsRest = __rest(MoreButtonProps, ["onGroupInfoChange"]);
23
- var prevChildren = usePrevious(function () { return childrenProp; });
23
+ var prevChildrenProp = usePrevious(function () { return childrenProp; });
24
24
  var isVertical = orientation === 'vertical';
25
25
  var oriStr = isVertical ? 'height' : 'width';
26
26
  var innerRef = useRef(null);
@@ -52,42 +52,39 @@ var _MoreMenuTabs = forwardRef(function (props, ref) {
52
52
  throttleTabsSizeChange(obj);
53
53
  }, { mode: 'none' });
54
54
  var tabsSize = tabsSizeRef.current;
55
- // init all children elm
56
- if (tabRefsMapRef.current === undefined) {
57
- var getRefsMapAndSetDefaultTabChildren = function () {
58
- var tabRefs = new Map();
59
- var tabsTabDefaultChild = [];
60
- React.Children.forEach(childrenProp, function (child, index) {
61
- var _a = child.props, ref = _a.ref, value = _a.value;
62
- var innerRef = createRef();
63
- var tabRef = ref ? useForkRef(innerRef, ref) : innerRef;
64
- var childrenValue = value || index;
65
- var children = React.cloneElement(child, {
66
- ref: tabRef,
67
- value: childrenValue,
68
- });
69
- var keyString = typeof child.key === 'string' ? child.key : '';
70
- tabRefs.set(getKey(keyString, index), {
71
- ref: tabRef,
72
- size: null,
73
- index: index,
74
- value: childrenValue,
75
- });
76
- tabsTabDefaultChild.push(children);
55
+ // initial tabRefsMapRef and tabsTabChildRef
56
+ if (tabRefsMapRef.current === undefined ||
57
+ prevChildrenProp !== childrenProp) {
58
+ var tabRefs_1 = new Map();
59
+ var tabsTabDefaultChild_1 = [];
60
+ React.Children.forEach(childrenProp, function (child, index) {
61
+ var _a = child.props, ref = _a.ref, value = _a.value;
62
+ var innerRef = createRef();
63
+ var tabRef = ref ? useForkRef(innerRef, ref) : innerRef;
64
+ var childrenValue = value || index;
65
+ var children = React.cloneElement(child, {
66
+ ref: tabRef,
67
+ value: childrenValue,
77
68
  });
78
- return {
79
- tabRefs: tabRefs,
80
- tabsTabDefaultChild: tabsTabDefaultChild,
81
- };
82
- };
83
- var _d = getRefsMapAndSetDefaultTabChildren(), tabRefs = _d.tabRefs, tabsTabDefaultChild = _d.tabsTabDefaultChild;
84
- tabRefsMapRef.current = tabRefs;
85
- tabsTabChildRef.current = tabsTabDefaultChild;
69
+ var keyString = typeof child.key === 'string' ? child.key : '';
70
+ tabRefs_1.set(getKey(keyString, index), {
71
+ ref: tabRef,
72
+ size: null,
73
+ index: index,
74
+ value: childrenValue,
75
+ });
76
+ tabsTabDefaultChild_1.push(children);
77
+ });
78
+ tabRefsMapRef.current = tabRefs_1;
79
+ tabsTabChildRef.current = tabsTabDefaultChild_1;
86
80
  }
87
- // get all size when first render
81
+ // get real render size when render
88
82
  useEffect(function () {
83
+ if (childrenProp === prevChildrenProp) {
84
+ return;
85
+ }
89
86
  var tabRefsMap = tabRefsMapRef.current;
90
- if ((tabRefsMap === null || tabRefsMap === void 0 ? void 0 : tabRefsMap.size) !== undefined) {
87
+ if (tabRefsMap && tabRefsMap.size !== 0) {
91
88
  var allTabsSize_1 = __assign({}, DEFAULT_SIZE);
92
89
  tabRefsMap.forEach(function (value, key) {
93
90
  var _a = getDomBoundingClientSize(value.ref.current), width = _a.width, height = _a.height;
@@ -108,8 +105,7 @@ var _MoreMenuTabs = forwardRef(function (props, ref) {
108
105
  var size = getDomBoundingClientSize(moreElm);
109
106
  moreTabSizeRef.current = size;
110
107
  }
111
- // eslint-disable-next-line react-hooks/exhaustive-deps
112
- }, []);
108
+ }, [childrenProp, prevChildrenProp]);
113
109
  useEffect(function () {
114
110
  var _a;
115
111
  var currSelectTabItem;
@@ -188,11 +184,11 @@ var _MoreMenuTabs = forwardRef(function (props, ref) {
188
184
  }
189
185
  };
190
186
  if (tabsSize.width !== 0 && tabsSize.height !== 0) {
191
- // computed: 1.resize 2. valueProp 3.moreMenuClick
187
+ // computed: 1.resize 2. valueProp 3.moreMenuClick 4.children change
192
188
  // not computed: visible tab change
193
189
  if (((_a = groupingRef.current) === null || _a === void 0 ? void 0 : _a.tabs.includes((currSelectTabItem === null || currSelectTabItem === void 0 ? void 0 : currSelectTabItem[0]) || '')) &&
194
190
  !hasResizeRef.current &&
195
- prevChildren === childrenProp) {
191
+ prevChildrenProp === childrenProp) {
196
192
  return;
197
193
  }
198
194
  computeTabChild(tabsSize);
@@ -200,10 +196,10 @@ var _MoreMenuTabs = forwardRef(function (props, ref) {
200
196
  }
201
197
  }, [
202
198
  childrenProp,
199
+ prevChildrenProp,
203
200
  isVertical,
204
201
  onGroupInfoChange,
205
202
  oriStr,
206
- prevChildren,
207
203
  tabsSize,
208
204
  valueProp,
209
205
  ]);
@@ -10,9 +10,11 @@ var _RcTabs = forwardRef(function (inProps, ref) {
10
10
  var classesProp = props.classes, childrenProp = props.children, variantProp = props.variant, size = props.size, MoreButtonProps = props.MoreButtonProps, rest = __rest(props, ["classes", "children", "variant", "size", "MoreButtonProps"]);
11
11
  var isMore = variantProp === 'moreMenu';
12
12
  var classes = useMemo(function () { return combineProps(RcTabsClasses, classesProp); }, [classesProp]);
13
- var children = React.Children.map(childrenProp, function (child) {
14
- return React.cloneElement(child, { size: size });
15
- });
13
+ var children = useMemo(function () {
14
+ return React.Children.map(childrenProp, function (child) {
15
+ return React.cloneElement(child, { size: size });
16
+ });
17
+ }, [childrenProp, size]);
16
18
  if (isMore) {
17
19
  return (React.createElement(MoreMenuTabs, __assign({}, rest, { ref: ref, classes: classes, size: size, MoreButtonProps: MoreButtonProps }), children));
18
20
  }
@@ -1,15 +1,44 @@
1
- export function removeClassName(elmRef, removeClass) {
1
+ /**
2
+ * remove className from element, default will not scan child nodes, if you want to scan child nodes, set `scanChildren` to `true`.
3
+ *
4
+ * @param elmRef target element reference
5
+ * @param removeClass className to remove, default will use class `includes` to check, if you want to use full match, set `fullMatch` to `true`
6
+ *
7
+ * @example
8
+ * ```js
9
+ * elm => <div class="abc bcd efg abc-def"></div>
10
+ *
11
+ * removeClassName(elmRef, 'bcd');
12
+ *
13
+ * elm => <div class="abc efg abc-def"></div>
14
+ *
15
+ * removeClassName(elmRef, 'abc');
16
+ * elm => <div class="efg"></div>
17
+ * ```
18
+ */
19
+ export function removeClassName(elmRef, removeClass, _a) {
20
+ var _b = _a === void 0 ? {} : _a, _c = _b.scanChildren, scanChildren = _c === void 0 ? false : _c, _d = _b.fullMatch, fullMatch = _d === void 0 ? false : _d;
2
21
  var elm = elmRef.current;
3
22
  if (!elm)
4
23
  return;
5
24
  if (elm.className.includes(removeClass)) {
6
- elm.className = cleanClass(elm, removeClass);
25
+ elm.className = cleanClass(elm, removeClass, fullMatch);
7
26
  }
8
- var icons = elm.querySelectorAll("." + removeClass);
9
- if ((icons === null || icons === void 0 ? void 0 : icons.length) > 0) {
10
- icons.forEach(function (x) { return (x.className = cleanClass(x, removeClass)); });
27
+ if (scanChildren) {
28
+ var nodes = elm.querySelectorAll("[class*=\"" + removeClass + "\"]");
29
+ if ((nodes === null || nodes === void 0 ? void 0 : nodes.length) > 0) {
30
+ nodes.forEach(function (node) { return (node.className = cleanClass(node, removeClass, fullMatch)); });
31
+ }
11
32
  }
12
33
  }
13
- function cleanClass(elm, removeClass) {
14
- return elm.className.replace(removeClass, '').trim();
34
+ function cleanClass(elm, removeClass, fullMatch) {
35
+ return elm.className
36
+ .trim()
37
+ .split(/\s+/)
38
+ .filter(function (className) {
39
+ return !(fullMatch
40
+ ? className === removeClass
41
+ : className.includes(removeClass));
42
+ })
43
+ .join(' ');
15
44
  }
@@ -1,2 +1,35 @@
1
1
  import { RefObject } from 'react';
2
- export declare function removeClassName(elmRef: RefObject<HTMLElement>, removeClass: string): void;
2
+ declare type RemoveClassNameOptions = {
3
+ /**
4
+ * make replace also scan child nodes
5
+ *
6
+ * @default false
7
+ */
8
+ scanChildren?: boolean;
9
+ /**
10
+ * is that should fullMatch class name
11
+ *
12
+ * @default false
13
+ */
14
+ fullMatch?: boolean;
15
+ };
16
+ /**
17
+ * remove className from element, default will not scan child nodes, if you want to scan child nodes, set `scanChildren` to `true`.
18
+ *
19
+ * @param elmRef target element reference
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
+ *
22
+ * @example
23
+ * ```js
24
+ * elm => <div class="abc bcd efg abc-def"></div>
25
+ *
26
+ * removeClassName(elmRef, 'bcd');
27
+ *
28
+ * elm => <div class="abc efg abc-def"></div>
29
+ *
30
+ * removeClassName(elmRef, 'abc');
31
+ * elm => <div class="efg"></div>
32
+ * ```
33
+ */
34
+ export declare function removeClassName(elmRef: RefObject<HTMLElement>, removeClass: string, { scanChildren, fullMatch }?: RemoveClassNameOptions): void;
35
+ export {};
@@ -1,18 +1,47 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- function removeClassName(elmRef, removeClass) {
3
+ /**
4
+ * remove className from element, default will not scan child nodes, if you want to scan child nodes, set `scanChildren` to `true`.
5
+ *
6
+ * @param elmRef target element reference
7
+ * @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
+ * @example
10
+ * ```js
11
+ * elm => <div class="abc bcd efg abc-def"></div>
12
+ *
13
+ * removeClassName(elmRef, 'bcd');
14
+ *
15
+ * elm => <div class="abc efg abc-def"></div>
16
+ *
17
+ * removeClassName(elmRef, 'abc');
18
+ * elm => <div class="efg"></div>
19
+ * ```
20
+ */
21
+ function removeClassName(elmRef, removeClass, _a) {
22
+ var _b = _a === void 0 ? {} : _a, _c = _b.scanChildren, scanChildren = _c === void 0 ? false : _c, _d = _b.fullMatch, fullMatch = _d === void 0 ? false : _d;
4
23
  var elm = elmRef.current;
5
24
  if (!elm)
6
25
  return;
7
26
  if (elm.className.includes(removeClass)) {
8
- elm.className = cleanClass(elm, removeClass);
27
+ elm.className = cleanClass(elm, removeClass, fullMatch);
9
28
  }
10
- var icons = elm.querySelectorAll("." + removeClass);
11
- if ((icons === null || icons === void 0 ? void 0 : icons.length) > 0) {
12
- icons.forEach(function (x) { return (x.className = cleanClass(x, removeClass)); });
29
+ if (scanChildren) {
30
+ var nodes = elm.querySelectorAll("[class*=\"" + removeClass + "\"]");
31
+ if ((nodes === null || nodes === void 0 ? void 0 : nodes.length) > 0) {
32
+ nodes.forEach(function (node) { return (node.className = cleanClass(node, removeClass, fullMatch)); });
33
+ }
13
34
  }
14
35
  }
15
36
  exports.removeClassName = removeClassName;
16
- function cleanClass(elm, removeClass) {
17
- return elm.className.replace(removeClass, '').trim();
37
+ function cleanClass(elm, removeClass, fullMatch) {
38
+ return elm.className
39
+ .trim()
40
+ .split(/\s+/)
41
+ .filter(function (className) {
42
+ return !(fullMatch
43
+ ? className === removeClass
44
+ : className.includes(removeClass));
45
+ })
46
+ .join(' ');
18
47
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ringcentral/juno",
3
- "version": "2.0.3",
3
+ "version": "2.1.2",
4
4
  "author": "RingCentral",
5
5
  "license": "MIT",
6
6
  "bugs": {