@televet/kibble-ui 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ import { AvatarProps as CAvatarProps, Placement } from '@chakra-ui/react';
2
+ import { CSSProperties } from 'react';
3
+ import { AvatarSize } from './avatar.types';
4
+ export declare enum AvatarVariant {
5
+ Green = "green",
6
+ Red = "red",
7
+ Blue = "blue",
8
+ Comet = "comet",
9
+ Number = "number",
10
+ Dashed = "dashed",
11
+ Image = "image"
12
+ }
13
+ export interface AvatarProps extends CAvatarProps {
14
+ name: string;
15
+ size?: AvatarSize;
16
+ isClinic?: boolean;
17
+ showTooltip?: boolean;
18
+ tooltipPlacement?: Placement;
19
+ style?: CSSProperties;
20
+ handleClick?: () => void;
21
+ showRemoveButton?: boolean;
22
+ handleRemoveButtonClick?: () => void;
23
+ variant?: AvatarVariant;
24
+ tooltipText?: string;
25
+ }
26
+ export declare const Avatar: ({ name, src, isClinic, size, showTooltip, tooltipPlacement, style, handleClick, showRemoveButton, handleRemoveButtonClick, variant, tooltipText, ...rest }: AvatarProps) => JSX.Element;
@@ -0,0 +1,2 @@
1
+ import { ComponentStyleConfig } from '@chakra-ui/react';
2
+ export declare const AvatarConfig: ComponentStyleConfig;
@@ -0,0 +1 @@
1
+ export declare type AvatarSize = 'xs' | 'sm' | 'md' | 'lg';
@@ -0,0 +1,3 @@
1
+ export * from './avatar.component';
2
+ export * from './avatar.types';
3
+ export * from './avatar.config';
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { AvatarProps, AvatarSize } from 'components/Avatar';
3
+ export interface AvatarGroupProps {
4
+ avatars: AvatarProps[];
5
+ max?: number;
6
+ size?: AvatarSize;
7
+ handleAddButtonClick?: () => void;
8
+ showAddButton?: boolean;
9
+ addButtonTooltipText?: string;
10
+ showRemoveAvatarButton?: boolean;
11
+ handleRemoveButtonClick?: () => void;
12
+ }
13
+ export declare const AvatarGroup: ({ avatars, max, size, handleAddButtonClick, showAddButton, addButtonTooltipText, showRemoveAvatarButton, handleRemoveButtonClick, }: AvatarGroupProps) => JSX.Element;
@@ -0,0 +1,6 @@
1
+ export declare const avatarSizeMap: {
2
+ xs: string;
3
+ sm: string;
4
+ md: string;
5
+ lg: string;
6
+ };
@@ -0,0 +1 @@
1
+ export * from './avatarGroup.component';
@@ -1,4 +1,3 @@
1
1
  export * from './textarea.component';
2
2
  export * from './textarea.types';
3
3
  export * from './textarea.config';
4
- export * from './textarea.config';
@@ -3,6 +3,7 @@ export * from './Icon';
3
3
  export * from './Logo';
4
4
  export * from './Typography';
5
5
  export * from './Textarea';
6
+ export * from './Avatar';
6
7
  export * from './Button';
7
8
  export * from './Tooltip';
8
9
  export { Box, BoxProps, Center, CenterProps, Flex, FlexProps, Hide, HideProps, Show, ShowProps, Tbody, Td, Th, Thead, Tr, VStack, HStack, } from '@chakra-ui/react';
package/build/index.js CHANGED
@@ -2831,6 +2831,8 @@ var TextareaConfig = {
2831
2831
  },
2832
2832
  };
2833
2833
 
2834
+ var useAdaptiveColor = function (color) { return react.useColorModeValue(color.light, color.dark); };
2835
+
2834
2836
  var camelCaseToLabel = function (s) {
2835
2837
  return s.replace(/([A-Z])/g, ' $1').replace(/^\w/, function (c) { return c.toUpperCase(); });
2836
2838
  };
@@ -2868,6 +2870,222 @@ var toTitleCase = function (s) {
2868
2870
  .join('');
2869
2871
  };
2870
2872
 
2873
+ var Tooltip = function (_a) {
2874
+ var children = _a.children, label = _a.label, _b = _a.openDelay, openDelay = _b === void 0 ? 350 : _b, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.titleCaseLabel, titleCaseLabel = _d === void 0 ? true : _d, rest = __rest(_a, ["children", "label", "openDelay", "placement", "titleCaseLabel"]);
2875
+ var components = useTheme().components;
2876
+ var bg = useAdaptiveColor(components.Tooltip.color);
2877
+ var l = titleCaseLabel ? toTitleCase(label.toLowerCase()) : label;
2878
+ return (React__default["default"].createElement(react.Tooltip, __assign({ hasArrow: true, arrowSize: 10, label: l, bg: bg, openDelay: openDelay, placement: placement }, rest), children));
2879
+ };
2880
+
2881
+ var TooltipGlobalStyle = {
2882
+ '[id^=tooltip]': {
2883
+ padding: '4px 8px 4px 8px !important',
2884
+ borderRadius: '4px !important',
2885
+ },
2886
+ };
2887
+ var TooltipConfig = {
2888
+ color: { light: semanticColors.background.dark, dark: semanticColors.background.light },
2889
+ };
2890
+
2891
+ exports.AvatarVariant = void 0;
2892
+ (function (AvatarVariant) {
2893
+ AvatarVariant["Green"] = "green";
2894
+ AvatarVariant["Red"] = "red";
2895
+ AvatarVariant["Blue"] = "blue";
2896
+ AvatarVariant["Comet"] = "comet";
2897
+ AvatarVariant["Number"] = "number";
2898
+ AvatarVariant["Dashed"] = "dashed";
2899
+ AvatarVariant["Image"] = "image";
2900
+ })(exports.AvatarVariant || (exports.AvatarVariant = {}));
2901
+ var getAvatarVariant = function (charCode) {
2902
+ if (charCode >= 65 && charCode <= 71) {
2903
+ return exports.AvatarVariant.Blue;
2904
+ }
2905
+ else if (charCode >= 72 && charCode <= 77) {
2906
+ return exports.AvatarVariant.Red;
2907
+ }
2908
+ else if (charCode >= 78 && charCode <= 84) {
2909
+ return exports.AvatarVariant.Green;
2910
+ }
2911
+ else {
2912
+ return exports.AvatarVariant.Comet;
2913
+ }
2914
+ };
2915
+ var Avatar = function (_a) {
2916
+ var name = _a.name, src = _a.src, _b = _a.isClinic, isClinic = _b === void 0 ? false : _b, _c = _a.size, size = _c === void 0 ? 'md' : _c, _d = _a.showTooltip, showTooltip = _d === void 0 ? true : _d, _e = _a.tooltipPlacement, tooltipPlacement = _e === void 0 ? 'bottom' : _e, style = _a.style, handleClick = _a.handleClick, showRemoveButton = _a.showRemoveButton, handleRemoveButtonClick = _a.handleRemoveButtonClick, variant = _a.variant, tooltipText = _a.tooltipText, rest = __rest(_a, ["name", "src", "isClinic", "size", "showTooltip", "tooltipPlacement", "style", "handleClick", "showRemoveButton", "handleRemoveButtonClick", "variant", "tooltipText"]);
2917
+ var theme = useTheme();
2918
+ var _f = React.useState(!!src), isSrcValid = _f[0], setIsSrcValid = _f[1];
2919
+ var _g = React.useState(false), isHoveringAvatar = _g[0], setIsHoveringAvatar = _g[1];
2920
+ var _h = React.useState(false), isHoveringRemoveButton = _h[0], setIsHoveringRemoveButton = _h[1];
2921
+ var shouldHideRemoveButton = size === 'xs' || variant === exports.AvatarVariant.Dashed || variant === exports.AvatarVariant.Number;
2922
+ var _variant = isClinic ? 'comet' : getAvatarVariant(name.charCodeAt(0));
2923
+ if (isSrcValid) {
2924
+ _variant = 'image';
2925
+ }
2926
+ var avatarDynamicStyles = __assign({ cursor: handleClick ? 'pointer' : 'auto' }, style);
2927
+ var avatarMarkup = (React__default["default"].createElement(react.Avatar, __assign({}, rest, { name: name, src: src, size: size, style: avatarDynamicStyles, variant: variant || _variant, onClick: handleClick, onError: function () { return setIsSrcValid(false); }, onMouseEnter: function () { return setIsHoveringAvatar(true); }, onMouseLeave: function () { return setIsHoveringAvatar(false); } }), showRemoveButton && isHoveringAvatar && !shouldHideRemoveButton && (React__default["default"].createElement(react.Box, { backgroundColor: theme.colors.white, borderRadius: "9999px", cursor: "pointer", position: "absolute", top: "-4px", right: "-4px", onClick: handleRemoveButtonClick, onMouseEnter: function () { return setIsHoveringRemoveButton(true); }, onMouseLeave: function () { return setIsHoveringRemoveButton(false); } },
2928
+ React__default["default"].createElement(Icon, { name: "closeCircle", size: isHoveringRemoveButton ? 'sm' : 'xs', color: "default" })))));
2929
+ if (showTooltip) {
2930
+ return (React__default["default"].createElement(Tooltip, { label: tooltipText || name, placement: tooltipPlacement }, avatarMarkup));
2931
+ }
2932
+ return avatarMarkup;
2933
+ };
2934
+
2935
+ var AvatarConfig = {
2936
+ baseStyle: {
2937
+ container: {
2938
+ backgroundColor: coreColors.white,
2939
+ borderWidth: '2px',
2940
+ boxShadow: "0 0 0 1px ".concat(coreColors.white),
2941
+ _hover: {
2942
+ backgroundColor: coreColors.gray[50],
2943
+ zIndex: 2,
2944
+ },
2945
+ _active: {
2946
+ backgroundColor: coreColors.gray[100],
2947
+ },
2948
+ },
2949
+ label: {
2950
+ paddingTop: '1px',
2951
+ },
2952
+ },
2953
+ sizes: {
2954
+ xs: {
2955
+ container: {
2956
+ height: '24px',
2957
+ width: '24px',
2958
+ },
2959
+ label: {
2960
+ fontSize: '12px',
2961
+ fontWeight: '600',
2962
+ lineHeight: '18px',
2963
+ },
2964
+ },
2965
+ sm: {
2966
+ container: {
2967
+ height: '32px',
2968
+ width: '32px',
2969
+ },
2970
+ label: {
2971
+ fontSize: '14px',
2972
+ fontWeight: '400',
2973
+ lineHeight: '24px',
2974
+ paddingTop: 0,
2975
+ },
2976
+ },
2977
+ md: {
2978
+ container: {
2979
+ height: '36px',
2980
+ width: '36px',
2981
+ },
2982
+ label: {
2983
+ fontSize: '16px',
2984
+ fontWeight: '400',
2985
+ lineHeight: '24px',
2986
+ },
2987
+ },
2988
+ lg: {
2989
+ container: {
2990
+ height: '40px',
2991
+ width: '40px',
2992
+ },
2993
+ label: {
2994
+ fontSize: '16px',
2995
+ fontWeight: '400',
2996
+ lineHeight: '24px',
2997
+ },
2998
+ },
2999
+ },
3000
+ variants: {
3001
+ red: {
3002
+ container: {
3003
+ borderColor: coreColors.red[300],
3004
+ },
3005
+ label: {
3006
+ color: coreColors.red[300],
3007
+ },
3008
+ },
3009
+ green: {
3010
+ container: {
3011
+ borderColor: coreColors.green[400],
3012
+ },
3013
+ label: {
3014
+ color: coreColors.green[400],
3015
+ },
3016
+ },
3017
+ blue: {
3018
+ container: {
3019
+ borderColor: coreColors.blue[300],
3020
+ },
3021
+ label: {
3022
+ color: coreColors.blue[300],
3023
+ },
3024
+ },
3025
+ comet: {
3026
+ container: {
3027
+ backgroundColor: coreColors.comet[50],
3028
+ borderColor: coreColors.comet[400],
3029
+ _hover: {
3030
+ backgroundColor: coreColors.comet[100],
3031
+ },
3032
+ _active: {
3033
+ backgroundColor: coreColors.comet[200],
3034
+ },
3035
+ },
3036
+ label: {
3037
+ color: coreColors.comet[800],
3038
+ },
3039
+ },
3040
+ number: {
3041
+ container: {
3042
+ backgroundColor: coreColors.blue[800],
3043
+ border: 0,
3044
+ _hover: {
3045
+ backgroundColor: coreColors.blue[800], // 700
3046
+ },
3047
+ _active: {
3048
+ backgroundColor: coreColors.blue[800], // 600
3049
+ },
3050
+ },
3051
+ label: {
3052
+ color: coreColors.white,
3053
+ },
3054
+ },
3055
+ dashed: {
3056
+ container: {
3057
+ backgroundColor: coreColors.transparent,
3058
+ border: '1px dashed',
3059
+ borderColor: semanticColors.border.dark,
3060
+ boxShadow: 0,
3061
+ _hover: {
3062
+ backgroundColor: coreColors.blackAlpha[100],
3063
+ zIndex: 0,
3064
+ },
3065
+ _active: {
3066
+ backgroundColor: coreColors.blackAlpha[200],
3067
+ },
3068
+ },
3069
+ label: {
3070
+ color: adaptiveColors.icon.light.subtle,
3071
+ },
3072
+ },
3073
+ image: {
3074
+ container: {
3075
+ border: 0,
3076
+ _hover: {
3077
+ backgroundColor: coreColors.black,
3078
+ img: { opacity: 0.94 },
3079
+ },
3080
+ _active: {
3081
+ backgroundColor: coreColors.black,
3082
+ img: { opacity: 0.92 },
3083
+ },
3084
+ },
3085
+ },
3086
+ },
3087
+ };
3088
+
2871
3089
  var Button = React.forwardRef(function (props, ref) {
2872
3090
  var components = useTheme().components;
2873
3091
  var _a = components.Button[props.variant || 'primary'], variant = _a.variant, light = _a.light, dark = _a.dark;
@@ -3102,26 +3320,6 @@ var ButtonSizeConfig = {
3102
3320
  },
3103
3321
  };
3104
3322
 
3105
- var useAdaptiveColor = function (color) { return react.useColorModeValue(color.light, color.dark); };
3106
-
3107
- var Tooltip = function (_a) {
3108
- var children = _a.children, label = _a.label, _b = _a.openDelay, openDelay = _b === void 0 ? 350 : _b, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.titleCaseLabel, titleCaseLabel = _d === void 0 ? true : _d, rest = __rest(_a, ["children", "label", "openDelay", "placement", "titleCaseLabel"]);
3109
- var components = useTheme().components;
3110
- var bg = useAdaptiveColor(components.Tooltip.color);
3111
- var l = titleCaseLabel ? toTitleCase(label.toLowerCase()) : label;
3112
- return (React__default["default"].createElement(react.Tooltip, __assign({ hasArrow: true, arrowSize: 10, label: l, bg: bg, openDelay: openDelay, placement: placement }, rest), children));
3113
- };
3114
-
3115
- var TooltipGlobalStyle = {
3116
- '[id^=tooltip]': {
3117
- padding: '4px 8px 4px 8px !important',
3118
- borderRadius: '4px !important',
3119
- },
3120
- };
3121
- var TooltipConfig = {
3122
- color: { light: semanticColors.background.dark, dark: semanticColors.background.light },
3123
- };
3124
-
3125
3323
  // @ts-ignore
3126
3324
  var theme = react.extendTheme({
3127
3325
  styles: {
@@ -3154,6 +3352,7 @@ var theme = react.extendTheme({
3154
3352
  Drawer: DrawerConfig,
3155
3353
  Button: __assign(__assign({}, ButtonVariantConfig), { sizes: ButtonSizeConfig }),
3156
3354
  Tooltip: TooltipConfig,
3355
+ Avatar: AvatarConfig,
3157
3356
  },
3158
3357
  });
3159
3358
 
@@ -3211,6 +3410,8 @@ Object.defineProperty(exports, 'VStack', {
3211
3410
  enumerable: true,
3212
3411
  get: function () { return react.VStack; }
3213
3412
  });
3413
+ exports.Avatar = Avatar;
3414
+ exports.AvatarConfig = AvatarConfig;
3214
3415
  exports.Button = Button;
3215
3416
  exports.ButtonSizeConfig = ButtonSizeConfig;
3216
3417
  exports.ButtonVariantConfig = ButtonVariantConfig;