@veracity/vui 2.10.0-beta.0 → 2.10.0-beta.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.
Files changed (35) hide show
  1. package/dist/cjs/input/autoCompletePopover.d.ts +7 -0
  2. package/dist/cjs/input/autoCompletePopover.d.ts.map +1 -0
  3. package/dist/cjs/input/autoCompletePopover.js +31 -0
  4. package/dist/cjs/input/helpText.d.ts +1 -1
  5. package/dist/cjs/input/helpText.js +1 -1
  6. package/dist/cjs/input/input.d.ts +0 -1
  7. package/dist/cjs/input/input.d.ts.map +1 -1
  8. package/dist/cjs/input/input.js +32 -43
  9. package/dist/cjs/input/input.types.d.ts +11 -0
  10. package/dist/cjs/input/input.types.d.ts.map +1 -1
  11. package/dist/cjs/sidemenu/sidemenu.d.ts.map +1 -1
  12. package/dist/cjs/sidemenu/sidemenu.js +2 -3
  13. package/dist/cjs/sidemenu/sidemenuItem.d.ts.map +1 -1
  14. package/dist/cjs/sidemenu/sidemenuItem.js +3 -2
  15. package/dist/esm/input/autoCompletePopover.d.ts +7 -0
  16. package/dist/esm/input/autoCompletePopover.d.ts.map +1 -0
  17. package/dist/esm/input/autoCompletePopover.js +23 -0
  18. package/dist/esm/input/helpText.d.ts +1 -1
  19. package/dist/esm/input/helpText.js +1 -1
  20. package/dist/esm/input/input.d.ts +0 -1
  21. package/dist/esm/input/input.d.ts.map +1 -1
  22. package/dist/esm/input/input.js +31 -42
  23. package/dist/esm/input/input.types.d.ts +11 -0
  24. package/dist/esm/input/input.types.d.ts.map +1 -1
  25. package/dist/esm/sidemenu/sidemenu.d.ts.map +1 -1
  26. package/dist/esm/sidemenu/sidemenu.js +2 -3
  27. package/dist/esm/sidemenu/sidemenuItem.d.ts.map +1 -1
  28. package/dist/esm/sidemenu/sidemenuItem.js +3 -2
  29. package/package.json +1 -1
  30. package/src/input/autoCompletePopover.tsx +49 -0
  31. package/src/input/helpText.tsx +1 -1
  32. package/src/input/input.tsx +53 -73
  33. package/src/input/input.types.ts +12 -0
  34. package/src/sidemenu/sidemenu.tsx +4 -11
  35. package/src/sidemenu/sidemenuItem.tsx +4 -1
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidemenu.d.ts","sourceRoot":"","sources":["../../../src/sidemenu/sidemenu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAKnE,OAAO,EAAqB,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,YAAY,+HAMxB,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,QAAQ;SAsDd,kBAAkB;UACjB,mBAAmB;CAC1B,CAAA;AAKD,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"sidemenu.d.ts","sourceRoot":"","sources":["../../../src/sidemenu/sidemenu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAKnE,OAAO,EAAqB,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,YAAY,+HAMxB,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,QAAQ;SA+Cd,kBAAkB;UACjB,mBAAmB;CAC1B,CAAA;AAKD,eAAe,QAAQ,CAAA"}
@@ -59,11 +59,10 @@ exports.SidemenuBase = core_1.styled.divBox `
59
59
  exports.Sidemenu = (0, core_1.vui)((props, ref) => {
60
60
  var _a;
61
61
  const { children, className, items, isExpanded = false, size, variant, width = 280 } = props, rest = __rest(props, ["children", "className", "items", "isExpanded", "size", "variant", "width"]);
62
- const styles = (0, core_1.useStyleConfig)('Sidemenu', props);
63
62
  const [isExpandedInternal, setIsExpandedInternal] = (0, react_1.useState)(isExpanded);
64
63
  const context = (0, react_1.useMemo)(() => (0, utils_1.filterUndefined)({ size, variant, isExpandedInternal }), [size, variant, isExpandedInternal]);
64
+ const styles = (0, core_1.useStyleConfig)('Sidemenu', props);
65
65
  const isDark = variant === 'dark';
66
- const aliasedProps = (0, utils_1.filterUndefined)({});
67
66
  (0, react_1.useEffect)(() => {
68
67
  setIsExpandedInternal(isExpanded);
69
68
  }, [isExpanded]);
@@ -72,7 +71,7 @@ exports.Sidemenu = (0, core_1.vui)((props, ref) => {
72
71
  const icon = `falArrow${isExpandedInternal ? 'Left' : 'Right'}`;
73
72
  const justifyContent = isExpandedInternal ? 'flex-end' : 'center';
74
73
  return (react_1.default.createElement(context_1.SidemenuProvider, { value: context },
75
- react_1.default.createElement(exports.SidemenuBase, Object.assign({ className: (0, utils_1.cs)('vui-sidemenu', className), ref: ref, w: w }, styles.container, aliasedProps, rest),
74
+ react_1.default.createElement(exports.SidemenuBase, Object.assign({ className: (0, utils_1.cs)('vui-sidemenu', className), ref: ref, w: w }, styles.container, rest),
76
75
  react_1.default.createElement(box_1.default, { flexDirection: "column", flexGrow: 1, overflowX: "hidden", overflowY: "auto", w: "100%" }, items
77
76
  ? (_a = items === null || items === void 0 ? void 0 : items.map) === null || _a === void 0 ? void 0 : _a.call(items, (item, key) => react_1.default.createElement(sidemenuItem_1.default, Object.assign({ key: key }, item)))
78
77
  : children),
@@ -1 +1 @@
1
- {"version":3,"file":"sidemenuItem.d.ts","sourceRoot":"","sources":["../../../src/sidemenu/sidemenuItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAyC,YAAY,EAAE,MAAM,SAAS,CAAA;AAK7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,mBAAmB;AACnB,eAAO,MAAM,YAAY,wCAgEmB,CAAA;AAE5C,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"sidemenuItem.d.ts","sourceRoot":"","sources":["../../../src/sidemenu/sidemenuItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAyC,YAAY,EAAE,MAAM,SAAS,CAAA;AAK7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,mBAAmB;AACnB,eAAO,MAAM,YAAY,wCAmEmB,CAAA;AAE5C,eAAe,YAAY,CAAA"}
@@ -53,6 +53,7 @@ exports.SidemenuItem = (0, core_1.vui)((props, ref) => {
53
53
  const { variant, size, isExpandedInternal } = (0, context_1.useSidemenuContext)();
54
54
  const styles = (0, core_1.useStyleConfig)('Sidemenu', context_1.useSidemenuContext);
55
55
  const isDark = variant === 'dark';
56
+ const hasChildrenExpanded = !!children && isExpandedInternal;
56
57
  const innerContent = isExpandedInternal ? (react_1.default.createElement(box_1.default, { centerV: true, px: 2, py: 1, w: "100%", whiteSpace: "pre" },
57
58
  react_1.default.createElement(icon_1.default, { ml: iconSize === 'sm' ? '4px' : 0, name: icon, size: iconSize }),
58
59
  react_1.default.createElement(t_1.default, { isTruncated: true, ml: 2 }, title))) : (react_1.default.createElement(box_1.default, { centerV: true, px: 2, py: 1, w: "100%" },
@@ -63,9 +64,9 @@ exports.SidemenuItem = (0, core_1.vui)((props, ref) => {
63
64
  setDisplayChildren(!displayChildren);
64
65
  };
65
66
  return (react_1.default.createElement(box_1.default, { flexDirection: "column", ref: ref, w: "100%" },
66
- react_1.default.createElement(button_1.default, Object.assign({ alignItems: "center", border: "none", borderLeft: "3px solid transparent", borderLeftColor: isActive ? (isDark ? 'digiGreen.main' : 'seaBlue.main') : undefined, borderRadius: 0, className: (0, utils_1.cs)('vui-sidemenu-item', className), h: "auto", justifyContent: "space-between", onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick(), p: 0, variant: isDark ? 'tertiaryLight' : 'tertiaryDark', w: "100%" }, styles.item, { minH: size === 'lg' ? '56px' : '40px' }, rest),
67
+ react_1.default.createElement(button_1.default, Object.assign({ alignItems: "center", border: "none", borderLeft: "3px solid transparent", borderLeftColor: isActive ? (isDark ? 'digiGreen.main' : 'seaBlue.main') : undefined, borderRadius: 0, className: (0, utils_1.cs)('vui-sidemenu-item', className), color: hasChildrenExpanded ? 'seaBlue.main' : isDark ? 'digiGreen.main' : 'sandstone.10', h: "auto", justifyContent: "space-between", onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick(), p: 0, variant: isDark ? 'tertiaryLight' : 'tertiaryDark', w: "100%" }, styles.item, { minH: size === 'lg' ? '56px' : '40px' }, rest),
67
68
  innerContent,
68
- !!children && isExpandedInternal && (react_1.default.createElement(button_1.default, { className: "vui-sidemenu-item-expand", icon: displayChildren ? 'falChevronUp' : 'falChevronDown', mr: 1, onClick: toggle, size: "sm", variant: isDark ? 'tertiaryLight' : 'tertiaryDark' }))),
69
+ hasChildrenExpanded && (react_1.default.createElement(button_1.default, { className: "vui-sidemenu-item-expand", icon: displayChildren ? 'falChevronUp' : 'falChevronDown', mr: 1, onClick: toggle, size: "sm", variant: isDark ? 'tertiaryLight' : 'tertiaryDark' }))),
69
70
  !!children && displayChildren && (react_1.default.createElement(box_1.default, { flexDirection: "column", justifyContent: "start", w: "100%" }, children))));
70
71
  });
71
72
  exports.default = exports.SidemenuItem;
@@ -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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidemenu.d.ts","sourceRoot":"","sources":["../../../src/sidemenu/sidemenu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAKnE,OAAO,EAAqB,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,YAAY,+HAMxB,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,QAAQ;SAsDd,kBAAkB;UACjB,mBAAmB;CAC1B,CAAA;AAKD,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"sidemenu.d.ts","sourceRoot":"","sources":["../../../src/sidemenu/sidemenu.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAKnE,OAAO,EAAqB,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,YAAY,+HAMxB,CAAA;AAED,8CAA8C;AAC9C,eAAO,MAAM,QAAQ;SA+Cd,kBAAkB;UACjB,mBAAmB;CAC1B,CAAA;AAKD,eAAe,QAAQ,CAAA"}
@@ -18,11 +18,10 @@ export const SidemenuBase = styled.divBox `
18
18
  /** A collapsible side menu for navigation. */
19
19
  export const Sidemenu = vui((props, ref) => {
20
20
  const { children, className, items, isExpanded = false, size, variant, width = 280, ...rest } = props;
21
- const styles = useStyleConfig('Sidemenu', props);
22
21
  const [isExpandedInternal, setIsExpandedInternal] = useState(isExpanded);
23
22
  const context = useMemo(() => filterUndefined({ size, variant, isExpandedInternal }), [size, variant, isExpandedInternal]);
23
+ const styles = useStyleConfig('Sidemenu', props);
24
24
  const isDark = variant === 'dark';
25
- const aliasedProps = filterUndefined({});
26
25
  useEffect(() => {
27
26
  setIsExpandedInternal(isExpanded);
28
27
  }, [isExpanded]);
@@ -31,7 +30,7 @@ export const Sidemenu = vui((props, ref) => {
31
30
  const icon = `falArrow${isExpandedInternal ? 'Left' : 'Right'}`;
32
31
  const justifyContent = isExpandedInternal ? 'flex-end' : 'center';
33
32
  return (React.createElement(SidemenuProvider, { value: context },
34
- React.createElement(SidemenuBase, { className: cs('vui-sidemenu', className), ref: ref, w: w, ...styles.container, ...aliasedProps, ...rest },
33
+ React.createElement(SidemenuBase, { className: cs('vui-sidemenu', className), ref: ref, w: w, ...styles.container, ...rest },
35
34
  React.createElement(Box, { flexDirection: "column", flexGrow: 1, overflowX: "hidden", overflowY: "auto", w: "100%" }, items
36
35
  ? items?.map?.((item, key) => React.createElement(SidemenuItem, { key: key, ...item }))
37
36
  : children),
@@ -1 +1 @@
1
- {"version":3,"file":"sidemenuItem.d.ts","sourceRoot":"","sources":["../../../src/sidemenu/sidemenuItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAyC,YAAY,EAAE,MAAM,SAAS,CAAA;AAK7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,mBAAmB;AACnB,eAAO,MAAM,YAAY,wCAgEmB,CAAA;AAE5C,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"sidemenuItem.d.ts","sourceRoot":"","sources":["../../../src/sidemenu/sidemenuItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAyC,YAAY,EAAE,MAAM,SAAS,CAAA;AAK7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,mBAAmB;AACnB,eAAO,MAAM,YAAY,wCAmEmB,CAAA;AAE5C,eAAe,YAAY,CAAA"}
@@ -13,6 +13,7 @@ export const SidemenuItem = vui((props, ref) => {
13
13
  const { variant, size, isExpandedInternal } = useSidemenuContext();
14
14
  const styles = useStyleConfig('Sidemenu', useSidemenuContext);
15
15
  const isDark = variant === 'dark';
16
+ const hasChildrenExpanded = !!children && isExpandedInternal;
16
17
  const innerContent = isExpandedInternal ? (React.createElement(Box, { centerV: true, px: 2, py: 1, w: "100%", whiteSpace: "pre" },
17
18
  React.createElement(Icon, { ml: iconSize === 'sm' ? '4px' : 0, name: icon, size: iconSize }),
18
19
  React.createElement(T, { isTruncated: true, ml: 2 }, title))) : (React.createElement(Box, { centerV: true, px: 2, py: 1, w: "100%" },
@@ -23,9 +24,9 @@ export const SidemenuItem = vui((props, ref) => {
23
24
  setDisplayChildren(!displayChildren);
24
25
  };
25
26
  return (React.createElement(Box, { flexDirection: "column", ref: ref, w: "100%" },
26
- React.createElement(Button, { alignItems: "center", border: "none", borderLeft: "3px solid transparent", borderLeftColor: isActive ? (isDark ? 'digiGreen.main' : 'seaBlue.main') : undefined, borderRadius: 0, className: cs('vui-sidemenu-item', className), h: "auto", justifyContent: "space-between", onClick: () => onClick?.(), p: 0, variant: isDark ? 'tertiaryLight' : 'tertiaryDark', w: "100%", ...styles.item, minH: size === 'lg' ? '56px' : '40px', ...rest },
27
+ React.createElement(Button, { alignItems: "center", border: "none", borderLeft: "3px solid transparent", borderLeftColor: isActive ? (isDark ? 'digiGreen.main' : 'seaBlue.main') : undefined, borderRadius: 0, className: cs('vui-sidemenu-item', className), color: hasChildrenExpanded ? 'seaBlue.main' : isDark ? 'digiGreen.main' : 'sandstone.10', h: "auto", justifyContent: "space-between", onClick: () => onClick?.(), p: 0, variant: isDark ? 'tertiaryLight' : 'tertiaryDark', w: "100%", ...styles.item, minH: size === 'lg' ? '56px' : '40px', ...rest },
27
28
  innerContent,
28
- !!children && isExpandedInternal && (React.createElement(Button, { className: "vui-sidemenu-item-expand", icon: displayChildren ? 'falChevronUp' : 'falChevronDown', mr: 1, onClick: toggle, size: "sm", variant: isDark ? 'tertiaryLight' : 'tertiaryDark' }))),
29
+ hasChildrenExpanded && (React.createElement(Button, { className: "vui-sidemenu-item-expand", icon: displayChildren ? 'falChevronUp' : 'falChevronDown', mr: 1, onClick: toggle, size: "sm", variant: isDark ? 'tertiaryLight' : 'tertiaryDark' }))),
29
30
  !!children && displayChildren && (React.createElement(Box, { flexDirection: "column", justifyContent: "start", w: "100%" }, children))));
30
31
  });
31
32
  export default SidemenuItem;
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.2",
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
  }
@@ -22,16 +22,16 @@ export const SidemenuBase = styled.divBox`
22
22
  /** A collapsible side menu for navigation. */
23
23
  export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
24
24
  const { children, className, items, isExpanded = false, size, variant, width = 280, ...rest } = props
25
- const styles = useStyleConfig('Sidemenu', props)
25
+
26
26
  const [isExpandedInternal, setIsExpandedInternal] = useState(isExpanded)
27
27
  const context = useMemo(
28
28
  () => filterUndefined({ size, variant, isExpandedInternal }),
29
29
  [size, variant, isExpandedInternal]
30
30
  )
31
31
 
32
- const isDark = variant === 'dark'
32
+ const styles = useStyleConfig('Sidemenu', props)
33
33
 
34
- const aliasedProps = filterUndefined<SidemenuProps>({})
34
+ const isDark = variant === 'dark'
35
35
 
36
36
  useEffect(() => {
37
37
  setIsExpandedInternal(isExpanded)
@@ -45,14 +45,7 @@ export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
45
45
 
46
46
  return (
47
47
  <SidemenuProvider value={context}>
48
- <SidemenuBase
49
- className={cs('vui-sidemenu', className)}
50
- ref={ref}
51
- w={w}
52
- {...styles.container}
53
- {...aliasedProps}
54
- {...rest}
55
- >
48
+ <SidemenuBase className={cs('vui-sidemenu', className)} ref={ref} w={w} {...styles.container} {...rest}>
56
49
  <Box flexDirection="column" flexGrow={1} overflowX="hidden" overflowY="auto" w="100%">
57
50
  {items
58
51
  ? items?.map?.((item: SidemenuItemProps, key: number) => <SidemenuItem key={key} {...item} />)
@@ -15,7 +15,9 @@ export const SidemenuItem = vui<'button', SidemenuItemProps>((props, ref) => {
15
15
  const [displayChildren, setDisplayChildren] = useState(true)
16
16
  const { variant, size, isExpandedInternal } = useSidemenuContext()
17
17
  const styles = useStyleConfig('Sidemenu', useSidemenuContext)
18
+
18
19
  const isDark = variant === 'dark'
20
+ const hasChildrenExpanded = !!children && isExpandedInternal
19
21
 
20
22
  const innerContent = isExpandedInternal ? (
21
23
  <Box centerV px={2} py={1} w="100%" whiteSpace="pre">
@@ -45,6 +47,7 @@ export const SidemenuItem = vui<'button', SidemenuItemProps>((props, ref) => {
45
47
  borderLeftColor={isActive ? (isDark ? 'digiGreen.main' : 'seaBlue.main') : undefined}
46
48
  borderRadius={0}
47
49
  className={cs('vui-sidemenu-item', className)}
50
+ color={hasChildrenExpanded ? 'seaBlue.main' : isDark ? 'digiGreen.main' : 'sandstone.10'}
48
51
  h="auto"
49
52
  justifyContent="space-between"
50
53
  onClick={() => onClick?.()}
@@ -56,7 +59,7 @@ export const SidemenuItem = vui<'button', SidemenuItemProps>((props, ref) => {
56
59
  {...rest}
57
60
  >
58
61
  {innerContent}
59
- {!!children && isExpandedInternal && (
62
+ {hasChildrenExpanded && (
60
63
  <Button
61
64
  className="vui-sidemenu-item-expand"
62
65
  icon={displayChildren ? 'falChevronUp' : 'falChevronDown'}