@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.
- package/dist/cjs/input/autoCompletePopover.d.ts +7 -0
- package/dist/cjs/input/autoCompletePopover.d.ts.map +1 -0
- package/dist/cjs/input/autoCompletePopover.js +31 -0
- package/dist/cjs/input/helpText.d.ts +1 -1
- package/dist/cjs/input/helpText.js +1 -1
- package/dist/cjs/input/input.d.ts +0 -1
- package/dist/cjs/input/input.d.ts.map +1 -1
- package/dist/cjs/input/input.js +32 -43
- package/dist/cjs/input/input.types.d.ts +11 -0
- package/dist/cjs/input/input.types.d.ts.map +1 -1
- package/dist/cjs/sidemenu/sidemenu.d.ts.map +1 -1
- package/dist/cjs/sidemenu/sidemenu.js +2 -3
- package/dist/cjs/sidemenu/sidemenuItem.d.ts.map +1 -1
- package/dist/cjs/sidemenu/sidemenuItem.js +3 -2
- package/dist/esm/input/autoCompletePopover.d.ts +7 -0
- package/dist/esm/input/autoCompletePopover.d.ts.map +1 -0
- package/dist/esm/input/autoCompletePopover.js +23 -0
- package/dist/esm/input/helpText.d.ts +1 -1
- package/dist/esm/input/helpText.js +1 -1
- package/dist/esm/input/input.d.ts +0 -1
- package/dist/esm/input/input.d.ts.map +1 -1
- package/dist/esm/input/input.js +31 -42
- package/dist/esm/input/input.types.d.ts +11 -0
- package/dist/esm/input/input.types.d.ts.map +1 -1
- package/dist/esm/sidemenu/sidemenu.d.ts.map +1 -1
- package/dist/esm/sidemenu/sidemenu.js +2 -3
- package/dist/esm/sidemenu/sidemenuItem.d.ts.map +1 -1
- package/dist/esm/sidemenu/sidemenuItem.js +3 -2
- package/package.json +1 -1
- package/src/input/autoCompletePopover.tsx +49 -0
- package/src/input/helpText.tsx +1 -1
- package/src/input/input.tsx +53 -73
- package/src/input/input.types.ts +12 -0
- package/src/sidemenu/sidemenu.tsx +4 -11
- 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
|
|
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
|
|
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;
|
|
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"}
|
package/dist/cjs/input/input.js
CHANGED
|
@@ -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 =
|
|
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
|
|
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(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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;
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
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;
|
|
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"}
|
package/dist/esm/input/input.js
CHANGED
|
@@ -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(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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;
|
|
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, ...
|
|
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,
|
|
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
|
-
|
|
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.
|
|
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)
|
package/src/input/helpText.tsx
CHANGED
|
@@ -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
|
|
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()
|
package/src/input/input.tsx
CHANGED
|
@@ -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
|
-
<
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}}
|
|
127
|
-
placement="bottom-start"
|
|
116
|
+
<AutoCompletePopover
|
|
117
|
+
autoCompleteMaxHeight={autoCompleteMaxHeight}
|
|
118
|
+
autoCompleteOptions={autoCompleteOptions}
|
|
119
|
+
filterAutoCompleteOptions={filterAutoCompleteOptions}
|
|
120
|
+
onAutoCompleteSelect={onAutoCompleteSelect}
|
|
128
121
|
>
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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>
|
package/src/input/input.types.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
32
|
+
const styles = useStyleConfig('Sidemenu', props)
|
|
33
33
|
|
|
34
|
-
const
|
|
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
|
-
{
|
|
62
|
+
{hasChildrenExpanded && (
|
|
60
63
|
<Button
|
|
61
64
|
className="vui-sidemenu-item-expand"
|
|
62
65
|
icon={displayChildren ? 'falChevronUp' : 'falChevronDown'}
|