@veracity/vui 2.10.0-beta.0 → 2.10.0-beta.1

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,7 @@
1
+ import React from 'react';
2
+ import { AutoCompletePopoverProps } from './input.types';
3
+ /** Wrapper for the autocomplete popover. */
4
+ export declare const AutoCompletePopover: ({ autoCompleteOptions, autoCompleteMaxHeight, children, filterAutoCompleteOptions, onAutoCompleteSelect }: AutoCompletePopoverProps) => JSX.Element;
5
+ declare const _default: React.MemoExoticComponent<({ autoCompleteOptions, autoCompleteMaxHeight, children, filterAutoCompleteOptions, onAutoCompleteSelect }: AutoCompletePopoverProps) => JSX.Element>;
6
+ export default _default;
7
+ //# sourceMappingURL=autoCompletePopover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoCompletePopover.d.ts","sourceRoot":"","sources":["../../../src/input/autoCompletePopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAYxD,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,8GAM7B,wBAAwB,gBAqB1B,CAAA;;AAED,wBAA8C"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AutoCompletePopover = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const core_1 = require("../core");
9
+ const list_1 = require("../list");
10
+ const popover_1 = require("../popover");
11
+ const utils_1 = require("../utils");
12
+ const InputContainer = core_1.styled.divBox `
13
+ width: 100%;
14
+ `;
15
+ const options = {
16
+ aria: {
17
+ expanded: false
18
+ }
19
+ };
20
+ /** Wrapper for the autocomplete popover. */
21
+ const AutoCompletePopover = ({ autoCompleteOptions, autoCompleteMaxHeight, children, filterAutoCompleteOptions, onAutoCompleteSelect }) => {
22
+ var _a;
23
+ if (!(autoCompleteOptions === null || autoCompleteOptions === void 0 ? void 0 : autoCompleteOptions.length))
24
+ return children;
25
+ return (react_1.default.createElement(popover_1.Popover, { options: options, placement: "bottom-start" },
26
+ react_1.default.createElement(popover_1.Popover.Trigger, { as: InputContainer, className: (0, utils_1.cs)('vui-input-popoverTrigger') }, children),
27
+ !!autoCompleteOptions && (react_1.default.createElement(popover_1.Popover.Content, null,
28
+ react_1.default.createElement(list_1.List, { maxH: autoCompleteMaxHeight }, (_a = autoCompleteOptions === null || autoCompleteOptions === void 0 ? void 0 : autoCompleteOptions.filter) === null || _a === void 0 ? void 0 : _a.call(autoCompleteOptions, filterAutoCompleteOptions).map((i) => (react_1.default.createElement(list_1.List.Item, { cursor: "pointer", hoverBg: "skyBlue.hover", key: i, onClick: () => onAutoCompleteSelect(i) }, i))))))));
29
+ };
30
+ exports.AutoCompletePopover = AutoCompletePopover;
31
+ exports.default = react_1.default.memo(exports.AutoCompletePopover);
@@ -1,5 +1,5 @@
1
1
  import { HelpTextProps } from './input.types';
2
- /** Displaying help text bellow an input.. */
2
+ /** Displaying help text bellow the input. */
3
3
  export declare const HelpText: import("../core").VuiComponent<"div", HelpTextProps>;
4
4
  export default HelpText;
5
5
  //# sourceMappingURL=helpText.d.ts.map
@@ -22,7 +22,7 @@ const p_1 = __importDefault(require("../p"));
22
22
  const utils_1 = require("../utils");
23
23
  const consts_1 = require("./consts");
24
24
  const context_1 = require("./context");
25
- /** Displaying help text bellow an input.. */
25
+ /** Displaying help text bellow the input. */
26
26
  exports.HelpText = (0, core_1.vui)((props, ref) => {
27
27
  const { className, children, isError } = props, rest = __rest(props, ["className", "children", "isError"]);
28
28
  const inputProps = (0, context_1.useInputContext)();
@@ -3,7 +3,6 @@ import HelpText from './helpText';
3
3
  import { InputProps } from './input.types';
4
4
  import InputIcon from './inputIcon';
5
5
  import InputInput from './inputInput';
6
- export declare const InputContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
7
6
  export declare const InputBase: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
8
7
  /**
9
8
  * Displays an input element wrapped in a div to allow extra content, like counter, side icons or buttons.
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/input/input.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAQnE,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,eAAO,MAAM,cAAc,+HAE1B,CAAA;AAED,eAAO,MAAM,SAAS,+HAgBrB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK;UAuJV,gBAAgB;WACf,iBAAiB;cACd,eAAe;CAC1B,CAAA;AAMD,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/input/input.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAOnE,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,eAAO,MAAM,SAAS,+HAgBrB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK;UAwIV,gBAAgB;WACf,iBAAiB;cACd,eAAe;CAC1B,CAAA;AAMD,eAAe,KAAK,CAAA"}
@@ -37,22 +37,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.Input = exports.InputBase = exports.InputContainer = void 0;
40
+ exports.Input = exports.InputBase = void 0;
41
41
  const react_1 = __importStar(require("react"));
42
42
  const core_1 = require("../core");
43
- const list_1 = require("../list");
44
- const popover_1 = require("../popover");
45
43
  const t_1 = require("../t");
46
44
  const utils_1 = require("../utils");
45
+ const autoCompletePopover_1 = __importDefault(require("./autoCompletePopover"));
47
46
  const consts_1 = require("./consts");
48
47
  const context_1 = require("./context");
49
48
  const helpers_1 = require("./helpers");
50
49
  const helpText_1 = __importDefault(require("./helpText"));
51
50
  const inputIcon_1 = __importDefault(require("./inputIcon"));
52
51
  const inputInput_1 = __importDefault(require("./inputInput"));
53
- exports.InputContainer = core_1.styled.divBox `
54
- width: 100%;
55
- `;
56
52
  exports.InputBase = core_1.styled.divBox `
57
53
  align-items: center;
58
54
  background-color: white;
@@ -76,7 +72,7 @@ exports.InputBase = core_1.styled.divBox `
76
72
  * Exposes some props to the children via context.
77
73
  */
78
74
  exports.Input = (0, core_1.vui)((props, ref) => {
79
- var _a, _b, _c;
75
+ var _a, _b;
80
76
  const { autoComplete, autoCompleteOptions, autoCompleteMaxHeight, autoFocus, children, className, defaultValue, disabled, errorText, iconLeft, iconRight, id, input, inputProps, inputRef, itemLeft, itemRight, helpText, max, maxLength, min, name, onBlur, onChange: onChangeProp, onFocus, pattern, placeholder, readOnly, required, showCount, size, state = '', stateMapping, step, type = 'text', value, variant } = props, rest = __rest(props, ["autoComplete", "autoCompleteOptions", "autoCompleteMaxHeight", "autoFocus", "children", "className", "defaultValue", "disabled", "errorText", "iconLeft", "iconRight", "id", "input", "inputProps", "inputRef", "itemLeft", "itemRight", "helpText", "max", "maxLength", "min", "name", "onBlur", "onChange", "onFocus", "pattern", "placeholder", "readOnly", "required", "showCount", "size", "state", "stateMapping", "step", "type", "value", "variant"]);
81
77
  const [count, setCount] = (0, react_1.useState)((0, helpers_1.getInitialCount)(props));
82
78
  const [valueInternal, setValueInternal] = (0, react_1.useState)(defaultValue || '');
@@ -105,42 +101,35 @@ exports.Input = (0, core_1.vui)((props, ref) => {
105
101
  }, [value]);
106
102
  const filterAutoCompleteOptions = (i) => valueInternal === i ? false : !valueInternal || i.toLowerCase().includes(`${valueInternal}`.toLowerCase());
107
103
  return (react_1.default.createElement(context_1.InputProvider, { value: context },
108
- react_1.default.createElement(popover_1.Popover, { options: {
109
- aria: {
110
- expanded: !(autoCompleteOptions === null || autoCompleteOptions === void 0 ? void 0 : autoCompleteOptions.length)
111
- }
112
- }, placement: "bottom-start" },
113
- react_1.default.createElement(popover_1.Popover.Trigger, { as: exports.InputContainer, className: (0, utils_1.cs)('vui-input-popoverTrigger') },
114
- react_1.default.createElement(exports.InputBase, Object.assign({ className: (0, utils_1.cs)('vui-input', className), ref: ref }, styles.container, aliasedProps, rest),
115
- itemLeft,
116
- (0, utils_1.isString)(iconLeft) ? react_1.default.createElement(inputIcon_1.default, { ml: 1, name: iconLeft }) : iconLeft, (_a = children !== null && children !== void 0 ? children : input) !== null && _a !== void 0 ? _a : (react_1.default.createElement(inputInput_1.default, Object.assign({ ref: inputRef }, {
117
- autoFocus,
118
- defaultValue,
119
- disabled,
120
- id,
121
- max,
122
- maxLength,
123
- min,
124
- name,
125
- onBlur,
126
- onChange,
127
- onFocus,
128
- pattern,
129
- placeholder,
130
- readOnly,
131
- required,
132
- step,
133
- type
134
- }, { autoComplete: (autoCompleteOptions === null || autoCompleteOptions === void 0 ? void 0 : autoCompleteOptions.length) ? 'off' : autoComplete, value: valueInternal }, inputProps))),
135
- (0, utils_1.isString)(iconRight) ? react_1.default.createElement(inputIcon_1.default, { mr: 1, name: iconRight }) : iconRight,
136
- itemRight,
137
- state && react_1.default.createElement(inputIcon_1.default, Object.assign({ mr: 1 }, (_b = states[state]) === null || _b === void 0 ? void 0 : _b.iconProps)),
138
- showCount && (react_1.default.createElement(t_1.T, { className: "vui-inputCount", color: maxLength && count > maxLength ? consts_1.inputColors.error : consts_1.inputColors.helpText, position: "absolute", right: 0, size: "sm", top: "calc(100% + 1px)" },
139
- count,
140
- " ",
141
- maxLength ? `/ ${maxLength}` : null)))),
142
- !!autoCompleteOptions && (react_1.default.createElement(popover_1.Popover.Content, null,
143
- react_1.default.createElement(list_1.List, { maxH: autoCompleteMaxHeight }, (_c = autoCompleteOptions === null || autoCompleteOptions === void 0 ? void 0 : autoCompleteOptions.filter) === null || _c === void 0 ? void 0 : _c.call(autoCompleteOptions, filterAutoCompleteOptions).map((i) => (react_1.default.createElement(list_1.List.Item, { cursor: "pointer", hoverBg: "skyBlue.hover", key: i, onClick: () => onAutoCompleteSelect(i) }, i))))))),
104
+ react_1.default.createElement(autoCompletePopover_1.default, { autoCompleteMaxHeight: autoCompleteMaxHeight, autoCompleteOptions: autoCompleteOptions, filterAutoCompleteOptions: filterAutoCompleteOptions, onAutoCompleteSelect: onAutoCompleteSelect },
105
+ react_1.default.createElement(exports.InputBase, Object.assign({ className: (0, utils_1.cs)('vui-input', className), ref: ref }, styles.container, aliasedProps, rest),
106
+ itemLeft,
107
+ (0, utils_1.isString)(iconLeft) ? react_1.default.createElement(inputIcon_1.default, { ml: 1, name: iconLeft }) : iconLeft, (_a = children !== null && children !== void 0 ? children : input) !== null && _a !== void 0 ? _a : (react_1.default.createElement(inputInput_1.default, Object.assign({ ref: inputRef }, {
108
+ autoFocus,
109
+ defaultValue,
110
+ disabled,
111
+ id,
112
+ max,
113
+ maxLength,
114
+ min,
115
+ name,
116
+ onBlur,
117
+ onChange,
118
+ onFocus,
119
+ pattern,
120
+ placeholder,
121
+ readOnly,
122
+ required,
123
+ step,
124
+ type
125
+ }, { autoComplete: (autoCompleteOptions === null || autoCompleteOptions === void 0 ? void 0 : autoCompleteOptions.length) ? 'off' : autoComplete, value: valueInternal }, inputProps))),
126
+ (0, utils_1.isString)(iconRight) ? react_1.default.createElement(inputIcon_1.default, { mr: 1, name: iconRight }) : iconRight,
127
+ itemRight,
128
+ state && react_1.default.createElement(inputIcon_1.default, Object.assign({ mr: 1 }, (_b = states[state]) === null || _b === void 0 ? void 0 : _b.iconProps)),
129
+ showCount && (react_1.default.createElement(t_1.T, { className: "vui-inputCount", color: maxLength && count > maxLength ? consts_1.inputColors.error : consts_1.inputColors.helpText, position: "absolute", right: 0, size: "sm", top: "calc(100% + 1px)" },
130
+ count,
131
+ " ",
132
+ maxLength ? `/ ${maxLength}` : null)))),
144
133
  !!helpText && react_1.default.createElement(helpText_1.default, null, helpText),
145
134
  !!errorText && react_1.default.createElement(helpText_1.default, { isError: true }, errorText)));
146
135
  });
@@ -75,6 +75,17 @@ export type InputProps = SystemProps & ThemingProps<'Input'> & {
75
75
  /** Passed to the inner input. */
76
76
  value?: number | string;
77
77
  };
78
+ export type AutoCompletePopoverProps = {
79
+ /** List of autocomplete options. */
80
+ autoCompleteOptions?: string[];
81
+ /** Maximum autoComplete container height in px. */
82
+ autoCompleteMaxHeight?: number;
83
+ /** The input children. */
84
+ children: JSX.Element;
85
+ /** Filter helper function. */
86
+ filterAutoCompleteOptions: (value: string, index: number, array: string[]) => boolean;
87
+ onAutoCompleteSelect: (value: string) => void;
88
+ };
78
89
  export type HelpTextProps = PProps & {
79
90
  isError?: boolean;
80
91
  };
@@ -1 +1 @@
1
- {"version":3,"file":"input.types.d.ts","sourceRoot":"","sources":["../../../src/input/input.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.types.d.ts","sourceRoot":"","sources":["../../../src/input/input.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { AutoCompletePopoverProps } from './input.types';
3
+ /** Wrapper for the autocomplete popover. */
4
+ export declare const AutoCompletePopover: ({ autoCompleteOptions, autoCompleteMaxHeight, children, filterAutoCompleteOptions, onAutoCompleteSelect }: AutoCompletePopoverProps) => JSX.Element;
5
+ declare const _default: React.MemoExoticComponent<({ autoCompleteOptions, autoCompleteMaxHeight, children, filterAutoCompleteOptions, onAutoCompleteSelect }: AutoCompletePopoverProps) => JSX.Element>;
6
+ export default _default;
7
+ //# sourceMappingURL=autoCompletePopover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoCompletePopover.d.ts","sourceRoot":"","sources":["../../../src/input/autoCompletePopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAYxD,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,8GAM7B,wBAAwB,gBAqB1B,CAAA;;AAED,wBAA8C"}
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { styled } from '../core';
3
+ import { List } from '../list';
4
+ import { Popover } from '../popover';
5
+ import { cs } from '../utils';
6
+ const InputContainer = styled.divBox `
7
+ width: 100%;
8
+ `;
9
+ const options = {
10
+ aria: {
11
+ expanded: false
12
+ }
13
+ };
14
+ /** Wrapper for the autocomplete popover. */
15
+ export const AutoCompletePopover = ({ autoCompleteOptions, autoCompleteMaxHeight, children, filterAutoCompleteOptions, onAutoCompleteSelect }) => {
16
+ if (!autoCompleteOptions?.length)
17
+ return children;
18
+ return (React.createElement(Popover, { options: options, placement: "bottom-start" },
19
+ React.createElement(Popover.Trigger, { as: InputContainer, className: cs('vui-input-popoverTrigger') }, children),
20
+ !!autoCompleteOptions && (React.createElement(Popover.Content, null,
21
+ React.createElement(List, { maxH: autoCompleteMaxHeight }, autoCompleteOptions?.filter?.(filterAutoCompleteOptions).map((i) => (React.createElement(List.Item, { cursor: "pointer", hoverBg: "skyBlue.hover", key: i, onClick: () => onAutoCompleteSelect(i) }, i))))))));
22
+ };
23
+ export default React.memo(AutoCompletePopover);
@@ -1,5 +1,5 @@
1
1
  import { HelpTextProps } from './input.types';
2
- /** Displaying help text bellow an input.. */
2
+ /** Displaying help text bellow the input. */
3
3
  export declare const HelpText: import("../core").VuiComponent<"div", HelpTextProps>;
4
4
  export default HelpText;
5
5
  //# sourceMappingURL=helpText.d.ts.map
@@ -5,7 +5,7 @@ import P from '../p';
5
5
  import { cs } from '../utils';
6
6
  import { inputColors } from './consts';
7
7
  import { useInputContext } from './context';
8
- /** Displaying help text bellow an input.. */
8
+ /** Displaying help text bellow the input. */
9
9
  export const HelpText = vui((props, ref) => {
10
10
  const { className, children, isError, ...rest } = props;
11
11
  const inputProps = useInputContext();
@@ -3,7 +3,6 @@ import HelpText from './helpText';
3
3
  import { InputProps } from './input.types';
4
4
  import InputIcon from './inputIcon';
5
5
  import InputInput from './inputInput';
6
- export declare const InputContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
7
6
  export declare const InputBase: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
8
7
  /**
9
8
  * Displays an input element wrapped in a div to allow extra content, like counter, side icons or buttons.
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/input/input.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAQnE,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,eAAO,MAAM,cAAc,+HAE1B,CAAA;AAED,eAAO,MAAM,SAAS,+HAgBrB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK;UAuJV,gBAAgB;WACf,iBAAiB;cACd,eAAe;CAC1B,CAAA;AAMD,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/input/input.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAOnE,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,eAAO,MAAM,SAAS,+HAgBrB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK;UAwIV,gBAAgB;WACf,iBAAiB;cACd,eAAe;CAC1B,CAAA;AAMD,eAAe,KAAK,CAAA"}
@@ -1,18 +1,14 @@
1
1
  import React, { useEffect, useMemo, useState } from 'react';
2
2
  import { styled, useStyleConfig, vui } from '../core';
3
- import { List } from '../list';
4
- import { Popover } from '../popover';
5
3
  import { T } from '../t';
6
4
  import { cs, filterUndefined, isString } from '../utils';
5
+ import AutoCompletePopover from './autoCompletePopover';
7
6
  import { inputColors, inputStateMapping } from './consts';
8
7
  import { InputProvider } from './context';
9
8
  import { getInitialCount } from './helpers';
10
9
  import HelpText from './helpText';
11
10
  import InputIcon from './inputIcon';
12
11
  import InputInput from './inputInput';
13
- export const InputContainer = styled.divBox `
14
- width: 100%;
15
- `;
16
12
  export const InputBase = styled.divBox `
17
13
  align-items: center;
18
14
  background-color: white;
@@ -63,43 +59,36 @@ export const Input = vui((props, ref) => {
63
59
  }, [value]);
64
60
  const filterAutoCompleteOptions = (i) => valueInternal === i ? false : !valueInternal || i.toLowerCase().includes(`${valueInternal}`.toLowerCase());
65
61
  return (React.createElement(InputProvider, { value: context },
66
- React.createElement(Popover, { options: {
67
- aria: {
68
- expanded: !autoCompleteOptions?.length
69
- }
70
- }, placement: "bottom-start" },
71
- React.createElement(Popover.Trigger, { as: InputContainer, className: cs('vui-input-popoverTrigger') },
72
- React.createElement(InputBase, { className: cs('vui-input', className), ref: ref, ...styles.container, ...aliasedProps, ...rest },
73
- itemLeft,
74
- isString(iconLeft) ? React.createElement(InputIcon, { ml: 1, name: iconLeft }) : iconLeft,
75
- children ?? input ?? (React.createElement(InputInput, { ref: inputRef, ...{
76
- autoFocus,
77
- defaultValue,
78
- disabled,
79
- id,
80
- max,
81
- maxLength,
82
- min,
83
- name,
84
- onBlur,
85
- onChange,
86
- onFocus,
87
- pattern,
88
- placeholder,
89
- readOnly,
90
- required,
91
- step,
92
- type
93
- }, autoComplete: autoCompleteOptions?.length ? 'off' : autoComplete, value: valueInternal, ...inputProps })),
94
- isString(iconRight) ? React.createElement(InputIcon, { mr: 1, name: iconRight }) : iconRight,
95
- itemRight,
96
- state && React.createElement(InputIcon, { mr: 1, ...states[state]?.iconProps }),
97
- showCount && (React.createElement(T, { className: "vui-inputCount", color: maxLength && count > maxLength ? inputColors.error : inputColors.helpText, position: "absolute", right: 0, size: "sm", top: "calc(100% + 1px)" },
98
- count,
99
- " ",
100
- maxLength ? `/ ${maxLength}` : null)))),
101
- !!autoCompleteOptions && (React.createElement(Popover.Content, null,
102
- React.createElement(List, { maxH: autoCompleteMaxHeight }, autoCompleteOptions?.filter?.(filterAutoCompleteOptions).map((i) => (React.createElement(List.Item, { cursor: "pointer", hoverBg: "skyBlue.hover", key: i, onClick: () => onAutoCompleteSelect(i) }, i))))))),
62
+ React.createElement(AutoCompletePopover, { autoCompleteMaxHeight: autoCompleteMaxHeight, autoCompleteOptions: autoCompleteOptions, filterAutoCompleteOptions: filterAutoCompleteOptions, onAutoCompleteSelect: onAutoCompleteSelect },
63
+ React.createElement(InputBase, { className: cs('vui-input', className), ref: ref, ...styles.container, ...aliasedProps, ...rest },
64
+ itemLeft,
65
+ isString(iconLeft) ? React.createElement(InputIcon, { ml: 1, name: iconLeft }) : iconLeft,
66
+ children ?? input ?? (React.createElement(InputInput, { ref: inputRef, ...{
67
+ autoFocus,
68
+ defaultValue,
69
+ disabled,
70
+ id,
71
+ max,
72
+ maxLength,
73
+ min,
74
+ name,
75
+ onBlur,
76
+ onChange,
77
+ onFocus,
78
+ pattern,
79
+ placeholder,
80
+ readOnly,
81
+ required,
82
+ step,
83
+ type
84
+ }, autoComplete: autoCompleteOptions?.length ? 'off' : autoComplete, value: valueInternal, ...inputProps })),
85
+ isString(iconRight) ? React.createElement(InputIcon, { mr: 1, name: iconRight }) : iconRight,
86
+ itemRight,
87
+ state && React.createElement(InputIcon, { mr: 1, ...states[state]?.iconProps }),
88
+ showCount && (React.createElement(T, { className: "vui-inputCount", color: maxLength && count > maxLength ? inputColors.error : inputColors.helpText, position: "absolute", right: 0, size: "sm", top: "calc(100% + 1px)" },
89
+ count,
90
+ " ",
91
+ maxLength ? `/ ${maxLength}` : null)))),
103
92
  !!helpText && React.createElement(HelpText, null, helpText),
104
93
  !!errorText && React.createElement(HelpText, { isError: true }, errorText)));
105
94
  });
@@ -75,6 +75,17 @@ export type InputProps = SystemProps & ThemingProps<'Input'> & {
75
75
  /** Passed to the inner input. */
76
76
  value?: number | string;
77
77
  };
78
+ export type AutoCompletePopoverProps = {
79
+ /** List of autocomplete options. */
80
+ autoCompleteOptions?: string[];
81
+ /** Maximum autoComplete container height in px. */
82
+ autoCompleteMaxHeight?: number;
83
+ /** The input children. */
84
+ children: JSX.Element;
85
+ /** Filter helper function. */
86
+ filterAutoCompleteOptions: (value: string, index: number, array: string[]) => boolean;
87
+ onAutoCompleteSelect: (value: string) => void;
88
+ };
78
89
  export type HelpTextProps = PProps & {
79
90
  isError?: boolean;
80
91
  };
@@ -1 +1 @@
1
- {"version":3,"file":"input.types.d.ts","sourceRoot":"","sources":["../../../src/input/input.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.types.d.ts","sourceRoot":"","sources":["../../../src/input/input.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEzE,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;AAE3D,MAAM,MAAM,UAAU,GAAG,WAAW,GAClC,YAAY,CAAC,OAAO,CAAC,GAAG;IACtB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oCAAoC;IACpC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,mDAAmD;IACnD,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;IACtC,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;IACpC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAA;IACjC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAA;IAClC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IACjE,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,uDAAuD;IACvD,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;IACnC,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,iCAAiC;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,iEAAiE;IACjE,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACxB,CAAA;AAEH,MAAM,MAAM,wBAAwB,GAAG;IACrC,oCAAoC;IACpC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,mDAAmD;IACnD,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,0BAA0B;IAC1B,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAA;IACrB,8BAA8B;IAC9B,yBAAyB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAA;IACrF,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IACnC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AAEpE,MAAM,MAAM,iBAAiB,GAAG,MAAM,CACpC,MAAM,EACN;IACE,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAA;IAC/B,SAAS,EAAE,SAAS,CAAA;CACrB,CACF,CAAA;AAED,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,gBAAgB,GAChB,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,MAAM,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veracity/vui",
3
- "version": "2.10.0-beta.0",
3
+ "version": "2.10.0-beta.1",
4
4
  "description": "Veracity UI is a React component library crafted for use within Veracity applications and pages. Based on Styled Components and @xstyled.",
5
5
  "module": "./dist/esm/index.js",
6
6
  "main": "./dist/cjs/index.js",
@@ -0,0 +1,49 @@
1
+ import React from 'react'
2
+
3
+ import { styled } from '../core'
4
+ import { List } from '../list'
5
+ import { Popover } from '../popover'
6
+ import { cs } from '../utils'
7
+ import { AutoCompletePopoverProps } from './input.types'
8
+
9
+ const InputContainer = styled.divBox`
10
+ width: 100%;
11
+ `
12
+
13
+ const options = {
14
+ aria: {
15
+ expanded: false
16
+ }
17
+ }
18
+
19
+ /** Wrapper for the autocomplete popover. */
20
+ export const AutoCompletePopover = ({
21
+ autoCompleteOptions,
22
+ autoCompleteMaxHeight,
23
+ children,
24
+ filterAutoCompleteOptions,
25
+ onAutoCompleteSelect
26
+ }: AutoCompletePopoverProps) => {
27
+ if (!autoCompleteOptions?.length) return children
28
+
29
+ return (
30
+ <Popover options={options} placement="bottom-start">
31
+ <Popover.Trigger as={InputContainer} className={cs('vui-input-popoverTrigger')}>
32
+ {children}
33
+ </Popover.Trigger>
34
+ {!!autoCompleteOptions && (
35
+ <Popover.Content>
36
+ <List maxH={autoCompleteMaxHeight}>
37
+ {autoCompleteOptions?.filter?.(filterAutoCompleteOptions).map((i: string) => (
38
+ <List.Item cursor="pointer" hoverBg="skyBlue.hover" key={i} onClick={() => onAutoCompleteSelect(i)}>
39
+ {i}
40
+ </List.Item>
41
+ ))}
42
+ </List>
43
+ </Popover.Content>
44
+ )}
45
+ </Popover>
46
+ )
47
+ }
48
+
49
+ export default React.memo(AutoCompletePopover)
@@ -8,7 +8,7 @@ import { inputColors } from './consts'
8
8
  import { useInputContext } from './context'
9
9
  import { HelpTextProps } from './input.types'
10
10
 
11
- /** Displaying help text bellow an input.. */
11
+ /** Displaying help text bellow the input. */
12
12
  export const HelpText = vui<'div', HelpTextProps>((props, ref) => {
13
13
  const { className, children, isError, ...rest } = props
14
14
  const inputProps = useInputContext()
@@ -1,10 +1,9 @@
1
1
  import React, { useEffect, useMemo, useState } from 'react'
2
2
 
3
3
  import { styled, useStyleConfig, vui, VuiComponent } from '../core'
4
- import { List } from '../list'
5
- import { Popover } from '../popover'
6
4
  import { T } from '../t'
7
5
  import { ChangeEvent, cs, filterUndefined, isString } from '../utils'
6
+ import AutoCompletePopover from './autoCompletePopover'
8
7
  import { inputColors, inputStateMapping } from './consts'
9
8
  import { InputProvider } from './context'
10
9
  import { getInitialCount } from './helpers'
@@ -13,10 +12,6 @@ import { InputProps } from './input.types'
13
12
  import InputIcon from './inputIcon'
14
13
  import InputInput from './inputInput'
15
14
 
16
- export const InputContainer = styled.divBox`
17
- width: 100%;
18
- `
19
-
20
15
  export const InputBase = styled.divBox`
21
16
  align-items: center;
22
17
  background-color: white;
@@ -118,74 +113,59 @@ export const Input = vui<'div', InputProps>((props, ref) => {
118
113
 
119
114
  return (
120
115
  <InputProvider value={context}>
121
- <Popover
122
- options={{
123
- aria: {
124
- expanded: !autoCompleteOptions?.length
125
- }
126
- }}
127
- placement="bottom-start"
116
+ <AutoCompletePopover
117
+ autoCompleteMaxHeight={autoCompleteMaxHeight}
118
+ autoCompleteOptions={autoCompleteOptions}
119
+ filterAutoCompleteOptions={filterAutoCompleteOptions}
120
+ onAutoCompleteSelect={onAutoCompleteSelect}
128
121
  >
129
- <Popover.Trigger as={InputContainer} className={cs('vui-input-popoverTrigger')}>
130
- <InputBase className={cs('vui-input', className)} ref={ref} {...styles.container} {...aliasedProps} {...rest}>
131
- {itemLeft}
132
- {isString(iconLeft) ? <InputIcon ml={1} name={iconLeft} /> : iconLeft}
133
- {children ?? input ?? (
134
- <InputInput
135
- ref={inputRef}
136
- {...{
137
- autoFocus,
138
- defaultValue,
139
- disabled,
140
- id,
141
- max,
142
- maxLength,
143
- min,
144
- name,
145
- onBlur,
146
- onChange,
147
- onFocus,
148
- pattern,
149
- placeholder,
150
- readOnly,
151
- required,
152
- step,
153
- type
154
- }}
155
- autoComplete={autoCompleteOptions?.length ? 'off' : autoComplete}
156
- value={valueInternal}
157
- {...inputProps}
158
- />
159
- )}
160
- {isString(iconRight) ? <InputIcon mr={1} name={iconRight} /> : iconRight}
161
- {itemRight}
162
- {state && <InputIcon mr={1} {...states[state]?.iconProps} />}
163
- {showCount && (
164
- <T
165
- className="vui-inputCount"
166
- color={maxLength && count > maxLength ? inputColors.error : inputColors.helpText}
167
- position="absolute"
168
- right={0}
169
- size="sm"
170
- top="calc(100% + 1px)"
171
- >
172
- {count} {maxLength ? `/ ${maxLength}` : null}
173
- </T>
174
- )}
175
- </InputBase>
176
- </Popover.Trigger>
177
- {!!autoCompleteOptions && (
178
- <Popover.Content>
179
- <List maxH={autoCompleteMaxHeight}>
180
- {autoCompleteOptions?.filter?.(filterAutoCompleteOptions).map((i: string) => (
181
- <List.Item cursor="pointer" hoverBg="skyBlue.hover" key={i} onClick={() => onAutoCompleteSelect(i)}>
182
- {i}
183
- </List.Item>
184
- ))}
185
- </List>
186
- </Popover.Content>
187
- )}
188
- </Popover>
122
+ <InputBase className={cs('vui-input', className)} ref={ref} {...styles.container} {...aliasedProps} {...rest}>
123
+ {itemLeft}
124
+ {isString(iconLeft) ? <InputIcon ml={1} name={iconLeft} /> : iconLeft}
125
+ {children ?? input ?? (
126
+ <InputInput
127
+ ref={inputRef}
128
+ {...{
129
+ autoFocus,
130
+ defaultValue,
131
+ disabled,
132
+ id,
133
+ max,
134
+ maxLength,
135
+ min,
136
+ name,
137
+ onBlur,
138
+ onChange,
139
+ onFocus,
140
+ pattern,
141
+ placeholder,
142
+ readOnly,
143
+ required,
144
+ step,
145
+ type
146
+ }}
147
+ autoComplete={autoCompleteOptions?.length ? 'off' : autoComplete}
148
+ value={valueInternal}
149
+ {...inputProps}
150
+ />
151
+ )}
152
+ {isString(iconRight) ? <InputIcon mr={1} name={iconRight} /> : iconRight}
153
+ {itemRight}
154
+ {state && <InputIcon mr={1} {...states[state]?.iconProps} />}
155
+ {showCount && (
156
+ <T
157
+ className="vui-inputCount"
158
+ color={maxLength && count > maxLength ? inputColors.error : inputColors.helpText}
159
+ position="absolute"
160
+ right={0}
161
+ size="sm"
162
+ top="calc(100% + 1px)"
163
+ >
164
+ {count} {maxLength ? `/ ${maxLength}` : null}
165
+ </T>
166
+ )}
167
+ </InputBase>
168
+ </AutoCompletePopover>
189
169
  {!!helpText && <HelpText>{helpText}</HelpText>}
190
170
  {!!errorText && <HelpText isError>{errorText}</HelpText>}
191
171
  </InputProvider>
@@ -80,6 +80,18 @@ export type InputProps = SystemProps &
80
80
  value?: number | string
81
81
  }
82
82
 
83
+ export type AutoCompletePopoverProps = {
84
+ /** List of autocomplete options. */
85
+ autoCompleteOptions?: string[]
86
+ /** Maximum autoComplete container height in px. */
87
+ autoCompleteMaxHeight?: number
88
+ /** The input children. */
89
+ children: JSX.Element
90
+ /** Filter helper function. */
91
+ filterAutoCompleteOptions: (value: string, index: number, array: string[]) => boolean
92
+ onAutoCompleteSelect: (value: string) => void
93
+ }
94
+
83
95
  export type HelpTextProps = PProps & {
84
96
  isError?: boolean
85
97
  }