@televet/kibble-ui 1.16.0 → 1.16.1-beta.30eeeuh.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.
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Dict } from 'shared/types';
3
+ import { HelperTextAlignment } from './formControl.types';
3
4
  export interface WithFormControlProps {
4
5
  errorText?: string;
5
6
  helperText?: string;
@@ -11,6 +12,6 @@ export interface WithFormControlProps {
11
12
  label?: string;
12
13
  labelStyle?: Dict;
13
14
  formControlStyle?: Dict;
14
- helperTextAlignment?: 'start' | 'end';
15
+ helperTextAlignment?: HelperTextAlignment;
15
16
  }
16
17
  export declare function withFormControl<P extends WithFormControlProps>(Component: React.ComponentType<P>): React.FC<P>;
@@ -0,0 +1,2 @@
1
+ export declare type FormControlSize = 'sm' | 'md' | 'lg';
2
+ export declare type HelperTextAlignment = 'start' | 'end';
@@ -0,0 +1,6 @@
1
+ import { FormControlSize } from 'components/Forms/FormControl/formControl.types';
2
+ export interface ClearButtonProps {
3
+ handleClear?: () => void;
4
+ size?: FormControlSize;
5
+ }
6
+ export declare const ClearButton: ({ handleClear, size }: ClearButtonProps) => JSX.Element;
@@ -1,10 +1,14 @@
1
1
  import React, { ForwardedRef, ReactElement } from 'react';
2
2
  import { InputProps as CInputProps } from '@chakra-ui/react';
3
3
  import { WithFormControlProps } from '../FormControl/formControl.component';
4
+ import { FormControlSize } from '../FormControl/formControl.types';
4
5
  export interface TextInputProps extends WithFormControlProps, CInputProps {
5
6
  leftElement?: ReactElement;
6
7
  rightElement?: ReactElement;
7
8
  inputRef?: ForwardedRef<HTMLInputElement>;
9
+ isClearable?: boolean;
10
+ onClear?: (val: string | number | readonly string[]) => void;
11
+ size?: FormControlSize;
8
12
  }
9
13
  declare const WrappedTextInput: React.ForwardRefExoticComponent<TextInputProps & React.RefAttributes<HTMLInputElement>>;
10
14
  export { WrappedTextInput as TextInput };
package/build/index.js CHANGED
@@ -4006,12 +4006,42 @@ var FormControlConfig = {
4006
4006
 
4007
4007
  var TextareaConfig = __assign({}, FormControlConfig);
4008
4008
 
4009
- var TextInput = withFormControl(function (props) {
4009
+ var closeButtonSize = {
4010
+ sm: 5,
4011
+ md: 5,
4012
+ lg: 6,
4013
+ };
4014
+ var ClearButton = function (_a) {
4015
+ var handleClear = _a.handleClear, _b = _a.size, size = _b === void 0 ? 'md' : _b;
4016
+ var colors = useTheme().colors;
4017
+ return (React__default["default"].createElement(react.Button, { color: colors.icon.light.default, display: "inline-flex", minW: "auto", w: closeButtonSize[size], h: closeButtonSize[size], variant: "unstyled", opacity: 0.5, _hover: { opacity: 0.8 }, _active: { opacity: 1 }, mr: size === 'sm' ? 3 : 4, onClick: handleClear },
4018
+ React__default["default"].createElement(Icon, { name: "close", color: "currentColor", size: size === 'lg' ? 'sm' : 'xs' })));
4019
+ };
4020
+
4021
+ var TextInput = withFormControl(function (_a) {
4022
+ var _b = _a.isClearable, isClearable = _b === void 0 ? false : _b, _c = _a.size, size = _c === void 0 ? 'md' : _c, props = __rest(_a, ["isClearable", "size"]);
4010
4023
  // the disabled styles coming from the FormControlConfig weren't getting applied to the TextInput, so they're added inline instead
4011
- var leftElement = props.leftElement, rightElement = props.rightElement, inputRef = props.inputRef; props.isFieldInline; var domProps = __rest(props, ["leftElement", "rightElement", "inputRef", "isFieldInline"]);
4024
+ var leftElement = props.leftElement, inputRef = props.inputRef; props.isFieldInline; var domProps = __rest(props, ["leftElement", "inputRef", "isFieldInline"]);
4025
+ var rightElement = props.rightElement;
4026
+ var _d = __read(React.useState(props.value || ''), 2), value = _d[0], setValue = _d[1];
4027
+ var handleChange = function (e) {
4028
+ setValue(e.target.value);
4029
+ if (props.onChange) {
4030
+ props.onChange(e);
4031
+ }
4032
+ };
4033
+ var handleClear = function () {
4034
+ setValue('');
4035
+ if (props.onClear) {
4036
+ props.onClear(value);
4037
+ }
4038
+ };
4039
+ if (isClearable && !!value) {
4040
+ rightElement = React__default["default"].createElement(ClearButton, { size: size, handleClear: handleClear });
4041
+ }
4012
4042
  return (React__default["default"].createElement(react.InputGroup, null,
4013
4043
  leftElement ? React__default["default"].createElement(react.InputLeftElement, { children: leftElement, h: "100%" }) : null,
4014
- React__default["default"].createElement(react.Input, __assign({ ref: inputRef }, domProps)),
4044
+ React__default["default"].createElement(react.Input, __assign({ ref: inputRef }, domProps, { onChange: function (e) { return handleChange(e); }, value: value, size: size })),
4015
4045
  rightElement ? React__default["default"].createElement(react.InputRightElement, { children: rightElement, h: "100%" }) : null));
4016
4046
  });
4017
4047
  var WrappedTextInput = React.forwardRef(function (props, ref) { return (React__default["default"].createElement(TextInput, __assign({ inputRef: ref }, props))); });