@aivenio/aquarium 1.76.3 → 1.77.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -18
- package/dist/src/molecules/Input/Input.d.ts +5 -4
- package/dist/src/molecules/Input/Input.js +46 -30
- package/dist/src/utils/form/InputAdornment/InputAdornment.d.ts +1 -0
- package/dist/src/utils/form/InputAdornment/InputAdornment.js +3 -1
- package/dist/styles.css +21 -0
- package/dist/system.cjs +76 -50
- package/dist/system.mjs +75 -50
- package/dist/tsconfig.module.tsbuildinfo +1 -1
- package/dist/types/tailwindGenerated.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -7,7 +7,9 @@ Implementation of Aiven Aquarium design system, released as an npm package. Quic
|
|
7
7
|
- Aquarium design system implementation is exposed as React components via npm
|
8
8
|
- [Tailwind](https://tailwindcss.com/) is used for styling
|
9
9
|
|
10
|
-
##
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
To install Aquarium to your app:
|
11
13
|
|
12
14
|
- `npm install --save @aivenio/aquarium`
|
13
15
|
- Make sure to add the correct fonts in your app. [Inter](https://fonts.google.com/specimen/Inter) for Aiven theme.
|
@@ -50,11 +52,11 @@ Implementation of Aiven Aquarium design system, released as an npm package. Quic
|
|
50
52
|
};
|
51
53
|
```
|
52
54
|
|
53
|
-
##
|
55
|
+
## Development
|
54
56
|
|
55
57
|
**Use npm 7!** With older npm versions, install peerDependencies manually. If you encounter "Cannot find module..." errors, try `rm -rf node_modules && npm i`. This seems to be a bug introduced in npm@7.
|
56
58
|
|
57
|
-
###
|
59
|
+
### Prerequisites
|
58
60
|
|
59
61
|
This project requires certain environment variables to be set before commands such as `npm run build` will work. Most can be copy/pasted with the help of your teammates, but you will need to generate a NPM token yourself in order.
|
60
62
|
|
@@ -66,40 +68,46 @@ This project requires certain environment variables to be set before commands su
|
|
66
68
|
|
67
69
|
Note that any time a new shell instance is created (for example, when you restart your computer), you need to run `source .env` again, or the variables won't be set. Consider using a solution such as `autoenv` to automatically apply the `.env` file.
|
68
70
|
|
69
|
-
|
70
|
-
- `npm run build` to build the project
|
71
|
-
- `npm start` to start Storybook
|
72
|
-
|
73
|
-
After Figma has been edited, run:
|
74
|
-
|
75
|
-
- `npm run figma -- sync` to fetch new tokens to `./tokens.json`
|
76
|
-
- `npm run build` to re-create automatically generated files
|
77
|
-
|
78
|
-
### Optional DX improvements
|
71
|
+
#### Optional DX improvements
|
79
72
|
|
80
73
|
- For VSCode
|
81
74
|
- Install Tailwind CSS IntelliSense extension. See <https://github.com/tailwindlabs/tailwindcss-intellisense#recommended-vs-code-settings>
|
82
75
|
- Install ESLint extension and optionally enable auto-format on save. See _"Step 4 — Formatting on Save"_ from <https://www.digitalocean.com/community/tutorials/linting-and-formatting-with-eslint-in-vs-code>
|
83
76
|
|
84
|
-
###
|
77
|
+
### Common commands
|
78
|
+
|
79
|
+
- `npm ci` to install dependencies
|
80
|
+
- `npm run build` to build the production build of the library
|
81
|
+
- `npm start` to start Storybook
|
82
|
+
|
83
|
+
### Developing in the context of your app
|
85
84
|
|
86
85
|
To develop Aquarium components in the context of an application, it is easier to run a locally modified version of Aquarium in your application (e.g. Console).
|
87
86
|
There are two ways to do this: [npm link](https://docs.npmjs.com/cli/v7/commands/npm-link), or copying the module into your app. This allows you to make changes to components and instantly see the change in the context of the app.
|
88
87
|
|
89
88
|
#### npm link
|
90
89
|
|
90
|
+
> ⚠️ TODO: This doesn't currently work out of the box. Revise the instructions
|
91
|
+
|
91
92
|
1. In design-system directory, run `npm link`
|
92
|
-
2. In design-system directory, run `npm link <path to app>/node_modules/react` to avoid running into conflict of having two react instances. This will otherwise break the rules of hooks and crash the app. More info on the issue [here](https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react). If the command fails with errors about peer dependencies, re-run the command, adding `--force` at the end.
|
93
|
+
2. In design-system directory, run `npm link <path to your app>/node_modules/react` to avoid running into conflict of having two react instances. This will otherwise break the rules of hooks and crash the app. More info on the issue [here](https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react). If the command fails with errors about peer dependencies, re-run the command, adding `--force` at the end.
|
93
94
|
3. In the app directory, run `npm link @aivenio/aquarium`
|
94
|
-
4. Now `<app>/node_modules/@aivenio/aquarium` is a symlink to your local Aquarium directory.
|
95
|
+
4. Now `<path to your app>/node_modules/@aivenio/aquarium` is a symlink to your local Aquarium directory.
|
95
96
|
5. In design-system directory, run `npm run watch`
|
96
97
|
6. Done! Now you should be able to develop DS locally, and changes are reflected to the application which depends on `@aivenio/aquarium`
|
97
98
|
7. When you want to stop using the npm link, and go back to the regular imported version, in your app directory, run `npm unlink --no-save @aivenio/aquarium`, then `npm i` to reinstall the dependency.
|
98
99
|
|
99
100
|
#### Copy module
|
100
101
|
|
101
|
-
npm link can be tricky to get working. A simpler approach is to build the
|
102
|
-
|
102
|
+
npm link can be tricky to get working. A simpler approach is to build a production build of the DS and copy it into your application's `node-modules` directory. Remember to restart the build process of your app once DS has been built and copied over. Here's a snippet to do all that:
|
103
|
+
|
104
|
+
```sh
|
105
|
+
cd <path to ds> \
|
106
|
+
&& npm run build \
|
107
|
+
&& cd <path to your app> \
|
108
|
+
&& rm -rf ./node_modules/@aivenio/aquarium/dist \
|
109
|
+
&& cp -R <path to ds>/dist ./node_modules/@aivenio/aquarium # && <the dev/build command of your app>
|
110
|
+
```
|
103
111
|
|
104
112
|
### Running tests
|
105
113
|
|
@@ -15,15 +15,16 @@ export declare type InputBaseProps = React.InputHTMLAttributes<HTMLInputElement>
|
|
15
15
|
*/
|
16
16
|
endAdornment?: React.ReactElement;
|
17
17
|
};
|
18
|
-
declare type
|
19
|
-
declare type InputBaseComponent<TProps extends InputBaseProps |
|
18
|
+
declare type SpecializedInputProps = Omit<InputBaseProps, 'type'>;
|
19
|
+
declare type InputBaseComponent<TProps extends InputBaseProps | SpecializedInputProps> = React.ForwardRefExoticComponent<React.RefAttributes<HTMLInputElement> & TProps> & {
|
20
20
|
Skeleton: React.FC;
|
21
21
|
};
|
22
22
|
declare const InputBase: InputBaseComponent<InputBaseProps>;
|
23
|
-
declare const SearchInput: InputBaseComponent<
|
23
|
+
declare const SearchInput: InputBaseComponent<SpecializedInputProps>;
|
24
24
|
export declare type InputProps = InputBaseProps & Omit<LabelControlProps, 'length'>;
|
25
25
|
declare type InputComponent = React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>> & {
|
26
26
|
Skeleton: React.FC;
|
27
27
|
};
|
28
|
+
declare const FileInput: InputComponent;
|
28
29
|
declare const Input: InputComponent;
|
29
|
-
export { Input, InputBase, SearchInput };
|
30
|
+
export { FileInput, Input, InputBase, SearchInput };
|
@@ -15,18 +15,22 @@ import omit from 'lodash/omit';
|
|
15
15
|
import toString from 'lodash/toString';
|
16
16
|
import { Skeleton } from '../../../src/molecules/Skeleton/Skeleton';
|
17
17
|
import { getCommonInputStyles } from '../../../src/utils/constants';
|
18
|
-
import { InputAdornment, ResetIcon, SearchIcon } from '../../../src/utils/form/InputAdornment/InputAdornment';
|
18
|
+
import { InputAdornment, ResetIcon, SearchIcon, UploadIcon } from '../../../src/utils/form/InputAdornment/InputAdornment';
|
19
19
|
import { getLabelControlProps, LabelControl } from '../../../src/utils/form/Label/Label';
|
20
20
|
import { classNames, tw } from '../../../src/utils/tailwind';
|
21
21
|
const createInput = (displayName, opts = {}) => {
|
22
22
|
const InputComponent = forwardRef((_a, ref) => {
|
23
23
|
var _b;
|
24
24
|
var { maxLength, valid = true, required = false, endAdornment, disabled = false, readOnly = false, type } = _a, props = __rest(_a, ["maxLength", "valid", "required", "endAdornment", "disabled", "readOnly", "type"]);
|
25
|
-
const inputType = opts.isSearch ? 'search' : type;
|
25
|
+
const inputType = opts.isSearch ? 'search' : opts.isFile ? 'file' : type;
|
26
26
|
const inputRef = React.useRef(null);
|
27
27
|
useImperativeHandle(ref, () => inputRef.current);
|
28
|
-
const handleReset = () => {
|
28
|
+
const handleReset = (e) => {
|
29
29
|
var _a;
|
30
|
+
if (opts.isFile) {
|
31
|
+
// In case of file input we want to stop the click from going through and triggering the input again
|
32
|
+
e.preventDefault();
|
33
|
+
}
|
30
34
|
const el = inputRef.current;
|
31
35
|
if (el) {
|
32
36
|
/*
|
@@ -43,11 +47,12 @@ const createInput = (displayName, opts = {}) => {
|
|
43
47
|
}
|
44
48
|
};
|
45
49
|
return (React.createElement("span", { className: classNames('Aquarium-InputBase', tw('relative block')) },
|
46
|
-
opts.adornment && React.createElement(InputAdornment, { placement: "left" }, opts.adornment),
|
50
|
+
opts.adornment && (React.createElement(InputAdornment, { placement: "left", className: opts.isFile ? 'icon-stroke-2' : undefined }, opts.adornment)),
|
47
51
|
React.createElement("input", Object.assign({ ref: inputRef, type: inputType }, props, { disabled: disabled, maxLength: maxLength, "aria-required": required, readOnly: readOnly, className: classNames({
|
48
52
|
'[&::-webkit-search-cancel-button]:appearance-none': opts.isSearch,
|
49
53
|
'pl-7': opts.adornment,
|
50
54
|
'pr-7': opts.canReset || endAdornment,
|
55
|
+
'file:text-primary-intense file:typography-small-strong file:border-0 file:bg-transparent file:p-0 file:mr-4': opts.isFile,
|
51
56
|
}, getCommonInputStyles({ readOnly, valid }), props.className) })),
|
52
57
|
opts.canReset && (props.value || ((_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.value)) && (React.createElement(InputAdornment, null,
|
53
58
|
React.createElement("button", { "aria-label": "reset search", onClick: handleReset },
|
@@ -59,37 +64,48 @@ const createInput = (displayName, opts = {}) => {
|
|
59
64
|
return InputComponent;
|
60
65
|
};
|
61
66
|
const InputBase = createInput('InputBase');
|
67
|
+
const FileInputBase = createInput('FileInputBase', {
|
68
|
+
adornment: React.createElement(UploadIcon, null),
|
69
|
+
canReset: true,
|
70
|
+
isFile: true,
|
71
|
+
});
|
62
72
|
const SearchInput = createInput('SearchInput', {
|
63
73
|
adornment: React.createElement(SearchIcon, null),
|
64
74
|
canReset: true,
|
65
75
|
isSearch: true,
|
66
76
|
});
|
67
|
-
const
|
68
|
-
|
69
|
-
const
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
const
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
})
|
90
|
-
|
77
|
+
const createInputComponent = (displayName, options = {}) => {
|
78
|
+
const InputComponentBase = options.input || InputBase;
|
79
|
+
const InputComponent = React.forwardRef((inputProps, ref) => {
|
80
|
+
var _a, _b;
|
81
|
+
const { readOnly = false, value: valueProp, onChange: onChangeProp } = inputProps, props = __rest(inputProps, ["readOnly", "value", "onChange"]);
|
82
|
+
const isControlled = typeof valueProp !== 'undefined';
|
83
|
+
const [valueState, setValueState] = useState((_a = props.defaultValue) !== null && _a !== void 0 ? _a : '');
|
84
|
+
const value = isControlled ? valueProp : valueState;
|
85
|
+
const handleChange = useCallback((e) => {
|
86
|
+
const next = e.target.value;
|
87
|
+
if (!isControlled) {
|
88
|
+
setValueState(next);
|
89
|
+
}
|
90
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(e);
|
91
|
+
}, [isControlled, onChangeProp]);
|
92
|
+
// we need a unique ID to be used for an accessible connection between the input and its error message
|
93
|
+
const defaultId = useId();
|
94
|
+
const id = (_b = props.id) !== null && _b !== void 0 ? _b : defaultId;
|
95
|
+
const errorMessageId = useId();
|
96
|
+
const errorProps = props.valid === false ? { 'aria-invalid': true, 'aria-describedby': errorMessageId } : {};
|
97
|
+
const _c = getLabelControlProps(inputProps), { 'data-testid': dataTestId } = _c, labelControlProps = __rest(_c, ['data-testid']);
|
98
|
+
const baseProps = omit(inputProps, Object.keys(labelControlProps).concat(isControlled ? ['defaultValue'] : ['value']));
|
99
|
+
return (React.createElement(LabelControl, Object.assign({ id: `${id}-label`, htmlFor: id, messageId: errorMessageId, length: value !== undefined ? toString(value).length : undefined }, labelControlProps, { className: "Aquarium-Input" }),
|
100
|
+
React.createElement(InputComponentBase, Object.assign({ ref: ref }, baseProps, errorProps, { id: id, "data-testid": dataTestId, onChange: handleChange, disabled: props.disabled, maxLength: props.maxLength, required: props.required, valid: props.valid, readOnly: readOnly }))));
|
101
|
+
});
|
102
|
+
InputComponent.displayName = displayName;
|
103
|
+
return InputComponent;
|
104
|
+
};
|
105
|
+
const FileInput = createInputComponent('FileInput', { input: FileInputBase });
|
106
|
+
const Input = createInputComponent('Input', { input: InputBase });
|
91
107
|
Input.Skeleton = () => (React.createElement(LabelControl.Skeleton, null,
|
92
108
|
React.createElement(InputBase.Skeleton, null)));
|
93
109
|
Input.Skeleton.displayName = 'Input.Skeleton'; // this will affect the Doc code preview in storybook to not show it as <No Display Name/> or <[object Object]/>.
|
94
|
-
export { Input, InputBase, SearchInput };
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
110
|
+
export { FileInput, Input, InputBase, SearchInput };
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9sZWN1bGVzL0lucHV0L0lucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDdEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2pILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQTBCLE1BQU0sNEJBQTRCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW1DcEQsTUFBTSxXQUFXLEdBQUcsQ0FDbEIsV0FBbUIsRUFDbkIsT0FBcUIsRUFBRSxFQUNLLEVBQUU7SUFDOUIsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUMvQixDQUNFLEVBU2lDLEVBQ2pDLEdBQUcsRUFDSCxFQUFFOztZQVhGLEVBQ0UsU0FBUyxFQUNULEtBQUssR0FBRyxJQUFJLEVBQ1osUUFBUSxHQUFHLEtBQUssRUFDaEIsWUFBWSxFQUNaLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLElBQUksT0FFMkIsRUFENUIsS0FBSyxjQVJWLGtGQVNDLENBRFM7UUFJVixNQUFNLFNBQVMsR0FBRyxJQUFJLENB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
|
@@ -10,5 +10,6 @@ declare type Props = Pick<IconProps, 'onClick'>;
|
|
10
10
|
export declare const ValidIcon: React.FC<Props>;
|
11
11
|
export declare const ErrorIcon: React.FC<Props>;
|
12
12
|
export declare const SearchIcon: React.FC<Props>;
|
13
|
+
export declare const UploadIcon: React.FC<Props>;
|
13
14
|
export declare const ResetIcon: React.FC<Props>;
|
14
15
|
export {};
|
@@ -5,6 +5,7 @@ import crossIcon from '../../../../src/icons/cross';
|
|
5
5
|
import errorIcon from '../../../../src/icons/error';
|
6
6
|
import searchIcon from '../../../../src/icons/search';
|
7
7
|
import tickIcon from '../../../../src/icons/tick';
|
8
|
+
import uploadIcon from '../../../../src/icons/upload';
|
8
9
|
export const InputAdornment = ({ placement = 'right', className, dense, children, }) => {
|
9
10
|
return (React.createElement("span", { className: classNames(className, 'absolute inset-y-0 grow-0 text-inactive flex items-center mx-3', {
|
10
11
|
'right-0': placement === 'right',
|
@@ -17,5 +18,6 @@ export const InputAdornment = ({ placement = 'right', className, dense, children
|
|
17
18
|
export const ValidIcon = ({ onClick }) => (React.createElement(Icon, { icon: tickIcon, color: "success-default", "data-testid": "icon-valid", onClick: onClick }));
|
18
19
|
export const ErrorIcon = ({ onClick }) => (React.createElement(Icon, { icon: errorIcon, color: "danger-intense", "data-testid": "icon-invalid", onClick: onClick }));
|
19
20
|
export const SearchIcon = ({ onClick }) => (React.createElement(Icon, { icon: searchIcon, color: "inactive", "data-testid": "icon-search", onClick: onClick }));
|
21
|
+
export const UploadIcon = ({ onClick }) => (React.createElement(Icon, { icon: uploadIcon, color: "primary-intense", "data-testid": "icon-upload", onClick: onClick }));
|
20
22
|
export const ResetIcon = ({ onClick }) => (React.createElement(Icon, { className: "hover:cursor-pointer", icon: crossIcon, color: "inactive", "data-testid": "icon-reset", onClick: onClick }));
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRBZG9ybm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdXRpbHMvZm9ybS9JbnB1dEFkb3JubWVudC9JbnB1dEFkb3JubWVudC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFzRCxDQUFDLEVBQ2hGLFNBQVMsR0FBRyxPQUFPLEVBQ25CLFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxHQUNULEVBQUUsRUFBRTtJQUNILE9BQU8sQ0FDTCw4QkFDRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxnRUFBZ0UsRUFBRTtZQUNqRyxTQUFTLEVBQUUsU0FBUyxLQUFLLE9BQU87WUFDaEMsUUFBUSxFQUFFLFNBQVMsS0FBSyxNQUFNO1lBQzlCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsMkJBQTJCLEVBQUUsQ0FBQyxLQUFLO1NBQ3BDLENBQUM7UUFFRixvQkFBQyxPQUFPLElBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsTUFBTSxJQUN6QixRQUFRLENBQ0QsQ0FDTCxDQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUFJRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQW9CLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDekQsb0JBQUMsSUFBSSxJQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLGlCQUFpQixpQkFBYSxZQUFZLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBSSxDQUM1RixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQ3pELG9CQUFDLElBQUksSUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQyxnQkFBZ0IsaUJBQWEsY0FBYyxFQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUksQ0FDOUYsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUMxRCxvQkFBQyxJQUFJLElBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUMsVUFBVSxpQkFBYSxhQUFhLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBSSxDQUN4RixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQzFELG9CQUFDLElBQUksSUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBQyxpQkFBaUIsaUJBQWEsYUFBYSxFQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUksQ0FDL0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUN6RCxvQkFBQyxJQUFJLElBQUMsU0FBUyxFQUFDLHNCQUFzQixFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDLFVBQVUsaUJBQWEsWUFBWSxFQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUksQ0FDdkgsQ0FBQyJ9
|
package/dist/styles.css
CHANGED
@@ -3518,6 +3518,27 @@ input[type='number'].no-arrows {
|
|
3518
3518
|
.aquarium-theme-dark .Aquarium-Card {
|
3519
3519
|
--aquarium-background-color-primary-hover: color-mix(in srgb, var(--aquarium-colors-primary-100) 70%, transparent);
|
3520
3520
|
}
|
3521
|
+
.file\:typography-small-strong::file-selector-button{
|
3522
|
+
font: normal 500 14px/1.42 Inter;
|
3523
|
+
}
|
3524
|
+
.file\:mr-4::file-selector-button{
|
3525
|
+
margin-right: 12px;
|
3526
|
+
}
|
3527
|
+
.file\:border-0::file-selector-button{
|
3528
|
+
border-width: 0px;
|
3529
|
+
border-width: var(--aquarium-border-width-0);
|
3530
|
+
}
|
3531
|
+
.file\:bg-transparent::file-selector-button{
|
3532
|
+
background-color: transparent;
|
3533
|
+
background-color: var(--aquarium-colors-transparent);
|
3534
|
+
}
|
3535
|
+
.file\:p-0::file-selector-button{
|
3536
|
+
padding: 0px;
|
3537
|
+
}
|
3538
|
+
.file\:text-primary-intense::file-selector-button{
|
3539
|
+
color: rgba(53,69,190,1);
|
3540
|
+
color: var(--aquarium-text-color-primary-intense);
|
3541
|
+
}
|
3521
3542
|
.placeholder\:text-inactive::-moz-placeholder{
|
3522
3543
|
color: rgba(150,150,160,1);
|
3523
3544
|
color: var(--aquarium-text-color-inactive);
|
package/dist/system.cjs
CHANGED
@@ -4227,6 +4227,7 @@ __export(system_exports, {
|
|
4227
4227
|
EmptyState: () => EmptyState,
|
4228
4228
|
EmptyStateLayout: () => EmptyStateLayout,
|
4229
4229
|
ExternalLinkButton: () => ExternalLinkButton,
|
4230
|
+
FileInput: () => FileInput,
|
4230
4231
|
Flexbox: () => Flexbox,
|
4231
4232
|
FlexboxItem: () => FlexboxItem,
|
4232
4233
|
FormControl: () => FormControl,
|
@@ -4377,6 +4378,7 @@ __export(molecules_exports, {
|
|
4377
4378
|
EmptyState: () => EmptyState,
|
4378
4379
|
EmptyStateLayout: () => EmptyStateLayout,
|
4379
4380
|
ExternalLinkButton: () => ExternalLinkButton,
|
4381
|
+
FileInput: () => FileInput,
|
4380
4382
|
Flexbox: () => Flexbox,
|
4381
4383
|
FlexboxItem: () => FlexboxItem,
|
4382
4384
|
GhostButton: () => GhostButton,
|
@@ -10443,6 +10445,7 @@ var import_cross5 = __toESM(require_cross());
|
|
10443
10445
|
var import_error3 = __toESM(require_error());
|
10444
10446
|
var import_search3 = __toESM(require_search());
|
10445
10447
|
var import_tick4 = __toESM(require_tick());
|
10448
|
+
var import_upload2 = __toESM(require_upload());
|
10446
10449
|
var InputAdornment = ({
|
10447
10450
|
placement = "right",
|
10448
10451
|
className,
|
@@ -10467,6 +10470,12 @@ var SearchIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createE
|
|
10467
10470
|
"data-testid": "icon-search",
|
10468
10471
|
onClick
|
10469
10472
|
});
|
10473
|
+
var UploadIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createElement(Icon, {
|
10474
|
+
icon: import_upload2.default,
|
10475
|
+
color: "primary-intense",
|
10476
|
+
"data-testid": "icon-upload",
|
10477
|
+
onClick
|
10478
|
+
});
|
10470
10479
|
var ResetIcon = ({ onClick }) => /* @__PURE__ */ import_react62.default.createElement(Icon, {
|
10471
10480
|
className: "hover:cursor-pointer",
|
10472
10481
|
icon: import_cross5.default,
|
@@ -10497,11 +10506,14 @@ var createInput = (displayName, opts = {}) => {
|
|
10497
10506
|
"type"
|
10498
10507
|
]);
|
10499
10508
|
var _a2;
|
10500
|
-
const inputType = opts.isSearch ? "search" : type;
|
10509
|
+
const inputType = opts.isSearch ? "search" : opts.isFile ? "file" : type;
|
10501
10510
|
const inputRef = import_react63.default.useRef(null);
|
10502
10511
|
(0, import_react63.useImperativeHandle)(ref, () => inputRef.current);
|
10503
|
-
const handleReset = () => {
|
10512
|
+
const handleReset = (e) => {
|
10504
10513
|
var _a3;
|
10514
|
+
if (opts.isFile) {
|
10515
|
+
e.preventDefault();
|
10516
|
+
}
|
10505
10517
|
const el = inputRef.current;
|
10506
10518
|
if (el) {
|
10507
10519
|
const lastValue = el.value;
|
@@ -10514,7 +10526,8 @@ var createInput = (displayName, opts = {}) => {
|
|
10514
10526
|
return /* @__PURE__ */ import_react63.default.createElement("span", {
|
10515
10527
|
className: classNames("Aquarium-InputBase", tw("relative block"))
|
10516
10528
|
}, opts.adornment && /* @__PURE__ */ import_react63.default.createElement(InputAdornment, {
|
10517
|
-
placement: "left"
|
10529
|
+
placement: "left",
|
10530
|
+
className: opts.isFile ? "icon-stroke-2" : void 0
|
10518
10531
|
}, opts.adornment), /* @__PURE__ */ import_react63.default.createElement("input", __spreadProps(__spreadValues({
|
10519
10532
|
ref: inputRef,
|
10520
10533
|
type: inputType
|
@@ -10527,7 +10540,8 @@ var createInput = (displayName, opts = {}) => {
|
|
10527
10540
|
{
|
10528
10541
|
"[&::-webkit-search-cancel-button]:appearance-none": opts.isSearch,
|
10529
10542
|
"pl-7": opts.adornment,
|
10530
|
-
"pr-7": opts.canReset || endAdornment
|
10543
|
+
"pr-7": opts.canReset || endAdornment,
|
10544
|
+
"file:text-primary-intense file:typography-small-strong file:border-0 file:bg-transparent file:p-0 file:mr-4": opts.isFile
|
10531
10545
|
},
|
10532
10546
|
getCommonInputStyles({ readOnly, valid }),
|
10533
10547
|
props.className
|
@@ -10545,57 +10559,68 @@ var createInput = (displayName, opts = {}) => {
|
|
10545
10559
|
return InputComponent;
|
10546
10560
|
};
|
10547
10561
|
var InputBase = createInput("InputBase");
|
10562
|
+
var FileInputBase = createInput("FileInputBase", {
|
10563
|
+
adornment: /* @__PURE__ */ import_react63.default.createElement(UploadIcon, null),
|
10564
|
+
canReset: true,
|
10565
|
+
isFile: true
|
10566
|
+
});
|
10548
10567
|
var SearchInput = createInput("SearchInput", {
|
10549
10568
|
adornment: /* @__PURE__ */ import_react63.default.createElement(SearchIcon, null),
|
10550
10569
|
canReset: true,
|
10551
10570
|
isSearch: true
|
10552
10571
|
});
|
10553
|
-
var
|
10554
|
-
|
10555
|
-
const
|
10556
|
-
|
10557
|
-
|
10558
|
-
|
10559
|
-
|
10560
|
-
|
10561
|
-
|
10562
|
-
|
10563
|
-
|
10564
|
-
|
10565
|
-
|
10566
|
-
|
10567
|
-
|
10568
|
-
|
10569
|
-
|
10570
|
-
|
10571
|
-
|
10572
|
-
|
10573
|
-
|
10574
|
-
|
10575
|
-
inputProps,
|
10576
|
-
|
10577
|
-
|
10578
|
-
|
10579
|
-
|
10580
|
-
|
10581
|
-
|
10582
|
-
|
10583
|
-
|
10584
|
-
|
10585
|
-
|
10586
|
-
|
10587
|
-
|
10588
|
-
|
10589
|
-
|
10590
|
-
|
10591
|
-
|
10592
|
-
|
10593
|
-
|
10594
|
-
|
10595
|
-
|
10596
|
-
|
10597
|
-
|
10598
|
-
|
10572
|
+
var createInputComponent = (displayName, options = {}) => {
|
10573
|
+
const InputComponentBase = options.input || InputBase;
|
10574
|
+
const InputComponent = import_react63.default.forwardRef((inputProps, ref) => {
|
10575
|
+
var _b, _c;
|
10576
|
+
const _a = inputProps, { readOnly = false, value: valueProp, onChange: onChangeProp } = _a, props = __objRest(_a, ["readOnly", "value", "onChange"]);
|
10577
|
+
const isControlled = typeof valueProp !== "undefined";
|
10578
|
+
const [valueState, setValueState] = (0, import_react63.useState)((_b = props.defaultValue) != null ? _b : "");
|
10579
|
+
const value = isControlled ? valueProp : valueState;
|
10580
|
+
const handleChange = (0, import_react63.useCallback)(
|
10581
|
+
(e) => {
|
10582
|
+
const next = e.target.value;
|
10583
|
+
if (!isControlled) {
|
10584
|
+
setValueState(next);
|
10585
|
+
}
|
10586
|
+
onChangeProp == null ? void 0 : onChangeProp(e);
|
10587
|
+
},
|
10588
|
+
[isControlled, onChangeProp]
|
10589
|
+
);
|
10590
|
+
const defaultId = (0, import_utils9.useId)();
|
10591
|
+
const id = (_c = props.id) != null ? _c : defaultId;
|
10592
|
+
const errorMessageId = (0, import_utils9.useId)();
|
10593
|
+
const errorProps = props.valid === false ? { "aria-invalid": true, "aria-describedby": errorMessageId } : {};
|
10594
|
+
const _d = getLabelControlProps(inputProps), { "data-testid": dataTestId } = _d, labelControlProps = __objRest(_d, ["data-testid"]);
|
10595
|
+
const baseProps = (0, import_omit5.default)(
|
10596
|
+
inputProps,
|
10597
|
+
Object.keys(labelControlProps).concat(isControlled ? ["defaultValue"] : ["value"])
|
10598
|
+
);
|
10599
|
+
return /* @__PURE__ */ import_react63.default.createElement(LabelControl, __spreadProps(__spreadValues({
|
10600
|
+
id: `${id}-label`,
|
10601
|
+
htmlFor: id,
|
10602
|
+
messageId: errorMessageId,
|
10603
|
+
length: value !== void 0 ? (0, import_toString.default)(value).length : void 0
|
10604
|
+
}, labelControlProps), {
|
10605
|
+
className: "Aquarium-Input"
|
10606
|
+
}), /* @__PURE__ */ import_react63.default.createElement(InputComponentBase, __spreadProps(__spreadValues(__spreadValues({
|
10607
|
+
ref
|
10608
|
+
}, baseProps), errorProps), {
|
10609
|
+
id,
|
10610
|
+
"data-testid": dataTestId,
|
10611
|
+
onChange: handleChange,
|
10612
|
+
disabled: props.disabled,
|
10613
|
+
maxLength: props.maxLength,
|
10614
|
+
required: props.required,
|
10615
|
+
valid: props.valid,
|
10616
|
+
readOnly
|
10617
|
+
})));
|
10618
|
+
});
|
10619
|
+
InputComponent.displayName = displayName;
|
10620
|
+
return InputComponent;
|
10621
|
+
};
|
10622
|
+
var FileInput = createInputComponent("FileInput", { input: FileInputBase });
|
10623
|
+
var Input2 = createInputComponent("Input", { input: InputBase });
|
10599
10624
|
Input2.Skeleton = () => /* @__PURE__ */ import_react63.default.createElement(LabelControl.Skeleton, null, /* @__PURE__ */ import_react63.default.createElement(InputBase.Skeleton, null));
|
10600
10625
|
Input2.Skeleton.displayName = "Input.Skeleton";
|
10601
10626
|
|
@@ -16074,6 +16099,7 @@ var system_default = __spreadValues({}, molecules_exports);
|
|
16074
16099
|
EmptyState,
|
16075
16100
|
EmptyStateLayout,
|
16076
16101
|
ExternalLinkButton,
|
16102
|
+
FileInput,
|
16077
16103
|
Flexbox,
|
16078
16104
|
FlexboxItem,
|
16079
16105
|
FormControl,
|